发新话题
打印

[转载]简单的asp脚本漏洞注入漏洞修补代码

[转载]简单的asp脚本漏洞注入漏洞修补代码

信息来源:Neeao's Blog
文章备注:怎么看怎么不简单
复制内容到剪贴板
代码:
<%
StrTemp=request.servervariables("server_name")&request.servervariables("url")&"?"&Request.QueryString
StrTemp = LCase(StrTemp)
If Instr(StrTemp,"select%20") or Instr(StrTemp,"insert%20") or Instr(StrTemp,"delete%20from") or Instr(StrTemp,"count(") or Instr(StrTemp,"drop%20table") or Instr(StrTemp,"update%20") or Instr(StrTemp,"truncate%20") or Instr(StrTemp,"asc(") or Instr(StrTemp,"mid(") or Instr(StrTemp,"char(") or Instr(StrTemp,"xp_cmdshell") or Instr(StrTemp,"exec%20master") or Instr(StrTemp,"net%20localgroup%20administrators") or Instr(StrTemp,"net%20user") or Instr(StrTemp,"%20or%20") or Instr(StrTemp,"&#39;") or Instr(StrTemp,"%20") or Instr(StrTemp,"""") or Instr(StrTemp,""") or Instr(StrTemp,""") or Instr(StrTemp,":") or Instr(StrTemp,":") or Instr(StrTemp,";") or Instr(StrTemp,";") or Instr(StrTemp,",") or Instr(StrTemp,",") or Instr(StrTemp,"-") or Instr(StrTemp,"%27") then
Response.Write "<script language=&#39;javascript&#39;>alert(&#39;非法操作!立即返回!&#39;);history.back();</script>"
Response.end
End If
%>
把上面的代码另寸为safe.asp,在存在注入页面的文件里插入代码:
复制内容到剪贴板
代码:
<!--#include file="safe.asp"-->
用md5加密数据库方法
寻找一个md5.asp文件!
复制到根目录下的……例如对一个后台登陆帐户的加密,如下:
寻找到admin_login.asp
复制内容到剪贴板
代码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="conn.asp"-->
<!--#include file="md5.asp"-->
<% d_adm=trim(request.form("adm"))
d_adm=replace(d_adm,"&#39;","")
d_pws=trim(request.form("pws"))
d_pws=replace(d_pws,"&#39;","")
if d_adm="" or d_pws="" then
response.Write("用户名和密码不能为空!")
else
set rs=server.createObject("adodb.recordset")
sql="select * from dy_admin where adm=&#39;"&d_adm&"&#39; and pws=&#39;"&md5(d_pws)&"&#39;"
rs.open sql,conn,1,1
if not rs.eof then
session("oursky")="oursky"
response.Redirect ("ad_login.asp")
else
response.Redirect("admin.asp")
end if
rs.close
set rs=nothing
conn.close
set conn=nothing
end if
%>
冰血封情 Posted at 2004-10-05 1:36:02 AM

这是谁的方法呀 也太长了点吧?看我来个简单的
其实只要检测用户提交的变量id是否是int类型的数据 这样不管别人是提交单引号 分号还是and 1=1 and 1=2都是显示 什么符号都没有用了 因为不是整型数据的话 就报错!
复制内容到剪贴板
代码:
if IsNumeric(request.QueryString("id"))=False then
response.write("EvilOctal Warning!")
response.end
end if

TOP

if IsNumeric(request.QueryString("id"))=False then
response.write("EvilOctal Warning!")
response.end
end if
就可以?!!  如果把这段过滤代码放在网站上过滤的话 呵呵 跟没过滤一样!  只判断是不是数字 然后给出提示"EvilOctal Warning!",但一样可以注入,只是多了个提示罢了 正确的应该是:
dim id
id=request.QueryString("id")
if IsNumeric(id)=False then
id=CLng(id)
response.write("The words you have typed is denied!!")
response.end
end if
你的代码只是判断不为数字的时候给出个提示,并没有真正去过滤!

TOP

呵呵 纠正一下  我测试后证明:
if IsNumeric(request.QueryString("id"))=False then
response.write("EvilOctal Warning!")
response.end
end if
的效果确实不错 这种方法对于过滤数字型参数真的是很经典 值得借鉴下 不错! 另外我觉得我写的:
dim id
id=request.QueryString("id")
if IsNumeric(id)=False then
id=CLng(id)
response.write("The words you have typed is denied!!")
response.end
end if
也不是不可以  呵呵 不过就是多了个CLng(id)  呵呵  偶实在是被注入给吓怕怕了!~~~

TOP

发新话题