2022. 4. 6. 03:16ㆍSite/LOS
소스코드를 보니 먼저 strrev 함수가 나와있습니다. strrev함수는 문자열을 뒤바꿔줍니다
ex) strrev(nimda) -> admin
addslashes함수로 싱글쿼터, 더블쿼터, 백슬레쉬, NULL(%00)의 앞에 \를 넣어서 문자열로 만들어줍니다
따라서 ' " \ %00 -> \' \" \\ %0\ 로 변경을 해줍니다
그리고 id에 값이 있다면 클리어입니다
' 를 문자열로 바꾸기 위해 단순 \를 써주면 id='\\' and pw='' [\가 2개가됨] 처럼 되어 '를 문자열로바꾸는 기능이 상실해 버립니다.
' 를 넣어주면 id=''\' and pw='' 형태가 되어 싱글쿼터가 열린상태가 되기때문에 id에 문자열을 넣을 수가 없습니다
접근방법
" 를 사용하면 \"로 변경되고 또 strrev함수 때문에 "\ 형태로 변합니다 -> id='"\' and pw=''
id='"\' and pw=' or 1=1 #'
그렇다면 \뒤의 싱글쿼터를 문자열로 인식하여 파란색으로 표시된 전체부분을 하나의 문자열로 인식되어 처리될 것이고 or연산자를 붙여주어 항상참인 1=1을 넣어주어 클리어 하면 될 것 같습니다
하지만 strrev함수 때문에 or 1=1을 뒤바꿔주어 입력해주어야 됩니다
마지막 남은 싱글쿼터는 주석[%23]으로 처리해주면 마무리 입니다
-> pw=%23%201=1%20ro%09
cf) 생각해보면 간단한 문제이지만 strrev 함수 때문에 애먹는 문제인 것 같습니다