SQL인젝션 문제인가보다.., '͡•_'͡•
preg_match($pattern, $str, $match) : str에서 pattern을 검색하고, pattern이 존재하면 TRUE값을 반환해주고 그렇지 않으면 FALSE값을 반환해주는 함수 (pattern은 정규식 패턴)
1을 입력했더니, hi guest 출력
no=1이면 guest !
no=2면, admin으로 문제 해결 !
이 때, $_GET[no]에 공백, /, (, ), |, &, select, from, 0x를 입력하면 no hack이 출력된다.
=> 공백, /, (, ), |, &, select, from, 0x를 입력하지 않고, no를 2로 만들어야 한다.
select id from chall18 where id='guest' and no=$_GET[no]
id='guest'이면, no=1일 때만 TRUE가 되어서 "hi guest"를 출력한다.
우리는 'admin'값을 제출하여 "hi admin"을 출력해야 한다.
그러나 id값은 우리가 바꿀 수 없기 때문에, no=2가 TRUE가 되도록 만들어줘야 한다.
입력칸에 3 or no=2를 입력하면,
select id from chall18 where id='guest' and no=3 or no=2
(id='guest' and no=3) or no=2 -> FALSE or TRUE -> TRUE
그치만 입력값에 공백이 포함되어 있어서 "no hack"이 출력된다.
공백을 우회하기 위해 공백 대신 %09를 입력했더니 문제 해결 ~!
(%09는 탭을 url 인코딩한 값)
'WEB > webhacking.kr (old)' 카테고리의 다른 글
webhacking.kr 19번 (0) | 2020.01.29 |
---|---|
webhacking.kr 15번 (0) | 2020.01.27 |
webhacking.kr 17번 (0) | 2020.01.27 |
webhacking.kr 16번 (0) | 2020.01.27 |
webhacking.kr 14번 (0) | 2020.01.27 |