聊聊web漏洞挖掘第一期

飄渺紅塵✨發表於2023-01-11

  之前寫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年度總結。

  

  

  • 新增到短語集
     
    • 沒有此單詞集:英語 → 中文(簡體)...
       
    • 建立新的單詞集...
  • 複製

相關文章