今日流水账:
- 上午:
- 还是在看相关源码,搞懂了 unix socket 和 inet soeket 的区别,并且终于搞懂了 SCM_RIGHTS 一些源码的细节,太不容易了~~~,但还是感觉效率不高,下午的把效率提起来了
- 下午:
- 搞了一下午,实锤了就是网上的 exp 有问题,艹了,主要就是他的 io_uring 写的代码有问题(:也有可能是已经过了两年了,liburing 库发生了一些变化。总的来说就是网上的 exp 自己封装了一些 io_uring 相关的东西,然后出现了一些问题,反正就是这个搞了我很久,最后还是得自己去分析调试,然后我去看了下 liburing 库的一些源码,发现其对漏洞利用根本没啥影响,所以直接用 liburing 库函数就行了,最后成功触发了漏洞:
然后编译了一个没有设置 KASAN 选项的内核进行测试,成功完成本地提取:
晚上在做最后的总结,这个漏洞就是完全复现完成了(:
- 搞了一下午,实锤了就是网上的 exp 有问题,艹了,主要就是他的 io_uring 写的代码有问题(:也有可能是已经过了两年了,liburing 库发生了一些变化。总的来说就是网上的 exp 自己封装了一些 io_uring 相关的东西,然后出现了一些问题,反正就是这个搞了我很久,最后还是得自己去分析调试,然后我去看了下 liburing 库的一些源码,发现其对漏洞利用根本没啥影响,所以直接用 liburing 库函数就行了,最后成功触发了漏洞:
晚上:
- 把之前那个洞搞完了,没写分析博客,就简单记录了下(:不想写了,笔记有点瑕疵,也不想公开了。这个洞后面还得看看,还有一些细节(:不是漏洞的细节,而是 io_uring 子系统部分源码上的细节
- 然后在找其他有价值,值得复现的漏洞
明日安排:
- 趁热打铁,继续复现一些 io_uring 相关的漏洞,希望能够对 io_uring 子系统有一个比较深的理解
总结:小小总结一下
复现这个漏洞踩了好多坑,花费了很多时间,但是学到了很多,而且很多问题都是自己摸索着解决的,虽然花费了很多时间,但是还不错,当成功完成提权时,那种自豪感真的…,总的来说,自己学到了如下知识:
- 对套接字有了更加清晰的认识,分析了部分源码,对 socket 这个函数总是有了一定的认识
- 分析了部分 io_uring 源码,对这个子系统也逐渐熟悉起来了
- 分析了 unix_gc 的源码,也算搞懂了 unix_gc 的原理(:其实挺简单的,但是开始把自己绕进去了,主要还是基础太差了
- 对 DirtyCred 漏洞利用方式有了更加清晰的理解(:发现自己之前的一些理解都是存在错误的,悲
- 对 file 的引用计数、打开文件表、内存 inode 表有个更加清晰的认识
- 探索了一些环境相关的问题,希望后面再遇到,能够快速解决这些环境相关的问题
想起来最近我的一个同学问我的一个问题。
- 我同学:你每天花费多少时间学习
我:基本没咋学,很多时间都是在反复配环境,配环境的时间远远大于真正学习知识的时间
我同学:配环境不也是学习的过程吗?
现在想想,是啊,配环境不也是学习的过程吗?反思从前的自己:是否之前自己是真的太浮躁了,每次复现漏洞都想找现成的环境,不愿意自己去探索,总想着赶紧完成复现,然后复现下一个漏洞,但是,正如之前一个大佬给我说的:单纯复现漏洞是没有任何意义的,你要从其中学习到经验。
所以像这次复现漏洞,由于大佬提供的环境存在一定的问题,而之前都是直接用大佬的环境,从而导致自己不知所措,最后花费了大量的时间去配环境,所以配环境其实也是一个学习的过程,这次你花费了大量的时间,等到下次,一切都会柳暗花明的。而且后面的时间是越来越宝贵的,如果自己在大一大二就养成好的习惯,自己去探索,也许就不会像现在这么狼狈,当然还好,还有时间,加油
在本次复现漏洞过程中,学习到了新的知识,也纠正了自己过去对一些技术的错误认识,总的来说是一次不错的体验😀😀😀
先提前发了,后面出去happy了