버그바운티(Bug Bounty) Write-up / SQL Injection ($2,000)
Security/BugBounty Study

버그바운티(Bug Bounty) Write-up / SQL Injection ($2,000)

먼저 포스팅하기 전에 해커원(HackerOne) 이라는 사이트를 소개하겠습니다. 해커원은 버그바운티를 하는 회사들과 해커들을 연결해주는 세계 최대의 플랫폼 입니다. 우리나라에서는 아직 버그바운티가 활성화 되어있지 않아서 잘 알려지지 않았지만 많은 기업이 버그바운티를 진행하고 있고, 여러 해커들이 취약점을 발견하기 위해서 열심히 활동 중입니다. 아마 몇년내로 우리나라에서도 하나의 직업으로 뜨지 않을까 생각하고 있습니다.

해커원에는 취약점을 발견하고 포상금을 받기위해서는 그 취약점에 대한 설명과 PoC 코드등을 포함한 보고서를 제출해야 하는데요. 이 바운티를 받은 보고서를 무려 공짜로 열람할 수 있습니다. 정말 실 사이트에서 쓰이는 창의적인 해킹기법을 배울수 있습니다. 영어로 되어있어서 영어실력을 키우기에도 좋구요.

https://hackerone.com/reports/297478

 

TTS Bug Bounty disclosed on HackerOne: SQL injection in...

I've identified an SQL injection vulnerability in the website **labs.data.gov** that affects the endpoint `/dashboard/datagov/csv_to_json` and can be exploited via the **User-Agent** HTTP header. I didn't extracted any data from the database, I've confirme

hackerone.com


SQL Injection - $2,000

SQL Injection을 통해서 2천달러의 바운티를 받은 보고서 입니다. SQLi을 User-agent에 주입 했는데요. User-agent는 사용자의 웹브라우저 정보가 담겨서 전송됩니다. 아마도 사이트 내에서 User-agent 값을 데이터베이스에 저장하고 보여주는 그런 기능이 있었던 것 같습니다. (현재는 패치 되어서 없어졌습니다.) 

보고서에 따르면 이분은 SQLi 취약점을 확인하였고, 어떠한 데이터도 추출하지 않았다고 적어두었습니다. 아마도 버그바운티의 사전 조건때문인것 같습니다. 버그바운티를 할 때 중요한 점 중에 하나 인데요. 회사에서 제공하는 규칙(DoS Attack 금지, 데이터베이스 정보탈취 금지 등) 인것 같습니다. 

1
2
3
4
5
6
7
8
9
10
GET /dashboard/datagov/csv_to_json HTTP/1.1
Referer: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87'XOR(if(now()=sysdate(),sleep(5*5),0))OR'
X-Forwarded-For: 1
X-Requested-With: XMLHttpRequest
Host: labs.data.gov
Connection: Keep-alive
Accept-Encoding: gzip,deflate
Accept: */*
 
cs

요청 패킷입니다. User-agent에 SQLi 취약점이 있어서 'XOR(if(now()=sysdate(),sleep(5*5),0))OR' 이런 구문을 주입했네요. 구문을 분석해보면 now() 와 sysdate() 라는 함수 리턴값이 같으면 25초동안 sleep 다르면 0을 반환합니다.

now() 는 현재 시각을 리턴해주고, sysdate() 도 현재 시각을 리턴하지만 sysdate() 는 모든 레코드를 탐색하고 sysdate() 함수가 실행되는 시각을 리턴합니다. 뭐 쿼리문은 별로 의미 없는 것 같습니다. 단지 SQLi 취약점이 있다는 것을 검증한 것 같습니다. 

이 요청 패킷을 보낸 결과 서버는 25초동안 정지했다고 하네요. SQLi 취약점이 있다는 말이 되겠습니다. 이게 보고서의 끝입니다. SQLi 취약점을 어떠한 데이터를 추출한 것이 아닌 데이터베이스에게 특정한 연산을 시키고 동작을 관찰(sleep함수 작동여부) 등을 확인한 것 같습니다.

보고서를 쓰신분이 첨부한 Burp Suite 시연 스크린샷입니다.

보고서의 마지막에는 Impact 라는걸 설명해야 하는데요. 이 취약점을 통해서 악의적인 해커가 어떠한 행위를 할 수 있고 어떤 피해를 입힐 수 있는지 설명해 두었습니다. SQLi 취약점이니 데이터베이스를 마음대로 주무를 수 있는 매우 위험한 취약점입니다. 비록 취약점이 발생한 위치나 보고서는 간단하지만 영향력이 매우 크므로 2천달러나 되는 금액을 바운티로 지급한 것 같네요.