2016-10-06 101 views
0

我遇到了一個非常奇怪的行爲setgid/setuid。他們不會返回錯誤代碼,但也不會調整流程權限。AOSP setgid/setuid沒有效果

這是KitKat,SELinux被禁用(也允許嘗試)。

樣品的編號:

int main(int argc, char **argv) 
{ 
    if (setgid(0) || setuid(0)) 
    { 
     fprintf(stderr, "su: unable to setgid/setuid!\n"); 
    } 
    else 
    { 
     fprintf(stderr, "su: getgid: %d, getuid: %d\n", getgid(), getuid()); 

     char *args[argc + 1]; 
     args[0] = "sh"; 
     args[argc] = NULL; 

     int i; 
     for (i = 1; i < argc; i++) 
     { 
      args[i] = argv[i]; 
     } 

     execv("/system/bin/sh", args); 
    } 
} 

輸出是getgid /的getuid仍然1000,而不是0

在端

推出殼還沒有根權限(獲得拒絕了對大多數命令/腳本)。

我已經看了su.te(此代碼替換現有的蘇,只是爲了更容易地在現有的AOSP項目測試),並補充說:

allow su self:capability { setuid setgid }; 

這也沒有幫助。

我也嘗試添加setgroups(0,NULL); setgid()之前,但沒有做任何事情。

還有什麼可能會遺漏/錯誤?

編輯:通過一些更多的信息閱讀,它可能是/系統文件夾有nosuid設置它,但通過init.rc看,它似乎沒有具體設置。

在此先感謝。

回答

0

我已經解決了這個問題 - 顯然問題是在可執行文件中沒有設置粘性安全位。