Webhacking.kr 27번 문제풀이

동스토리 ㅣ 2021. 1. 5. 11:56

반응형

안녕하세요.

 

웹 해킹 27번 문제풀이 하겠습니다.

 

문제의 소스코드를 확인해보면,

- if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");

-> preg_match 함수를 통해 select, limit등 문자열을 필터링하고 no hack을 출력하고 있습니다.

 

 

- $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");

-> chall27 테이블에서 가져온 id를 가져오는데 id의 no가 guest가 아닐경우 "query error"를 출력하고 종료합니다.

 

 

 

- if($r['id']=="guest") echo("guest");
  if(
$r['id']=="admin"solve(27); // admin's no = 2

-> id가 guest일 경우 "guest"를 출력하고 guest는 id가 no가 1입니다.  또한 id가 "admin"일 경우 문제가 해결됩니다. admin의 id no는 2라고 알려주고 있습니다.

 

문제는 결국, "select id from chall27 where id='guest' and no=({$_GET['no']})")) 구문에서

-> "select id from chall27 where id='guest' and no=(0) or no 2 )")) or die("query error");

 

필터링 값들을 우회하여

= -> like

공백 -> %09

2이하 주석 -> -- / --뒤에 공백이 포함되어 있어야 주석처리가 됩니다.

 

감사합니다.

 

 

 

반응형

'Hacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 29번 문제풀이  (1) 2021.01.08
Webhacking.kr 28번 문제풀이  (0) 2021.01.07
Webhacking.kr 26번 문제풀이  (0) 2020.12.31
Webhacking.kr 25번 문제풀이  (0) 2020.12.29
Webhacking.kr 24번 문제풀이  (0) 2020.12.26