在学脚本入侵的时候,我们经常可以找到一些安全性比较差的站点,作为练手的对象,xixi~~。 这对于跟我一样的菜鸟级黑客来说是件好事!可以满足一下自己的小小虚荣心,拿个webshell的! 但是由于我本善良(谁在扔臭鸡蛋??哇~),有时候也有一点小小的内疚!毕竟你拿人家作试验了,对方舍身为你提供了这个机会,好像不给对方一点答谢也有点说不过去的。况且那些漏洞很明显的暴露在网上本身也是很危险的~,万一下一个入侵者是个龌龊卑劣的挂马者呢(这种情况我是经常遇到). 这个时候你有三个选择----- 一:电邮或在留言板留言通知该站管理员修补(记住!不是让你去改掉人家的主页,装模作样的说:该站有漏洞……)。 二:义务帮助扫马(这个我经常做的)。 三:如果对方的管理员很不负责,而且漏洞不涉及太多程序上的修改,那你干脆就自己动手。几分钟就搞定了。(不过这样做的时候我要提醒大家,千万要备份)。
举个例子,比如我们经常能见到这样一些漏洞,在一些站点的后台入口处输入or=or,就可以直接构造一个伪造的输入成立语句,欺骗程序让我们以合法的身份进入后台管理页面。这样是很危险的。如下图,直接输入or=or,就可以顺利进入到管理后台。

原因是没有过滤掉非法字符or和“”,这个时候我们可以在登陆页面中使用replace语句进行简单过滤,简单介绍replace语句,他叫字符转义函数,基本用法如下:
Replace(Replace(Pwd,"or",""),"","") Replace(Replace(Replace(Replace(Replace(变量名称,"",""),"or",""),"and",""),"--",""),";","") 其中Replace可以套嵌使用,何谓套嵌使用?就是一层一层的用(空空的话,xixi~~)。
还是实例演示:比如我们察看这个网站的后台登陆页面(怎么察看?我有webshell马嘛),如下图,他的后台登陆验证页面是那个checklogin.asp文件。

看他的验证代码: <%dim adminname,adminpassword adminname=DisHtml(request.form("adminname")) adminpassword=DisHtml(request.form("adminpassword")) if (adminname<>"") and (adminpassword<>"") then adminname=Replace(Replace(adminname,"",""),"or","") adminpassword=Replace(Replace(adminpassword,"",""),"or","")
if adminname="" or adminpassword="" then call showerror("用户名和密码不能为空") End If end if adminpassword=md5(adminpassword) set rs=conn.execute("select adminname,adminpassword,AdminPower from [admin] where adminname="&adminname&" and adminpassword="&adminpassword&"") if rs.eof then rs.close set rs=nothing call connclose call showerror("用户名或密码不存在") else session("adminname")=adminname session("AdminPower")=rs("AdminPower") rs.close set rs=nothing call connclose response.write "<script>top.location.href=../menu/main.asp;</script>" end if %>
打开来,我们在其中加入这样一句,
if (adminname<>"") and (adminpassword<>"") then adminname=Replace(Replace(adminname,"",""),"or","") adminpassword=Replace(Replace(adminpassword,"",""),"or","")
不要忘记在结尾处加上end if语句。也就是改成
<%dim adminname,adminpassword adminname=DisHtml(request.form("adminname")) adminpassword=DisHtml(request.form("adminpassword")) if (adminname<>"") and (adminpassword<>"") then adminname=Replace(Replace(adminname,"",""),"or","") adminpassword=Replace(Replace(adminpassword,"",""),"or","")
if adminname="" or adminpassword="" then call showerror("用户名和密码不能为空") End If end if adminpassword=md5(adminpassword) set rs=conn.execute("select adminname,adminpassword,AdminPower from [admin] where adminname="&adminname&" and adminpassword="&adminpassword&"") if rs.eof then rs.close set rs=nothing call connclose call showerror("用户名或密码不存在,或输入字符非法") else session("adminname")=adminname session("AdminPower")=rs("AdminPower") rs.close set rs=nothing call connclose response.write "<script>top.location.href=../menu/main.asp;</script>" end if %>
再次登陆检验,呵呵,成功了!

补充一句:其实网站程序这样把登陆页面和检验页面分开的本身做法是对的,因为登陆页面是在客户端执行的,而检验页面是在服务器端执行的,由登陆页面提交参数在服务器端进行检验,无权限用户是无法直接读取的,安全性就有保证。如果不分开直接在客户端检验的话就容易被入侵者加以利用,他可以修改上传提交函数或者干脆用NC 提交,这样的话,Replace语句本身就形同虚设了!(你如果认真地在看得话就会从中得到一点启示,呵呵,这样就可以尝试我的过关题目2了,咳!)。
再来说说另一个漏洞,调用conn.asp暴出数据库路径的问题。conn.asp文件用于连接数据库,通常我们直接访问在网站目录inc下的conn.asp就可以暴出数据库的物理路径。如图,还是举个实例!如图!

看见没,真实的数据库物理路径出来了。我们输入http://www.xxxx.cn/xianjin/admin/DataBase\xianjinsdfsdb.asp 乖乖!居然没做防下载处理!
这样是可能被入侵者利用的,一句话插马连接就是需要这样的前提(参考我以前的一篇文章) 其实弥补漏洞的方法有两个,一是给数据库作防下载处理,二是修改conn.asp。
第一个我不会也没那个精力,还是第二个方法来得快。(xixi~~我很懒的)在其中加入On Error Resume Next 语句。简单介绍下:直接访问conn.asp文件因为出错才会返回数据库连接路径,我们只要让它出错不返回数据库连接路径不就可以了吗?On Error Resume Next 语句本身就是一个容错语句,就算出错也会执行下去的。
举实例,还是直接用我的webshell马去看看源文件的代码。如图
 <% dim conn dim connstr dim db db="../../DataBase/xianjinsdfsdb.asp" Set conn = Server.CreateObject("ADODB.Connection") c & Server.MapPath(""&db&"") conn.Open connstr 释放Rs对象 function rsclose set rs=nothing end function 关闭并释放数据库连接 function connclose conn.close set conn=nothing end function
%>
我们只需要改成这样
<% dim conn dim connstr dim db On Error Resume Next db="../../DataBase/xianjinsdfsdb.asp" Set conn = Server.CreateObject("ADODB.Connection") c & Server.MapPath(""&db&"") conn.Open connstr 释放Rs对象 function rsclose set rs=nothing end function 关闭并释放数据库连接 function connclose conn.close set conn=nothing end function
%>
再来试试!
 看见没,没有返回数据库连接路径的错误提示,成功了。
好累!今天先到这吧!以上是我在检测入侵的之后对网站的一些简单修补,其实还有很多诸如数据库备份和上传的漏洞也是可以简单修补的,太累了,下次 如果大家有兴趣我再继续,没有就算了。毕竟这样做完全是义举,没有任何报酬的,愿意就做,不愿意就溜,只要不做坏事就OK了!
-东文网络专业建站,您信赖的网络专家-
不知该信息是否给您解决了问题,还有疑问请到留言建议向我们咨询 :) |