문자열함수를 이용한 SQL Injection :: Hide

문자열함수를 이용한 SQL Injection

Posted by Hide­
2015.01.29 16:10 Security/Web

최근 대회 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 > Web' 카테고리의 다른 글

Natas 11  (0) 2015.03.05
Limit 구문에서의 SQL Injection  (2) 2015.02.27
문자열함수를 이용한 SQL Injection  (2) 2015.01.29
List of Apache dirs  (0) 2015.01.17
HTTP 상태코드  (0) 2014.11.01
MSSQL Error Based SQL Injection  (3) 2014.10.24
이 댓글을 비밀 댓글로
    • 2015.02.07 13:50
    비밀댓글입니다
    • 네 안녕하세요. 해당문제는 Blind 문제입니다. 간단하게 ascii(substr(pw,1,1)) 와 같은 방식으로 뽑아올 수 있습니다. 하지만 admin 계정이 테이블에서 첫번째 값이 아니기때문에 해당 문서에서 나와있는 방법을 통해 guest 계정을 제외시켜줘야합니다.(다른 방법을 사용하셔도 됩니다) 결과적으로 ascii(id)-103&&ascii(substr(pw,1,1))=X 이런식의 쿼리가 되겠네요.

티스토리 툴바