-
<Lord of SQL Injection> nightmareWargame/Lord of SQL Injection 2021. 11. 19. 22:24
전달받은 pw에 prob, _, ., (), #, - 를 필터링해서 하나라도 있으면 "No Hack ~_~" 메시지를 출력한다.
그리고 이 pw의 길이가 6보다 크다면 "No Hack ~_~" 메시지를 출력한다.
id의 값이 참이라면 문제를 풀 수 있다.
id의 값이 참이기만 하면 되기 때문에 pw를 참으로 만들고, 쿼리 뒷부분의 id!='admin' 부분은 주석 처리를 하면 될 것 같다.
MySQL이 중복으로 사용되었을 때
1=2=0 (1=2)=0 1=(2=0) 참 참 거짓 일정 순서대로 처리가 된다.
즉, 괄호가 없는 1=2=0은 1과 2를 비교한 결과가 False이고, False=0을 처리하므로 참이 된다.
괄호가 있을 시, 괄호를 우선적으로 처리한다.
위와 같은 방법을 사용하여
?pw=')=0을 하면
select id from prob_nightmare where pw=('')=0') and id!='admin'
pw에 빈 문자열인 값이 없으므로 pw=('')가 False가 되고, False=0이므로 참을 반환한다.
이제 and 부터를 주석 처리하면 된다.
#, -를 필터링하고 있기 때문에 #과 --로 주석 처리를 할 수는 없다.
이런 경우, ;%00을 사용하여 주석 처리를 할 수 있다.
따라서, ?pw=')=0;%00을 입력하면
문제를 해결할 수 있다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
<Lord of SQL Injection> dragon (0) 2021.11.22 <Lord of SQL Injection> xavis (0) 2021.11.20 <Lord of SQL Injection> zombie_assassin (0) 2021.11.18 <Lord of SQL Injection> succubus (0) 2021.11.17 <Lord of SQL Injection> assassin (0) 2021.11.16