羊城杯2023pwn
时间: 2025-06-03 11:59:42 浏览: 18
### 羊城杯 2023 PWN 比赛解题思路
#### 查询与修改功能的利用
羊城杯 2023 的 `array_index_bank` 题目提供了两个主要的功能:查询和更改。这些功能允许用户通过指定索引来操作数组中的数据[^4]。然而,题目并未严格限制输入的合法性,特别是对于索引值的范围未作充分校验。
#### 负数索引漏洞
值得注意的是,该题目允许索引为负数的情况发生。当程序接收到负数作为索引时,可能会访问到超出预期内存区域的数据。这种行为可能导致信息泄露或者控制流劫持等问题。
#### 利用 read_long 函数的信息泄漏
在调用查询功能前,程序内部会先执行一次 `read_long` 函数的操作。此过程涉及将返回地址以及基址指针(RBP)压入堆栈的动作。因此,在查询过程中能够间接获取当前运行环境下的堆栈位置及相关代码段的位置信息。
#### 十六进制计算细节解释
关于为何会出现特定数值转换现象,比如 `0x4000_0000_0000_0007 * 8 = 0x38` 这样的情况,则是因为乘法运算产生的高位溢出被截断所致。具体而言,由于计算机采用固定宽度表示整型变量(此处假设为64位),故而超过其容量部分会被丢弃[^3]。
#### 综合攻击策略
基于上述分析,一种可能的解决方案如下所示:
1. **探测并定位关键地址**
使用负数索引读取敏感信息来确定目标进程内的布局状态,例如 libc 库加载偏移量等。
2. **构建有效载荷**
结合已知条件精心设计 payload 数据包,旨在覆盖某些重要结构体成员字段从而实现任意写权限等功能扩展目的。
3. **触发远程命令执行或其他危害后果**
当成功篡改了必要的配置参数之后便可以尝试进一步操控受害主机完成恶意指令下达等工作流程。
以下是模拟如何利用 Python 编写的脚本片段用于测试场景下验证概念可行性:
```python
from pwn import *
context.log_level='debug'
# 建立连接对象实例化
conn = remote('challenge-host', port_number)
def send_payload(index, value):
conn.recvuntil(b'Your choice:')
conn.sendline(b'2') # 修改选项编号对应实际题目设定调整即可
conn.recvuntil(b'Index:')
conn.sendline(str(index).encode())
conn.recvuntil(b'Value:')
conn.sendline(str(value).encode())
# 测试发送非法索引请求查看反馈结果是否符合预期推测逻辑路径走向等等...
send_payload(-1, 'A'*8)
conn.interactive()
```
以上仅为理论探讨性质的内容概述仅供参考学习交流之用途,请勿应用于任何未经授权许可的实际网络环境中!
阅读全文
相关推荐











