首页 > 编程语言 >改造冰蝎对抗waf&OpenRASP计划-初探

改造冰蝎对抗waf&OpenRASP计划-初探

时间:2023-07-24 21:02:17浏览次数:44  
标签:反编译 OpenRASP java waf jar 秘钥 密钥 冰蝎


  0x01 前言

在参考了各家waf对于多种姿势检测“冰蝎”的文章之后,产生了改造冰蝎的想法,目前主要的检测手段为针对冰蝎的流量特征进行匹配,所以我们的反侦探手段为改变冰蝎的流量特征以达到绕过的目的,由于@rebeyond大佬没有开源冰蝎代码,所以得反编译。那么思路来了,第一:反编译冰蝎,得到大概的源代码。第二:重新构建项目,让我们反编译后得到的代码跑起来。第三:针对检测规则进行绕过。

0x02 反编译冰蝎

目前反编译java应用的相关工具主要有三种 JD-GUI、luyten、jadx。

一、jd-gui

JD-GUI是一个独立的图形实用程序,用于显示“ .class”文件的Java源代码。您可以使用JD-GUI浏览重建的源代码,以立即访问方法和字段。

相关介绍:

改造冰蝎对抗waf&OpenRASP计划-初探_jar

改造冰蝎对抗waf&OpenRASP计划-初探_jar_02

下载地址:http://java-decompiler.github.io/

目前最新的版本为:jd-gui-1.6.6.jar

二、luyten

相关介绍:Luyten是一款很强大的反编译工具包,是一款github的开源工具,软件功能非常强大,界面简洁明晰、操作方便快捷,设计得很人性化。且能够反编译有些jd-gui无法反编译的文件。

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_03

下载地址:https://github.com/deathmarine/Luyten/releases

三、jadx

相关介绍:jadx是一款深受Android开发人员喜爱的反编译利器,同时支持命令行和图形界面,能以最简便的方式完成apk的反编译操作。工具支持apk、dex、jar、aar等格式的文件,可以通过File - Open file选择文件或者直接将文件拖进窗口中,可以算得上一键反编译了,非常简单易用。

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_04

下载地址:https://github.com/skylot/jadx/releases

四、Import Jar As Project

Import Jar As Project 是一款eclipse插件,用于将.jar或.war作为项目导入到Eclipse IDE中,即使您没有通过反编译jar来获取源代码。

官网地址:https://github.com/helospark/import-jar-as-project

改造冰蝎对抗waf&OpenRASP计划-初探_java_05

对于具体如何反编译Behinder.jar到在eclipse中运行起来Behinder的详细过程本文不累述,因为这是耗时的体力活,我们要解决很多问题,很多没有java基础的童鞋也看不懂。这里只讲大概思路,首先我们可以通过Import  Jar As  Project插件将Behinder.jar导入eclipse,这样在ecplise中就创建了一个存在一堆报错的Behinder项目,然后再利用上文提到的三款反编译软件对Behinder.jar进行反编译,将每个文件以及每个java类中的方法进行对比,修改eclipse项目中的对应代码,在运用eclipse的相关报错信息进行有关反编译代码的排错,修改。这里解释一下为什么要用三款反编译软件,因为各自的优缺点不一样,反编译出来的代码也是不一样的,所以得综合尝试。

在没有进行任何修改的情况下导入eclipse后的情况如图所示:

改造冰蝎对抗waf&OpenRASP计划-初探_jar_06

可以看到,基本每个java文件都存在错误。

五、最终效果

在长达两个工作日的不断排错后,终于成功的跑起来了我们反编译后的代码

改造冰蝎对抗waf&OpenRASP计划-初探_jar_07

出于对原作者的尊重,这里不放出项目文件

复制下方链接做实验,反编译工具的使用:

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_08

0x03 对抗分析

网上对冰蝎流量检测的文章主要是以下三篇:

第一:“基于流量侧检测冰蝎webshell交互通讯”

链接:

第二:“流量加密又怎样?多种姿势检测“冰蝎””

链接:https://www.freebuf.com/articles/web/216133.html

第三:“那些年我们堵住的洞 – OpenRASP纪实”

链接:https://anquan.baidu.com/article/855

检测手段:按照“静态特征”编写两类规则:1.密钥传递规则。2.加密通讯规则。

如果同一个url或者源IP在数秒内内同时命中了这两种规则,那么可以非常肯定的确认是冰蝎了。注意,此处是同一个URL或者源IP,而不是同一个TCP会话,密钥传递和加密通讯未必是同一个TCP会话(源端口会变化)。

对抗思路:既然是同时命中两种规则,是 ”与" 的关系,那么我们只需要让第一个条件 “密钥传递规则” 不被waf匹配到就行了。

密钥传递规则主要包括如下几个方面:

弱特征1:密钥传递时URL参数

改造冰蝎对抗waf&OpenRASP计划-初探_jar_09

对抗思路:增加随机数量的随机参数和随机值,修改冰蝎的随机数规则

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_10


弱特征2:加密时的URL参数

在加密通讯过程中,没有URL参数。是的,没有参数本身也是一种特征。

