没想到你是这样的XXE

作者:太空独角兽    发布于:

XML External Entity,XML外部实体注入

注入步骤:

  1. 判断传输xml数据,得到回显
  2. 分析过滤
  3. 构造外部实体

初识XXE

为了感受XXE魅力,本地写了一个文件,结果搞了好久的环境,看了各种文档终于找到问题所在成功读写出我想要文件。

PHP源码

 <?php  
    $xml=<<<EOF
    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE address[
        <!ENTITY xxe SYSTEM "file:///D://phpStudy//WWW//myphp//html1.html">   //读取任意文件
    ]>
    <root><xxe>&xxe;</xxe></root>
    EOF;
    $data = simplexml_load_string($xml,NULL,LIBXML_DTDVALID);    //参数超级重要啊
    var_dump($data);    
    echo LIBXML_DOTTED_VERSION;
?>

任意读取文件内容回显

一个比较坑的点是libxml的配置问题。默认情况下,libxml2不会加载dtd

试过的只有php5.2默认开启了。还有之前一直傻乎乎的把将第二个参数忽略掉了,所以一直卡在这里。

php://filter 在xxe漏洞上的妙用

当我们读取的文件格式是php时,由于<?php …?>很像标签所以会有读取的错误

当我们使用php://filter/read=convert.base64-encode/resource=./xxe.php会将读取的代码转化为base64格式,问题引刃而解。这也是一个小技巧吧

bwapp靶机上的xxe练习

Level-1

通过抓包获得的POST数据为:

<reset><login>root</login><secret>Any bugs?</secret></reset>

通过改变<login>标签内的数据可以看到回显。

改变标签的内容

于是构造外部实体读取任意文件
读取文件

Level-2

阅读源码发现这一关禁止了xml外部实体引用,从session中获取login信息而不是从xml中获取。secret是从xml中获取有一个过滤,可以有sql注入,但暂时没有关于xxe思路。先填一个坑。

jarvisoj题目-api调用

抓包,发现传输的数据是json格式的,改变你search中的内容,响应发生变化。没有过滤。

当我们传输的是txt/xml格式的时候
响应也是xml格式

构造payload

啊哈,(o゜▽゜)o☆[BINGO!]。

和bwapp的不太一样,bwapp是直接传输后台处理后才回显,这道题直接解析传输数据就回显了。

format_list_numbered

(无)

  1. 1. 初识XXE
  2. 2. php://filter 在xxe漏洞上的妙用
  3. 3. bwapp靶机上的xxe练习
    1. 3.0.1. Level-1
    2. 3.0.2. Level-2
  • 4. jarvisoj题目-api调用
  • vertical_align_top

    Copyright © 2018 太空独角兽