(Lord of SQLInjection) dragon 문제입니다.

id 부분에 guest가 입력되어있고 # (주석처리) 가 되어있는 상태입니다.
주석처리를 우회하고 pw부분을 공격하여 id=='admin'에 로그인을 성공하면 된다고 합니다.
먼저 항상 써오던 주석처리 #은 정확히 어디까지 주석처리를 해주는가 검색을 해보니
웹해킹 SQLI 우회기법 정리 - Webhacking SQL Injection Bypass Honey Tips
지금까지 웹해킹 워게임을 풀면서 깨달은(?) 우회기법을 정리하려 합니다. 모두 수기로 기억나는대로 작성하다보니 빠진 부분도 있을 것 같습니다. 기억나는대로 추가해서 수정하겠습니다. - o
ar9ang3.tistory.com

1라인을 주석처리 해주는데 %0a를 기준으로 나뉘어 진다고 합니다.
마침 문제사이트와 비슷한 코드도 나와있어 이를 참고해 인젝션할 코드를 작성해 삽입해보면

select id from prob_dragon where id='guest'# and pw=%0a||id='admin'#
select id from prob_dragon where id='guest' or id='admin'#
주석처리가 되어 두번째 코드와 같다고 볼 수 있습니다.
여기서 계속 guest가 떠서 한참을 삽질하면서 고민했습니다만
코드를 정리해서 잘 살펴보다가 실수 했다는 걸 찾았습니다.
참고자료로 사용한 위의 SQL인젝션 우회정리 사이트는 id='abc'로 없는 값을 예로 들었기에 가능한 코드였고
우리가 보는 워게임 사이트에는 id='geust' 라는 값이 존재하기에 or 구문으로 사용시
뒤에 작성한 id='admin'이 앞의 guest로 True가 되어 실행되지 않습니다.
해서 id='guest' 값을 False로 만들어주는 구문이 필요하고 and를 이용했습니다
id='guest' and 1=0 or id='admin'# 이 된다면 guest는 and 1=0으로 False가 출력되고
뒤의 id='admin'만 True가 되면서 가능해 집니다.
위의 내용을 토대로 인젝션할 code를 작성해보면 아래와 같이 작성할 수 있고 URL에 전달해보면
select id from prob_dragon where id='guest'# and pw=%0a and 1=0 ||id='admin'#

id=='admin'에 성공하면서 문제를 해결하였습니다.
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) dark_eyes 문제 (0) | 2022.10.09 |
---|---|
(Lord of SQLInjection) iron_golem 문제 (2) | 2022.09.27 |
(Lord of SQLInjection) xavis 문제 (0) | 2022.09.21 |
(Lord of SQLInjection) nightmare 문제 (0) | 2022.09.19 |
(Lord of SQLInjection) zombie_assassin 문제 (0) | 2022.08.31 |