프로젝트/Webhacking.kr

[Webhacking.kr] Challenge(old) 49번 문제

Uggjjini 2021. 7. 19. 11:48

문제페이지는 해당 페이지와 같다.

 

 

SQL INJECTION 문구가 출력되어 있으며 level 입력창에 1이 입력된 채로 존재하고, view-source 링크가 존재한다

 

해당 링크를 통하여 소스코드를 확인해본다.

 

 

<?php
  if($_GET['lv']){
    $db = dbconnect();
    if(preg_match("/select|or|and|\(|\)|limit|,|\/|order|cash| |\t|\'|\"/i",$_GET['lv'])) exit("no hack");
    $result = mysqli_fetch_array(mysqli_query($db,"select id from chall49 where lv={$_GET['lv']}"));
    echo $result[0] ;
    if($result[0]=="admin") solve(49);
  }
?>

 

GET 방식으로 받아오는 lv 값을 select, or, and, (, ), limit, 콤마(,), /, order, cash, 공백, tap키, 작은따옴표('), 큰따옴표(") 필터링하여 쿼리문을 생성하여 $result 값에 저장하여 0번째 인덱스 값이 admin 인 경우 문제가 풀린다는 것을 확인할 수 있다.

 

 lv 파라미터 값이 lv=1 and id='admin' 이 입력되도록 필터링 되는 부분을 우회하여 lv=1&&id=0x61646D696E 를 입력하면 해당 문제가 풀린다.