新聞中心
0x00 關(guān)于root
linux和類(lèi)Unix系統(tǒng)的最初設(shè)計(jì)都是針對(duì)多用戶(hù)的操作系統(tǒng),對(duì)于用戶(hù)權(quán)限的管理很非常嚴(yán)格的,而root用戶(hù)(超級(jí)用戶(hù))就是整個(gè)系統(tǒng)的唯一管理員,擁有等同于操作系統(tǒng)的所有權(quán)限。所以一旦獲取到root權(quán)限,就可以對(duì)整個(gè)系統(tǒng)進(jìn)行訪問(wèn)和修改。而在Android下獲取root權(quán)限之后就可以自己定制系統(tǒng),卸載一些預(yù)裝軟件,完全掌控自己的設(shè)備。

網(wǎng)站設(shè)計(jì)制作過(guò)程拒絕使用模板建站;使用PHP+MYSQL原生開(kāi)發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺(tái)管理系統(tǒng);成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營(yíng)了10余年的創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司。
0x01 setUID
在討論root的原理之前,有一個(gè)非常重要的概念,就是文件的setUID權(quán)限。linux下普通的文件權(quán)限大家都很清楚,可讀,可寫(xiě),可執(zhí)行,下圖很清楚的一個(gè)普通的可執(zhí)行文件root的權(quán)限,r(可讀),w(可寫(xiě)),x(可執(zhí)行)。
但是,要考慮一種情況,比如說(shuō),一個(gè)用戶(hù)是有權(quán)修改自己的密碼的,但是記錄密碼的文件/etc/shadow只有root用戶(hù)才是可寫(xiě)的,那普通用戶(hù)如何才能修改自己的密碼呢?這一切都要?dú)w功于setUID的設(shè)置,修改密碼時(shí)使用的命令passwd對(duì)應(yīng)的二進(jìn)制程序是/usr/bin/passwd
可以看到passwd的二進(jìn)制文件的權(quán)限位中不僅僅是rwx了,多了一個(gè)s權(quán)限,而這個(gè)s權(quán)限就是我們的主角,setUID權(quán)限。
由于passwd有setUID權(quán)限,所以linux系統(tǒng)可以臨時(shí)把這個(gè)文件的所有者(root)身份角色賦給普通用戶(hù),以達(dá)到讓普通用戶(hù)可以修改自己密碼的目的。
那如何設(shè)置setUID權(quán)限呢?
平常使用的普通文件權(quán)限位是由3、3、3共9位的二進(jìn)制數(shù)字組成?。?,分別對(duì)應(yīng)文件所有者,文件所有者同一用戶(hù)組權(quán)限和其他用戶(hù)權(quán)限。最開(kāi)始的名為root的可執(zhí)行文件的權(quán)限為rwxrwxr-x,所對(duì)應(yīng)的二進(jìn)制位就是111 111 101 ,然后每三位對(duì)應(yīng)421換算成16進(jìn)制,就是775。而新增的setUID權(quán)限是在前面新增了三位,分別表示setGID、setUID、stick bit權(quán)限,而我們現(xiàn)在只關(guān)心setUID權(quán)限。因此加上setUID權(quán)限之后,文件的權(quán)限應(yīng)該由4位數(shù)字組成,例如之前的root文件加上setUID權(quán)限就是4755。而修改密碼的passwd文件對(duì)應(yīng)的權(quán)限位就是4755。
可以通過(guò)一個(gè)小例子來(lái)直觀的感受一下,平常使用的cat命令對(duì)應(yīng)的二進(jìn)制文件是沒(méi)有setUID權(quán)限的:
可以在普通用戶(hù)下嘗試使用cat去讀取/etc/shadow文件的內(nèi)容:
提示權(quán)限不夠,再給cat加上setUID權(quán)限之后再去讀取/etc/shadow的內(nèi)容:
是可以讀出來(lái)的,但是/etc/shadow中的內(nèi)容都經(jīng)過(guò)加密處理。
0x02 Linux 下的root
平常使用的linux發(fā)行版,需要切換到root用戶(hù)時(shí),直接使用su命令,然后輸入su用戶(hù)的密碼就可以切換到root用戶(hù)了。
0x03 Android 的root
但是在未root的Android設(shè)備上是沒(méi)有su的二進(jìn)制文件,直接執(zhí)行su命令會(huì)提示”su not found”。
再進(jìn)入已經(jīng)root過(guò)的設(shè)備上查看,平常在adb shell中用的命令對(duì)應(yīng)的二進(jìn)制文件都是在/system/bin目錄下,是存在su文件的:
可以看到這里的su只是一個(gè)指向/system/xbin/的一個(gè)鏈接。
可以看到這里的su是有setUID權(quán)限位的。
而要在系統(tǒng)分區(qū) /system/xbin 中添加文件本身就是需要root權(quán)限,而且設(shè)置su文件的所有者為root用戶(hù)也是需要root權(quán)限的,設(shè)置setUID權(quán)限同樣也需要root權(quán)限。
這就進(jìn)入到了一個(gè)死循環(huán)當(dāng)中,要利用su,首先要有root權(quán)限。因此這時(shí)就需要利用到Android存在的漏洞,Android系統(tǒng)本身存在著很多以root權(quán)限運(yùn)行的原生進(jìn)程,而這些root進(jìn)程中如果存在可以利用的漏洞,就可以利用進(jìn)程的root身份:
-
拷貝su文件到/system/xbin系統(tǒng)分區(qū);
-
設(shè)置su文件所有者為root用戶(hù);
-
設(shè)置su文件的setUID權(quán)限,便于自己的進(jìn)程執(zhí)行su命令獲取root權(quán)限。
新聞標(biāo)題:詳解Androidroot原理
本文地址:http://fisionsoft.com.cn/article/coipgcs.html


咨詢(xún)
建站咨詢(xún)
