XXE(XML External Entity Injection)

发布于 2022-03-16  34 次阅读


XXE解释

XXE:XML外部实体注入(被各种后端脚本调用)

=>XML:(存数据不会做任何事情)(像HTML|传输数据|无预定义)

​ 特点:1. XML仅仅是纯文本文件,他不会做任何事情。

​ 2. 可以自己发明标签(允许自己定义的标签和文本结构)

=>外部实体()

=>注入:用户输入的数据被当作代码执行

预定义:预先定义好的东西

​ var_dump() 查看数据类型

​ eval() 可以执行命令

​ echo 它可以输出

XML:

<?xml version="1.0”?>

DTD(文档类型定义):通过特殊的命令去其他文件中读取数据,

XML

mysqli_connect()

mysqli_query()

mysqli_close()

引用(1.txt) 包含(include)处理代码冗余

XXE常见函数

simplexml_load_string()

simplexml_load_file()

危害:

XXE可以通过DTD去读取、访问其他文件或者网站

注入步骤

XSS平台:

​ 将XSS注入到目标站点--->有人访问后把数据传到平台--->记录下来

XXE:请求一个自己搭建的php文件,其他的文件。(将想要获取的数据带出来)

​ php文件记录请求的传参内容(记录文件)

file:/// 正常情况下,网站不应该使用的协议

PHP伪协议(php内部协议)

  1. 看到页面莫名传递、返回XML代码可以试试
  2. 代码审计【主流】

代码审计

  1. 静态审计(纯看)
  2. 动态审计(网站运行起来,然后通过一些特殊手法,去追踪具体的代码流程)
  3. 小技巧:依靠静态看代码,然后不用动态调试软件,直接修改源码进行动态调试

静态:

  1. 全文通读 ☆☆☆☆☆
  2. 危险函数定位 eval() mysqli_query()

靶场实操

对CMS代码审计

使用Seay辅助审计,对可能出现问题的函数进行搜索

image-20220308220505530
image-20220308220541811

先观察第一个出现该函数的位置

image-20220308220605998
image-20220308220858656

发现这个HTTP_RAW_POST_DATA 也是获取POST传参信息的

在本地将CMS搭建起来

image-20220308221452831
image-20220308221520757
image-20220308221855986

在这里可以看到怀疑点的路径

image-20220308222045798

在下面加上一个返回phpinfo的代码,打开这个页面看看

image-20220308222212920

发现生效了,说明代码执行到了这一步

尝试输出HTTP_RAW_POST_DATA

$GLOBALS['HTTP_RAW_POST_DATA'] =>获取POST原始数据

image-20220314082832518

对这个页面进行抓包,把传参方式修改为POST,并传一些参数

image-20220314083012155
image-20220314083027787

页面将我传递的参数输出了

这里有一点问题,直接在线上测试

https://etrh8207.ia.aqlab.cn/api/notify.php对这个页面进行抓包改包
image-20220314095518635

将攻击语句传入

image-20220314095751688

发包查看https://5aeg8017.ia.aqlab.cn/3.txt 的到数据库链接

PD9waHAKZXJyb3JfcmVwb3J0aW5nKEVfQUxMIF4gRV9OT1RJQ0UpOyAKaGVhZGVyKCJjb250ZW50LXR5cGU6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiKTsKc2Vzc2lvbl9zdGFydCgpOwokY29ubiA9IG15c3FsaV9jb25uZWN0KCIxOTIuMTY4LjAuMTAiLCJ4eGUiLCAidGVpd28hOCM3RVJlMURQQyIsICJzY21zIik7Cm15c3FsaV9xdWVyeSgkY29ubiwnc2V0IG5hbWVzIHV0ZjgnKTsKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgiUFJDIik7CmlmICghJGNvbm4pIHsKICAgIGRpZSgi5pWw5o2u5bqT6L e5o6l5aSx6LSlOiAiIC4gbXlzcWxpX2Nvbm5lY3RfZXJyb3IoKSk7Cn0KJGZ1bmN0aW9uZmlsZT1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSkuIi9kYXRhL2Z1bmN0aW9uLmJhcyI7CiRkYXRhZmlsZT0iZGF0YS9kYXRhLmJhcyI7CiRhamF4ZmlsZT0iZGF0YS9hamF4LmJhcyI7CiRhcGlmaWxlPSJkYXRhL2FwaS5iYXMiOwo/Pg==
<?php
error_reporting(E_ALL ^ E_NOTICE); 
header("content-type:text/html;charset=utf-8");
session_start();
$conn = mysqli_connect("192.168.0.10","xxe", "teiwo!8#7ERe1DPC", "scms");
mysqli_query($conn,'set names utf8');
date_default_timezone_set("PRC");
if (!$conn) {
    die("数据库6L {š:—–’ǢҔ耈€¸µåÍű¥}½¹¹•Ñ}•ÉɽÈ&nbsp;¤¤ì)ô(‘™Õ¹Ñ¥½¹™¥±”õ‘¥É¹…µ”&nbsp;‘}MIYIl‰M
I%AQ}%195‰t¤¸ˆ½‘…Ñ„½™Õ¹Ñ¥½¸¹‰…̈ì(‘‘…Ñ…™¥±”ô‰‘…Ñ„½‘…Ñ„¹‰…̈ì(‘…©…ᙥ±”ô‰‘…Ñ„½…©…้…̈ì(‘…Á¥™¥±”ô‰‘…Ñ„½…Á¤¹‰…̈ì(üø=

登录数据库

image-20220314101240698
image-20220314101558126

得到flag

漏洞修复

修复XXE:

  • libxml_disable_entity_loader(ture) PHP的禁止加载XML实体
  • 过滤SYSTEM关键字

太陽のように輝く