对抗思路:在加密通讯的请求上增加 随机数量的随机参数和随机值 的URL参数

改造冰蝎对抗waf&OpenRASP计划-初探_jar_11


强特征3:Accept字段(可绕过)

Accept是HTTP协议常用的字段,但冰蝎默认Accept字段的值却很特殊,我也没有想明白为什么要设置这么一个奇怪的值。这个特征存在于冰蝎的任何一个通讯阶段。

Accept: text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2

这里对于原作者的(没有想明白),我给出一下解释,冰蝎可以自定义请求头,如果在没有自定义请求头的情况下,Accept的值是使用java代码发送请求时没有设置Accept时自带的。

setRequestProperty("Accept", "*/*");

改造冰蝎对抗waf&OpenRASP计划-初探_java_12


对抗思路:虽然这个强特征用户是可以通过自定义绕过的,我还是在代码里面改了

改造冰蝎对抗waf&OpenRASP计划-初探_java_13


强特征4:UserAgent字段(可绕过)

UserAgent也是可以自定义的

改造冰蝎对抗waf&OpenRASP计划-初探_jar_14



对抗思路:虽然可以自定义,我还是修改了自带的,因为我平时自己使用的时候也没有填写的习惯......

改造冰蝎对抗waf&OpenRASP计划-初探_java_15


强特征5:传递的密钥

加密所用密钥是长度为16的随机字符串,小写字母+数字组成。密钥传递阶段,密钥存在于Response Body中,如图。

改造冰蝎对抗waf&OpenRASP计划-初探_java_16

改造冰蝎对抗waf&OpenRASP计划-初探_java_17

对抗思路:其实最稳妥的方式就是 删减传递秘钥 的过程,将秘钥硬编码在客户端和服务器端,具体的做法有,一、每次打开冰蝎的时候生成一个秘钥,然后生成带密钥硬编码的服务器端(jsp、asp、php...)。二、将秘钥存放在某个文件中如(key.ini)由用户自定义,Behinder.jar去读取key,服务器端中的秘钥让用户手动修改。

但是,我不喜欢这种模式,或者说我懒,因为这样的话,需要修改的代码就太多了,包括java代码,jsp,jspx,php,aspx,asp脚本文件。不仅耗时而且对冰蝎的侵入式修改较大。

转变思路,我们可以看到冰蝎原来的请求顺序是一:客户端请求秘钥,服务器端返回秘钥,第二,客户端拿到秘钥然后发送POST请求。waf也是针对这个顺序进行匹配的。所以我们只需要打乱这个顺序让waf无法匹配到这个规律从而不会去进行下一步的探测就行了。基于这个想法我加入了在每次客户端get请求秘钥的中间插入 随机数量的get 请求http://xxx.xxx.xxx/。当然请求的当然是当前域名或者ip

原请求顺序:

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_18

打乱请求顺序:

改造冰蝎对抗waf&OpenRASP计划-初探_java_19

到这里,基本上waf也认识不了啥了,更别说后续的会去拿到密钥去动态分析。

实验推荐:应用防火墙WAF

点击上方链接或点击阅读原文体验

针对 OpenRASP

原文章是这么说的:

演练期间见到最多的就是冰蝎动态后门了,其中JSP版本通过自定义ClassLoader + defineClass方法来实现eval特性。

