IP地址划XXE注入

极客

当IP地址撞上XXE注入:我的网络安全踩坑日记,哎哟喂!

哎,兄弟们,姐妹们,今天咱们不聊那些高大上的云安全,也不扯那些玄乎的AI攻防,咱就聊聊我最近在挖洞时碰到的一个IP地址XXE注入相结合的奇葩案例,那叫一个“山重水复疑无路,柳暗花明又一村”啊!说实话,我这会儿敲键盘的手还有点抖,但那种从绝望到狂喜的过山车体验,不吐不快!

话说那天下午,我正百无聊赖地测试一个目标站点的资产收集,看着那一堆密密麻麻的IP地址列表,脑瓜子嗡嗡的,按理说,常规操作就是扫端口、测弱口令、翻目录,枯燥得跟嚼蜡一样,可谁能想到,命运的大锤就这么悄无声息地抡了过来。

我注意到一个内网IP段(192.168.x.x)的资产,它在公网映射的IP地址上跑着一个看似人畜无害的“IP信誉查询”功能,界面简洁得能当壁纸,就一个输入框,让你提交一个IP去查归属地,我心里寻思着,这玩意儿又不是搜索框,总不至于整出啥SQL注入吧?但我这人就是手贱,非得试试。

我随手提交了一个正常的IP,比如8.8.8,响应正常,返回了“美国 加利福尼亚”,嗯,没毛病,接着我又试了试带上引号,结果服务端直接500了,有戏?我心里咯噔一下,但接下来无论我怎么构造SQLpayload,它都像个死猪一样,除了报错就是报错。

就在我准备放弃,骂骂咧咧准备关掉Burp Suite去撸串的时候,眼角余光扫到了HTTP请求包头里的Content-Type字段:application/x-www-form-urlencoded,等等!我再往下看,响应头里居然还有一句X-Powered-By: PHP/7.2,PHP?IP查询?这俩词儿连在一起,突然让我想起了一个古老的“老朋友”——XXE注入

我的天呐!我真是蠢到家了!一直在这跟SQL注入较劲,却忘了XML解析这茬儿,很多老旧的PHP程序,在处理IP地址信息时,如果用了simplexml_load_string之类的函数,并且没禁用外部实体,那简直就是在洞房花烛夜把窗户纸捅破了——通透了

我深吸一口气,把请求包里的参数从ip=8.8.8.8改成了ip=<?xml version="1.0"?><!DOCTYPE root [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><root>&xxe;</root>,为了绕过它对IP格式的校验(毕竟这参数名是ip,估摸着后端也许有正则),我甚至试了把XML内容做了一遍URL编码塞进去。

结果你猜怎么着?响应包里的“IP归属地”那一栏,赫然显示着:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin/sh

那一刻,我的血压直接顶到天灵盖!XXE注入!居然真的被我在这IP地址功能点里挖出来了!那个感觉,就像是你在一堆沙子里找金子,找了半天满手是屎,结果一抬头,金子就在你脸上糊着!

这也难怪,很多人做测试时,一看到“IP”、“域名”这种就默认是网络层的东西,下意识忽略了应用层的XML解析漏洞,这简直是“灯下黑”的完美演绎啊!IP地址在这里就是个背锅侠,真正的内鬼是在后端处理XML的解析器。

后来我顺着这个XXE注入,不仅读了/etc/passwd,还尝试读了/etc/hosts,瞅了眼内网拓扑,虽然因为PHP配置原因(可能禁用了expect扩展),没法直接RCE,但这一个IP地址引发的血案,够我吹一整年的牛了。

所以说啊,搞安全测试真不能有思维定势,别老盯着参数名看,得看数据流。IP地址只是个载体,如果后端把数据包装成XML交给解析器,那么不管你是IP还是MAC,统统都是肉鸡!

哎,说多了都是泪,这破站点的IP地址查询功能最终栽在了XXE注入上,也算功德圆满,通过这次经历,我是真真切切感受到,IP地址XXE注入这俩看似八竿子打不着的词,凑一块儿就能产生奇妙的化学反应,各位看官,以后测IP查询功能时,可长点心眼儿吧!

IP地址划XXE注入


学习网络安全可以加QQ:3363178105

文章版权声明:除非注明,否则均为咸鱼-即刻攻防原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码