BUU刷题记录(一)

buu——pwn学习

一、[第五空间2019 决赛]PWN5

在这里插入图片描述

checksec一下,32位文件,开启了nx与canary保护措施

拖入ida静态分析

在这里插入图片描述

在main函数就可以很清晰的发现,有个判断语句成立就可以获取shell,然后分析该如何使if判断成立,可以发现,要相等的是一个随机数,对于随机数一般都是覆盖成我们已知的一个数值,接着看,存在了printf(&buf)字符串漏洞,很显然已经可以利用了,计算下字符串的偏移

在这里插入图片描述
在这里插入图片描述

两种方式皆可算出偏移为10,构造%10$n,直接输入地址即可,因为在32位下,输入的就是4字节的数,刚好覆盖了随机数exp如下:
在这里插入图片描述

二、get_started_3dsctf_2016

老规矩,下载完附件,checksec一下
在这里插入图片描述

看起来没什么,ida查看一下,

在这里插入图片描述

很简单,而且溢出点也十分明显,直接get无限输入了
在这里插入图片描述

似乎还很好地存在了后门函数,flag就在眼前???当然不可能!

在这里插入图片描述

当你把exp写成这样的时候(不是写的,我写的在发现不行就给删了,懒得再写,百度上拿来的),只能在本机上才能顺利执行,在一个地方看到,说是因为远程会被过滤,把获取flag的地址过滤。所以此时只能换一种方式进行攻击,手握无限输入,不必太慌张。

有这么一个函数*int mprotect(const void start, size_t len, int prot) 用来修改内存的权限的,第一个参数是修改内存的起始地址,第二个是修改地址的长度,第三个是权限值(可读为4,可写2,可执行为1,即是rwx 7),我们就要利用这个函数,找到一块较大的内存地址,进行修改权限,然后再调用read函数对这块内存输入shellcode,最后调转执行shellcode!

在这里插入图片描述

在gdb里面输入vmmap指令可以查看地址的权限,这里我们选择可读可写的0x080ea00作为起始地址。

在这里插入图片描述

在写payload需注意,这里不用覆盖ebp,我也不知道为什么。。但是ida里面确实是这样的。最后的exp如下:

在这里插入图片描述

其中的pop_3可以通过ROPgadget查询得到,使用这个是因为要保持堆栈平衡,使得程序正常运行。我们在构建mprotect和read函数时,需要不断的返回程序,所以这里需要比平常的多出pop这个指令,用来清理我们输入栈里的三个参数,达到堆栈平衡。这个看作是一个比较特殊的返回地址,不仅可以返回控制eip执行栈上的指令,还要顺带的清理我们多输入的参数,保证esp指向的位置始终不变化

三、ciscn_2019_en_2

先checksec一下附件

在这里插入图片描述

开启了relro和nx,比较常见的保护措施。运行一下看看有什么东西

在这里插入图片描述

输入2直接无限循环了,毫无意义,输入3退出,输入1似乎会经过一些的运算还是什么,进入ida看看

在这里插入图片描述

跟运行并无太大差别,只有详细看看1的函数里面有没有什么漏洞。当看到__int16 v3,还以为可能出现整数溢出,可惜就是我想多了

在这里插入图片描述

在这里插入图片描述

这里有一个无限输入,可以很轻易覆盖到返回地址,由于附件里面没有后门函数,很明显的rop了

在这里插入图片描述

因为要真正能到退栈进行地址跳转,就要先把整个函数的程序流执行完毕才能发生退栈。这里绕过就是因为strlen()遇到’\0’就会停止,利用这点可以直接退出循环,在这题里面还有个需要注意的点就是这里的代码

在这里插入图片描述

这里还有两个输出,需要接收了,否则会影响got表的泄露,exp如下:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShouCheng3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值