Lord of SQLInjection 17번 zombie_assassin
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
- strrev는 문자열을 역으로 바꾸는함수이다.
- addslashes는 싱글쿼터, 더블쿼터, 백슬래시, Null문자가 포함되어 있다면 해당 문자 앞에 백슬래시를 추가해주는 함수이다.
방법 1)
위와 같이 더블쿼터를 입력하게 되면 id='"\'가 된다.
addslashes($_GET['id']) : \"
strrev(addslashes($_GET['id'])) : "\
query : select id from prob_zombie_assassin where id='"\' and pw=''
이렇게 되면 id는 저번 문제(succubus)와 같이 백슬래시로 인해 뒤에 오는 싱글쿼터가 문자로 변하여 id는 노란색 부분이 된다.
방법2)
Null(%00)문자를 입력하면 id의 싱글쿼터가 백슬래시로 인해 pw=' 까지 문자로 인식된다.
* 싱글쿼터를 입력하게 되면 역으로 바꾸는 strrev함수 때문에 쿼리결과가 id=''\'가 되면서 id의 싱글쿼터를 탈출할 수 없게 된다.
* 백슬래시를 입력하게 되면 \\가 두개가 생기므로 이것 역시 우회할 수 없게 된다.
pw에는 or 구문으로 true값을 만들어주면 된다.
pw='or 1=1#
strrev로 인해 문자가 거꾸로 바뀌므로 pw=%231=1||로 입력하면 된다.