假設(shè)這個完成了(1)
目錄:
引子:
在開發(fā)過程中蛛株,Boss常常跟我提的一句話就是:“假設(shè)這個東西完成了”。
一開始,沒聽懂這句話的意思征唬,只是照著去做,后來慢慢自己體會到這句話的奧妙了茁彭。
從幾個工具的開發(fā)過程來談?wù)勥@句話的奧妙吧~
poc掃描器的開發(fā):
需求的產(chǎn)生:
當(dāng)一些新的危害性很大的漏洞爆發(fā)出來后鳍鸵,由于某些原因,公司的web掃描器無法及時的添加掃描規(guī)則尉间,也就是說不具備掃描新型高危漏洞的能力偿乖。
所以問題就來了,同時也產(chǎn)生了新的需求:要在原有的基礎(chǔ)上哲嘲,寫一個能夠掃出高危漏洞的poc掃描器贪薪。
什么是poc掃描器:
科普一下,啥是poc掃描器:
poc : proof of concept翻譯過來就是概念驗證眠副,就是要找出一個方法去驗證某種東西是否存在或者它是真是假画切。
舉個例子,比如說囱怕,《木蘭詩》中有一句話說到雙兔傍地走霍弹,安能辨我是雄雌,這個時候娃弓,雄雌兩兔一起并排著跑典格,怎能辨別哪個是雄兔,哪個是雌兔呢台丛?如果你能找到一個方法耍缴,來檢驗、分辨出這兩只兔子是真是假,那么你的這個方法就是所謂的poc防嗡,概念驗證了变汪。
延伸到安全這塊的意思就是,提供一個方法蚁趁,去驗證某個漏洞是否存在裙盾。
一般情況下,一般的思路就是:
- 往一個網(wǎng)站或一個服務(wù)器的某個地方他嫡、參數(shù)發(fā)送一個特意構(gòu)造的數(shù)據(jù)(抓起一只兔子)
- 從返回包中的數(shù)據(jù)的一些特征闷煤,進(jìn)行判斷(看兔子有木有小jj)
poc掃描器的難點1:找兔子
如果你想判斷兔子是公是母,那你先要抓到兔子啊涮瞻,你才好使出你的判斷大法:看兔子有木有小jj鲤拿?!
也就是說署咽,你要找到漏洞環(huán)境先近顷,你才好使出你的判斷大法:從返回包中看特征。
第一個難點來了宁否,去哪里找兔子呢窒升?
- 稍微縮小目標(biāo)
- 去動物園找、你可以專門去兔子樂園找
- 再縮小目標(biāo):
- 去專賣兔子的寵物店找
同樣的慕匠,在web安全中饱须,去哪里找漏洞環(huán)境呢?
- 真實的公網(wǎng)環(huán)境上
- 稍微縮小目標(biāo)台谊,通過zoomeye,fofa,Shodan來找
- 離線的漏洞環(huán)境
- 再縮小目標(biāo)蓉媳,github上有幾個提供漏洞的docker環(huán)境的,美滋滋
poc掃描器的難點2:看兔子有木有小jj
如果此時你抓到了兔子了锅铅,滿心歡喜的想要看兔子有木有小jj酪呻,可是并非每只兔子的那個特征都是那么明顯的,萬一你抓到一只怪物兔子呢盐须。萬一是雌雄同體玩荠、萬一那兔子的小jj長滿了毛。贼邓。阶冈。。真拿不準(zhǔn)你能判斷出它是公是母塑径,這個時候就考驗?zāi)愕难哿α恕?/p>
有兩種方法:
- 比較明顯的話女坑,就直接肉眼判斷、再不行就撥開兔子肚子的毛來看
- 不明顯的話晓勇,就采取旁門左道堂飞、比如解剖、拿一只母兔子看那只兔子有沒什么反應(yīng)绑咱。绰筛。。
同樣的描融,如果你找到了漏洞環(huán)境铝噩,那么你滿心歡喜的想構(gòu)造數(shù)據(jù)包,去看特征窿克,由于種種原因骏庸,這個時候也未必能看到你想要的特征。
有兩種方法:
- 一般情況下年叮,有回顯的漏洞特征具被,比較好判斷,用某個特征符去匹配就行
- 如果是無回顯的情況下只损,只能運用旁門左道來間接證明了一姿。dnslog、或者時間上的延遲來判斷跃惫。
poc掃描器的難點3:找到那只真正的兔子
如果只是雙兔傍地走的話叮叹,這個時候還好,你的眼前只有2只兔子爆存,可是蛉顽。。先较。如果是滿草原的兔子呢携冤?你該怎么辦?更何況當(dāng)中還要摻雜著別的動物闲勺,什么小松鼠噪叙、小老鼠、小貓的霉翔。睁蕾。。
有兩種方法:
- 1债朵、全部都抓起來子眶。。序芦。這樣的好處是不會漏臭杰。。但是有點傻
- 2谚中、先給動物分類渴杆,然后打上標(biāo)簽寥枝、按標(biāo)簽去找到你要的對應(yīng)的動物
同樣的,在真實的網(wǎng)絡(luò)環(huán)境中磁奖,你要掃描的資產(chǎn)中含有很多web組件囊拜,你要怎么判斷你要找出哪個組件來進(jìn)行漏洞證明呢?
有兩種方法:
-
1比搭、暴力的方法:遍歷冠跷、全部、FullScan
- 對爬取得到的所有鏈接身诺、都往對應(yīng)的位置發(fā)送構(gòu)造好的數(shù)據(jù)包
-
2蜜托、縮小范圍、QuickScan
- 先指紋識別霉赡、縮小范圍后橄务、再往特定的地方去打數(shù)據(jù)包
實際開發(fā)過程中:
由于以上的3個難點:
- 找兔子
- 看兔子有木有小jj
- 找到那只真正的兔子
搞得我在開發(fā)這個poc掃描器的時候一頭霧水,選了一個poc后穴亏,一開始執(zhí)著于這個poc驗證率要準(zhǔn)確仪糖,要找到對應(yīng)的漏洞環(huán)境驗證后、才能用迫肖。
那些天锅劝,boss反復(fù)提了幾句話
- 你不要執(zhí)著于某個poc的驗證率,要假設(shè)這個poc能用
- 然后要先把整個框架寫出來
- 一個事情要先完成個百分之80后蟆湖,再慢慢去修改細(xì)節(jié)故爵。而不是一開始就糾結(jié)于一些點
- 再這樣糾結(jié)下去,過了一兩個星期后這個事情還是沒完成大部分的內(nèi)容隅津,就會變得棘手了
通俗點的說:
- 你不要執(zhí)著于一開始抓到一只兔子诬垂、就一直反反復(fù)復(fù)看它有沒有小jj
- 你要把整個框架即找兔子、抓兔子伦仍、驗證兔子的這個流程先搞定
- 不然一兩個星期后结窘,你手里還是只有一兩只兔子,整件事情就會很棘手了
我當(dāng)時還是有點執(zhí)著于那個點:一個準(zhǔn)確的Poc才能上架
但是總的開發(fā)思路還是按照boss的說法去做的充蓝,現(xiàn)在回過頭來想隧枫,路子還是挺對的,保持著一個比較良好的開發(fā)節(jié)奏谓苟。
當(dāng)然官脓,我自己也額外加班,把自己執(zhí)著的點給完善了涝焙。
總結(jié):
良好的開發(fā)節(jié)奏:
- 在開發(fā)一個比較大的工程卑笨、項目的時候,難免會遇到一些棘手的點仑撞。
- 這個時候赤兴,如果這個棘手的點一時無法解決妖滔,那么可以先放一放。
- 一些比較簡單的點桶良,花較少的時間就可以做完座舍,這個時候整個項目的進(jìn)度就會很快。
- 當(dāng)整個項目的進(jìn)度到了八九成之后艺普,再回過頭來簸州,把難點一個個的逐步擊破鉴竭。
大局觀:
在整個項目開發(fā)的過程中歧譬,boss的整個大局觀還是比我強(qiáng)太多了。搏存。
從一個概念瑰步、一個需求到的一個工程化的、可用的項目(產(chǎn)品)的整個大局觀值得去細(xì)細(xì)體會和捉摸璧眠。
這種大局觀應(yīng)該是經(jīng)驗跟思考堆起來的缩焦,目前來說不太懂。责静。袁滥。
假設(shè)這個完成了:
通常我們有個to do list
一般情況下,都是會順序的從第一點做到最后一點灾螃,如果當(dāng)中某個點卡住了题翻,我們就會在上面花費很多時間。如果不巧的是難點出在前面幾個點腰鬼,那么我們的整個進(jìn)度就會停滯不前嵌赠。
這個時候,我們要提醒自己一句熄赡。
- 假設(shè)這個完成了
這句話很奇妙姜挺,雖然聽起來很虛,但是可以使你暫時不拘泥于小結(jié)彼硫,而是從大局的角度去看待問題炊豪,對整個大局觀有個比較好的把握,而不是順序的去逐個解決問題拧篮,而是有種倒推的感覺溜在。
- 反過來想
就是從結(jié)果往回看,如果要達(dá)到這個結(jié)果他托,我們需要做什么掖肋,這當(dāng)中存在著一種必要性的思維,對于解決問題來說是很有益處的赏参。
- 最后再舉個例子
比如說我們要搭一條小船志笼,如果在前期搭建過程中沿盅,我們被材料這個問題困擾著,猶豫著哪個材料是最好的纫溃,而遲遲沒有動手開始搭建小船腰涧,那很可能數(shù)天過去了,我們的小船還沒有成型紊浩。
如果我們一開始選擇跳過一些難點窖铡,先選一種較好的材料就開始著手于搭建起整個小船,很可能數(shù)天過去了坊谁,我們要的小船就基本成型了费彼,基本可以用了。
回過頭想口芍,是否選用了最好的材料可能也不是那么重要了箍铲。
整個過程是受到多因素影響的,每個因素對于最終結(jié)果的影響程度是不一樣的鬓椭。
- 如果從某個點來說颠猴,那個點確實很重要
- 但是從面來看,可能當(dāng)時你執(zhí)著的那個點變得沒有那么重要了小染。
inspire&more:
伴隨著近代科學(xué)理性的高揚翘瓮,人類步入了物質(zhì)財富極大豐富、技術(shù)文明高度發(fā)達(dá)的現(xiàn)代社會裤翩,黑暗時代的迷信和蒙昧被遠(yuǎn)遠(yuǎn)地拋棄到了歷史的廢墟中资盅,但是另一種“謬誤、無知岛都、盲目律姨、危難”卻悄無聲息地隱藏在科學(xué)理性的暗影中。莫蘭指出:它們“產(chǎn)生于我們認(rèn)識的一種肢解性的組織方式臼疫,無能認(rèn)識和理解現(xiàn)實的復(fù)雜性”择份,這是一種“分離/還原/單方面”的“簡單性范式。
--- 《復(fù)雜性思想導(dǎo)論》埃德加·莫蘭