DASCTF X CBCTF 2022九月挑战赛 cyberprinter wp

题目分析

  1. 第一个read可溢出8字节,通过gdb调试buf+0x20的位置是_IO_2_1_stderr_的地址所以填充满泄露即可,所以libc_base是白给的

  2. 字符串中不能包含if中的字符(若发送地址也不能包含)

  3. 格式化字符漏洞
    在这里插入图片描述

思路

  • 通过格式化字符串漏洞改写libc中strlen的got表地址为one_gadget

  • 程序执行完printf(s),接着就执行puts(),puts()会调用strlen函数
    puts.c:
    在这里插入图片描述

libc->puts:
在这里插入图片描述

puts函数调用自己的got表进行strlen函数定位(libc没有开启got不可写):

在这里插入图片描述

注:在非伪代码下双击追踪,否则会直接转跳到strlen函数

所以只需要更改libc中strlen的got表为og便可以获取shell

过程

注:libc里面的got表不能通过 libc.got[‘puts’]获取偏移需要自己收到找地址,我也不知道为啥不能用,反正这样写就会报错

  1. 将rbp指向 存有_IO_2_1_stderr_的指针,操作如下
  2. 通过第二个框中的链,将0x7ffc0e22b6a0改写成0x7ffc0e22b650
    0x7ffc0e22b670 —▸ 0x7ffc0e22b690 —▸ 0x7ffc0e22b6a0 ◂— 0x0
    在这里插入图片描述

有概率成功,成功后结构如下:

在这里插入图片描述

  1. 此时我们就可以通过rbp的位置将_IO_2_1_stderr_改写为strlen_got,结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值