new U(this.getClass().getClassLoader()).g(c.doFinal(new 
sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newIns
tance().equals(pageContext);

因为流量是AES双向加密的,对绕过WAF和IDS会比较有效。但部署在应用内部的OpenRASP,还是能够看到后门操作(安装 999-event-logger 插件即可看到日志):

[event-logger] Listing directory content:/
[event-logger] Execute command: whoami
java.lang.ProcessBuilder.start
...
net.rebeyond.behinder.payload.java.Cmd.RunCMD
net.rebeyond.behinder.payload.java.Cmd.equals

合天网安实验室的《AES加密算法分析》,让你学习理解对称加密算法AES的原理,使用CrypTool对特定明文/密文使用AES进行加解密,体会AES算法的加解密过程。

同样,我们依然可以通过命令执行的堆栈识别冰蝎:

java.lang.ProcessBuilder.start
...net.rebeyond.behinder.payload.java.Cmd.RunCMD
net.rebeyond.behinder.payload.java.Cmd.equals

因此,无论服务端的JSP如何变形,只要客户端代码不变,我们通过校验堆栈就可以检测冰蝎动态后门。目前最新版的JS插件 2019-0703-1600 已经支持防护。

对抗思路:OpenRASP 已经说得很明白了,也很务实,很欣赏这种务实的态度,不然安全行业怎么发展呢,不像某些waf收费贵的一X,流批吹的凶,结果 唠跨松。跑题了。。。

我们也不需要做大改,只需要改变冰蝎的包结构就行了,我就直接去掉了net.rebeyond.behinder这三层包。

改造冰蝎对抗waf&OpenRASP计划-初探_java_20

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_21

0x04 成果检验

环境:apache-tomcat-7.0.96 + rasp-2019-12-17

改造冰蝎对抗waf&OpenRASP计划-初探_java_22

打开webshell

改造冰蝎对抗waf&OpenRASP计划-初探_jar_23


对应的请求

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_24


命令执行

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_25


虚拟终端

改造冰蝎对抗waf&OpenRASP计划-初探_java_26


文件管理

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_27


数据库管理

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_28


下载地址

链接:https://pan.baidu.com/s/1wd8AreiyudZUHNgFbS2b2A 提取码:a9ef

仅供参考学习,切勿用作非法用途。

0x05 总结

由于是反编译出来的代码,有许多bug,例如此版本不支持tomcat6 asp aspx,反弹shell功能无法成功。

期间也得到了@rebeyond大佬的指点,非常感谢。原作者也说了年后会再次更新,敬请期待。

点击获取:2019原创干货集锦 | 掌握学习主动权

改造冰蝎对抗waf&OpenRASP计划-初探_反编译_29

改造冰蝎对抗waf&OpenRASP计划-初探_jar_30


标签:反编译,OpenRASP,java,waf,jar,秘钥,密钥,冰蝎
From: https://blog.51cto.com/u_14601424/6839382

相关文章

  • 宝塔面板与长亭雷池waf组合
     一、宝塔面板这边的修改1.1更改nginx目录下的全部conf文件中80端口,改为其他,假设改为801,具体conf路径看网站设置,配置文件的最后一行。(参考https://www.bt.cn/bbs/thread-107318-1-1.html)1.2、更改网站的nginx配置文件,比如将443改为4434端口。1.3、重启nginx。Servicenginxres......
  • Nginx+Lua实现自定义WAF(一)
    安装环境:centOS71810 Step1:安装编译所依赖的软件pcre-devel:扩展的正则表达式引擎,为了使Nginx处理更复杂的正则表达式机制openssl-devel:–with-http_ssl_module使用该模块必需装openssl库,来实现http支持https协议zlib-devel:zlib库是网络通信压缩库,ngx_http_gzip_module(gzip......
  • WEB漏洞—文件上传之WAF绕过及安全修复
    上传参数名解析:明确有哪些东西能修改?Content-Disposition:  一般可更改name:  表单参数值,不能更改,如果要更改,确保对方表单值也要更改filename:  文件名,可以更改Content-Type:  文件MIME,视情况更改常见的绕过方法(这里所学的绕过方法大多数已经被安全狗修复,所以只能......
  • 长亭waf-ce 版本试用
    最近长亭提供了ce版本的waf,部分开源了(部分管理UI,t1k部分,部分语义分析自动机引擎)运行离线下载docker镜像以下地址http://demo.waf-ce.chaitin.cn/image.tar.gz加载镜像catimage.tar.gz|gzip-d|dockerloaddocker-compose文件 networks:safeli......
  • WEB安全-渗透测试-waf绕过信息收集
    waf绕过WAF拦截会出现在安全测试的各个层面,掌握各个层面的分析和绕过技术最为关键本文主要讲述以下四种环境下的waf绕过Safedog-默认拦截机制分析绕过-未开CCSafedog-默认拦截机制分析绕过-开启CCAliyun_os-默认拦截机制分析绕过-简要界面BT(防火墙插件)-默认拦截机制分......
  • 冰蝎、蚁剑、哥斯拉的流量特征
    冰蝎、蚁剑、哥斯拉的流量特征1.蚁剑流量特征1.1蚁剑webshell静态特征蚁剑中php使用assert、eval执行;asp只有eval执行;在jsp使用的是Java类加载(ClassLoader),同时会带有base64编码解码等字符特征。1.2蚁剑webshell动态特征我们使用一句话木马上传webshell,抓包后会发现每个......
  • SQL注入三连实战绕过WTS-WAF
    一键三连,sql注入一次无意之间发现的sql注入,主要是因为有一个WTS-WAF,在此记录一下只是友好测试,并非有意为之。。。。牛刀小试1手注判断字段数测试到orderby15的时候出现了报错,那么就可以说明字段数为14http://www.xxx.com/xxx.php?id=22%20order%20by%2014http://www.x......
  • WEB漏洞—SQL注入之堆叠及WAF绕过注入
    1、堆叠查询注入stackedinjections(堆叠注入)从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。在sql语句中以; 结束语句mysql>select*fromusers;+----+----------+------------+|id|username|password|+----+----------+------------+|1|Dumb......
  • python目录扫描工具——dirsearch使用,可以使用御剑的字典 支持慢速扫描,一般使用-s 60
    使用御剑的字典:pythondirsearch.py-uxxx.com-e*-w/media/dir_dict/ASP.txt,/media/dir_dict/ASPX.txt,/media/dir_dict/DIR.txt,/media/dir_dict/JSP.txt,/media/dir_dict/MDB.txt,/media/dir_dict/PHP.txt 非常好用!!!如下是御剑的字典文件。 进入dirsearch目录,进行扫描在这......
  • SQL注入绕过——主要是magic_quotes_gpc, is_int(只能跑路,无注入点),以及关键字绕过,WAF绕
       SQL注入点是可以在get、post、cookie、request、http头里等 ......