728x90
반응형
상단에 나오는 쿼리문은 DB에 해당 쿼리문으로 데이터가 들어간다고 알려준다.
이번문제도 쿼리문을 보면 저번 문제처럼 id에 guest라는 값이 들어가 있고, pw에 값이 비어있다.
query : select id from prob_darkelf where id='guest' and pw=''
아래에는 php 코드가 나와있으며, 이걸 참고해서 문제를 푸는 것 이다.
해당 php 코드에서 자세하게 봐야 하는 부분은 이 부분인 것 같다.
아래 조건문을 보면 일부 문자 및 or, and 라는 문자를 대소문자 구분 없이 필터링 하고, 입력할 공간은 pw이며, id가 admin이어야지 해당 문제가 풀리는 문제이다.
pw부분은 비교하는 문장이 딱히 없고, id가 admin이어야지 문제가 풀리는 문제인데, 지난 문제와는 다르게 or, and를 필터링 하고 있어서 우회 할 방법을 더 생각해봐야 할 것 같다.
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");
if($result['id'] == 'admin') solve("darkelf");
?id='admin'&pw='1'# 를 넣어본 결과 id는 guest 값으로 설정되어 있는 것을 확인했다.
wolfman 문제와 비슷한 것 같아서 파이프라인을 사용하여 pw=1'||id='admin 로 공격문을 넣어보았다.
⇒ or과 and는 문자열을 필터링하고 있기 때문이다.
문제가 클리어되었다!
다른 필터링 우회 방법
https://lieadaon.tistory.com/364?category=890533
728x90
반응형