Today I Learned …
[Lord of SQL Injection] 30번 ouroboros 풀이 본문
* 개인적인 공부 내용을 기록한 글입니다.
이전 문제
https://choco4study.tistory.com/127
[Lord of SQL Injection] 29번 phantom 풀이
* 개인적인 공부 내용을 기록한 글입니다. 이전 문제 https://choco4study.tistory.com/122 [Lord of SQL Injection] 28번 frankenstein 풀이 * 개인적인 공부 내용을 기록한 글입니다. 사담 와 진짜 처음부터 끝..
choco4study.tistory.com
30번 문제 ouroboros 분석 및 풀이
30번 문제는 다음과 같다.
쿼리의 결과와 사용자의 입력값이 일치하는 지 검증하는 문제이다.
pw를 찾아내면 쉽게 풀 수 있는 문제이기 때문에 아마 테이블 내부에 pw 값이 없을 것 같았다...
확인을 위해 where절을 True로 만들어줄 수 있는 쿼리를 주입해보았다.
테이블에 pw가 있다면 값이 뜰텐데... 감감무소식이었다.
아무래도 예상했듯 테이블에 pw가 없는 것 같았다.
다음은 union을 사용해 1을 기존 테이블에 붙여보았다.
이런 식으로 pw를 넣어주면 될 것 같은데...
문제는 쿼리의 결과인 pw 값과 사용자 입력값이 같아야한다는 점에 있다.
어떻게 해주면 될 지 답이 안나와서 힌트를 서치해보았다.
답은 Quine이었다.
Quine이란 자기자신의 소스 코드를 그대로 반환하는 프로그램을 말한다.
Sql로도 Quine을 만들 수가 있는데, 사실 직접 로직을 생각해내는 것 보다는 서치의 힘을 빌려야하는 것 같다.
다음은 대표적인 Quine Query의 예시이다.
SELECT REPLACE(REPLACE('SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$")',CHAR(34),CHAR(39)),CHAR(36),'SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$")');
이를 적용하여 만든 최종 쿼리문은 다음과 같다.
'union select replace(replace('"union select replace(replace("$",char(34),char(39)),char(36),"$")%23',char(34),char(39)),char(36),'"union select replace(replace("$",char(34),char(39)),char(36),"$")%23')%23
답을 넣어보면,
30번 문제가 풀린다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
[Lord of SQL Injection] 31번 zombie 풀이 (0) | 2022.01.03 |
---|---|
[Lord of SQL Injection] 29번 phantom 풀이 (0) | 2021.12.30 |
[Lord of SQL Injection] 28번 frankenstein 풀이 (0) | 2021.12.25 |
[Lord of SQL Injection] 27번 blue_dragon 풀이 (0) | 2021.12.23 |
[Lord of SQL Injection] 26번 red_dragon 풀이 (0) | 2021.12.22 |