[2007.12.18] v2.0 개발일지
---------------------------------------------------------------------------------------------------
착            수  : 2007. 10. 20.
프로젝트 분류 : INNOVATION 01
공  식   명  칭 : N3015M Blind/SQL Injection Professional
가             칭 : N3015M Blind/SQL Injection for Penetration Tester
개  발   언  어 : C#
1차  목      표 : v1.x의 모든 기능 구현 및 최적화
1차  완료예정 : 2007. 12. 20.
진  행   사  항 : [GUI 설계] → [Core 구현] → [ 기능구현 ] → [1차 완료]
---------------------------------------------------------------------------------------------------

프로젝트로 시간 내기가 너무 어렵다. 선임 이란게 이런건가 보다. 급여도 별 차이가 나지 않는뎅 차라리 조금 덜 받고 선임 안했으면 좋겠단 생각이 든다. 그냥 같은 급여 받으면서 더 고생하니 드는 생각이다. 내년엔 좀 오를려라..

 방금 전에야 v2.0 BETA 1 개발 완료했다.

 

항목

v1.X

v2.0

1

지원DB

MSSQL, ORACLE,MySQL

MSSQL, ORACLE, MySQL

2

Core Version

v1.0

v2.0

3

, 거짓 판단 방법

MATCH, DOC COUNT

MATCH, HTTP STATUS CODE, LINE COUNT, DOC LENGTH

4

검색 알고리즘

Binary Search

Binary Search

5

가속화 기능

v1.0

미리 획득된 데이터 활용

v2.0 alpha

COLUMN TYPE을 인식기능

미리 획득된 데이터 활용(미구현)

6

2Byte 문자 획득 법

1Byte 문자여부 확인 후
2 Byte
범위 검색 ( 한글 지원)

1Byte + 1Byte 범위 검색

(한글,한자 지원)

7

DBData획득

MSSQL Error Based 만 지원

MSSQL, ORACLE, MySQL 지원

8

 ..

 ..

 ..



ㅎㅎ 또 시간나면 이어서 써야징


사용자 삽입 이미지

사용자 삽입 이미지

Posted by n3015m
:

1. Waitfor Delay를 이용한 Blind SQL Injection

Waitfor 구절을 통하여 Blind/SQL Injection 취약점 존재 여부를 확인 할 수 있다. 해당 구문은 단순하게 취약점 여부를 확인하거나 Multiple Query를 이용한 Injection 가능 여부를 판단하는데 유용하게 사용 할 수 있다. 또한 취약점이 존재하는 파라메터를 적절하게 조작하여 잘 알려진 Blind 또는 SQL Injection 공격이 불가하고 Multiple Query만 수행이 가능한 매우 제한적인 환경일 경우, 위 방식을 이용하여 DB의 Data획득이 가능하다.

이러한 환경의 경우 진단시 고객측에서 DB획득이 불가함으로 문제가 없다고 할 수 있으나 아래 방법을 이용하여 DB획득이 가능 함을 증명 할 수 있다.



1.1. Waitfor구문 이란?

Waitfor는 블록, 저장 프로시져 또는 트랜잭션의 실행을 트리거하는 시간, 시간 간격 또는 이벤트를 지정한다..

■ 구문
WAITFOR { DELAY ‘time’ | TIME ‘time’ }

■ 인수
- DELAY
Microsoft® SQL Server™가 지정된 시간이 경과할 때까지 대기하도록 명령한다.
(최대 24 시간까지 대기할 수 있음)
'time'은 대기할 총 시간으로 datetime 데이터에서 사용할 수 있는 형식 중 한 가지를 사용하여 지정하거나 로컬 변수로 지정할 수 있다. 날짜는 지정할 수 없으므로 datetime 값의 날짜 부분은 허용되지 않는다.
- TIME
SQL Server가 지정된 시간까지 대기하도록 명령한다.



1.2. 애플리케이션의 구조

국내의 모의해킹 테스트는 대부분 BLACKBOX 테스트 형식으로 진행되며 해당 컨설턴트는 애플리케이션 구조에 대해 모르는 상태이다. 그러므로 다양한 입력과 서버의 반응을 보며 구조를 유추하는 방법이 많이 사용되며 아래 예제 구문을 통하여 구조를 미리 익혀 두는 것이 진단 또는 테스트에 도움이 된다.

아래는 애플리케이션의 Query 구문 예제이다.

1. 예제

Login Page 예제

  아래 구문을 보면 DB에 인증관련 프로시저를 생성하여 사용자의 ID PW를 처리하는
구조로 되어 있다. 아래와 같은 방식의 구조는 보편적으로 많이 알고 있는 SQL Injection 공격이 불가한 형태이다.

 

  역으로 아래와 같은 방법으로 코딩 할 경우 보다 더 안전한 애플리케이션이 될 수 있다.

 

