[NCTF2019]True XML cookbook

给我一个接口!

JUST4FUN

解题流程

登录功能存在XXE,回显点为username。验证

<!DOCTYPE foo [
    <!ELEMENT foo ANY >
    <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<user><username>&xxe;</username><password>admin</password></user>

这里也可以用伪协议读doLogin.php,但没什么东西

瞄下WP,知道这道题需要用XXE探测内网主机,flag就在存活的主机上。

问题来了,探测内网主机,需要知道本机的网络地址。现在可以用XXE读取文件,那么什么文件中存储着IP的信息呢?

/etc/hosts这里存储着主机名和IP的映射关系,如果有内网主机的映射的话是可能知道的,但这里并没有

直接读网卡配置文件呢?首先看下系统的版本,这里读取/etc/issue,知道了系统版本为Debian GNU/Linux 10。通过搜索,可以知道该版本的网卡配置文件为/etc/network/interfaces

读取失败,可能是不存在该文件,也可能是权限不够。

再看下WP,这里就有点不同了。很多WP中都是读/proc/net/arp这个文件,这里面记录了网卡的ARP信息,通过里面的IP地址得到主机网段的地址。不过,可能是现在这道题改了,这个文件读出的内容为

IP address       HW type     Flags       HW address            Mask     Device
10.128.253.12    0x1         0x2         ee:ee:ee:ee:ee:ee     *        eth0
169.254.1.1      0x1         0x2         ee:ee:ee:ee:ee:ee     *        eth0

首先是这两个IP的MAC都是无效的。虽然10.128.253.12是一个内网地址,但是10.128.253.0/24这个网段并没有内容。

还有个值得一提的点,169.254.1.1这也是个内网地址(真·第一次知道)。

169.254.0.0/16为私有地址,但是较为特殊,称为Local Link Address(LLA)。
主机的网卡配置为DHCP,但是在网络中找不到DHCP服务器或者被BAN,那么系统会为自己分配一个169.254.0.0/16地址。

/proc/net目录包含的文件可以提供网络堆栈的各种统计信息和配置详情,其中/proc/net/fib_trie提供了关于内核IP路由表的信息。

找到了内网网段10.244.80.0/24,后面就是正常操作了。

爆破探测主机

get flag

补充

下面交给ChatGPT

/proc/net/fib_trie是什么?

/proc/net/fib_trie 文件是 Linux 系统的一部分,它提供了有关系统的路由表的信息。具体来说,该文件表示的是内核中的前缀树(trie)路由表的状态。这是一种数据结构,用于存储和查找 IP 路由。

在这个上下文中,FIB 表示 "Forwarding Information Base"。这是网络设备用于决定如何将数据包转发到目标地址的信息集。实际上,FIB 是路由器从其路由表(包含了从路由器到所有可能目标的所有已知路径)中派生出来的。当数据包到达路由器时,路由器会查看 FIB 来决定如何转发数据包。

fib_trie文件以一种特殊的、树状的格式展示这些信息,每一行代表树的一个节点。这个文件可能对于网络研究人员或者进行深度诊断的系统管理员有用,但它的格式对于常规的系统使用或者网络管理可能有些复杂。

它和/proc/net/route文件有什么区别?

/proc/net/fib_trie/proc/net/route 都是 Linux 系统中的文件,都用于表示系统的路由信息,但它们的主要区别在于呈现这些信息的方式。

/proc/net/route 文件以表格形式呈现路由信息。每一行代表一个路由条目,包括目标网络、网关、标志、引用计数、使用情况、度量值(metric)等信息。这些信息都是以十六进制格式显示的,需要进行转换才能理解。

/proc/net/fib_trie 文件则提供了一种更详细的查看路由信息的方式。它显示了内核路由表的前缀树(trie)数据结构,这是一种专门用于高效存储和检索 IP 地址信息的数据结构。文件的每一行代表前缀树的一个节点。在树中,每个 IP 地址都是从根节点开始的一条路径,这样可以使 IP 地址的查找和匹配更快速、高效。