首页
社区
课程
招聘
[翻译]The Blue Frost安全挑战题解
发表于: 2017-9-17 23:07 3717

[翻译]The Blue Frost安全挑战题解

2017-9-17 23:07
3717

附件为题目以及作者的解题过程。


在平时博客里发的软件动态之外,我这次要聊一聊Blue Frost Security的娱乐挑战题的解题思路。在82号,Blue Frost Secucrity发布了一篇关于提供位于阿根廷的Ekoparty安全会议门票的博文。为了获得门票(还有免费的威士忌),你需要完成一系列的exploit挑战题并发送解题思路给他们。他们提供了一个64位,有着简单堆栈缓冲区溢出的二进制PE文件,目标是在Windows7,Windows8.1Windows10中成功执行calc.exe文件。同时还有额外挑战——在三个系统中都能成功利用函数执行,或是在利用后进一步令服务处于可用状态。

通过我会错过这些消息,不过我的同事Abdul-Aziz Hariri私下激起了我解题的欲望。最终我是第四个成功解题的人,尽管我没有进一步分析,但下面是我解题中的一些思路。

通常做这些东西对我来说是十分有趣的事儿,我之前玩过战争游戏并参加过CTF,但那是一段时间前的事了,因此做的时候能够回忆起不少美好的记忆。当你看到二进制文件时,会感到这是个明显的缓冲溢出题,但需要仔细查看整个代码才能成功的解出它。

在接收到新的连接后,就会读取最大4096字节的数据储存到栈的缓存区中。

尽管调用的 recv函数没有返回错误,但它仍然调用了一个用于接受数字字节和对象缓冲区的函数。

这个函数内置了Hello字符串的比较,然而这里有一个小问题。调用的strncmp长度是Hello加上空白终结符。我们输入的字节长度并没有真正的进行检查,也就是说只要我们在最初调用的recv中发送Hello以及空白符后,还可以在栈中最多存放4090任意字节的数据。

一旦我们通过字符串对比的检查,程序流就会在进入下一个新函数前返回到主函数中。

这个函数先读取客户端发来地四个字节,如果这四个字节有错误或少于四个字节,那么就会给出一个错误路径并提前退出函数。

当我们执行到这里的时候,剩下的两个字节会以无符号的16位整数进行处理,这些整数会分配到一个尽可能读取字节数的缓冲区中。memcpy函数将整个缓冲区储存在栈中,再清空堆缓冲区。

如果我们观察写入的栈缓存区,我们可以发现它的缓存是256字节。

尽管我们可以对栈进行写的操作,但在溢出之前还有一个cookie栈保护,因此我们需要进一步研究如何绕过这一保护机制。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 1228
活跃值: (1076)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
虽然看不懂阁下在说什么,但是我已经在路上了,一起努力
2017-9-17 23:13
0
游客
登录 | 注册 方可回帖
返回
//