user_id=trim(Request.form("logid"))

passwd=trim(Request.form("logpswd"))

 

strSQL="exec procMember_GetLogin @user_id='"&user_id&"', @passwd='"&passwd&"'"

set rs=conn.execute(strSQL)

 

※ 위와 같은 애플리케이션의 구조는 아래의 테스트 방법에서 언급된 Multiple Query 방식으로 내장된 Stored Procedure를 활용하여 DB 서버의 접근권한을 획득하기 위한 다양한 추가적인 공격이 가능하다.

  



1.3. 테스트 방법 예제

해당 방법은 일반적으로 취약한 환경이 아닌 매우 제한적인 환경에서 사용이 가능하다는 점을 숙지하고 참고용으로 활용되었으면 한다.

1. 취약점 확인 방법

Multiple Query 가능여부 판단

  SQL Injection에 취약한 Parameter의 값에 “;waitfor delay ‘00:00:01’”를 입력하여 응답 시간을 확인한다. 요청 결과의 지연 시간을 통해 취약성 판단이 가능하다.

 

- http://192.168.112.131/web.asp?query=1

사용자 삽입 이미지

 

- http://192.168.112.131/web.asp?query=1;waitfor+delay+'0:0:1'

사용자 삽입 이미지


 

참고사항

 

해당 방법은 1회성 테스트 결과에 대해서는 신뢰하기 어렵다.

 

실제 인터넷 환경은 DB Delay Time 외에 네트워크 전송 지연 등 다양한 환경이 변수로 작용한다. 이러한 불확실성은 해당 결과에 대해 신뢰가 어려우며 몇 차례의 추가적인 검증이 필요하다.

 

  ※ 본 문서의 테스트 자료는 최적의 환경에서 수행되었으며 DB Delay Time 외에 결과에 영향을 미칠 수 있는 외부의 환경적 요인은 모두 제거된 상태이다.

 

  

2. Blind SQL Injection 테스트 및 공격 방법

IF 구절을 이용하여 ‘sysadmin’ 여부 확인

  해당 DB의 권한이 SA일 경우 시스템 명령 수행이 가능함으로 SA유무를 먼저 파악하는
것이 모의해킹 시 더 유용하다.

 

  - URL?query=1;if+(select+IS_SRVROLEMEMBER('sysadmin'))=1+waitfor+delay+'0:0:1'

사용자 삽입 이미지

  해당 결과가 참으로 확인될 경우 XP_CMDSHELL 등을 이용하여 관리자 권한의 SHELL을 획득하여 추가적인 테스트를 수행하면 된다.

  

IF 구절을 이용한 DATA 획득 방법

  - URL?query=1;if+(select+len(current_user))=3+waitfor+delay+'0:0:1'

사용자 삽입 이미지

위와 같이 IF 구절에 쿼리를 입력 후 응답 지연시간을 이용 True, False를 확인 할 수 있어 Binary Search(이진탐색)가 가능하다. 결론적으로 DB획득이 가능하다는 것을 증명 할 수 있다.

 

 

참고 사항

  - URL?query=1;if+(select+ascii(substring(current_user,1,1)))>60+waitfor+delay+'0:0:1'

 

  위의 방식을 이용하여 수작업 Binary Search 100,98,111 ASCii 값 획득이 가능하며 해당 값을 CHAR로 변환할 경우 ‘dbo’란 사용자 명 획득이 가능하다.

 

  P.S

  “>”, “<”, “=” , DB의 비교 연산자를 이용하여 수작업 검사가 가능하고,
자동화 툴 구현도 가능하나 불확실성이 매우 높다는 점이 고려되어야 한다.




[0706]07-002-02_Technical Research Information[Blind&SQL Injection v0.2]
by N3015M
Posted by n3015m
:

BLOG main image
'네오이즘'의 보안LAB 블로그입니다........... n3oism@gmail.com by n3015m

카테고리

분류 전체보기 (228)
[ HappyDevTool ] (29)
[ HappyToolRelease ] (4)
[Book] (6)
[ Security Studies ] (0)
- CII (2)
- BigData (2)
- Web Hacking (10)
- SQL Injection (25)
- Mobile Security (9)
- Network (6)
- OperatingSystem (4)
- Malware & Reversing (4)
- Phishing (5)
- Compliance (0)
- Programming (13)
- Tools (13)
- IoT (6)
- etc (21)
[Pentration Testing] (3)
[OS X] (4)
[ Security Trends ] (16)
[ Fixing Guideline ] (7)
My Way, My Life (34)
About Me (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :