在 android 開發中,有乙個 adbd 服務,是為了讓開發者可以除錯程式。
用 adb shell 連上手機,通過 ps 命令看 adbd 程序的資訊:
shell 19128 1 3448 196 ffffffff 00008294 s /sbin/adbd
此程序的父程序是 root 使用者啟動,然後通用 setuid 降級為 shell 使用者,
看 android 2.2 原始碼中的 /android/android2.2/platform/system/core/adb/adb.c 的源**
/* add extra groups:
** aid_adb to access the usb driver
** aid_log to read system logs (adb logcat)
** aid_input to diagnose input issues (getevent)
** aid_inet to diagnose network issues (netcfg, ping)
** aid_graphics to access the frame buffer
** aid_net_bt and aid_net_bt_admin to diagnose bluetooth (hcidump)
** aid_sdcard_rw to allow writing to the sd card
** aid_mount to allow unmounting the sd card before rebooting
*/gid_t groups = ;
setgroups(sizeof(groups)/sizeof(groups[0]), groups);
/* then switch user and group to "shell" */
setgid(aid_shell);
setuid(aid_shell);
這裡並沒有對 setuid 等函式的操作進行正確證判斷。
如何這個函式會失敗呢? 經查詢,當目標使用者的程序數達到 rlimit_nproc 這個值的時候,setuid 就會設定失敗,而 aid_shell 使用者恰好是,使用者通過 adb shell 連進來的使用者,相信我們可以不斷的 fork,再連一下 adb,這時 adb 就不是以 shell 使用者啟動了,而是它的父程序的使用者(root)
看到可愛的 # 號了!
setuid的作用 深入理解SetUID
在linux系統中每個普通使用者都可以更改自己的密碼,這是合理的設定。問題是 使用者的資訊儲存在檔案 etc passwd中,使用者的密碼儲存在檔案 etc shadow中,也就是說使用者更改自己密碼時是修改了 etc shadow檔案中的加密密碼,但是,look rw r r 1 root roo...
深入理解SetUID
摘自 在linux系統中每個普通使用者都可以更改自己的密碼,這是合理的設定。問題是 使用者的資訊儲存在檔案 etc passwd中,使用者的密碼儲存在檔案 etc shadow中,也就是說使用者更改自己密碼時是修改了 etc shadow檔案中的加密密碼,但是,look rw r r 1 root ...
深入理解SetUID
在linux系統中每個普通使用者都可以更改自己的密碼,這是合理的設定。問題是 使用者的資訊儲存在檔案 etc passwd中,使用者的密碼儲存在檔案 etc shadow中,也就是說使用者更改自己密碼時是修改了 etc shadow檔案中的加密密碼,但是,look rw r r 1 root roo...