第八十四章亂殺了
打開懸賞板塊,懸賞依舊是五花八門的,這回蕭天都只專挑一萬左右的接,因?yàn)橐蝗f左右的懸賞,蕭天可以憑借著豐富的經(jīng)驗(yàn)知識(shí),最遲在兩三個(gè)小時(shí)里面就能解決。
俗稱亂殺。
隨手眼疾手快的接了一個(gè)一萬的懸賞。
然后蕭天就看了起來,一開始看這些花花綠綠的代碼有點(diǎn)頭禿,現(xiàn)在蕭天覺得自己已經(jīng)在開始慢慢的適應(yīng)了。
蕭天也是憑借著上位者的壓制,一目十行的看了起來,當(dāng)然如果遇到稍微不正常的代碼,蕭天就會(huì)停止這種速度,仔細(xì)的看。
半小時(shí)之后,蕭天還沒有找到,不過他也不慌張,畢竟時(shí)間還長(zhǎng)著呢。
一般情況下,找漏洞都是沒有源碼的,因?yàn)檐浖皇悄愕模绻言创a給你了,相當(dāng)于把自家后門沒關(guān)門告訴你了,那你豈不是為所欲為為所欲為?
而且,BUG漏洞的話常見的有操作系統(tǒng)漏洞、服務(wù)器漏洞、服務(wù)器軟件漏洞、網(wǎng)頁系統(tǒng)漏洞。
先說軟件方面的漏洞,不是網(wǎng)頁系統(tǒng)的。一般的漏洞大家聽過的應(yīng)該是緩沖區(qū)溢出漏洞,什么意思呢?
就是存變量的緩沖區(qū)超過了最大大小,文本就會(huì)沖掉軟件本來的代碼,造成錯(cuò)誤。
緩沖區(qū)是內(nèi)存中存放數(shù)據(jù)的地方。在程序試圖將數(shù)據(jù)放到及其內(nèi)存中的某一個(gè)位置的時(shí)候,因?yàn)闆]有足夠的空間就會(huì)發(fā)生緩沖區(qū)溢出。
緩沖區(qū)溢出就好比是將十升水放進(jìn)只有五升容量的桶里。很顯然,一旦容器滿了,余下的部分就會(huì)溢出在地板上,弄得一團(tuán)糟。
舉個(gè)例子,登錄系統(tǒng)(不管是網(wǎng)頁還是軟件、ftp等),都要輸入帳號(hào)密碼,進(jìn)行身份認(rèn)證,系統(tǒng)接受你輸入的帳號(hào)密碼,要保存到一個(gè)變量里(通常是堆棧),和正確的帳號(hào)密碼比較,看你是否是合法的用戶。
如果我定義一個(gè)變量用來存放你輸入的密碼(假設(shè)最多1000位密碼),一般人的密碼肯定到不了1000位,那么程序就會(huì)正常運(yùn)行,如果有別有用心的人輸入了2000位,多余的'1000個(gè)字符由于沒有位置放,就會(huì)沖掉正常的指令,程序就會(huì)崩潰。
因?yàn)槌绦蜃罱K都會(huì)編譯成機(jī)器碼,一行一行的執(zhí)行,多余的1000個(gè)字符沖掉正常的指令后,機(jī)器不能識(shí)別,就會(huì)報(bào)錯(cuò)退出,把這1000個(gè)字符也換做編譯后的機(jī)器碼,程序執(zhí)行到這里以后,就執(zhí)行我們的代碼了,這就是緩沖區(qū)溢出漏洞。
所以不管是操作系統(tǒng)還是瀏覽器,只要接入互聯(lián)網(wǎng)后,就要按照一定的協(xié)議收發(fā)數(shù)據(jù),只要接收的數(shù)據(jù)沒有進(jìn)行邊界檢查,就可能造成溢出漏洞。
而為蕭天他們這樣找漏洞的人就是這樣,先使程序崩潰,找到有可能有漏洞的地方,再逐語句調(diào)試,這是個(gè)非常復(fù)雜的過程,不過最終都能夠找到合適的shellcode使對(duì)方機(jī)器執(zhí)行我們的指令。
所以繼續(xù)的再用半個(gè)小時(shí)尋找,蕭天也是很快找到了毛病所在。
說實(shí)話,這個(gè)漏洞又是蕭天依靠那個(gè)牛人程序員經(jīng)驗(yàn)找出來的漏洞,難度倒是不難,但是如果沒有相當(dāng)豐厚的經(jīng)驗(yàn),真的是不太好找的。
這個(gè)問題就是程序代碼邏輯處理問題,在這個(gè)程序代碼邏輯節(jié)點(diǎn)出現(xiàn)了小BUG,只需要將開源碼的程序邏輯重新編輯一下就行。
所以蕭天也是非常愉快的將這個(gè)懸賞提交完成,畢竟再次的一個(gè)達(dá)不溜向他招手,自然而然的蕭天還是覺得很開心的。
隨意的掃了一眼懸賞板塊,然后刷新一下,看到一個(gè)關(guān)于“維護(hù)一套輔助庫(kù),有個(gè)BUG,完成之后兩萬”的懸賞,蕭天也是隨意的直接的接了下來。
反正對(duì)于他來說,這些就是相當(dāng)于新手任務(wù)一樣,只不過稍微會(huì)有點(diǎn)費(fèi)腦力罷了。
接下懸賞后,蕭天就看著這套庫(kù)封裝了設(shè)備通訊以及各種命令返回信息的識(shí)別、分類以及錯(cuò)誤監(jiān)控等功能。
而且這套庫(kù)由一種很小眾的語言寫成,這種語言叫TCL,你可以認(rèn)為它是一種shell腳本,所以繼承了命令行寫批處理的各種怪異風(fēng)格;同時(shí)它還提供了類似python的進(jìn)階功能,比簡(jiǎn)單的shell script稍微強(qiáng)大一些——這就在水平不高的自動(dòng)化測(cè)試人員和相對(duì)強(qiáng)大的語言能力之間取得了平衡。
做過debug的業(yè)內(nèi)人士都知道,一個(gè)bug癥狀越明顯、發(fā)作越頻繁,它就越好處理;最怕的就是這種維護(hù)輔助庫(kù)一年半載不出現(xiàn)一次的。
所以也難怪人家要懸賞這個(gè),畢竟費(fèi)時(shí)間還不一定找得到,沒有一定的經(jīng)驗(yàn)太難了。
蕭天也只是大致看了看,目前來說完全沒有頭緒。
因?yàn)橄嚓P(guān)代碼4、5萬行都可能是有的;而且這BUG描述也極為模糊、混亂,完全沒有方向。
所以對(duì)于蕭天來說,解決這個(gè)bug的過程應(yīng)該曲折一點(diǎn)。
十分鐘之后,在這個(gè)BUG之前,蕭天在輔助庫(kù)中又找到了另一個(gè)“積年老Bug”。
這個(gè)BUG好像屬于偶發(fā),時(shí)有時(shí)無,讓人摸不著頭腦。
所以蕭天準(zhǔn)備為這個(gè)支撐系統(tǒng)做個(gè)模擬運(yùn)行系統(tǒng)。
為什么要做模擬運(yùn)營(yíng)系統(tǒng),是因?yàn)樗羞@些測(cè)試代碼其實(shí)都要在網(wǎng)元上運(yùn)行;而這些網(wǎng)元中,性能比較猛的,兩臺(tái)就足夠東南亞那些小國(guó)全國(guó)使用的——從它的電話通訊到電腦網(wǎng)絡(luò),全都由這個(gè)設(shè)備提供支持。
這種設(shè)備當(dāng)然不可能多,如果有測(cè)試組想開始測(cè)試,就得提前申請(qǐng);然后如果測(cè)試用例有BUG,就把大量機(jī)時(shí)浪費(fèi)掉了,那樣子寫的代碼,測(cè)試起來就更難了。
而蕭天是沒有這些的,所以只能搞個(gè)模擬系統(tǒng):只要下發(fā)命令,就能從數(shù)據(jù)庫(kù)找出記錄下來的、對(duì)應(yīng)的命令返回給自己,這樣就不需要在真機(jī)上調(diào)試了。
借助這個(gè)模擬系統(tǒng),蕭天就可以把BUG出現(xiàn)前測(cè)試組日志里記載的命令返回“喂”給程序邏輯。
這果然使得Bug重現(xiàn)了。
通過到處插日志打印語句,蕭天發(fā)現(xiàn)這個(gè)問題是因?yàn)椤懊罘祷氐慕Y(jié)果信息丟失”引起的,然后進(jìn)行到這一步,蕭天發(fā)現(xiàn)調(diào)查卡到了這里,下面無法進(jìn)行下去了。
揉了揉自己的腦袋瓜,蕭天感覺頭腦昏昏沉沉了。
“先休息一會(huì)兒吧,不用那么著急?!?p> 這個(gè)時(shí)候,張雪也是說道,她在旁邊看的一清二楚。
那密密麻麻的代碼還有銀行卡到賬的工資都令張雪有些愕然。
這么最多兩三個(gè)小時(shí)的功夫,幾萬塊就到手了,可不比她累死累活一個(gè)月還要賺得多?
難怪這么有錢呢……
張雪也是心里面想著。