BugkuCTF练习平台pwn3(read_note)的writeup

本文详细介绍了BugkuCTF平台pwn3(read_note)挑战的解决方案,涉及栈溢出漏洞、如何绕过NX、Canary、PIE和ASLR等保护机制,以及exploit编写过程。通过四次执行,逐步泄露信息,最终获取shell。
摘要由CSDN通过智能技术生成

在Bugku的pwn题中,这道题分值最高,也是难度最大的一道。难点在于,第一要读懂题目找出漏洞,第二是要绕过各种保护机制,第三是exp的编写调试。看一眼程序的保护机制,发现除了RELRO所有保护全开,还是有点头疼的,毕竟我刚开始学pwn没几天,还没有做过PIE和Canary的题目,所以调试还是花了不少时间的。

首先分析程序,重要部分如下所示。一开始会让你输入一个路径,不存在的话就会报错退出,然后打印出文件内容;以上均可以忽略,没有任何用处。然后分别输入note的长度和内容,输入内容的长度取决于之前的note长度;如果实际输入的长度不是624,则再输入一遍,此时输入内容的长度变为0x270(624)。可以发现,v4的长度为0x258(600),而输入的长度可以任意控制,因此存在栈溢出。

  puts("write some note:");
  puts("  please input the note len:");
  *(_DWORD *)nbytes = 0;
  __isoc99_scanf("%d", nbytes);
  puts("please input the note:");
  read(0, &v4, *(unsigned int *)nbytes);
  puts("the note is: ");
  puts(&v4);
  if ( strlen(&v4) != 624 )
  {
   
    puts("error: the note len must be  624");
    puts("  so please input note(len is 624)");
    read(0, &v4, 0x270uLL);
  }
  return __readfsqword(0x28u) ^ v5
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值