문제페이지는 해당 페이지와 같다.
SQL INJECTION 문구와 level 을 입력하는 창에 1이 입력된 채로 존재하고 view-source 링크가 존재한다.
view-source 링크를 통해 해당 페이지의 소스코드를 확인한다.
$_GET['lv'] = addslashes($_GET['lv']);
addslashes() 함수는 문자열 안의 특수문자가 잘 인식되도록 역슬래쉬를 추가해주는 함수이다.
$_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();
공백 / * % select 0x limit cash 가 대소문자 구분없이 필터링 된다.
$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);
id가 admin 인 경우 문제가 풀릴 거 같다.
쿼리문을 만들어 $result 에 넣고 id 부분이 admin 인 경우 해당 문제는 풀린다.
그렇기 때문에 GET 형식으로 받아오는 lv 파라미터의 값을 lv=1 and id='admin' 처럼 입력해야 한다.
addslashes() 때문에 따옴표를 이용한 공격이 불가하여 admin을 다른 방식으로 보내야되는데 hex 값은 필터링되기 때문에 char() 을 이용하여 우회한다.
공백 또한 필터링 되기 때문에 and 대신 && 을 넣어 입력해준다.
그렇게 입력창에 입력할 때에는 1&&id=char(97,100,109,105,110) 를 입력해주면 해당 문제가 풀린다.
'프로젝트 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 53번 문제 (0) | 2021.07.19 |
---|---|
[Webhacking.kr] Challenge(old) 49번 문제 (0) | 2021.07.19 |
[Webhacking.kr] Challenge(old) 29번 문제 (0) | 2021.07.19 |
[Webhacking.kr] Challenge(old) 34번 문제 (0) | 2021.07.19 |
[Webhacking.kr] Challenge(old) 32번 문제 (0) | 2021.07.19 |