일 얘기

SQL Injection 당한 Field Update용 쿼리문

자유로 2008. 6. 10. 21:35

select [필드명], substring([필드명], 1, charindex('<', [필드명])-1)
from [테이블명]
where [필드명] like '%<s%'

검색부분을 다시 강화하는 방법도 있겠고...

좌우지간 급한대로 위와 같이 쿼리해서 결과값을 확인한 후,

update [테이블명]
set [적용할 필드명] = substring([적용할 필드명], 1, charindex('<', [적용할 필드명])-1)
where [필드명] like '%<s%'

필드에 들어있는 값이 원래부터 script 태그가 없다는 가정하에 적용할 수 있음.

- 피가되고 살이되어 줄 블로그 -
http://blog.empas.com/errorism/22500903

- 인젝션 피해 테이블과 필드의 검사시에는 아래 쿼리를... -

DECLARE @T varchar(255),@C varchar(255)
DECLARE Table_Cursor CURSOR FOR
 select top 3000 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)
 order by a.name asc
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN
 exec('insert into tmp_s (tbl,clm,val) select '''+@T+''', '''+@C+''', ['+@C+'] from ['+@T+'] where convert(varchar,['+@C+'],8000) like ''%script%''')
 FETCH NEXT FROM  Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor

--[출처] [MS-SQL] Mass SQL Injection 공격에 의한 감염여부 파악하는 쿼리|작성자 nicos