利用Session欺骗构造最隐蔽的WebShell_漏洞研究

不知不觉“LM团伙”看黑防已有两个春秋了,期期不落。潜心修炼了这么久,也能开始耍上一两招了。看了黑防第二期的《DreamWeaver引发网络危机》一文,“LM团伙”内心有说不出的激动,心想网上有40%的网页都有这样的漏洞,那岂不是又能收获N多肉鸡了。可是仔细研究发现,这个文章的方法存在一些问题,并不像想象中的那样容易发挥。下面就与大家一起讨论一下Session。 

既然是谈Session欺骗,那么就先来看一下Session到底是什么,它是怎么工作的。在ASP中,服务器能通过Session对象区分不同的浏览器,因为Session对象是用来记录浏览器端的变量,存储一些如用户名等比较敏感或有用的信息。这点似乎和Cookie有点像。但我们知道Cookie的值都是保存在客户端的,而Session的值却是保存在服务器端。当每个访问者第一次浏览器访问服务器的一个ASP网页的时候,服务器会为他创建一个新的并且独立的Session对象,分配给该会话一个会话标识号,并把包含会话标识符的特殊加密版本的一个Cookie(会话标识号)发送给客户。由于在Cookie(会话标识号)中没有提供Expires值,所以当浏览器关闭时,这个会话标识号也就消失了。 

每当用户访问这个ASP网站时,ASP都会通过浏览器查找这个会话标识号。命名为ASPSESSIONIDxxxxxxxx,其中每个x是一个字母符。我们在抓接收包时能看见: 

Set-Cookie: ASPSESSIONIDSQBBQQDS=GCINNKPDIGDNPEAOGLDFFFEM; path=/ 

但是这个Cookie(会话标识号)不会出现在Request.Cookies或Respsones.Cookies集合中,虽然ASP把它隐藏起来,但仍保存在浏览器上。对于每个ASP网页的请求,ASP都要查看该值。这个Cookie(会话标识号)包含的值,指明了这个用户的会话。因此,相应的Session对象(该对象已经在内存中,并且一直包含所有在前一页面请求过程中进行超操作的值)的内容可以移交给ASP网页中的脚本。也就是说,浏览器端拥有的是服务器分配的一个会话ID号,当我们有请求的时候,服务器可以通过这个ID号,查找相应Session对象的值,也就实现了区分不同的浏览器。 

利用 

文笔不好,不知道大家从前面的原理部分是否对Session有了一定的认识。现在我们来看看《DreamWeaver引发网络危机》一文是如何利用Session会话的。 

已有某网站abc.com,下有登录页:Login.asp,成功登录后转向可以看到敏感信息的OK.asp(设有访问限制,验证通过则显示),否则转向Fail.asp。 

在该文中,作者是想先构造一个hack.asp的网页,通过浏览该网页,建立Session会话,并设置一下Session验证时所需要的值,然后直接在地址栏输入登录以后的网页ok.asp,由于ok.asp是通过Session来验证的,所以作者认为这样能成功。可是,通过前面的分析我们知道,如果ok.asp和hack.asp不在同一台服务器上,这种攻击是无法实现的。因为Session对象的值都是保留在服务器端,不可能像作者所说的那样:让ASP执行并在IE中留下Session值,IE所拥有的不过是一个Session的会话标识号。如果我们在本机或其它服务器浏览了hack.asp,设置的验证值是在hack.asp所在的服务器上,但是在ok.asp所在的服务器上并没有设置相应的验证值,就连Session会话都没有建立,又如何通过验证呢?可见如果ok.asp和hack.asp不在同一台服务器上,就不会引发网络危机了。 

但是我们能通过这种Session欺骗的方法在入侵后给自己留一个不易查杀的后门!下面就以MyPower动力3.5为例给大家演示,如何通过Session欺骗来达到直接登录后台目的。 

我们先来看一下动力的源代码,在Admin_ChkPurview.asp中Session的验证: 

AdminName=replace(session("AdminName"),"'","") 

if AdminName="" then 

call CloseConn() 

response.redirect "Admin_login.asp" 

end if 

sqlGetAdmin="select * from Admin where UserName='" & AdminName & "'" 

