Rookies/클라우드 기반 취약점 진단 및 대응 실무

[SK shieldus Rookies 19기] 06 - Blind SQL Injection (Burp Suite Academy)

bento 2024. 5. 15. 17:16
[SK쉴더스 Rookies 19기] 클라우드 기반 스마트 융합보안 과정

https://portswigger.net/web-security/sql-injection/blind/lab-conditional-responses

 

Lab: Blind SQL injection with conditional responses | Web Security Academy

This lab contains a blind SQL injection vulnerability. The application uses a tracking cookie for analytics, and performs a SQL query containing the value ...

portswigger.net

해당 정보들이 미리 주어졌다고 가정한다.

 

가. 문제점

[CASE 6] SQL Injection

Web Security Academy 서비스 내 일부 페이지에서 사용자의 입력 값에 대한 필터링 검증이 부재하여 로그인 기능 이용/사용 시 입력 값을 변조하여 비정상적인 SQL 쿼리를 실행되게 함으로써 데이터베이스를 비정상적으로 조작할 가능성이 존재합니다.

그림 1. My account 경로 확인

 

그림 2. 로그인 기능 확인 및 정상 실행 시 출력되는 문구 확인

 

그림 3. 사전에 취약하다 주어졌던 Cookie의 TrackingID 확인

 

그림 4. 참이 되는 쿼리를 삽입하여 SQL 인젝션 취약점 확인

' and 1=1 --

 

그림 5. users 테이블의 존재 유무 확인

' and (SELECT 'a' FROM users LIMIT 1)='a

 

그림 6. administrator라는 username이 users 테이블에 존재하는 지 확인

' and (SELECT 'a' FROM users WHERE username='administrator')='a

 

그림 7. password 길이가 1보다 큰지 확인

' and (SELECT 'a' FROM users WHERE username='administrator' and LENGTH(password)>1)='a

 

그림 8. password의 길이를 알아내기 위한 Intruder 공격 설정

 

그림 9. 최대 30까지 password의 길이를 비교

 

그림 10. 값이 19와 20사이 일때 응답길이의 차이 발생, password의 길이가 20임을 확인

 

그림 11. password의 첫 번째 자리가 a인지 확인

' and (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a

 

그림 12. password의 두 번째 자리를 확인하기 위한 Intruder 공격 설정

 

그림 13. 영소문자와 숫자를 비교

 

그림 14. 비교 값이 y일때 응답 길이의 차이 발생 및 참인 경우의 문구 확인, password의 두 번째 자리는 y임을 판단

같은 방식으로 계속 진행하여 password의 값을 알아낼 수 있다.

aybur6h6qdkqa5achpim

 

그림 15. 찾아낸 password로 로그인 시도 시, administrator 페이지가 응답

 

그림 16. administrator로 로그인이 된 모습

 

 

나. 관련 URL

번호 경로 URL
1 My account > Login /login

 

다. 해결 방안

SQL 쿼리에 사용되는 문자열의 유효성을 검증하는 로직을 구현하고, 외부 입력이나 외부 변수로부터 받은 값이 직접 SQL함수의 인자로 전달되거나, 문자열 복사를 통하여 전달되는 것은 위험하므로 인자화된 질의문을 사용해야 합니다. 

문자 기호
' 문자 데이터 구분기호
; 쿼리 구분 기호
--, # 해당라인 주석 구분 기호
/* */ * 와 */ 사이 구문 주석

※ 특수문자 필터링은 데이터베이스의 종류에 따라 달라질 수 있습니다.

728x90