Wargame/Webhacking.kr

webhacking.kr - old 46

G_OM 2024. 3. 29. 14:43

 

 

어디서 많이 본 문제인 거 같다.

 

저번에 푼 old-49 문제랑 똑같이 생겼다.

 

근데 이번에는 "money" 가 생겼다.

 

 

 

 

 

 

 

 

 

 

 

 

php 부분만 중점으로 보자.

 

 

 

 

 

 

 

 

 

<?php
  if($_GET['lv']){
    $db = dbconnect();
    $_GET['lv'] = addslashes($_GET['lv']);
    $_GET['lv'] = str_replace(" ","",$_GET['lv']);
    $_GET['lv'] = str_replace("/","",$_GET['lv']);
    $_GET['lv'] = str_replace("*","",$_GET['lv']);
    $_GET['lv'] = str_replace("%","",$_GET['lv']);
    if(preg_match("/select|0x|limit|cash/i",$_GET['lv'])) exit();
    $result = mysqli_fetch_array(mysqli_query($db,"select id,cash from chall46 where lv=$_GET[lv]"));
    if($result){
      echo("{$result['id']} information<br><br>money : {$result['cash']}");
      if($result['id'] == "admin") solve(46);
    }
  }
?>

 

 

똑같이 get 으로 lv 값을 받아들인다.

 

addslashes로 싱글쿼터를 막고 [이스케이프 처리]

 

str_replace로 [공백,/,*,%] 해당하는 것을 이스케이프 처리하는 거 같다.

 

필터링도 있다.

(select,limit,cash),(16진법) 에 대해서 걸러내는 거 같다.

 

그리고 select id,cash 를 보면 id, cash 열이 chall46 테이블에 있는 거 같다.

 

딱히 cash 가 중요한 열은 아닌거 같으니 id 열에 대해서만 집중했다.

 

 

 

 

 

 

 

 

 

 

 

 

https://webhacking.kr/challenge/web-23/?lv=5||id=char(97,100,109,105,110)

 

 

풀었던 문제에 거의 똑같이 쓴거 같다.

 

lv=5|| <- 여기까지는 old-49 해답과 똑같다. 

 

여기서 || 은 or 연산자와 동일한 기능을 하기에 바로  넘어갈 id가 작동되게 했다.

 

Hex 값이 막히니 아스키코드값으로 대체했다.

 

여기서 char는 SQL에서 아스키코드로 바꿔주는 함수이다.