可见,动力是通过Session对象中的AdminName变量来认证的,并用它作为用户名来查询数据库,而AdminName的最初赋值是在Admin_ChkLogin.asp中,当用户成功登录以后会给你两个Session值: 

session.Timeout=SessionTimeout 

session("AdminName")=rs("username") 

由于登录以后都是通过Session对象来检测的,所以我们在任何能访问的ASP网页中可构造以下语句(如Copyright.asp): 

<%session("AdminName")="admin"%> 

这样就能通过Admin_ChkPurview.asp的Session验证了。其中,Admin是指存在的管理用户名。这样构造后,即使我们在肉鸡上的任何木马都被查杀,只要管理员的用户名没有更改,我们可以先访问Copyright.asp,然后直接输入Admin_Index.asp就能直接登录后台了! 

那对于这种情况如何预防呢?其实动力也用了一定的办法,你会发现按这种方法输入其它的后台页面无法成功,这是因为在Admin_ChkPurview.asp还有如下验证: 

ComeUrl=lcase(trim(request.ServerVariables("HTTP_REFERER"))) 

if ComeUrl="" then 

response.write "<br><p align=center><font color='red'>对不起,为了系统安全,不允许直接输入地址访问本系统的后台管理页面。</font></p>" 

response.end 

else 

cUrl=trim("http://" & Request.ServerVariables("SERVER_NAME")) 

if mid(ComeUrl,len(cUrl)+1,1)=":" then 

cUrl=cUrl & ":" & Request.ServerVariables("SERVER_PORT") 

end if 

cUrl=lcase(cUrl & request.ServerVariables("SCRIPT_NAME")) 

if lcase(left(ComeUrl,instrrev(ComeUrl,"/")))<>lcase(left(cUrl,instrrev(cUrl,"/"))) then 

response.write "<br><p align=center><font color='red'>对不起,为了系统安全,不允许从外部链接地址访问本系统的后台管理页面。</font></p>" 

response.end 

end if 

end if 

可是在Admin_Index.asp页面中并没有调用Admin_ChkPurview.asp,所以我们能通过验证!那为什么不调用呢?不要问我了,自己试一试就知道了。 

后记 

我们知道通过关闭浏览器能结束会话,但是这样失去的只是服务器给我们分配的会话标识号。而在Session会话的生命周期结束之前,服务器是不会将会话标识号对应的Session值从内存中清除的。 

小知识:一般IIS的Session的生命周期默认是20分钟。 

利用这个原理,如果我们通过一定途经获得了其它浏览器登录服务器时建立的Session会话标识号。那么我们就能用这个会话标识号来得到被劫浏览器端同样的权限。如果是一个管理员在登录后台,那么我们在另一台电脑上用这个会话标识号通过Session欺骗同样能登录后台,从而就实现了异地的攻击。具体方法欢迎到黑防论坛讨论。 

文章若有疏漏敬请兄弟指出,哪位兄弟若有更好的利用方法欢迎一起分享  

时间: 2024-09-20 00:25:46

利用Session欺骗构造最隐蔽的WebShell_漏洞研究的相关文章

教你利用Log备份获取Webshell_漏洞研究

Blog被人渗透了一下,不知道各位掉了什么东西没有.原来有一次blog的目录可以列出来,那次我掉了一个小东西,然后今天别人告诉我NBSI 3用了那个东西的方法--呵呵,有点晕,就是下面的,成功率还是很高的,大家可以试试看.嗯,方法流出去无所谓,文章留着吧.  dbowner通过注射得到一个shell应该不是什么难事情了,比较麻烦的是就算利用增量备份,仍然有很多不确定的因素,如果之前别人有过什么错误的写入信息,可能备份出来得到的还是一些不能用的500错误,如何能够提高成功率及重用性呢?如果单从调整

利用BBSxp后台的缺陷得到webshell_漏洞研究

遇一BBSXP后台: 查看源文件.也没有value可以自定义. 尝试修改上传类型. 无奈不支持php aspx. 向数据库里插入一句话再备份. 出现些XXX 估计表里加入了什么东.. 访问: /bbs/Admin_fso.asp?menu=files&dir=../ 可以看到整站文件.. 找到一个文件名不常见的后台.. 运气不错. 备份webshell之..

