-
-
[原创]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来实现并发和并行。其中关于什么是并发,什么是并行,下面的图解释的很好
两个队列,一台机器,那么就是并发。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏记录
参与人
雪币
留言
时间
一笑人间万事
为你点赞~
2022-7-27 01:47
心游尘世外
为你点赞~
2022-7-26 23:41
飘零丶
为你点赞~
2022-7-17 03:23
skytar
为你点赞~
2019-6-3 15:55
赞赏
他的文章
- [原创]kanxuectf2019 第七题 8176
- [原创]kanxuectf2019 第六题 2918
- [原创]kanxuectf2019 第五题 3009
- [原创]kanxuectf2019 第三题 6627
- [原创]kanxuectf2019 第二题 9192
看原图
赞赏
雪币:
留言: