前言

As-Exploits,中国蚁剑后渗透模块。

目前插件的定位是蚁剑的一个微内核拓展模块,可以迅速做到payload的工程化,不用过多时间浪费在插件的结构上。目前的As-Exlpoits各部分之间基本做到了解耦,新增一个payload只需要两步:1.填写payload,2. 画一个表单。其余发包,回显处理等事情框架会自动帮你实现。想要自定义的话只需要继承父类然后重写对应方法即可。

其中Payload部分很多借鉴了冰蝎跟哥斯拉的实现,向其开发者们表示感谢!

支持列表

模块名称\Shell类型 PHP ASPX JSP
基本信息
反弹Shell
内存马
内存马管理
杀软识别
提权辅助
屏幕截图
ShellCode加载器
Jar加载器

本次更新主要内容

aspx增加屏幕截图模块

我打我自己

当然实战中需要较高权限。

image.png

因为在Jscript加载Assembly踩坑记里面解决了Jscript加载c#的问题,所以C#的payload理论上都可以加进去,更多其他的用法就看大家自己发挥了

jsp增加Jar加载器模块

打一个jar进去通常有两个用处:

一是可以用来上传数据库驱动。

二是把恶意类打入JVM中,后续只需要通过反射调用即可。哥斯拉的实现方式就是第一次就把所有的payload打入jvm中,后续通过反射调用。所以后续通信的流量包都非常的小,只需要传递参数即可。

冰蝎跟哥斯拉都有类似的功能,研究了一下他们的实现。

冰蝎

冰蝎的加载jar功能内嵌于数据库连接部分,仅用于上传数据库驱动。首先把要打入的jdbc上传到目标的临时目录,然后再用URLClassLoader去加载,这里贴一下代码。

net.rebeyond.behinder.ui.controller.DatabaseViewController#loadDriver

