服务器:windows2003,我想到2003IIS有一个弱点那就是在站点下建立一个以.asp(.cer.asa也可以)结尾的文件夹,里面不管你放上什么文件都可以正常解析到asp上,而且朋友的站支持自助建站系统,我注册了一个帐户,发现程序通过fso自动分配一个以用户名命名的目录,第一次注册成功,于是我常识注册以.asp结尾的用户,程序提示用户名中包含非法字符晕~~郁闷!对注册页对分析了一下,原来是对post表单做了过滤,这样就好办了,我把页面下载到本地,把验证从新修改然后远程提交,成功了。呵~~我建立一个myhwlj.asp的目录,上传了一个木马程序是以.gif结尾的,结果正常运行。
补丁方法:
在用户注册保存页面加上防止外部递交代码就可以了,但是要想从根本上结决这个问题,还是要在注册的程序里面把“.”替换掉在这里我就不多说了,希望站长们注意,这个漏洞不单一的体现在这个程序中,所有自助建系统通吃。
<% Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER")) Server_v2=Cstr(Request.ServerVariables("SERVER_NAME")) If mid(server_v1,8,len(server_v2))<>server_v2 then Response.write "警告!你正在从外部提交数据!!请立即终止!!" Response.End End if %>
收藏学习,与原文有修改
我的方法: 第一:验证是不是从本站的reg.asp页提交过来的 str=request.serverVariables("Http_REFERER") If str<>"http:/www.yourname.com/reg.asp?action=reg" And str<>"http:/yourname.com/reg.asp?action=reg" And str<>"www.yourname.com/reg.asp?action=reg" Then Response.write("<script>alert('\请不要从外部提交数据');this.close()</script>") Response.End() End If
第二: 将request("user")等等全部改成request.form("user")
第三:过滤“.” 这个在reg.asp中的javascript中已经有了。所有就不用在加什么了。
欢迎指教
|