Tag Archive

#sql-injection

이 태그가 포함된 글을 최신순으로 모아봤어요.

14
posts
BLOG2026-08-19
[🥈 Silver 4] php.ini 한 줄로 SQL Injection 이 막히던 시절 — DreamHack [CodeEngn] Malware L04 풀이
blog

[🥈 Silver 4] php.ini 한 줄로 SQL Injection 이 막히던 시절 — DreamHack [CodeEngn] Malware L04 풀이

배포 파일이 아예 없고 두 줄짜리 질문만 있다. "APM 사이트가 SQL Injection 공격을 받는 중인데 PHP 설정파일에서 어떤 옵션을 켜야 안전한가." 답은 알겠는데 근거가 얇아서, 그 옵션이 실제로 동작하는 마지막 세대인 Debian 6 (Apache 2.2 / PHP 5.3.3 / MySQL 5.1) 을 도커로 세워 Off/On 을 대조했다. 두 종류의 인젝션이 실제로 막히고, 그럼에도 숫자 파라미터와 GBK 우회는 그대로 통과한다.
#dreamhack#ctf#misc+7
 
BLOG2026-08-14
[🥈 Silver 4] vim 스왑으로 소스를 줍고 PHP 매직 해시로 admin 로그인 — DreamHack [wargame.kr] jff3_magic 풀이
blog

[🥈 Silver 4] vim 스왑으로 소스를 줍고 PHP 매직 해시로 admin 로그인 — DreamHack [wargame.kr] jff3_magic 풀이

배포 파일이 하나도 없는 블랙박스 웹 문제. 메인 페이지 alert 이 흘린 "hint : swp" 한 줄에서 vim 스왑 파일을 주워 소스를 복구하고, and·or·union 을 전부 막는 자체 방화벽을 HAVING + REGEXP 로 우회해 admin 의 비밀번호 해시를 한 글자씩 뽑았다. 그 해시가 0e 로 시작하는 매직 해시라 PHP 의 느슨한 비교 하나로 로그인이 뚫린다.
#dreamhack#ctf#web+6
 
BLOG2026-08-10
[🥈 Silver 1] 로그인에 성공하는 순간 답이 바뀐다 — DreamHack Login Page 풀이
blog

[🥈 Silver 1] 로그인에 성공하는 순간 답이 바뀐다 — DreamHack Login Page 풀이

부등호도 시간지연도 블랙리스트에 막힌 블라인드 SQL 인젝션. 게다가 쿼리가 행을 반환하면 애플리케이션이 admin 비밀번호를 새로 만들어 버려서, 흔한 "참이면 로그인된다" 오라클을 쓰는 순간 답이 바뀐다. 조건이 참일 때만 MySQL 을 EXP(999) 로 죽여 HTTP 500 을 얻고, 비교는 GREATEST 항등식으로 대신해 32자 비밀번호를 225질의에 복원했다.
#dreamhack#ctf#web+5
 
BLOG2026-08-06
[🥇 Gold 4] 취약점을 찾는 게 아니라 막는 문제 — DreamHack PATCH-1 풀이
blog

[🥇 Gold 4] 취약점을 찾는 게 아니라 막는 문제 — DreamHack PATCH-1 풀이

122줄짜리 Flask 메모 API 에 심어 둔 취약점을 전부 패치해야 flag 가 나오는 문제. f-string SQLi 두 곳, format() 이 만들어 낸 Jinja2 SSTI 와 저장형 XSS, 메모 소유자 검증 누락, 소스에 박힌 secret_key 까지 여섯 군데를 로컬에서 재현해 놓고 고쳤다. 공격만 막고 끝나면 안 되고 SLA(기능 회귀) 도 같이 통과해야 한다.
#dreamhack#ctf#web+8
 
BLOG2026-07-20
[🥉 Bronze 3] 이스케이프한 건 원문이었지, 해시가 아니었다 — DreamHack [wargame.kr] md5 password 풀이
blog

[🥉 Bronze 3] 이스케이프한 건 원문이었지, 해시가 아니었다 — DreamHack [wargame.kr] md5 password 풀이