private void loadDriver(String scriptType, String databaseType) throws Exception {String driverPath = "net/rebeyond/behinder/resource/driver/";Platform.runLater(() -> {this.statusLabel.setText("正在上传数据库驱动……");});String os = this.currentShellService.shellEntity.getString("os").toLowerCase();//根据系统型号选择临时目录String remoteDir = os.indexOf("windows") >= 0 ? "c:/windows/temp/" : "/tmp/";String libName = null;if (scriptType.equals("jsp")) { //根据类型选择数据库jdbcif (databaseType.equals("sqlserver")) {libName = "sqljdbc41.jar";} else if (databaseType.equals("mysql")) {libName = "mysql-connector-java-5.1.36.jar";} else if (databaseType.equals("oracle")) {libName = "ojdbc5.jar";}} else if (scriptType.equals("aspx")) {if (databaseType.equals("mysql")) {libName = "mysql.data.dll";} else if (databaseType.equals("oracle")) {libName = "Oracle.ManagedDataAccess.dll";}}byte[] driverFileContent = Utils.getResourceData(driverPath + libName);String remotePath = remoteDir + libName;//将jar先上传到临时目录this.currentShellService.uploadFile(remotePath, driverFileContent, true);Platform.runLater(() -> {this.statusLabel.setText("驱动上传成功,正在加载驱动……");});//将libPath传递给服务端加载JSONObject loadRes = this.currentShellService.loadJar(remotePath);if (loadRes.getString("status").equals("fail")) {throw new Exception("驱动加载失败:" + loadRes.getString("msg"));} else {Platform.runLater(() -> {if (scriptType.equals("jsp")) {this.statusLabel.setText("驱动加载成功,请再次点击“连接”。");}this.statusLabel.setText("驱动加载成功。");});}}

webshell获取到libPath然后用URLClassLoader去加载。

net.rebeyond.behinder.payload.java.Loader

image.png

哥斯拉

哥斯拉的操作就比较秀了。因为打入一个jar不像打入一个class一样,直接有defineClass方法去接收一个字节数组。据我的研究,没有直接接收一个jar的字节数组的方法。打入jar需要使用URLClassLoader这个类,大概有两种方式,一种是利用http协议,远程获取所要加载的jar。另一种是file协议,从本地路径去读取jar。

每次都额外搭一个http当然不方便,并且目标还不一定出网。但是file协议的话还需要把jar写到磁盘中,文件就会落地,增加了被发现的风险。

但是我们回过头想,既然通过file协议加载jar,肯定会有一个通过路径找到文件,然后把文件读取到内存的过程,如果我们能跳过这个根据路径找文件的过程,直接把文件的内容写到字节数组里不就可以文件不落地了吗?

哥斯拉就是采用的这种做法,利用两个子类分别继承了URLStreamHandler跟URLConnection,然后利用反射模拟了读取文件的过程。

创建了一种新的协议jarmembuff

image.png

然后把收到的jar文件的字节数组给放到变量里。

image.png

这样就实现了文件不落地,将jar打入内存的目的。

本人在As-Exploits里也采用了这种做法。

小实验

这里做一个小实验

写一个弹框测试类

import java.io.IOException;public class calc {public calc() {try {Runtime.getRuntime().exec("calc");} catch (IOException var2) {var2.printStackTrace();}}
}

jar -cvf打包成jar

开个web项目,写一个test.jsp如下。去查找calc这个类并且实例化。如果实例化成功则会弹出我们的计算器。

<%Class.forName("calc").newInstance();%>

在第一次访问的时候找不到这个类肯定会报错

image.png

然后打开插件,选择要打入的jar文件。这里可以点按钮选择,也可以直接在输入框输入绝对路径。

image.png

exploit!

image.png

再去刷新页面,弹出计算器。

image.png

支持返回包加密

选择reverse解码器

image.png

返回包数据

image.png

内存马兼容Spring

其中 内存马管理 以及AntSword类型内存马支持Tomcat(5-9)、Spring

首先要Spring中默认没有pageContext的依赖,所以相关的依赖部分都要去除。蚁剑的jsp很早就不依赖pageContext了,相关文章以前也写过,不知道的同学可以翻一翻我的博客:yzddmr6.tk。

这里有两个细节

关于反射的坑

在研究过程中可以发现哥斯拉中的payload基本都是用反射实现的,这样的好处就是可以不添加任何依赖。这也是为什么哥斯拉只有8m的原因。

去除掉所有的pageContext后,在Spring中获取servlet没有问题,但是卸载的时候内存马管理模块报了一个这样的错误:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">15e0d5bERROR:// java.lang.NoSuchMethodException: org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedContext.removeChild(org.apache.catalina.Container)adc1b2c</pre>

定位一下问题出在这里

image.png

意思就是在StandardContext中找不到removeChild这个方法。

调试一下发现,Spring中获取到的StandardContext示例为其一个子类,叫做TomcatEmbeddedContext。虽然Spring中内置了Tomcat,但这个是Spring特有的。

image.png

TomcatEmbeddedContext继承了StandardContext,并且没有对removeChild进行改写,如果父类有这个方法应该是可以调用的。

那为什么会找不到方法呢?这里要提一下反射中getMethods 跟getDeclaredMethods 的区别:

getMethods 获取所有公有方法(包括父类方法)

getDeclaredMethods 获取本类中的所有方法 (只拿本类中的)

哥斯拉中用的getDeclaredMethod,也就是只能获取到本类中的方法,自然反射拿不到父类的removeChild。

所以解决办法要么把getDeclaredMethod换成getMethod,因为removeChild本来就是public的,要么就直接调用removeChild方法,不采用反射。在这里我采用了后者。

image.png

在内存马模块同理,这里直接全部改了,不再用反射。

addServletMapping的兼容性问题

要注意的是,在添加servlet的过程中,会涉及到addServletMapping函数的兼容性问题,并且很多文章中并没有仔细分析具体的版本号。这里贴一下我研究的结果:

tomcat7 只能addServletMapping

tomcat8 addServletMapping/addServletMappingDecoded都可以

tomcat9 只能addServletMappingDecoded

在这里要么用反射,两种方法都try一下。在这里提供一个更好的解决办法,使用ApplicationServletRegistration这个类。ApplicationServletRegistration对wrapper做了封装,自动会处理两种方法的兼容性。

Spring下运行截图

获取Servlet

image.png

打入蚁剑内存马

image.png

再次获取Servlet,发现已经有了,并且在第一位。

image.png

连接成功

image.png

卸载Servlet

image.png

卸载后再次获取Servlet列表

image.png

虽然我们可以通过setLoadOnStartup把servlet放在第一位,但是面对需要鉴权的shiro等目标打入一个servlet内存马还是有不小的局限性。所以目前filter内存马依旧是主流。但是蚁剑是支持listener类型的,listener的优先级还在filter之上。所以以后可能直接跳过filter,直接加入listener的payload。

现有模块介绍

基本信息

获取当前服务端信息。

支持类型:php/jsp/aspx

php

image

jsp

image

aspx

image

反弹Shell

跟MSF联动

支持类型:php/jsp/aspx

Payload目前支持以下类型:

  • java/meterpreter/reverse_tcp

  • java/shell/reverse_tcp

  • java/meterpreter/bind_tcp

  • java/shell/bind_tcp

  • php/meterpreter/reverse_tcp

  • php/shell/reverse_tcp

  • php/meterpreter/bind_tcp

  • php/shell/bind_tcp

  • windows/meterpreter/reverse_tcp

  • windows/x64/meterpreter/reverse_tcp

    image

内存马

一键打入内存Webshell,由于时间仓促,目前仅支持Servlet型内存马。

支持类型:jsp

可打入的内存马种类:

  • AntSword

  • Behinder

  • Godzilla-Base64

  • reGerog
    组件名称为注册的Servlet的名称,可以起一个具有迷惑性的名字来隐藏自己。
    其中AntSword类型支持Tomcat(5-9)、Spring。

    image

打入哥斯拉内存马

打入Godzilla-Base64内存马

image

在哥斯拉中连接成功

image

杀软识别

数据来源是key师傅的项目:avList

通过tasklist /svc获取当前进程列表,识别出其中的杀软。

支持类型:php/jsp/aspx

目前支持手动跟自动两种获取方式:

  • 自动获取
    自动执行tasklist /svc并分析回显数据。

  • 手动获取
    手动输入tasklist /svc的结果。

    image

提权辅助

通过systeminfo来获取补丁信息,从而给出提权建议。

支持类型:php/jsp/aspx

同样支持手动跟自动两种获取方式。

image

屏幕截图

获取目标当前屏幕截图。

支持类型:jsp/aspx

image

ShellCode加载器

加载shellcode至内存运行。(shellcode为hex格式,且不能有多余空格或换行)

支持类型:aspx

以msf为例:msfvenom生成hex格式的shellcode

image

粘贴进输入框,点击exploit

image

收到Meterpreter会话

image

Jar加载器

加载Jar到JVM内存中。过程中文件不落地,可用于上传数据库驱动等。

支持类型:jsp

image

注意事项

本插件仅供合法的渗透测试以及爱好者参考学习,请勿用于非法用途,否则自行承担相关责任。

http://www.taodudu.cc/news/show-3813964.html

相关文章:

  • 【论文分享】Automatic Generation of Data-Oriented Exploits
  • As-Exploits v1.3更新
  • Metasploit 如何使用Exploits(漏洞)
  • Vue 单页应用 的 首屏优化
  • Matlab在最优化计算中的应用
  • android正在升级正在优化应用程序,Android正在启动,优化应用是怎么回事,最近每次开机都这样。...
  • 贝叶斯优化方法和应用综述
  • android应用安装包大小优化
  • 唯快不破:提升Web 应用的 13 个优化
  • 机器学习模型应用以及模型优化的一些思路
  • Android应用优化方案一
  • Android应用优化方案四
  • Android应用优化方案三
  • Android应用优化
  • 应用优化
  • 10、mysql底层知识进阶-mysql应用层优化
  • Android性能优化之加快应用启动速度
  • Android应用性能优化之使用SparseArray替代HashMap
  • App 启动时间优化方法详解
  • 平面向量
  • 向量组
  • 什么是向量?_1
  • 向量究竟是什么?
  • Eclipse开发工具介绍
  • 开发人员必备!6大不可缺少的工具
  • 企业Java网站开发工具
  • 常用的网页开发工具有哪些
  • 82个Web开发者工具汇总
  • 2011年被捕的八大黑客
  • 回顾2011年被捕的八大黑客

As-Exploits v 1.2 更新相关推荐

  1. 夏新大V官方ROM更新帖---持续更新中

    [首发]夏新大V 5.4版本详细图文刷机教程 360与国内优秀手机厂家合作,由360提供软件互联网服务,手机厂商提供硬件制造,360为用户直接通过配置高.体验好.价格低 的优质手机!夏新大V的推出更是 ...

  2. 三星 v版系统更新无法连接到服务器,《异能勇者》万人新服紧急新开 更新最新版领取新服礼遇...

    <异能勇者>是一款具有清晰魔幻.挂机特色的动作冒险类手机网络游戏,按照本网站数据分析,还在研发初期就高手游网站上就已经预约破千,此刻<异能勇者>处于运营阶段.今日<异能勇 ...

  3. As-Exploits v1.4更新

    @yzddmr6 更新日志 v 1.4 (2021/7/24) aspx新增 内存马 模块 aspx新增 内存马管理 模块 jsp新增filter内存马 jsp内存马管理模块增强,支持filter.s ...

  4. Android应用程序更新并下载

    创建一个新类,名为UpdateManager,代码如下: 1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.i ...

  5. 【数据挖掘】神经网络 后向传播算法( 向后传播误差 | 输出层误差公式 | 隐藏层误差公式 | 单元连接权值更新公式 | 单元偏置更新公式 | 反向传播 | 损失函数 | 误差平方和 | 交叉熵 )

    文章目录 I . 向后传播误差 简介 II . 输出层误差计算公式 III . 隐藏层层误差计算公式 IV . 使用误差更新 连接权值 V . 使用误差更新 单元偏置 VI . 反向传播 过程 VII ...

  6. mvvm绑定checkbox wpf_LoxodonFramework 数据双向绑定 通过控制数据流向防止更新死循环...

    框架地址​github.com 用这个框架也有一段时间了,刚引入的时候还没感受到MVVM的威力,随着项目的逐渐复杂,才真正感受到 VM和V分离后对于多端项目的巨大优势 目前项目有两套完全不同的界面布局 ...

  7. hdu 3966(树链剖分+线段树区间更新)

    传送门:Problem 3966 https://www.cnblogs.com/violet-acmer/p/9711441.html 学习资料: [1]线段树区间更新:https://blog.c ...

  8. xbox360fsd更新游戏封面_Steam推出了新版游戏库,界面更为简洁

    译/应瑾婷 V社终于更新了Steam游戏库. 9月17日,Steam官方公告表示,他们将塑造全新的Steam库.用户可以在"设置"中选择参与测试,体验新版的游戏库. 在公告中,St ...

  9. iOS求职之OC面试题完整版---持续更新中...

    1.Objective-C的类可以多重继承么?可以采用多个协议么? 答:不可以多重继承,可以采用多个协议,Objective-C本身也并不支持抽象基类. 2.#import和#include的区别是什 ...

最新文章

  1. 积微论坛报告视频+PPT:用微生物组时序数据重现生物膜装配动态过程
  2. vue 2个方法先后执行_演讲你早该知道的2个演讲方法
  3. PythonNET网络编程3
  4. Druid:一个用于大数据实时处理的开源分布式系统
  5. 一个学校内部的计算机网络属于,一个教室内计算机联成的网络属于____。
  6. 如果看到消息“此计算机无法读取您插入的磁盘”,该怎么办?
  7. pymysql操作数据库
  8. python测试用例设计方法_设计测试用例的基本方法
  9. 如何在Java语言编程中,如何输入一个char型字符
  10. 评价——TOPSIS
  11. Excel学习笔记 - 查找表格数据
  12. Win11鼠标右键默认显示更多,保持跟Win10一致
  13. 怎样来实现数据接口的加密?
  14. OpenCV手掌识别
  15. scrapy学习(完全版)
  16. 设计模式 —— Builder 模式
  17. Linux ls: xxx .: Input/output error 错误问题 及 fsck源码下载
  18. 虚拟创业云|BBC幼儿英语启蒙动画Nina and the Neurons妮娜和神经元
  19. java记事本简单,java简单完整记事本
  20. 红色企业通用年终总结PPT模板

热门文章

  1. 有上下限的最小费用可行流
  2. 用matlab做空间计量模型,MATLAB 空间计量模型的实现
  3. jQuery修改class属性
  4. 图论相关的基本定义(自用)
  5. 在Ubuntu 18.04系统上安装最新的Adobe Flash Player
  6. 计算机毕业设计之java+ssm医院资产管理系统
  7. 2、camunda工作流介绍
  8. Flutter移动应用开发 - 04 Flutter 常用 widget 整理
  9. Win+数字 win7快捷键
  10. backbone java_backbone简介_动力节点Java学院整理