XXE读取文件 Geek10th

点开网站:
XXE读取文件 Geek10th_第1张图片
抓包,修改属性:
XXE读取文件 Geek10th_第2张图片
返回了这么一串:
XXE读取文件 Geek10th_第3张图片
由于是$name==md5(),由弱类型比较和md5想到了md5碰撞,由于PHP的弱比较造成它会将oe开头的md5(字符)解析成科学计数法(数字),于是我们开始爆破。
XXE读取文件 Geek10th_第4张图片
值得注意的是,我们要将引号也包括进去,因为在json编码中,"0"为字符串,0为数字。
XXE读取文件 Geek10th_第5张图片
爆破完成,看到了
XXE读取文件 Geek10th_第6张图片
知道了文件名和位置之后,加上提示的xxe,接下来就是重头戏了。

在参考了大佬的文章之后,我对XXE有了一点了解,这里我们使用的是最简单的一种。
XXE读取文件 Geek10th_第7张图片
关键在这里,我们看到,实体被当作了一个变量来调用,我对&xxe;xxe的理解是,它相当于函数的调用,而上面相当于函数的定义。于是,我们可以改变“函数”内容来实现对于文件的操作。
XXE读取文件 Geek10th_第8张图片
这里,我们不再是xxe替换成test,而是将file:///c:/test.dtd当作系统命令执行,以此来读取系统中的文件。

在这题里,我只要把这里的file协议替换一下就行了,这里,我们使用php伪协议来读取文件内容。
XXE读取文件 Geek10th_第9张图片
将base64解码就是flag。




第一次认识了XXE,对json也有了一些了解,学到很多新知识。

你可能感兴趣的:(初窥CTF)