利用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欺骗同样能登录后台,从而就实现了异地的攻击。具体方法欢迎到黑防论坛讨论。

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

(0)

相关推荐

  • Webshell是如何绕过防火墙提升权限的

    本文讲的重点是webshell权限的提升和绕过防火墙,高手勿笑. 废话少说,咱们进入正题. 首先确定一下目标:http://www.sun***.com ,常见的虚拟主机.利用Upfile的漏洞相信大家获得webshell不难.我们这次获得这个webshell,不是DVBBS,而是自由动力3.6的软件上传过滤不严.网站http://www.sun***.com/lemon/Index.asp是自由动力3.6文章系统.Xr运用WinHex.exe和WSockExpert.exe上传一个网页木马ne

  • 获得leadbbs论坛站webshell后进后台最简便之法

    本文已经发表于<黑客手册>(非安全)杂志上,版权归其所有!转载注名! 其实ASP论坛中,我最喜欢就是leadbbs,稳定.速度快,占的空间也不大,比起庞大的DVBBS可小多了,说起安全来,它也很不错的,虽然在早版本里有过可以修改管理员密码的漏洞(俗称移花接木),但是从那至今它的安全性还是非常可以让大家肯定的,可能你会说前几天开始闹cookie欺骗漏洞呢,但是这最多也只是进了前台,后台一般还是无能为力的,高手在其面前也不得不服啊.呵呵,上面是题外话,今天我不是详说它安全性的,{www.xker.

  • 一个ASP.Net下的WebShell实例

    代码如下: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" %><%@ Import Namespace="System.Runtime.InteropServices" %><%@ Import Namespace="System.IO" %><%@ Import Namespace="System.Data

  • 轻松获得oblog 2.52的WebShell

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

  • 利用Session欺骗构造最隐蔽的WebShell

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

  • 浅谈利用Session防止表单重复提交

    解决项目中表单重复提交的问题,在平常的项目中有以下几种可能出现表单重复提交的情况,比如说: 1.由于服务器缓慢或者网络延迟的原因,重复点击提交按钮 2.已经提交成功,但是还不停刷新成功页面 3.已经提交成功,通过回退,再次点击提交按钮. 这些情况都可能使数据库中产生过多相同的冗余数据,浪费数据库资源.只有转发才会出现,重定向则不会. 针对第一种情况的解决方案(使用JavaScript),对后面两种无效: 首先在页面中添加如下格式的JavaScript代码 var submitFlag=false

  • 利用session实现简单购物车功能

    本文实例为大家分享了利用session实现简单购物车功能的具体代码,供大家参考,具体内容如下 一.实现的功能 (1) 利用session实现购物车中的物品添加.(2)使用servlet实现添加物品的功能(交互层).(3)一共有三个界面.第一个用来显示物品的列表的页面,第二个用来显示添物品的界面,第三个用来显示添加到购物车的信息页面. 二.代码实现 (1)物品列表页面:productlist.jsp <%@ page language="java" contentType=&quo

  • JavaWeb Listener 利用Session统计在线人数

    目录 一.监听器Listener 1.1 Listener的作用 1.2 小demo之统计在线人数 1.3 统计结果错误原因分析 一.监听器Listener 1.1 Listener的作用 Listener是一个功能组件,在创建.销毁或添加.修改或删除应用程序.会话和请求对象的属性时自动执行代码. 监听器是servlet的监听器,它可以监听客户端的请求和服务器的操作. 可以使用application,session,request这三个对象 1.2 小demo之统计在线人数 1.新建omline

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

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

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

    四.基于XML_RPC的Web服务 利用XML_RPC构造和使用服务是很方便的.企业为自己提供的各种服务部署XML_RPC服务器,用户.客户软件和客户企业就可以使用这种服务构造出高端服务或者面向最终用户的应用.这种提供更有效.廉价和优质服务的竞争将极大地提高应用服务的质量. 但这里还存在一些问题有待解决,例如怎样编目.索引.搜索Web上的服务?UDDI试图解决这个问题,不过这个标准并不简单,而且业界对它的反应也尚未明了.然而,在企业内部应用XML_RPC不仅能够改善代码的可重用性,而且还会带来一

  • php环境下利用session防止页面重复刷新的具体实现

    b.php的代码 复制代码 代码如下: <?php //只能通过post方式访问 if ($_SERVER['REQUEST_METHOD'] == 'GET') {header('HTTP/1.1 404 Not Found'); die('亲,页面不存在');} session_start(); $fs1=$_POST['a']; $fs2=$_POST['b']; //防刷新时间,单位为秒 $allowTime = 30; //读取访客ip,以便于针对ip限制刷新 /*获取真实ip开始*/

  • c#利用Session对象实现购物车的方法示例

    本文实现了c# Session对象实现购物车的方法,分享给大家,也给自己留个笔记: //shopcart.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; usi

  • php网络安全session利用的小思路

    目录 前言 session文件包含 php.ini [WMCTF 2020]Make PHP Great Again session维持 方法一 | 借助Burp Suite 方法二 | python脚本 方法三(非预期) | 伪协议配合多级符号链接的办法进行绕过. session反序列化 Jarvis OJ WEB PHPINFO 小结 前言 做题的时候经常考到session利用,常见的基本就两种,session文件包含和session反序列化,之前没有详细总结过,就写写吧. session文

  • 超全的webshell权限提升方法

    WEBSHELL权限提升技巧  c: d: e:.....  C:\Documents and Settings\All Users\「开始」菜单\程序\  看这里能不能跳转,我们从这里可以获取好多有用的信息比如Serv-U的路径,  C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\  看能否跳转到这个目录,如果行那就最好了,直接下它的CIF文件,破解得到pcAnywhere密码,登陆  c:\Pr

随机推荐