Z1d10tのBlog

A note for myself,have fun!

  1. 1. 碎碎念:
  2. 2. 解题:

[NCTF2019]True XML cookbook.txt

碎碎念:

这道题考察了xml和xxe,其实攻击手段手段是xxe,一开始做这道题一直没复现出来,bp爆破模块一直不动,之后用了python脚本也不行,就放弃了,第二天中午在试了一次,终于成功了,真玄学。做之前也是去补了一下xxe的知识,真不错。

解题:

进入题目是一个登录框,发现我们的登录名会显示在界面上

img

之前buu有道题也是和这道题目一样的ui,直接套用上道题目的解题答案,发现肯定不行。

img

首先来看一下这个payload构成

第一行<?xml version="1.0" encoding="UTF-8" ?>这一行表示了这是xml的文档显示了版本信息和编码格式

最重要的一部分:

1
2
<!DOCTYPE username [
<!ENTITY aaa SYSTEM "file:///flag"> ]>

这是DTD,用来规范xml的文档格式 username为根元素 每个xml文档都要有一个根元素,并且有且只有一个,然后aaa是我们定义的一个实体,并且这里SYSTEM表示是外部实体,这也就是为什么xxe叫做外部实体注入,我们可以通过调用外部实体来达到我们预期的一个攻击手段。其实这里把他理解为是一个变量就可以之后是aaa这个实体的值,这里可以看到是一个file协议,没错xxe可以与伪协议一起搭配使用去恶意读一些文件内容。 具体可以看这里:https://xz.aliyun.com/t/3357#toc-0 总结的很到位

然后通过 &实体名称; 的方式来调用这个我们创建的实体。

然后之后就不懂了 ,慢慢的去看大佬的wp去学习

之后可以通过filter伪协议去读 index.php的内容但是没有什么用

然后这道题的思路是通过xxe去探测内网 参考:https://blog.spoock.com/2019/10/08/proc/

https://www.cnblogs.com/secutity-zbk/p/14789043.html

  • /etc/hosts 储存域名解析的缓存
  • /etc/passwd 用户密码
  • /proc/net/arp 地址解析的内核ARP表的信息
  • /proc/net/fib_trie 路由缓存

扫一下域名解析缓存

img

扫一下用户登录状态密码啥的

img

发现都可以扫到

去扫解析的地址和路由缓存:

img

img

发现可疑ip,直接进行http协议读ip

img

发现不行,看了大佬的wp是因为c段ip不正确,也就是129这里不对,好像是计算机网络的知识,这里就不深究了,但是我们这里直接用bp的爆破模块就行,就是这里一开始没做出来,好像是题目问题,第二天终于做出来了

当网段正确时,拿到flag。

img

本文最后更新于 天前,文中所描述的信息可能已发生改变