[BUUCTF]pwn栏目 warmup_csaw_2016 1的题解和小疑问,欢迎讨论

0x00

首先非常感谢大家阅读我的第一篇。本文章不仅仅是题解,一些细枝末节的小问题也欢迎大家一起解答。
小问题的形式如Qx:xxxxxxx? 欢迎发现小问题并讨论~~

N1nE是本人另外一个名字,目前主要学习pwn方向,此文章以及后续别的文章,如有不当欢迎补充与纠正。

0x01 题目来源

题目来自buuctf的pwn栏目第三题warmup_csaw_2016
一道栈溢出的基础题目。

buuctf网址:https://buuoj.cn/challenges

0x02 题解

1.分析文件

第一步:file 文件名

当我们下载附件以后,在linux的命令行里输入如下命令,得知是64位且是elf可执行文件。
(Q1:其他信息尚不知有什么作用,欢迎补充)

1.png
为了方便我拖入自己的pwn文件夹之后将其重命名为wm1,此命令即“file 文件名”,即可查看文件相关信息

第二步:checksec 文件名

我们继续使用checksec看看这个文件的保护情况。
Q2:check是检查的意思,那么这里的sec是什么呢?我猜测是security
2.png
可以看出来没有什么保护

2.IDA反编译

第零步:nc

我一般一开始会先nc一下靶机,看看运行是什么样子的才放入ida,或者同时进行。
Q3:这样的行为在实战或比赛中会有什么影响吗?

第一步:拖入ida()

我们刚才已经知道此文件是64位,我们把它拖入ida64即可。

第二步:阅读main函数

按F5进行反编译。

我们可以看到这里有一个gets函数,这是一个非常不安全的函数,他会不管三七二十一读取你输入的数据。

当然这对我们是有利的。本人做栈溢出的题目基础思路便是通过该函数,注入数据使指针指向返回地址的命令并输入返回地址,运行相应的命令使得我们获得权限或者flag。

3.png
我们刚才提到,注入数据使指针指向返回地址的命令并输入返回地址。现在可以注入数据完成操作了,那么我们要返回地址到哪里呢?我们继续查看代码。
其实此处main函数给了我们提示,或者nc过去也可以运行到输出“WOW:40060D!”这样一个字符串。我们现在去看看40060D有什么。

第三步:阅读关键函数

4.png
大概意思就是只要运行这里,就可以直接把flag给我们了,那我们就可以开始写exp(exploit,攻击脚本与方案)了。

3.pwn!

第一步:注入多少数据?

我们点击main函数中gets存放输入数据的变量v5,查看其地址和空间大小。
5.png
可见其空间大小为40字节,s到r问欧阳学长得知是存放rbp地址。r就是存返回地址并进行返回。其实我突然注意到文件内部也有提示。
6.png

v5大小为0x40,s到r有0x8,也就是我们需要注入(0x40 + 0x8)字节的数据,并在最后输入地址运行我们想要运行的函数。思路清晰,我们开始写exp吧!

第二步:正式写exp

7.png
Q4:p64有关的作用欢迎补充!我对此也是有点懵懵的,这里放一个网络上的解释:
“用p64()发送数据时,是发送的字节流,也就是比特流(二进制流)。本来是01这样表示的,但是ide为了方便观察, 就转换成了\xc1\x0f\x00\x00\x00\x00\x00\x00。发送时,也是按照字节来发,所以要用"%s"来读取”

以上就是我们写好的exp脚本,接下来就是运行啦!

第三步:运行exp!

8.png
可以看到得到flag了,这题目就这样解出来了。

0x03

谢谢大家阅读我的题解,有许多不足与疑问欢迎大家跟帖讨论~

最后的最后

Q5:在写题解最后一步的时候我尝试重新连接但是遇到如下问题
9.png
不太清楚是不是因为做过一遍所以不能再做,以上五个疑问欢迎大家讨论~

下午又做了一次又可以了hhh

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值