前几天我的一个朋友的服务器被黑了,数据库内容被改变了很多,让我给看看,首先分析服务器的安全情况,密码全部是12位以上的,数字大小写混合的密码,不应该有人破解,并且这个服务器是专用的WEB服务器,补丁全部打全了,因此基本确定是网站的程式存在 SQL 注入。打开朋友的程式代码,我又感觉不确定是不是SQL注入了,这为朋友的代码包括这样的验证字符串:
function chkstr(string,strlen) if len(trim(string))>strlen then '记录ip,时间,输入内容 you_ip=request.servervariables("REMOTE_HOST") set rslog=Server.CreateObject("ADODB.RecordSet") rslog.open "Select * from mylogs",conn,1,3 rslog.addnew rslog("ip")=you_ip rslog("inputstr")=string rslog("tag") = request.servervariables("REQUEST_METHOD") & " " & request.servervariables("SCRIPT_NAME") & " "& request.servervariables("QUERY_STRING") if request.servervariables("REQUEST_METHOD") = "POST" then for i = 1 to Request.Form.Count data = data & Request.Form.Key(i) & "=" & Request.Form.Item(i) & "|" next rslog("data") = data end if rslog.update response.end else String = replace(String, "'", "") String = replace(String, ",", "") String = Replace(String, "|", "") chkstr = String end if end function
并且基本过滤了任何的request 换句话说,这里边要造成注入是很困难的。。因为文档太多了,我不能一一给他检查,于是要来IIS的日志,首先查找 select 然后是 update,insert查找这几个关键字,也没发现什么可疑的提交.随后我就查找500终于找到一个文档连续多次出现500错误,按照经验,这就是漏洞的入口点.
随后检查这个文档,发现..里边有这样的一句:
daan=chkstr(request("daan"),50)
我晕..提交50个字符都能够?那样就没有必要检测算了..
将这句话替换成 daan=chkstr(request("daan"),10) 漏洞消除。
总结:
1 上边的代码的确是很好的,对可能存在的攻击都记录到mylogs表中,很必要。
2 原来的程式员没有交待好如何使用chkstr函数和新的程式员生搬硬套函数是造成漏洞的主要原因。
function chkstr(string,strlen) if len(trim(string))>strlen then '记录ip,时间,输入内容 you_ip=request.servervariables("REMOTE_HOST") set rslog=Server.CreateObject("ADODB.RecordSet") rslog.open "Select * from mylogs",conn,1,3 rslog.addnew rslog("ip")=you_ip rslog("inputstr")=string rslog("tag") = request.servervariables("REQUEST_METHOD") & " " & request.servervariables("SCRIPT_NAME") & " "& request.servervariables("QUERY_STRING") if request.servervariables("REQUEST_METHOD") = "POST" then for i = 1 to Request.Form.Count data = data & Request.Form.Key(i) & "=" & Request.Form.Item(i) & "|" next rslog("data") = data end if rslog.update response.end else String = replace(String, "'", "") String = replace(String, ",", "") String = Replace(String, "|", "") chkstr = String end if end function
并且基本过滤了任何的request 换句话说,这里边要造成注入是很困难的。。因为文档太多了,我不能一一给他检查,于是要来IIS的日志,首先查找 select 然后是 update,insert查找这几个关键字,也没发现什么可疑的提交.随后我就查找500终于找到一个文档连续多次出现500错误,按照经验,这就是漏洞的入口点.
随后检查这个文档,发现..里边有这样的一句:
daan=chkstr(request("daan"),50)
我晕..提交50个字符都能够?那样就没有必要检测算了..
将这句话替换成 daan=chkstr(request("daan"),10) 漏洞消除。
总结:
1 上边的代码的确是很好的,对可能存在的攻击都记录到mylogs表中,很必要。
2 原来的程式员没有交待好如何使用chkstr函数和新的程式员生搬硬套函数是造成漏洞的主要原因。




