728x90
반응형
상단에 나오는 쿼리문은 DB에 해당 쿼리문으로 데이터가 들어간다고 알려준다.
pw의 값이 (’’), id의 값이 ≠‘admin’인 파라미터가 있다.
query : select id from prob_nightmare where pw=('') and id!='admin'
아래에는 php 코드가 나와있으며, 이걸 참고해서 문제를 푸는 것 이다.
해당 php 코드에서 자세하게 봐야 하는 부분은 이 부분인 것 같다.
preg_match 조건문 부분을 보면 다음과 같이 필터링하고 있다.
- prob
- _
- .
- ()
또한 pw의 값이 6글자 미만이어야 한다.
문제를 풀기 위해서는 id≠’admin’의 값을 우회해야 문제가 풀리는 듯 하다.
if(preg_match('/prob|_|\\.|\\(\\)|#|-/i', $_GET[pw])) exit("No Hack ~_~");
if(strlen($_GET[pw])>6) exit("No Hack ~_~");
$query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'";
if($result['id']) solve("nightmare");
pw의 싱글쿼터와 괄호를 우회하고, 6글자 안으로 id≠’admin’을 우회해야한다.
우선 기본적으로 ‘) 로 pw의 싱글쿼터와 괄호를 닫아주었다.
?pw=')
주석으로 뒷 문자열들을 무효화 하면 될 것 같은데 #가 필터링 되어 있으므로 ;%00 를 사용하였다.
?pw=')=0;%00
=0 을 안넣어주면 값이 없어서 그런지 문제가 풀리지 않는다.
문제를 풀었다.
728x90
반응형