티스토리 뷰

본 글은 성자:Khuti (http://khuti.tistory.com/6) 글 스크랩 자료 입니다.


SQL 인젝션 우회 패턴에 대해서 종합 정리 및 지속적인 업데이트를 할려고 한다.
이하 내용은 본인이 직접 연구&학습&뻘짓&노가다 한 내용이다.

다양한 우회 패턴이 더 있지만.. 간단하게 일부만 정리..

먼저,,,,,,,,,
우회 패턴엔 크게 3가지 분류가 있을 수 있다.


- 1) 네트웍 특성을 이용한 우회 패턴
- 2) SQL의 특성을 이용한 우회 패턴
- 3) 애플리케이션의 잘못된 필터링으로 인한 우회 패턴


요즘 같은 세상엔 당연히 SQL 인젝션은 기본적으로 막혀 있을거라 생각한다면... No!!
시대가 변하고 보안 이슈가 늘어나도!!! 
사람의 습관은 크게 변하지 않는 법!!

남의 일이라 생각하는 이기적인 습관들이... !@#$%^&


방법은 다양하다... 크게 3가지로 나눌 수 있을 것으로 본인은 생각하지만 

방법 한가지 한가지가 그 방법에만 속하는 것은 아니기 때문에 풀어서 쓰도록 하겠다.




방법1. "%(URL인코딩)"를 이용한 패턴

보통 장비들은 네트웍의 지나다니는 패킷 그대로를 볼 것이다. 그렇기 때문에 시도 가능한 패턴이다.


- 원본 : SELECT
- 패턴1 : SEL%ECT
- 패턴2 : %S%E%L%E%C%T


이 방법은 URL인코딩의 특징을 이용한 방법이라고 할 수 있다.
URL인코딩은 HEX코드 앞에 "%"를 붙여서 영어, 숫자 외에 다른 문자들을 전송할 수 있게 해준다.
이 인코딩엔 다른 인코딩과 마찬가지로 범위가 있다. 정의된 범위가 있다는 것이다.
이 범위를 벋어난 인코딩 기법은 인코딩 처리가 무효처리 되고, %는 삭제된다.


이것은 애플리케이션 단에서 처리되는 것으로 장비에서는 인식하지 못할 확률이 있다.
물론 상용방화벽들은... 음..
그래서 "패턴2"와 같이 문자열을 변조하면 적어도 WebKnight는 우회할 수 있다.

 

방법2. 문자열 치환
문자열을 다양한 방법으로 치환하여 우회 할 수 있다.
각 DBMS에는 다양한 방법의 인코딩 및 문자열 치환 기능을 제공하기 때문에 각 DBMS를 잘 분석한다면 사용 가능하다.


- MSSQL : where name=0x6B68757469
- MySQL : where name=0x6B68757469
- Oracle: where name=chr(107)||chr(104)||chr(117)||chr(116)||chr(105)


방법3. 공백 치환

공백을 다양한 방법으로 치환하여 우회 할 수 있다.
가장 널리 알려진 방법이 바로 "/**/" 패턴일 것이다. 
참 난해한 방법이지만 전형적인 SQL 특성을 이용한 것이라 할 수 있다.

또한 다양한 필터링을 우회 할 수 있는 방법이기도 하다.

- where name='-1'+union+all+select+null,null--+
- where name='-1'/**/union/**/all/**/select/**/null,null--/**/



작성자:Khuti (http://khuti.tistory.com/6)

댓글
안내
궁금한 점을 댓글로 남겨주시면 답변해 드립니다.