(Lord of SQLInjection) iron golem 문제입니다.

익숙한 두개로 나눌 수 있는 코드
마지막줄 쯤에 위치한 if(($result['pw']) && ($result['pw'] == $GET_['pw'])) 코드
Blind SQL 문제입니다.
이전에도 해왔던 Blind SQL이니 익숙하게 True 출력이 가능한
pw=%27||%20length(pw)>=1%23 코드로 참 거짓을 확인하려 했는데
어떠한 출력도 출력해주지 않습니다.
코드를 자세히 살펴보니 항상 봐오던 Hello admin 이나 guest 출력구문이 없는 상태입니다.
여기서 한번 막혀서 드림핵을 찾아보니
https://dreamhack.io/lecture/courses/286
[WHA] ExploitTech: Error & Time based SQL Injection
이번 코스에서는 Error based SQL Injection과 Time based SQL Injection에 대해 알아봅니다.
dreamhack.io
Error based SQL이란것을 찾을 수 있었습니다.
간단히 설명하면 쿼리 구문을 출력해주어서 참 거짓을 확인하지 못할때
쿼리를 실행은 시키면서 에러를 발생시켜 참 거짓을 판별하는 SQL 인젝션 공격기법중 하나라고 합니다.
위 사이트에서 제시해주는 Error based SQL 인젝션 예시를 참고하여

코드를 문제사이트에 제출해 봤습니다.

드림핵 예시와 동일하게 에러가 나면서 Blind SQL 공격이 가능해졌습니다.
if 구문에서 1=1 인 True부분을 Blind SQL 공격하듯이 파이썬 코드로 작성하면

위와 같이 작성이 가능해집니다.
작성한 파이썬 코드를 실행시켜 보면


pw의 길이는 32이며 pw의 값을 찾을 수 있었습니다.
찾은 pw를 문제사이트에 제출해보면

문제가 해결되었습니다!
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) hell_fire 문제 (0) | 2022.10.09 |
---|---|
(Lord of SQLInjection) dark_eyes 문제 (0) | 2022.10.09 |
(Lord of SQLInjection) dragon 문제 (0) | 2022.09.25 |
(Lord of SQLInjection) xavis 문제 (0) | 2022.09.21 |
(Lord of SQLInjection) nightmare 문제 (0) | 2022.09.19 |