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에서 아스키코드로 바꿔주는 함수이다.