mysqli_real_escape_string()이 사용자 입력을 꼼꼼히 이스케이프한다. 그런데 정작 쿼리에 들어가는 건 그 입력이 아니라 md5($ps, true) — raw 16바이트 바이너리 해시다. 해시 결과는 이스케이프 대상이 아니었다. MD5 출력은 사실상 무작위 바이트열이라, 그 바이트들이 우연히 SQL 문법으로 읽히는 문자열을 만들어낼 수 있다. 임의 문자로 시작하는 해시는 1/256 확률로 몇 초 안에 찾을 수 있지만, 실제로 익스플로잇이 되려면 5바이트가 정확히 맞아떨어져야 해서 무작위 탐색은 비현실적이다 — 대신 잘 알려진 매직 스트링을 직접 계산으로 검증하고 그대로 썼다.
#dreamhack#wargame.kr#ctf+5
 
BLOG2026-07-20
[🥈 Silver 3] 20,664줄 로그 속의 침입 — DreamHack weblog-1 풀이
blog

[🥈 Silver 3] 20,664줄 로그 속의 침입 — DreamHack weblog-1 풀이

실행 중인 서버를 직접 공격하는 문제가 아니다. 이미 침해당한 게시판의 Apache 접속 로그 2만 줄과 소스 코드가 통째로 주어지고, 라이브 퀴즈 앱이 그 침해 과정을 단계별로 캐묻는다. blind SQLi로 로그를 파싱해 탈취된 자격증명을 재구성하고, 세션 파일 include로 이어진 RCE, 그리고 날짜를 키로 스스로를 복호화하는 웹쉘 드로퍼까지 — 로그 자체가 유일한 증거이자 유일한 공격 도구였다.
#dreamhack#ctf#web+4
 
BLOG2026-07-05
[🥈 Silver 3] 공백도 OR도 admin도 못 쓰는데 — 블랙리스트 WAF 뚫은 블라인드 SQLi — DreamHack sql injection bypass WAF 풀이
blog

[🥈 Silver 3] 공백도 OR도 admin도 못 쓰는데 — 블랙리스트 WAF 뚫은 블라인드 SQLi — DreamHack sql injection bypass WAF 풀이

union/select/from/and/or/admin/공백/*// 를 부분 문자열로 막는 블랙리스트 WAF 앞에서, MySQL의 ||/&&와 공백 없는 # 주석으로 문법 자체를 바꿔 우회한 기록이다. 화면엔 uid 컬럼만 반사되는 구조라 admin의 비밀번호(FLAG)는 boolean-blind로 한 글자씩 꺼내야 했다.
#dreamhack#ctf#web+4
 
BLOG2026-07-01
[🥈 Silver 3] 응답엔 결과가 없어도 에러엔 다 있다 — DreamHack error based sql injection 풀이
blog

[🥈 Silver 3] 응답엔 결과가 없어도 에러엔 다 있다 — DreamHack error based sql injection 풀이

uid 값을 그대로 문자열 포매팅해 쿼리를 만드는 Flask + MariaDB 앱. 성공 응답은 항상 같은 쿼리 템플릿만 echo해 UNION이나 boolean 기반으로는 아무것도 구분할 수 없지만, 예외를 str(e)로 그대로 돌려주는 탓에 extractvalue()의 XPATH syntax error에 서브쿼리 결과를 실어 admin 비밀번호(플래그)를 통째로 읽어낸다.
#dreamhack#ctf#web+4
 
BLOG2026-06-06
[🥈 Silver 3] 비밀번호 자리에 객체를 넣다 — DreamHack CProxy: Inject 풀이
blog

[🥈 Silver 3] 비밀번호 자리에 객체를 넣다 — DreamHack CProxy: Inject 풀이

쿼리는 ? 플레이스홀더로 안전하게 짰는데도 로그인이 뚫린다. express의 qs 바디 파서가 pw를 객체로 만들고, node-mysql이 그 객체를 `pw` = '1' 로 풀어쓰면서 비밀번호 검사가 항상 참이 됐다. admin_inject 계정을 탈취해 저장된 프록시 응답에서 플래그를 꺼냈다. 삽질과 캡쳐를 곁들인 풀이 노트.
#dreamhack#ctf#web+4