pwn入门刷题记录(一)
ctfshow-pwn01
直接nc连接后即可获得flag(好吧,我也不知道为什么会如此……)
ctfshow-pwn02
将stack文件下载后拖入pwn机
file命令查看stack是32位的文件
checksec命令执行查看保护机制:栈不可执行(canary)
然后将文件,拖入IDA进行静态分析,按F5进入主函数
setvbuf(貌似是定义输入输出流?好像不用管它)
其他函数都很好懂 进入pwnme函数看一下
(1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。
ebp决定他有9个字节,但其实可以输入更多的字节,那就造成了栈溢出,想到ret2text
接下来要计算填充数据
IDA观察可得s有9个字节
接下来我们来找找system
的地址
shift+F12看返回地址
找到/bin/sh
双击进入
CTRL+X交叉引用(这里应该会有弹窗,直接选择OK就行)
直接F5进去查看函数
按TAB键返回,显现地址后并找到地址
我们在pwn机中用cyclic来进行一番测试,首先cyclic 200
生成一个随机字符串,然后gdb调试程序
然后输入r,粘贴前面生成的字符串,发现程序报错
EIP本该执行一个地址,但这个地址是随机输入的就报错了
计算eip的偏移量
编写exp文件
1 | from pwn import* |
执行脚本后,cat flag
获得flag
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 TYsec!