
view-source를 보면
<?php
if($_GET['no']){
$db = dbconnect();
if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");
$r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");
if($r['id']=="guest") echo("guest");
if($r['id']=="admin") solve(27); // admin's no = 2
}
?>
요기가 메인이네요!
일단, 18번과 비슷하게 id와 no값이 저장된 chall27이라는 아래와 같은 테이블에서,
id no
guest ?
admin 2
admin으로 들가면 풀리는 것 같네요!
$r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");
역시 위 코드가 문제인데, and 이후를 변형시켜서 앞의 id='guest'인 부분은 무시되게,
no=2 부분이 잡혀서 admin으로 ㄱㅏ면..될 것 같은데
preg_match부분에서 필터링 되는 부분이 있어서 우회해야 겠죠
일단, no와 1을 입력하면 guest로 뜨네여..


따라서 chall27 테이블은
id no
guest 1
admin 2
이라는 의미없는 정보를 알게 되었습니다
select id from chall27 where id='guest' and no=({$_GET['no']}) 에서,
괄호가 앞에 있으니께 input값으로 2) or no=2를 넣으면,
안됩니다!
뒤에 또 뭐가 붙어서 뒤에 --를 추가해서 주석 처리를 해주면
안됩니다!
필터링이 돼서 그래서 =이랑 공백 필터링 우회해서
2) or no = 2 --를 우회해줄게여 그러면
2)%09or%9ano%09like%092%09--%09
가 되네여.. 되게 길게..

다행하도 이건 됩니다ㅜㅜ
'Wargame > webhacking.kr' 카테고리의 다른 글
Challenge old 23 (300) (0) | 2019.11.12 |
---|---|
Challenge old 49 (300) (0) | 2019.11.05 |
Challenge old 18 (100) (0) | 2019.11.02 |
Challenge old 54 (100) (0) | 2019.10.13 |
Challenge old 39 (100) (0) | 2019.10.08 |