长亭实习(二)-linux本地提权漏洞复现与检测思路
这周主要在完善长亭的牧云漏洞库,而我做的是linux本地提权漏洞的复现。但本地提权漏洞并不像其他web漏洞一样,可以直接pull一个docker镜像就ok了,提权的洞复杂在于配置环境,基本都是在虚拟机里复现,一个镜像的大小基本都是上G的,镜像安装时间又长,每个洞要求的kernnel版本号又不同,依赖的库也不一样。环境装好了,漏洞的exp还不一定能打成功,我太难了【\捂脸】。
所以这周各种踩坑之后,将我复现漏洞的一些经验写下来,或许对大家复现本地提权漏洞有些帮助, 以及在实战中确实可以拿着直接用的exp。
首先分享一下我复现成功的本地提取漏洞以及截图,我花费了大量的时间来做这件事,这些都是质量较高且实际可用的。
CVE-2015-1328
存在于Ubuntu 12.04、14.04、14.10、15.04版本中
我复现该漏洞所使用镜像为 Ubuntu 12.04.5 LTS (GNU/Linux 3.13.0-32-generic x86_64)
![](https://zgao.top//wp-content/uploads/2020/05/upload_d3d27487da3e3fd0dc4ccd8ce5f77bd5.png)
exp:
https://github.com/zgao264/linux-kernel-exploits/tree/master/2015/CVE-2015-1328
CVE-2016-5195(脏牛)
Linux Kernel >2.6.22
每个linux发行版修复的版本不同
![](https://zgao.top//wp-content/uploads/2020/05/upload_1c8a83a720062649bd5feeb9be5b3e23.png)
exp:
https://github.com/FireFart/dirtycow
CVE-2017-16995
Linux kernel versions 4.4 ~ 4.14
Ubuntu版本:16.04.01~ 16.04.04
![](https://zgao.top//wp-content/uploads/2020/05/upload_8ff9fb08156aeb1fb6eada673c1a90c0.png)
exp:
https://github.com/RealBearcat/CVE-2017-16995
CVE-2018-18955
Linux kernel 4.15.x through 4.19.x before 4.19.2
![](https://zgao.top//wp-content/uploads/2020/05/upload_5f3d7e9f0b05458ce2b01dbd12d38015.png)
sudo apt-get install uidmap
exp:
https://github.com/bcoles/kernel-exploits/tree/master/CVE-2018-18955
CVE-2018-1000001(glibc)
glibc <= 2.26
复现所使用镜像为 Ubuntu 16.04.3 LTS
![](https://zgao.top//wp-content/uploads/2020/05/upload_985c1b79a340ad9e5800e86e39bdd4a7.png)
exp:
https://github.com/0x00-0x00/CVE-2018-1000001
CVE-2019-13272
Linux Kernel 4.10 < 5.1.17
该漏洞依赖桌面环境 (略显鸡肋)
![](https://zgao.top//wp-content/uploads/2020/05/upload_061e03071a770f2e869ca6a7c4d7f67c.png)
exp:
https://github.com/jas502n/CVE-2019-13272
上面是我成功复现的6个洞,只要环境配置对了就能直接提权成功的那种。当然还有些能够提权的成功的洞比如 CVE-2016-0728 ,但我感觉实在太鸡肋了,大家可以看这篇文章分析的
https://www.anquanke.com/post/id/83342
![](https://zgao.top//wp-content/uploads/2020/05/863A5DFB-178D-4F93-B613-60E1A4277E02_20200529202046.jpg)
我在我虚拟机执行这个exp,物理机cpu都占满了,跑了半小时是真没跑出来,我裂开。实战中用这个提权太鸡肋了,除非真的是物理渗透。
linux本地提权漏洞复现思路-更换kernel
一开始我认为每复现一个漏洞就得换一个镜像,其实不然,对于只对kernel有要求的可以只更换kernel然后重启即可。因为Ubuntu的漏洞最多,所以ubuntu镜像作为本地提权漏洞复现的基础环境,根据不同漏洞所需要的kernel版本,更换指定的版本启动。
ubuntu历史镜像下载链接:
http://old-releases.ubuntu.com/releases/
ubuntu历史 kernel 下载链接:
https://kernel.ubuntu.com/~kernel-ppa/mainline/
这里使用的基础镜像为 ubuntu 16.04.3 LTS
自带的kennel版本号为4.4.0-87-generic
以CVE-2018-18955为例
要求的 Linux kernel 范围在 4.15.x 至 4.19.x 低于 4.19.2
所以复现该漏洞需要切换对应的 kernel 版本号
可以下载 4.16.1 的 kernel 作为复现环境
![](https://zgao.top//wp-content/uploads/2020/05/upload_540b209f49bfbe4a03a9ac8c38bf3a3f.png)
安装指定内核dpkg -i *.deb
![](https://zgao.top//wp-content/uploads/2020/05/upload_5824b087ceb5819eecac7afc9cc08e0b.png)
vi /etc/default/grub
编辑 /etc/default/grub 修改启动引导
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.16.1-041601-generic"
![](https://zgao.top//wp-content/uploads/2020/05/upload_71049f23a7eb022e4183f54e1e1bbb0e.png)
update-grub
然后重启生效,但更换内核的时候有可能会遇到提示Warning: you may need to install module-init-tools,那么安装即可
apt install module-init-tools
![](https://zgao.top//wp-content/uploads/2020/05/upload_37d33ea2cdc51b32d1319af8fb376c3a.png)
这里exp提示该漏洞依赖 newuidmapsudo apt-get install uidmap
再执行exp
![](https://zgao.top//wp-content/uploads/2020/05/upload_ee244bc25b5db03cd222b0300aaa83db.png)
提权成功!每个漏洞要求的版本号不同,可通过更换 kernel 尽可能减少复现漏洞配置环境的时间。
复现这些漏洞最终的目的是为了总结本地提权有哪些类型,如何让牧云去检测这些提权,怎么去判断一个进程是在提权?这里我总结的提权分为三类:
1.条件竞争写入只读(r)文件,如 脏牛
2.向内核注入代码提权,如 CVE-2017-16995
3.缓冲区溢出 suid提权 ,如 CVE-2018-1000001
其中最为常见的就是suid提权,像老版本的namp交互模式执行shell其实也是suid提权。
但谷歌之后发现网上对于linux本地提权检测的文章少之又少,于是和师傅讨论了一番,因为linux下一切皆文件,在/porc/目录下有每个进程的pid,提供每个进程的相关信息。
这些进程的文件夹大小都是0,因为都是在内存中。不过直接去分析文件不太方便,这里为了更加直观就用htop命令查看进程信息。
![](https://zgao.top//wp-content/uploads/2020/05/01F549CE-BD04-48CD-9A06-01B1CB7C9EF0_20200529213529-1024x677.jpg)
我同时开了两个终端,上面执行exp提权,下面开htop监控进程的变化,沿着这条进程链可以看到执行exploit还是test用户但是他的子进程就变成了root,而test本身也没有sudo权限,所以这里是很可疑的。
虽然可以通过这种方式去做提权检测,但是这里可能会存在误判,这里我和李扬师傅都还没有讨论出更好的方式,所以只是这么一个思路,还需要讨论测试更多的情况,只能之后再做补充了。
下面演示的是一个正常的提权。
![](https://zgao.top/wp-content/uploads/2020/05/QQ图片20200928115516-1024x768.png)
以及非正常的提权。
![](https://zgao.top/wp-content/uploads/2020/09/QQ图片20200928115522-1024x790.png)
对于上面的提权漏洞,可能是有不足的,如果有小伙伴还有什么高质量的提权漏洞可以在下面留言,我复现后再补充在上面。
在长亭实习的第二周,感觉进步很快,冲冲冲!
7月31日补充:
替换内核版本发生错误时,虚拟机无法启动的解决办法。
![](https://zgao.top//wp-content/uploads/2020/07/TIM截图20200731111317.png)
这是我在替换内核时发生了错误导致无法启动,直接出现这个界面无法选择其他内核。
![](https://zgao.top//wp-content/uploads/2020/07/TIM截图20200731111702.png)
解决办法:在虚拟机启动时,长按shift,进入内核版本选择,点击以前的版本就可以。
赞赏微信赞赏
支付宝赞赏
2条评论