在VMware上學習ubuntu 20.04的系統安全時,嘗試了set-uid操作,發現如下問題:
catcall用原始碼編譯的可執行檔案caltcall.c:
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[]){
char *cat = "/bin/cat";
if(argc < 2){
printf("please type a file name.\n");
return 1;
}
char *command = malloc(strlen(cat) strlen(argv[1] 2));
sprintf(command, "%s %s",cat, argv[1]);
system(command);
return 0;
}
我通過以下代碼完成set-uid操作:
$ sudo chown root catcall
$ sudo chmod 4755 catcall
在執行可執行檔案catcall時,我以為我可以看到檔案的內容/etc/shadow,因為'catcall'已設定為Set-Uid程式。但是嘗試訪問時拒絕操作etc/shadow:
/bin/cat: /etc/shadow: Permission denied
為什么 set-uid 操作失敗?
uj5u.com熱心網友回復:
每個行程實際上都有兩個用戶 id,一個真實的 uid 和一個有效的 uid,請參閱真實用戶 ID、有效用戶 ID 和保存的用戶 ID 之間的區別。通常它們是相等的。設定 setuid 位會導致有效的 uid 被設定為二進制檔案的所有者exec,但真正的 uid 保持不變,并且通常仍然是實際運行程式的用戶的 uid。
因此,當您的程式啟動時,有效的 uid 將是root,真正的 uid 將是dim_shimmer. 現在您已選擇嘗試通過 啟動程式system(),該程式使用 shell 執行指定的命令。但是,許多 shell 都有一個安全功能,它們比較真實和有效的 uid,如果它們不相等,它們會將有效 uid 設定為等于真實 uid。(例如,這可以避免系統管理員意外發生的災難chmod s /bin/sh)。我懷疑這就是這里發生的事情。因此,當您的cat命令運行時,您的真實和有效 uid 都dim_shimmer再次出現,并且該用戶沒有讀取權限/etc/shadow。
如果您使用代替(或其親屬之一)運行您的cat命令,以繞過外殼,那么我懷疑您會發現它有效。execl
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/496585.html
