天天看點

android提權

Android的核心就是Linux,是以Android擷取root其實和Linux擷取root權限是一回事兒。

你 想在Linux下擷取root權限的時候就是執行sudo或者su,接下來系統會提示你輸入root使用者的密碼,密碼正确就獲得root權限了。 Android本身就不想讓你獲得Root權限,大部分手機出廠的時候根本就沒有su這個程式。是以你想獲得Android的root權限,第一步就是要 把編譯好的su檔案拷貝到Android手機的/system/bin或者/system/xbin/目錄下。我們先假設你可以把su放在bin下,接下 來你可以在Android手機的adb shell或者序列槽下輸入su了。上面說了,執行su,系統會提示你輸入root使用者密碼,但你怎麼可能知道密碼呢?暴力破解嗎?破解root的黑客當然 不會這麼做,這就涉及到第二個問題。

一般我們在Linux的console下輸入 ls -l 會列出所有檔案的權限。

比如:-rwxr-xr-x,用過Linux的人都知道r代表該檔案可讀,w代表可寫,x代表可執行,-就代表沒有該權限。第一個rwx代表檔案所有者的權限,第二個rwx代表和所有者同組人的權限,第三個rwx代表其他使用者對該檔案的權限。但下面這個檔案就比較特殊。

rws,它的執行權限标志位是一個s,s代表當任何一個使用者執行該檔案的時候都擁有檔案所有者的權限,這檔案的所有者是root,簡單點說就是不管誰執行這個檔案,他執行的時候都是以root身份執行的。那root使用者執行任何檔案都是不需要密碼的。

這個時候如果你把su檔案的權限置成-rwsr-xr-x會發生什麼?su這個程式本來就是賦予執行者root權限的,但執行的時候又不需要密碼,是以執行一下這個檔案就自動成root身份了。

問題都清楚了,就是你需要把su拷貝到Android手機上,并且把su權限标志位置成-rwsr-xr-x。能把這個事情搞定你就成功root了一個手機。

大概意思就是兩行代碼

cp /data/tmp/su /system/bin/ #copy su 到/system/分區

chmod 1775 /system/bin/su #把su置成-rwsr-xr-x

那怎麼搞定這個事情呢?Android的system分區本身不可寫,隻有是root的權限才能改動它,執行不了啊。

一 個辦法就是找一個本身已經有root權限的程序來啟動我上面的兩行代碼,那我這兩行代碼一啟動就是root權限,就可以順利執行了。但是已經有root權 限的程序都是出廠時候就裝到手機上的,代碼寫死了,你沒法控制它執行你自己的代碼啊。這個時候就需要你找漏洞了,比如用來破解Android2.3 root權限的zergRush漏洞就是利用一個擁有root權限的程序棧溢出漏洞,棧溢出說白了就是這個程序讀到了自有記憶體之外的位址空間,這段記憶體空 間沒配置設定給它,誰都能寫這段記憶體,那我就可以把自己的兩行代碼預先寫到這裡,運作zergRush代碼,然後等那個倒黴的程序執行我就行了。

如果各位有一定基礎,能看懂我上面講的,就基本知道原理其實并不難,難點在于找到漏洞。

zergRush的代碼在這兒:

revolutionary/zergRush · GitHub

有興趣的可以看看,網上也有很多分析文章。

另 外iphone的越獄其實和Android的root是一回事兒,都是越權操作。是以越獄的方式也都差不多,也是找IOS自帶程式的漏洞,隻不過IOS安 全性強一點,是以也比較難找。如果你發現你的iphone的某個自帶程式經過一些特定操作會出現系統崩潰重新開機的現象,并且是可以複現的,那就很有可能可以 用來越獄了。

好像是IOS6出來的時候,由于比較難搞,某個越獄團隊就号召大家來找茬,發現的漏洞可以報告給他們用來越獄。說明IOS越獄越來越難。直接展現就是現在越獄需要的時間越來越長。

不過如果你發現漏洞也可以報告給蘋果,蘋果會根據漏洞嚴重程度給予一定獎勵。我記得看新聞說南非一個家夥靠給蘋果找漏洞賺25萬美元。發家緻富的好路子啊,哈哈。

================================================

謝謝各位支援

關于為什麼su一定要放到/system/bin/或者/system/xbin/

首 先,你當然可以把su這個程式copy到/data/分區,但你adb push進去的時候,su有這個程式的所有者肯定不是root,一般是shell什麼的(記不清了,應該是和adbd這個程序的所有者一樣),這個時候即 使你把它權限置為-rwsr-xr-x,哪你運作它的時候也是shell身份運作的,su會提示你輸入密碼的。

第二我們root手機的目的是為了運作需要root權限的APP,比如goagent或者什麼的。這些APP裡代碼需要獲得root的時候是這麼寫的:

也就是它們在代碼裡調用了一下su這個程式,哪可以寫成下面這個樣子嗎?

我沒寫過APP,不太清楚,估計是不行的。換句話說你必須把su放到環境變量PATH所有的目錄裡,APP 才能調用到它。如果你不想放到bin或者xbin下,你就必須給PATH增加一個目錄。PATH是root權限才能修改的,你如果能修改PATH,說明你 已經有root權限了,修改PATH就沒必要了,還不如直接放到bin下面。

關于sudo

android 的工程裡沒有sudo這個東西。sudo是為了給普通使用者臨時配置設定root權限的,Android裡建立了很多使用者,比如wifi,shell等等,這些 使用者可以通路那個檔案,不可以通路那個檔案,代碼裡已經寫死了,權限也配置設定的很分明。它們在運作的過程中不需要臨時獲得root權限。是以Android 不需要sudo這個程式。

繼續閱讀