XXE漏洞的原理和利用

XXE全称为XML外部实体注入、

XML

XML是可扩展标识语言的简写,和HTML的形式很像,后来用于应用程序之间数据传输的常用格式
HTML旨在显示信息,XML旨在传输信息

XML实体

根据实体来源可定义为内部实体和外部实体。XML定义了两种类型的ENTITY,一种在XML文档中使用,另一种作为参数在DTD文件中使用,定义好的ENTITY在文档中通过“&实体名;”来使用

也就是说可以把实体当作xml的变量

xml实体
xml用法

DTD

DTD使数据格式之间按照相同的标准来传输
DTD使一种XML约束模式语言,用来解释XML文档

外部DTD文档的语法结构:

好了,知道了XML和DTD,下面写个XML的代码:

<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<note>
&xxe;
</note>

看这串代码,定义了一个外部实体,在调用的时候会显示什么?我们想到了php的伪协议。对,xml可以调用伪协议,不仅能调用php,还有java等多个语言的伪协议

参数实体可以调用其他网站的外部实体

XXE

XXE也叫XML外部实体注入,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载

  • 漏洞的产生
    对上传的xml文件没有进行过滤,导致可上传恶意XML文件

  • 漏洞的危害
    1.读取任意文件
    2.执行系统命令
    3.内网端口扫描
    最常用的就是第一个,读取任意文件,至于2,3要和其他漏洞联合使用

命令执行:
“expect://系统命令”,一般出现在ctf中

如何在网站发现XXE的漏洞
xxe的抓包
XXE的抓包如图,和直接POST username=&password=的形式不同,XXE采用xml格式传输数据,且X-Request-With:XMLRequest也有明显提示

读取文件payload:
在这里插入图片描述
在其他实体标签内调用定义的实体值,这个实体标签最好是能在页面回显的标签,比如username会回显,那就直接放在username里。那如果没有回显,那就盲注(OOB外带数据)

XXE代码审计

<?php
$dom = new DOMDocument();//创建XL对象
$dom->loadXML($xmlfileoptions:LIBXML_NOENTLIBXML_DTDLOAD);//将我们发送的字符串生成xml文档$creds = simplexml_import_dom($dom);//实例化xml文档
$username = $creds->username;//获取username
$password = $creds->password;//获取password
if($username == $USERNAME && $password == $PASSWORD){
$result = sprintf( format: "<result><code>%d</code><msg>%s</msg></result", args: 1, $username);}else{
$result = sprintf( format: "<result><code>%d</code><msg>%s</msg></result>" , args: 0,$susername);}catch(Exception.$e){
$result = sprintf( format:"<result<code>d</code><msg>%s</msg</result>" , args: 3,$e->getMlessage());}
header( string: 'Content-Type: text/html; charset=utf-8');echo $result;
?

重点就是前三句,在实例化xml文档时没有过滤

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值