xctf-pwn-“反应釜开关控制 & 实时数据监测 & greeting-150“

本文探讨了一次利用格式化字符串漏洞进行的复杂攻击过程,通过三次栈溢出获取shell函数地址,重点介绍了如何绕过 PIE 保护并利用 .init_array 和 .fini_array 功能实现多次任意地址写,最终实现权限提升。涉及技术包括栈溢出、格式化字符串、ELF文件、初始化代码与终止代码、恶意代码注入等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反应釜开关控制

该pwn题目逻辑较为简单。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过三次栈溢出,可以得到shell函数地址。
在这里插入图片描述
发现PIE保护没有开启,其实这里是直接可以栈溢出到shell函数的地址的,不必弄那么复杂!
在这里插入图片描述
这道题目的PIE应该是忘记开了,题目原本设计的目的是想让我们使用三次栈溢出来得到shell的。
分界线
这里我感觉应该不是这么简单的,所以我又去进行寻找资料,发现是XCTF 4th-CyberEarth里面的盲打题。意味着我们没有ELF文件,所以我们就没有办法来想这么简单的去做出来。


实时数据监测

发现什么保护都没有开启。
在这里插入图片描述
然后看一看代码。
在这里插入图片描述
关键是利用格式化字符串进行任意地址写,将key地址里面的数值进行覆盖。
在这里插入图片描述
偏移量应该是12,而key的地址为0x0804A048,需要将key的值覆盖为35795746即可。转换为发送数据为22 33 22 02。

\x22=34  		\x33=51  		\x22=34           \x02=2
18+16=34=0x22   34+17=51=0x33   51+239=290=0x122  290+224=514=0x202
数据在内存中是小端序%hhn会写入单字节
构造如下:
%18c%12$hhn%17c%13$hhn%239c%14$hhn%224c%15$hhn
也可以使用fmtstr_payload函数
payload = fmtstr_payload(12,{key_addr,35795746})

在这里插入图片描述


greeting-150

在这里插入图片描述
在这里插入图片描述
并且可以发现存在system函数。
在这里插入图片描述
这个时候我们可以先确认偏移量!
在这里插入图片描述
通过判断发现不存在栈溢出漏洞,也就是说我们只有一个格式化字符串漏洞,但是如果仅仅靠格式化字符串漏洞,可以达到一次的任意地址写,但是仅仅通过一次任意地址写,是达不到我们想要的地步,所以我们必须想办法将该格式化字符串漏洞可以多次利用!

大多数可执行文件是通过链接 libc 来进行编译的,因此 gcc 会将 glibc 初始化代码放入编译好的可执行文件和共享库中。
.init_array和 .fini_array 节(早期版本被称为 .ctors和 .dtors )中存放了指向初始化代码和终止代码的函数指针。
.init_array 函数指针会在 main() 函数调用之前触发。这就意味着,可以通过重写某个指向正确地址的指针来将控制流指向病毒或者寄生代码。
.fini_array 函数指针在 main() 函数执行完之后才被触发,在某些场景下这一点会非常有用。
例如,特定的堆溢出漏(如曾经的 http://phrack.org/issues/57/9.html )会允许攻击者在任意位置写4个字节,攻击者通常会使用一个指向 shellcode 地址的函数指针来重写.fini_array 函数指针。
对于大多数病毒或者恶意软件作者来说, .init_array 函数指针是最常被攻击的目标,因为它通常可以使得寄生代码在程序的其他部分执行之前就能够先运行。

在这里插入图片描述
此时我们利用一次任意地址写,覆盖.fini_array函数指针。然后可以进行覆盖strlen的got地址为system的plt地址。第二次main函数时就输入’/bin/sh’,调用strlen时候实际上调用的是system("/bin/sh");该函数。
在这里插入图片描述
利用该脚本可以得到权限!

### XCTF WEB进阶 Fakebook 解题报告 #### 源码分析 Fakebook 类似于社交网络平台,在此环境中存在多个功能模块,包括但不限于用户注册、登录以及个人信息管理等功能。通过查看源代码发现,该应用可能存在多种安全漏洞。 对于假想的 `fakebook` 平台而言,其核心逻辑通常围绕着用户的会话管理和数据交互展开。假设存在如下简化版 PHP 伪代码表示部分关键业务流程: ```php <?php class User { public $username; public $password; function login($input_username, $input_password){ // 存在一个潜在的安全隐患:未对输入做严格验证 if ($this->username === $input_username && md5($input_password) === $this->password){ $_SESSION['logged_in'] = true; return "Login successful"; } return "Invalid credentials"; } } ?> ``` 上述代码片段展示了用户认证过程中可能存在的安全隐患——使用弱哈希算法 MD5 对密码进行了处理[^1]。 #### 安全问题剖析 基于以上描述可以推测出几个主要攻击面: - **弱哈希函数**:MD5 已经被证明不再适合用于保护敏感信息,因为它容易受到碰撞攻击的影响。 - **缺乏输入过滤机制**:未能有效防止恶意字符进入系统内部,这可能导致 SQL 注入或其他类型的注入攻击发生。 - **不恰当的错误消息返回**:当用户名或密码错误时给出的具体提示可能会帮助攻击者缩小猜测范围。 #### 利用技巧 针对这些弱点,参赛选手可以从以下几个方面入手尝试突破并解决问题: - 尝试暴力破解或者彩虹表查找已知 MD5 值对应的原始字符串; - 测试是否存在其他形式的数据注入风险点,比如 URL 参数、POST 请求体内的字段等位置; - 探索是否有任何地方暴露出过多调试信息给外部访问者利用; 成功完成挑战后一般可以获得 flag 或者进一步的操作权限作为奖励。 #### 复现过程 为了模拟真实的渗透测试场景,建议按照以下方式构建实验环境来进行练习: 1. 构建一个类似的 Web 应用程序框架,确保其中包含了所有必要的组件和服务依赖关系; 2. 实施相应的防护措施来抵御常见的Web 攻击手段,如 XSS 和 CSRF 等; 3. 使用工具辅助自动化执行某些特定任务,例如 Hydra 可以用来实施字典攻击尝试登陆接口; 4. 记录每一步操作细节以便后续总结经验教训,并分享给社区成员共同学习进步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值