0
我想了解緩衝區溢出和setuid。我用這個來源:試圖理解緩衝區溢出和setuid。我沒有獲得特權
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char prog[]="/bin/ls -hal";
char in[8]={0};
printf("Name of a dir to list : ");
gets(in);
char *cmd;
cmd=malloc(strlen(prog)+strlen(in)+2);
strcat(cmd, prog);
strcat(cmd, " ");
strcat(cmd, in);
return system(cmd);
}
編譯它之後,我改變與店主:
sudo chown root:root a.out
我設置的權限:
sudo chmod 4755 a.out
現在a.out的樣子:
-rwsr-xr-x 1 root root 7544 mai 01:24 a.out
我啓動它與我curren t用戶(而不是root)和ps aux | grep a.out:
root 4656 0.0 0.0 4084 684 pts/0 S+ 01:52 0:00 ./a.out
所以這沒問題。 如果我輸入的是:
aaaaaaaaaaaaaaaa/bin/bash;
我得到一個新的外殼,但我不就行了根我登錄我的當前用戶,我不明白爲什麼。因爲所有者是root用戶,所以我把setuid放在了這個新的bash上,並且它的root權限不會啓動?
緩衝區溢出在炭[8] = {0};我把幾個「a」,我用/ bin/bash覆蓋/ bin/ls。在我的電腦上,我必須寫16「a」和/ bin/bash; – wammder
'bash'檢測它是否正在運行setuid並刪除權限。 – Barmar
請參閱https://unix.stackexchange.com/questions/74527/setuid-bit-seems-to-have-no-effect-on-bash – Barmar