很多時(shí)候我們對(duì)各種0day或是exp有著強(qiáng)烈的熱情,的確,手握這種強(qiáng)大的殺傷性武器會(huì)使得對(duì)目標(biāo)的打擊變得十分順利,然而問(wèn)題在于并不是每個(gè)人都能及時(shí)掌握最新的0day,并且要明確的是目前還有很多我們并不知道的0day在地下流傳著,它們通常都賣價(jià)高昂。就好像重型武器一樣,并非所有人都能擁有的,如果你想得到就得花錢買—如果你自己造不出來(lái)的話;谝陨线@些,我們?yōu)槭裁床蛔约和邳c(diǎn)東西呢?
本文其實(shí)并不會(huì)詳細(xì)描述0day的各種挖掘技巧,因?yàn)橐敿?xì)寫的話各個(gè)方面都足夠?qū)懗梢槐緯,而且我也只是個(gè)學(xué)習(xí)中的菜鳥(niǎo),寫不出那么多東西,這里只是談?wù)勎覀(gè)人的一些經(jīng)驗(yàn)和理解。
暫且分成兩類情況吧:開(kāi)源型和非開(kāi)源的程序。其實(shí)這里用開(kāi)源兩個(gè)字并不準(zhǔn)確,原因很簡(jiǎn)單:很多商業(yè)用的web程序即使其程序文件可以直接查看源碼,但是你要想搞到也不是很容易的除非你剛好滲透了一個(gè)用該程序做的網(wǎng)站并將其代碼打包帶回了。好吧,說(shuō)的明白點(diǎn):這里的開(kāi)源可以理解為—你能直接查看源碼。我們相信,一切程序的bug都是代碼出的錯(cuò)。不管是紅能bug還是安全bug,都是代碼寫的有問(wèn)題。因此,如果能得到目標(biāo)的源碼,事情在某種程度上會(huì)變得相對(duì)容易點(diǎn),這種情況通稱白盒測(cè)試。盡管白盒可能會(huì)發(fā)現(xiàn)一些與之相對(duì)的黑盒發(fā)現(xiàn)不了的問(wèn)題(事實(shí)上很多自動(dòng)化的漏洞掃描工具在掃描結(jié)果中都會(huì)遺漏不少實(shí)際存在的漏洞)但不等于白盒能完全取代黑盒。原因很簡(jiǎn)單:盡管電腦不能完全代替人腦,但是大規(guī)模的在某種程度上帶有重復(fù)性質(zhì)的工作交給機(jī)器處理會(huì)節(jié)省很多資源。白盒的價(jià)值在于發(fā)現(xiàn)黑盒所發(fā)現(xiàn)不了的隱藏相對(duì)較深的漏洞,比如那次的DZ7.2事件。但對(duì)于顯而易見(jiàn)的問(wèn)題用白盒就有點(diǎn)大材小用了,比如:
dim rs,sql,id
id=request(“id”)
set rs=server.creatobject(“adodb.recordset”)
sql=”select * from user where id=”&id
rs.open sql,conn,1,3
>
前面已經(jīng)說(shuō)過(guò),這里不細(xì)談如何挖掘漏洞,事實(shí)上挖掘web腳本漏洞只要你熟知各類漏洞的概念以及成因,在多加練習(xí)之后自然就能得心應(yīng)手。比如:sql inj.的成因是因?yàn)閷?duì)動(dòng)態(tài)交互的變量沒(méi)有進(jìn)行足夠好的過(guò)濾或者凈化,導(dǎo)致惡意用戶能提交精心構(gòu)造的sql查詢語(yǔ)句獲得各種期望獲得的數(shù)據(jù)或信息。理解了這段話,就能很輕易理解上面那段代碼存在sql inj.漏洞。雖然這是最簡(jiǎn)單的情況,但萬(wàn)變不離其宗。
沒(méi)法獲取源碼的,典型的是編譯的二進(jìn)制文件,對(duì)于這些程序通常采用fuzz test。(不過(guò)對(duì)于.net和java寫的也可以反編譯得到源碼)。Bill Gates曾經(jīng)說(shuō)過(guò):任何用戶的輸入都是有害的。其實(shí)惡意用戶所能控制的也就是能讓其提交數(shù)據(jù)的地方了,當(dāng)然我們可以讓思路在系統(tǒng)化一點(diǎn):首先,一定是代碼出了問(wèn)題;其次,程序做出來(lái)肯定是為了提供滿足用戶的某一種或者某幾種需求的功能;最后,既然代碼出了問(wèn)題,那么對(duì)應(yīng)的在這些功能的運(yùn)作上肯定有某一處或者某幾處存在受攻擊面。好了,接下來(lái)形象化一點(diǎn):比如FTP程序,首先肯定是問(wèn)了傳輸文件的,但是如果不允許匿名訪問(wèn)的話(很多情況下都這樣)就要用戶提交身份驗(yàn)證,也就是最基本的用戶名和密碼,好了,用戶可控制的地方出現(xiàn)了—提交的用戶名和密碼,這些都是變量,是用戶可控制的變量,如果程序?qū)@些變量處理存在問(wèn)題呢?比如:我們輸入過(guò)長(zhǎng)的用戶名或者密碼會(huì)不會(huì)導(dǎo)致stack overflow之類的?再比如:瀏覽器程序返回給用戶的是標(biāo)準(zhǔn)的html文檔,我們假設(shè)一下:如果瀏覽器對(duì)某一種或者某一些html標(biāo)簽的組合處理不當(dāng)呢?最大可能是導(dǎo)致程序崩潰的拒絕服務(wù)。當(dāng)然,瀏覽器可能會(huì)出現(xiàn)的問(wèn)題不止如此,跨域問(wèn)題會(huì)是web2.0時(shí)代的熱門話題—我是這么認(rèn)為的。綜上:全面了解目標(biāo)程序的功能—然后考慮各種功能在處理上可能存在的問(wèn)題—再針對(duì)性測(cè)試,是一條可行的思路。