[webhacking.kr] old-61 문제

2026. 2. 2. 01:58·워게임/webhacking.kr

1. 문제 정보

  • 문제 번호 : old -61
  • 문제 점수 : 20점

 


2. 문제 분석

문제에 들어가면 view-source만 나온다 소스코드를 확인해보자

소스코드눈 PHP로 되어 있으며 id값을 파라미터로 받아서  addslash와 preg_match로 필터링하고 있다. 또한 최대 id값은 15개이다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
  $db = dbconnect();
  if(!$_GET['id']) $_GET['id']="guest";
  echo "<html><head><title>Challenge 61</title></head><body>";
  echo "<a href=./?view_source=1>view-source</a><hr>";
  $_GET['id'] = addslashes($_GET['id']);
  if(preg_match("/\(|\)|select|from|,|by|\./i",$_GET['id'])) exit("Access Denied");
  if(strlen($_GET['id'])>15) exit("Access Denied");
  $result = mysqli_fetch_array(mysqli_query($db,"select {$_GET['id']} from chall61 order by id desc limit 1"));
  echo "<b>{$result['id']}</b><br>";
  if($result['id'] == "admin") solve(61);
  echo "</body></html>";
?>

3. 풀이

 $result = mysqli_fetch_array(mysqli_query($db,"select {$_GET['id']} from chall61 order by id desc limit 1"));

 

select절에 GET['id']값이 들어가 있다.

*을 입력해서 어떤 값이 우선적으로 출력되는 지 확인해보자

 

test값이 나오고 desc limt 1 때문에 값이 1개와 그리고 id테이블을 조회했을 때 거의 test값이 나오게 된다.

 

select문에 들어갈 수 있는 것들을 정리하면 아래와 같다.

  • 컬럼명 및 와일드카드
  • 별칭(Alias)
  • 상수 및 리터럴(숫자, 문자열, 16진수)
  • 연산식 (산술 연산, 비트 연산)
  • 함수 및 시스템 변수 데이터를 변환하거나 DBMS의 정보
  • 조건문 (CASE 구문) 프로그래밍 언어의 if-else와 유사한 로직(CASE WHEN id = 1 THEN 'admin' ELSE 'guest' END)
  • 서브쿼리 (Subquery) SELECT (SELECT pw FROM admin) FROM board 처럼 다른 테이블의 데이터를 가져올 때 사용. (단, 괄호가 필요하므로 괄호 필터링 시 사용 불가)

여기에서 서브쿼리를 사용하면 필터링에 걸리고 조건문은 사용하면 너무 길다. 

따라서 리터럴과 별칭을 사용해서 우회해보자.

 

별칭은 AS 구문으로 주로 쓰이지만 %20즉 스페이스 바로도 생략 가능하다. 그리고 '와"는 addslash로 필터링 되므로 16진수로

0x61646D696E%20id을 하면 id admin으로 값이 나와 성공한다.

 

 


 

 

4. 요약

  • 이 문제는 사용자 입력값이 SELECT 절의 컬럼 위치에 검증 없이 들어가는 취약점을 이용하여 쿼리 구조를 조작하는 문제이다.
  • addslashes와 preg_match로 따옴표와 괄호가 차단된 상황에서, 문자열 'admin'을 16진수 리터럴로 변환하고 AS 키워드를 공백으로 대체하여 필터링을 우회했다.
  • 최종적으로 15글자 길이 제한 내에서 결과값의 별칭을 id로 지정함으로써, 반환되는 데이터를 admin으로 조작하여 인증 로직을 통과했다.

 

 

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

[webhacking.kr] old-56 문제  (0) 2026.02.02
[webhacking.kr] old-59 문제  (0) 2026.02.02
[webhacking.kr] old-10 문제  (0) 2026.01.30
[webhacking.kr] old-12 문제  (0) 2026.01.30
[webhacking.kr] old-51 문제  (0) 2026.01.30
'워게임/webhacking.kr' 카테고리의 다른 글
  • [webhacking.kr] old-56 문제
  • [webhacking.kr] old-59 문제
  • [webhacking.kr] old-10 문제
  • [webhacking.kr] old-12 문제
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-61 문제
상단으로

티스토리툴바