进一步取得MirCms传奇私服的WebShell_漏洞研究

在黑防的2005年第6期中,小狮子写了关于MirCms中投票子系统的漏洞,阅读以后觉得该系统既然存在像登录验证错误这样的漏洞就应该还存在其他的可以更进一步利用的漏洞.本文就利用该系统中的这些漏洞取得其WebShell.  一.取得管理员账号和密码.  网站根目录下的yns_tupdata.asp中存在SQL注入漏洞,我们利用其可以获取管理员的账号和密码,看下面的代码片断.  If (Request.QueryString("t_id") <> "") T

轻松获得oblog 2.52的WebShell_漏洞研究

来源:邪恶八进制 作者:千寂孤城  一.方法   1.先进后台.利用CheckUserLogined漏洞直接加个后台管理员.关于这个CheckUserLogined漏洞我在<Blog的噩梦>(http://www.eviloctal.com/forum/htm_data/10/0508/13721.html)中有详细的说明,大概就是说可以通过Cookies欺骗搞SQL注入.   2.在后台的"网站信息配置"处有个"普通会员上传文件类型",给它加一个aaa

利用图片做木马应用完全解析_漏洞研究

何谓BMP网页木马?它和过去早就用臭了的MIME头漏洞的木马不同,MIME木马是把一个EXE文件用MIME编码为一个EML(OUT LOOK信件)文件,放到网页上利用IE和OE的编码漏洞实现自动下载和执行.    然而BMP木马就不同,它把一个EXE文件伪装成一个BMP图片文件,欺骗IE自动下载,再利用网页中的JAVAscript脚本查找客户端的Internet临时文件夹,找到下载后的BMP文件,把它拷贝到TEMP目录.再编写一个脚本把找到的BMP文件用DEBUG还原成EXE,并把它放到注册表启

DVBBS7.1后台备份得到一个webshell_漏洞研究

转自:http://www.wrsky.com/read.php?tid=565 作者:firefox+lvhuana 今天上午上网的时候,非常无聊,好友都不在线. 正在无聊的时候,突然qq响了,一个陌生人要加我,顺便先看下他的资料,哦哦,原来这个人还有个人站点呢,通过他加我请求.然后开始看他的个人站点,原来是一个外挂站,晕糊中,外挂站点的人加我作什么.... 想想进他的站点看看吧,打开明小子的旁注工具2.2版本(这个启动速度快,我喜欢),扫了一下,看到他站点所在的服务器上面还有几个站点,再仔细

动易SQL版新洞利用短信功能直接拿后台_漏洞研究

先注册个号,进入控制面版给自己发条短信   http://127.0.0.1/User/User_Message.asp?Action=Del&ManageType=Inbox&MessageID=4   这就是点```   用户名为admin  奇怪``抓不到```好了抓到了~~~显示记录不存在``是因为   =没有登陆````ef0020cf8c5e45b9 密码是这个```   下面就开始将管理员的密码更新为我注册用户的密码````   利用动易爆库改库程序先将pe_admin里ad

dvbbs7.1 照样从后台得到webshell_漏洞研究

文章作者:喜欢忧伤  信息来源:邪恶八进制安全小组  背景:  dvbbs7.1在后台备份里面加了access数据库检查了.所以原来的gif图片恢复成后门已经不行了  解决办法:  我把asp木马插入到数据库里,然后恢复.这样肯定检查肯定可以通过的.  具体过程:  前提:  (偶以默认的安装情况为准,具体情况的把握靠自己了.)  你得到论坛dvbbs7.1后台.  1.偶已经作好一个数据库了:里面插入了加密的asp后门[就是那个写马的后门]  同时已经修改名字成dvbbsToshell.gif

在PHP中利用XML技术构造远程服务(转)

xml|远程服务 在PHP中利用XML技术构造远程服务 未来的Web将是以服务为中心的Web,XML_RPC标准使得编写和应用服务变得非常简单.本文介绍XML_RPC标准及其PHP实现,并通过实例示范了如何在PHP中开发XML_RPC服务和客户程序. 一.服务式Web 从内容提供商所采用的简单方法到UDDI(Universal Description,Discovery and Integration)的未来构想,业界已经有大量关于"服务式Web"的说明和评论.就Web的初创阶段来说,