首页
社区
课程
招聘
[原创]kanxuectf2019 第八题
发表于: 2019-3-20 16:52 3489

[原创]kanxuectf2019 第八题

2019-3-20 16:52
3489

go语言的pwn
注:由于我本地使用的时kali2.0,调试时无法加载其官方给的libc(2.27)。因此,调试界面相关信息可能与实际环境不符,一切以最终exp所示偏移为主。

首先逆向,我使用golang_loader_assist对程序符号进行恢复。具体使用方法可以参考如下链接:
程序大体流程框架如下所示:
其中main_Game为主体功能函数。
首先,程序模拟实现了一个埋有宝藏的地图(main_randtreasure)

宝藏点为:(0,5),(5,0),(5,5),(random_x,random_y),且random_x,random_y不能等于当前坐标cur_x,cur_y
然后程序会新启一个线程(通过runtime_newproc),用来对用户当前游戏进程进行监控,如果当前用户已经走到埋有随机宝藏(random_x,random_y)的周围,则会重新计算新的宝藏点。
新线程的实例函数如下:
而我们通过对游戏进行分析,只有当我们移动坐标找到了随机的宝藏时,才会触发一次栈溢出(ps:找到其他几个固定的宝藏也能溢出,但溢出的地方为程序map的一段空间,类似于tcache,貌似是go语言自己的内存管理机制)
因此,一个主要问题就是如何找到该随机宝藏。
通过查看go语言的相关文档,了解到go语言是通过goroutine来实现并发和并行。其中关于什么是并发,什么是并行,下面的图解释的很好
两个队列,一台机器,那么就是并发。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//