關於android獲取root權限的方法

1. http://www.claudxiao.net/2011/04/android-adb-setuid/

該方法主要是利用每個用戶可以創建的最大進程數和setuid在已創建最大進程數時,返回失敗,而代碼不檢查返回值的缺陷來實現的。
代碼漏洞在android 4.0上已經不存在,我查看了代碼,在修改權限失敗之後,adb進程直接exit


所以我在用示例代碼在android 4.0上嘗試獲取root權限時,在最後等待adb重啓時會出現失敗,並且adb shell一直進不去,也是這個原因。

啓示: a) 代碼不檢查返回值是一個很不好的習慣
       b) 這種缺陷的發現和數學中臨界值的考慮是一樣的


2. http://blog.claudxiao.net/2011/10/zergrush/
該例子在android 2.3上有效,是典型的緩衝區溢出的利用思路。
在原本的跳轉點(return,通過棧緩衝計算,典型的X86和ARM是形參入棧地址+8,特殊指令集除外)植入shell code。
因爲shell code是系統調用system執行的,這樣在子進程裏執行shell code時有root權限,只要對植入shell code做一些操作,就能獲取相應的權限。

PS: 該方法在android 4.1以上應該是不行(猜測需要變通),4.0未知。android4.1(c庫)以及對應的內核3.4在編譯上通過GCC的guard機制,
能有效的檢查棧溢出的情況而及時對其跳轉,從而避免運行植入的shell code。

啓示:寫函數時要小心棧溢出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章