之前寫2022年度總結的時候,有提到要給大家分享漏洞挖掘技巧。這裡簡單分享一些思路,更多的內容需要大家舉一反三。
文章準備昨晚寫的,昨天晚上出去唱歌,回來太晚了,耽擱了。昨天是我工作的last day,心裡還是有點難受的。我想了想,人生大抵如此。在短暫的生命中,認識不同的人,和他們相識到相知,再到離別。 以此迴圈,以此交替。迴圈往復,週而復始。幸好現在還是有一些朋友在身邊,幸福有時候還挺簡單的,有工作,有朋友,有肉吃。
言歸正傳,聊點正經的。
模擬安全測試
資訊收集真的說了好多年了,公眾號/安全資訊網站上經常說,而且github上隔三差五就會出幾個資訊收集的工具。資訊收集可以說是web漏洞挖掘中最重要的階段。現在很多單位面試,都可能會問如何對一個廠商進行全面的資訊收集,看看你對資訊收集的理解,我覺得這個就很好。
以資訊收集為核心,是沒有錯的。說到資訊收集,網上文字提到最多的就是對子域名的資訊收集
那麼我們在做漏洞挖掘的時候,常常會使用網上的優秀的資訊收集工具進行資產收集,有耐心的同學,還會對ip段進行資訊收集,進行C段的掃描等。怎麼評定資產收集工具的好壞呢?我們常常透過檢視github star數,README介紹或是文章中的工具科普,去了解一款工具,是否是不錯的資產收集工具。比如說在挖國內專案的時候,我一般會使用OneForAll進行資產收集。
因為挖掘的目標的多樣性,所以掃描結果也總是不同的。有些目標,工具掃描出來的結果就很多,有些目標,工具掃描出來的結果就很少,甚至幾乎沒有結果。有時候還挺"束手無策"的,不知道如何下手。跑完資產,我會訪問子域名一個個開啟看,全程我會開著burpsuite,我會勾選所有選項,我不會錯過任何網站資訊,包括圖片資訊,也是我需要了解的。
我會去看網站的業務功能點,我會隨便翻一翻點一點,然後檢視burpsuite歷史記錄:
這個階段,我想用一個詞描述它,那就是了解階段:
我不會測試漏洞,我會簡單看下這個網站是做什麼的?這個why對我很重要。我好對這個網站進行分類,我會記錄他們。
下一步簡單瞭解了網站是什麼型別的網站後,我會透過檢視Burpsuite歷史記錄,瞭解它的介面形式,如果能透過觀察資料包,能發現他的網站組成結構,那是再好不過了。
那麼怎麼了解你的網站是使用了什麼技術開發應用的呢?方法有很多,我會透過植入一些髒資料或預設,有些網站如果沒有做統一的錯誤處理,它會暴露一些程式的應用資訊,如json報錯錯誤,它可能是fastjson的,也有可能是jackson的,但是大機率它是jackson。這時候我們該怎麼做?對於不熟悉jackson反序列化的朋友,我強烈建議你維護個wordlist,為jackson vulnerability wordlist。從各大文章/github中檢索所有jackson的漏洞利用的payload,把他們引入Fuzz,跑一下,萬一成了呢?萬一他有反序列化漏洞呢?
很多朋友有個疑惑,我Fuzz了,怎麼知道它有沒有漏洞呢?那麼我們需要了解這個漏洞的特徵,觸發特徵是什麼?
一般來說常見的有兩種,也是很好用的兩種。1.response中直接回顯的 2.dnslog中有回顯的
我們只要在Fuzz階段,觀察和搜尋response中是否有我們的特徵資訊,或者重新整理dnslog,檢視是否有dnslog資訊返回,以此來判斷是否存在漏洞。
這種Fuzz很好用。在很多地方你都可以使用他們。優勢在哪裡?
1.無需懂原理你也能挖到漏洞
2.迅速檢測漏洞是否存在
3.無需太多的思考
Fuzz的劣勢也很明顯,因為不懂jackson反序列化漏洞原理,導致看到報錯資訊,就會嘗試反序列化Fuzz,會比較盲目,會浪費很多時間在Fuzz上,結果往往是不如意的。所以最好的Fuzz建立在懂漏洞原理的情況下,實現更精準的判斷。總體上來說,這種劣勢,在安全測試中,影響不會很大,佔比不會很高。
對於大多數的網站來說,瞭解他們的網站業務往往不會很難,不需要花太多的時間,那麼下一個階段就是熟悉->詳細功能點安全測試
迅速熟悉網站後,就要開始對網站上的各個功能點做安全測試。對於新手來說,挖越權就好了,看到功能點,就開兩個賬號,嘗試新增資料,刪除資料,修改資料和查詢資料,抓包這些功能點,修改其中的唯一性id。迴圈這個動作,堅持這樣做,不說挖到高危,一定能挖到漏洞,還迅速提升了邏輯挖掘的實戰能力。
後面經過大量的實戰後,可能會發現修改資料的時候,可能有多個唯一性的id。在修改資料查詢資料的時候,發現根本不存在唯一性id等問題,那麼又需要新的方法去做安全測試。不過我說的這些情況,往往不會很多見。
測試完功能後,運氣好,可能會挖到1-2個邏輯漏洞,運氣不好,可能一個都沒挖到。那麼如果你挖的是src,大多數人大機率是運氣不好的,往往一個漏洞都沒挖到,發現測試了一下午,一無所獲,還不如打遊戲呢。
在這個階段,大多數人就放棄測試越權了,覺得浪費時間了。我想說持續這個動作,持續1周-2周,我希望你堅持下來,很枯燥,但是按照我的經驗來看,只要走量的話,只要能觸碰到足夠多的功能點,你一定能挖到漏洞。
我懂越權,為什麼我還會挖不到越權? 被什麼困住了?
大多數人覺得測試越權,需要花活tips,我個人覺得大多數時候測試越權就是修改引數沒別的東西。總體原因有兩個。
1.你測試功能點,心太粗了,覆蓋面不夠,就是你的功能點覆蓋面不足
2.你觸發不到更多的功能點,被困住了
對於1的情況,有一些緩解方案。
(1)尋找多級分類的標籤頁,就要找那種小眾的功能點,最好是點了n個頁面觸發到的功能點,尋找那種"枯井暗溝"的功能點,之前挖谷歌,就挖了一個核心業務的越權,就是從多級目錄下的一個不起眼的按鈕處挖到的越權漏洞。
有時候我們看到複雜的業務邏輯,看到非常多的功能點,我們不要害怕測試,他們雖然測試很累,但是大機率會有所收穫,不會"白跑一趟"。
對於2的情況,個人覺得是最痛苦的。大多數困住我們的不是我們不會測試越權漏洞,抓包修改引數即可,多簡單啊,困住我們的是其他。比如說開啟資產子域名,都是登入框,開啟子域名,都是404,403,502頁面。我差的是越權嗎?我差的是觸發功能點!那種感覺就像渾身的力氣,一拳打在棉花上一般。
為了觸發更多的功能點,這時候我會對404,403頁面進行目錄Fuzz,對登入框的地方,我會嘗試爆破,不厭其煩的看著js檔案,拼接路徑。我會繼續資訊收集。我想到了老外常說的一句話,這邊我貼一下:
Never rely on a single tool for recon as you may miss out your targets. 翻譯過來就是不要依賴單一的偵查工具,因為你可能會錯過你的目標。
為了觸發更多的功能點,可以說我們做了非常多的前置工作。可見觸發到功能點是多麼的重要。我甚至可以說,現在的web安全測試,很大程度上是面向功能點的安全測試,對功能點的web安全測試,在整個安全測試中,佔比很大。
xss有話說:
在挖一些大廠的時候,發現簡單的輸入輸出xss都變少了。變少是正常的,反射檢測邏輯相對簡單,我可以說大部分白帽子都有反射xss檢測工具。再加上現在的開發情況,大廠簡單的反射xss會很少。
所以我這裡建議大家去學習學習PostMessage xss漏洞挖掘,國外白帽子,挖xss的,都在往PostMessage xss傾斜,我的部落格有寫過PostMessage xss學習案例。感興趣的,可以看看學習下。
儲存xss: 儲存xss其實很好挖,真的。只要你能觸發到足夠多的功能點,儲存xss,就有挖到的可能。我這邊測試儲存xss,最喜歡用的payload為:
'"><img/src=1>
我的經驗告訴我,如果有圖片顯示,那麼大機率這裡可能有儲存xss,這個方法也可以測試反射xss,但是對於反射xss來說,這個絕不是最好的探測payload。這裡說明這個payload,是再次強調了在漏洞挖掘中,特徵測試方法,是非常重要的tips。 img這個payload是基於響應的,我這邊的測試經驗告訴我很好用。
它真的沒漏洞啊?
在測試一些專案或者目標的時候,發現憑自己的技術,很難發現漏洞了,如何破局?
1.資產監控 子域名/埠
對資產目標進行24小時/48小時一次的資產檢查,對新資產進行告警
資產監控是很有用的,他可以發現新資產。現有資產沒發現安全漏洞,很大機率是因為業務變動太小了,新的子域名,代表新的業務變動,這時候去測試,大機率會有安全漏洞。
2.新功能點
監控新業務更新的頁面,第一時間發現新功能點
很多網站,不以子域名上線標誌為新業務上線,新業務的上線依賴於request path,這時候就要監控更新動態的地方,然後再訪問對應的網站頁面,去進行功能點安全測試
。。。。。
js裡面的小秘密:
看不到後端程式碼的今天,我們唯一可以看到的就是前端,javascript程式碼,我們要好好珍惜,利用它們,一些基於js的tips:
前端是我們挖洞的夥伴,他可以變成我們手上最鋒利的刀。
安服的困擾?
身邊好幾個做安全服務的,平時工作也是挖漏洞的,說挖自己公司的專案,說常常挖到漏洞。但是一去挖偏賞金獵人的專案,就束手無策。我該怎麼辦?
我相信這個問題,絕對困擾了絕大多數的安全服務工程師。很多時候,我們想去掙點外快,發現自己工作中用到的那一套,不適用於眾測/src目標。
針對這種情況,我想說具體問題具體分析。
1.熟悉當下的工作環境,瞭解你做的大部分專案是什麼型別的。你做安服期間,做了什麼專案?這些專案有什麼特徵?
2.把安全服務的專案和眾測/src目標進行對比,尋找他們的不同點,尋找出難點在哪裡,尋找出問題點在哪裡。
3.對於問題點,能解決掉,我們就儘量解決掉。對於難點,我們可以對外尋求幫助,和其他同行朋友溝通交流。
4.尋找志同道合的朋友,一起挖洞,投入時間,堅持下去,我覺得是很重要的。
5.完善你的wordlist
。。。。。。
讀懂自己:
對於做漏洞挖掘的,都應該知道自己需要什麼,是抱著什麼目的去挖漏洞的。
1.對於短期學習漏洞挖掘,想快速挖到漏洞的同學。這些人是想快速獲取金錢變現的。
對於web漏洞挖掘。就我個人而言,我能挖到漏洞,但是我自己很難快速挖到漏洞,還是需要了解網站業務。但是我知道其他人可以快速挖到漏洞,而且這種人不少,還很多。
想要快速挖到漏洞,那麼你一定要提高你的認知。比如說你有一個別人都不太知道的漏洞挖掘思路,如針對特定功能點的測試思路,這種思路一使用,是大機率爆漏洞的。漏洞挖掘中很核心核心的一點就是思路,想贏,還是需要奇招。我說一個奇招,過去幾年被頻繁使用的,如科學記數法dos攻擊。這些tricks,我都叫他奇招。奇招難點在哪裡?
(1)思路是很難獲取到的,一般漏洞的難點在於思路,web漏洞挖掘,大多數沒有技術難點。
(2)思路是無價的,如黃金一般。
(3)提高邏輯思維能力,瞭解深入網站業務。
(4)加入一些知名安全團隊,和他們討論交流,交流是web安全漏洞挖掘技術提高的手段之一!
(5)不要停止學習,所有的tricks,都能追根到原理。多做程式碼審計,不限語言。尤其是邏輯類的程式碼審計,多看案例。
。。。。。
2.對於準備長期做漏洞挖掘的,就要把戰線拉長,而不是在意短期得失。應做好,做全資訊收集,同時日常要學習程式碼,閱讀程式碼,打好基礎等。對於可重複性的手工操作,要儘可能的半自動化,解放雙手,減輕自身壓力。同時日常還要刻意訓練自己的觀察力,細心和耐心。
漏洞挖掘目標選擇:
如果你是為了學習漏洞挖掘,那麼選擇什麼目標都可以,但是如果你是來賺錢的,那麼你還是要儘可能的選擇軟柿子。
為什麼我們做漏洞挖掘,總是要學習很多web開發知識?還要學習加解密技術等,學習很多知識,他們往往很雜。
真相很殘酷,一般測試金融類的網站,app多多少少會有些加密,一些核心網站,還會有其他防護,他們不是針對安全的,他們有時候是為了防爬蟲,風控等。這些目標很顯然不是軟柿子,在目標受限的情況下,要不是迫不得已,沒人願意測試他們。
所以你想快速賺錢的,不管是長線還是短線的。你要儘可能選擇功能點多,且目標範圍大的廠商。國內我推薦挖阿里和騰訊,他們資產目標範圍大,資產更新頻繁,並且功能點多。其他的src也可以,只要符合目標範圍大,並且功能點多的特徵,理論上你都可以嘗試嘗試。
如果可以安於現狀的賺錢,我相信大多數人都是躺著安於現狀。隨著web的快速發展,很多目標專案,就是一個app,或者一個網站,讓你測試api,再踢著我們屁股,逼迫我們成長。我覺得這也不一定是一件壞事。如果無法避開,那麼我們就坦然接受他們,去解決問題,可以抱怨,但是最終還是要解決他們。解決它們的成就感比獲取賞金更快樂!友情提醒: 不要過度沉迷於難專案,大多情況下他們沒漏洞,而且會嚴重打擊你的自信心。因為很有可能你會和軟柿子失之交臂,除非你是抱著學習的態度,不為了金錢!所以有力氣的時候,要注意發力點,格外重要。
關於怎麼評估軟柿子,選擇目標難度大小問題,可參考我的2022年度總結。