一個黑客的自白書

我攤牌了,其實我是一名黑客,這是我的自白書。

我將坦白當我準備入侵一個目標時,我是如何收集信息併入侵的。最重要的是,我會給你們一些有用的忠告。

我是如何收集信息的

當我有了一個目標,我就需要開始對目標進行信息收集。

信息收集階段很重要,因爲目標一般對我來說都是黑盒子,我需要進行大量的信息收集才能知道這個系統的運行原理,以及哪裏有漏洞可以利用。

收集信息一般分爲以下幾種類別,咳咳,劃重點了,必考的,注意記筆記。

  1. 基本初始信息
  2. 比如網站的基本信息,以及背景,經營內容等。
  3. 技術信息
  4. 網站的技術棧,以及版本
  5. IP地址,端口,DNS,域名,子域名等
  6. 網站掃描,包括子目錄、敏感信息等
  7. 關聯繫統,關聯APP等,比如子公司的網站,或者內部使用的APP
  8. 常見的工具有:nmap, dirsearch, subbrute
  9. 社工(什麼是社會工程學?
  10. 關鍵重要人物信息,員工信息
  11. 內部運營方式,公司文化
  12. 社交媒體信息
  13. 利用人獲得的信息,因爲人才是最大的漏洞。
  14. 漏洞掃描
  15. 有很多漏洞掃描工具,可以幫助提前發現一些比較嚴重或者可以利用的漏洞。
  16. 常見的工具有:Nikto
  17. 抓包
  18. 通過抓包可以獲取一些重要API或者敏感信息,也可能僞造中間人攻擊
  19. 常見的工具有:FiddlerWireshark
  20. Google hacking(什麼是Google hacking?
  21. 可以幫助你收集關於這個網址的一切,比如可能找到一些敏感信息或後臺入口等

信息收集的方法有很多種,但大多都是靠工具自動化,程序員都很懶,能自動化的事情絕不手動做。

收集到的任何一個小細節都可能成爲你入侵這個系統的突破口。

通過信息蒐集階段,我們一般能得到以下這些成果:

  1. 網站後臺登陸地址。
  2. 網站內部管理系統網址。
  3. 有漏洞的老版本軟件。
  4. 社工信息主要用於構建爆破密碼字典和獲取敏感信息。比如ThoughtWorks的某個系統的密碼一定包含TW或者thoughtworks。或者通過人獲得的關鍵信息,比如密碼。
  5. 已知漏洞。並不是所有網站都會關注已知漏洞並修復,可以利用一些已知漏洞進行入侵。
  6. 網站的一些內部運行原理。比如ThoughtWorks強制要求員工定期更新密碼,比如某個關鍵系統是使用的某開源庫。

我是如何入侵的(WEB端)

終於來到彰顯我實力的部分了。

入侵成功一般有三種程度,其中第三種最危險:

  1. 拿到或修改未授權的數據。
  2. 拿到web shell,可以進行當前賬號能操作的所有權限,也可以嘗試提權。
  3. 拿到root權限,可以進行所有羞羞的事情。

常見的網站入侵手段主要有以下幾種。大部分手段的目的都是爲了直接獲取想要的信息或者獲取shell/root權限。

  1. SQL注入(什麼是SQL注入?

  2. 簡單來說,就是利用惡意SQL語句讓系統能執行你想執行的SQL語句。有些SQL語句是可以執行系統命令的,是不是覺得很可怕。所以SQL注入在某些情況下是可以拿到root權限的。

  3. 這個漏洞在過去比較常見,很多人都知道它,但現在大型正規網站基本上都沒有這個漏洞了。通常需要在收集階段去慢慢查找有沒有SQL注入漏洞,也有一些工具可以直接掃描。最好用的SQL注入工具就是SQLMAP

  4. 大部分SQL注入可以直接導致黑客拿到shell,嚴重的可以直接拿到root權限,即使拿不到shell也可以dump你的數據庫。所以危險係數非常高。

  5. XSS和CSRF攻擊(什麼是XSS?)(什麼是CSRF?

  6. XSS全稱是Cross-site scripting,即跨站腳本,CSRF全稱是Cross-site request forgery,即跨站請求僞造。他們的原理和SQL注入差不多,簡單來說就是利用前端代碼來獲取一些重要信息或者僞造一些信息。

  7. 通常你並不知道一個網站有沒有這兩個漏洞,需要在收集階段就不停的測試查找有沒有XSS和CSRF漏洞,也有一些工具可以自動掃描。比如XssPy

  8. 這兩個漏洞可能導致黑客拿到管理員用戶名密碼,登陸後臺;或者進行非法的操作,比如當你在自己電腦訪問某賬戶時,黑客通過你正在瀏覽的別的網站轉走了你的錢。所以危險係數也非常高。

  9. 緩衝區溢出攻擊(什麼是緩衝區溢出攻擊

  10. 這個比較難懂,簡單解釋就是讓代碼溢出緩衝區從而能執行你想執行的代碼。

  11. 這個漏洞依然廣泛存在,只是要實現它的難度稍大,所以一般的低端黑客都不會這門功夫。這個幾乎沒有比較簡單的工具能直接掃描,大部分需要你去看源碼手動查找漏洞。

  12. 緩衝區溢出攻擊可以讓黑客在拿到web shell後提權以獲得系統的最高等級權限,所以危險係數非常高。最出名的當屬20年前的蠕蟲病毒了,只是當時的目的不是爲了入侵。

  13. API

  14. 這個可能是大家最能理解和接受的入侵方式了。因爲現在大部分應用都使用了Restful API,然而並不是所有API都完美的做好了認證和鑑權。這就讓我們這種黑客有了可乘之機,可以通過API的非法調用來獲取網站的數據或者入侵。

  15. API利用可以分爲橫向和縱向越權。橫向就是一個用戶訪問別的用戶的數據,比如最簡單的例子就是,如果客戶的ID是自增的,就可以通過API遍歷的方式獲取這個網站數據庫裏面的所有客戶數據。縱向就是越權訪問更高級別的,比如我通過API的漏洞,把自己的賬號升級成爲管理員賬號。所以這種漏洞是能做到拿到root權限的。

  16. 邏輯/業務漏洞

  17. 這通常需要對網站的業務和使用邏輯比較熟悉。黑客常常會先重度使用網站,以便能發現一些業務或者邏輯漏洞。

  18. 比如驗證碼能繞過,或者某個重要API未鑑權,再或者我能修改別人的收款賬號,讓錢全部轉進我的口袋。別問我是如何知道的。

  19. 最典型的例子就是前段時間火遍大江南北一夜之間讓拼多多損失一千萬的薅羊毛事件。所以千萬別小看這種漏洞。輕則讓你損失一千萬,重則,嘿嘿,你自己想。

  20. 上傳漏洞

  21. 上傳漏洞是指利用網站的上傳接口上傳一些惡意的文件,以達到獲取信息或者控制系統的目的。比如上傳一個後臺管理網頁,我就可以通過我自己上傳的後臺管理界面登陸並查看網站的所有信息。

  22. 這種漏洞常出現在可以上傳文件的地方,比如頭像上傳,附件上傳。由於系統未對上傳文件進行合法校驗,導致了漏洞的存在。由於入侵程度是可以達到root權限的,所以危險係數非常高。

  23. 已知漏洞

  24. 即指的是現有框架/軟件/系統已經公佈存在的漏洞。

  25. 最出名的當屬前段時間震驚全世界的勒索病毒,病毒利用了某些版本的Windows的SMB協議中的漏洞,從而惡意加密用戶文件以勒索比特幣。最新新聞是該組織宣佈他們準備收手了,因爲他們已經掙了30億美元了。爲什麼我不是他們中的一員😭。

  26. 再比如,早期的openSSH版本有一個大漏洞是可以遍歷用戶名,這樣你就可以用獲取到任意有openSSH服務器的用戶名,再利用一個較好的密碼字典就可以爆破服務器,然後登上服務器做所有羞羞的事情了,想想就好激動呢。目前很多人都還在用有這個漏洞的openSSH版本,別問我如何知道的。

  27. 已知漏洞之所以還能成功入侵,是因爲並不是所有人所有公司都會關注漏洞的公佈,以及及時做更新。所以依然有大量的人或公司在使用有已知漏洞的框架或系統。嘿嘿,趕快看看你有沒有什麼老版本的軟件有重大漏洞呀。

  28. 0day(什麼是0day?

  29. 那什麼是0day呢,0day恰好是已知漏洞的反義詞,就是未知漏洞。就是指那些你第一個發現的漏洞,你是唯一知道這個漏洞的人,你又可以利用你發現的0day漏洞做羞羞的事情了呢。如果你發現一個可以拿到root權限的0day漏洞,那就不得了了。至於你要不要公佈出來,就取決於你是白帽子還是黑帽子咯。

  30. 那怎麼發現0day漏洞呢,這個就需要結合上面的所有方法去慢慢挖掘了,當然最重要的是少不了要專研源碼。哎,看源碼最頭疼了,不說了,寫完我還要繼續看源碼呢。

我是如何入侵的(APP端)

和網站相比,在這個移動互聯時代,越來越多的人在使用移動APP,越來越多的公司推出了移動APP,但注重移動APP安全的人卻少之又少。

那麼針對APP的入侵手段有哪些呢?

  1. 抓包
  2. 通過抓包可以獲取APP的所有請求,然後僞造請求來獲取自己想要的數據。比如app領取無門檻優惠券是在客戶端驗證每人只能領一次,那我就可以通過抓包,然後直接發送請求的方式領取無數次。
  3. 抓包有時候也能獲取很多敏感信息,比如用戶名密碼。市面上大部分app都是明文發送用戶名密碼的。不要以爲用了HTTPS就是加密的,隨便找個證書做一箇中間代理就可以看到所有解密後的數據。這個時候你就可以偷偷連入鄰居家的Wi-Fi,然後抓取鄰居的用戶名密碼了。別問我如何知道的。
  4. 抓包等同於利用API入侵,所以有時候是可以做到拿到root權限的。危險係數非常高。
  5. 反編譯源碼
  6. APP移動端最大的漏洞就是所有源碼都在你的手機上躺着的。雖然他們都是加了密或者混淆過的。但這些手段難得倒單身的程序員嗎?加密或者混淆的代碼就好像把一張拼圖打亂了放進你手機,但只要你有足夠耐心和方法,是一定能把代碼拼還原的。
  7. 當然,目前已經有很多自動化工具能幫你反編譯源碼了,不管是Android還是iOS都能獲得其源碼。
  8. 既然都有源碼了,不僅可以查找裏面的敏感信息和漏洞,還能研究該APP的業務內容,以及技術棧。比如,你可以找邏輯或業務漏洞。也可以找到一些隱藏的API,做越權調用。而且,你很可能在裏面發現一個0day漏洞。
  9. 和網站一樣的手段
  10. 當然,剛纔上面講到的所有對付網站的手段,全都適用於APP客戶端。
  11. 比如,APP端也能做SQL注入,因爲這個漏洞其實是在服務端的,所以和客戶端是什麼形式沒有關係。同時,APP端也可以利用XSS或者CSRF攻擊,雖然XSS和CSRF都是前端代碼,但因爲管理員總是在網頁端訪問後臺管理系統的。另外,大部分APP都有上傳頭像功能,說不定就有上傳漏洞哦。

來自一個可愛的黑客的忠告(防範方法&安全實踐)

如果你不聽我的這些忠告,我就不再是你的小可愛了。

那我們就來看看如何防範上面的入侵手段,以及哪些安全實踐是我們應該牢記於心的。

  1. 關於端口,目錄,子域名等
  2. 絕不開放多餘的端口。定期做好端口所用軟件的更新工作。能不開放22端口就不開放。因爲每天都有黑客實時在全球掃描開放的22端口。有Linux服務器的小夥伴可以去檢查一下你的服務器,如果22端口開着,看看是不是每天都有很多ssh登陸失敗的日誌。
  3. 嚴格管理網站目錄的訪問權限,不僅要認證,也要鑑權。某個不起眼的目錄可能就成爲了黑客進入的鑰匙。
  4. 哪怕是僅內部使用的域名或子域名,都要嚴格尊從安全實踐。你絕對想不到黑客能在最邊緣的網站裏面找到什麼最核心的內容。
  5. 密碼與敏感信息
  6. 一定要定期更換密碼,這一點TW做得非常好。你永遠不知道誰在背後悄悄的用你的生日和電話爆破你的賬戶。(不是我)
  7. 敏感信息一定不要輕易寫在某個公開的地方,包括寫在源代碼裏。可執行的二進制文件都是可以反編譯的,所有敏感信息都將暴露在外。另外,全球每天都有黑客在定期掃描GitHub,就是爲了獲取某個粗心鬼提交的服務器賬號或者數據庫連接字符串。TW也在定期掃描GitHub,不一樣的是,TW是爲了防範員工提交了敏感信息。
  8. 撞庫。撞庫指的是用從別的地方獲取的用戶名密碼來嘗試登陸某個指定系統。比如我獲取了你的手機號和微信密碼,我就可以用來嘗試登陸支付寶,因爲很可能你使用了同一個密碼。撞庫經常發生,此前很多大型互聯網公司都遭遇過撞庫。可見,定期更改密碼多重要,更重要的是不要所有地方都使用同一個密碼。
  9. 社會工程學
  10. 社會工程學是一門藝術,掌握好了就像007一樣無孔不入。因爲人才是最大的漏洞。如果社工做得好,是可以直接獲取登陸用戶名和密碼的。
  11. 比如釣魚就是一種常用的社工手段。其中釣魚網站和釣魚郵件是最常見的。而釣魚郵件對於客服人員或者常用郵件的公司員工是最好用的。別問我如何知道的。
  12. 再比如,回憶一下有沒有某個和你搭訕的小哥哥問過你關於密碼的問題。(我不是那個小哥哥)
  13. 終極比如,如果我有TW員工的用戶名密碼,我是不是可以獲得超級多的TW內部數據信息。那如何獲得TW員工的用戶名密碼呢?自己想去吧。
  14. API
  15. 不要以爲訪問API需要用戶名密碼你的API就是安全的。有太多手段可以獲取或繞過用戶名密碼。也不要以爲用了HTTPS就是安全的,它只是一層防普通人的殼。
  16. 所以,對於API不僅要做認證,也一定要做鑑權。認證指的是訪問API需要提供的訪問憑證,而鑑權則指的是某個已認證的用戶是否有權限訪問某個資源。記住,less is more。
  17. 同時參數的傳遞也會暴露很多信息,必要時也要對參數進行加密。這一點谷歌就做得很好,它大部分網頁的參數都是加密傳遞的。
  18. 不要以爲你又是API Gateway,又是ELB的,又是反向代理的,就無法進入你的服務器了。API就是黑客進入服務器的一條直路。所以API的安全相當重要。
  19. SQL注入
  20. 其實目前使用的Spring等框架開發的網站後端,幾乎都沒有SQL注入漏洞了,因爲從框架層面就杜絕了這個漏洞。這個漏洞主要出現在早期的PHP框架和ASP.net。
  21. 杜絕這個漏洞出現的方法就是一定要對SQL的傳入參數做驗證,也一定不要拼接SQL語句。
  22. XSS和CSRF
  23. 杜絕這個漏洞的方法也是對傳入參數一定要做驗證。
  24. 同時一定不要把前端傳來的數據直接存入數據庫,你永遠不知道前端會傳來一段什麼樣的惡意代碼。
  25. 上傳漏洞
  26. 同上面兩個漏洞一樣的,它告訴我們不管輸入是什麼,一定要做驗證,特別是文件。因爲它有可能是帶有惡意代碼的文件。
  27. 不僅要驗證文件類型,還要驗證文件大小,以及要驗證文件內容。
  28. 緩衝區溢出漏洞
  29. 這個漏洞是廣泛存在的,也是比較難攻擊和難防的。
  30. 可以通過使操作系統的緩衝區不可執行,從而阻止攻擊者植入攻擊代碼。也可以利用編譯器的邊界檢查來實現緩衝區的保護。
  31. 已知漏洞
  32. 已知漏洞可能是某個框架的漏洞,比如Spring框架的漏洞。也可能是一個軟件的漏洞,比如OpenSSH的漏洞。同時它也可能是操作系統的漏洞,比如前段時間比較火的Linux內核漏洞。
  33. 防範已知漏洞的方法就是定期關注重大漏洞的發佈,並及時更新修復。比如Windows的勒索病毒,如果你及時更新了操作系統就不用怕這個病毒了。
  34. 反編譯
  35. 防範反編譯最基本的一步就是混淆代碼,混淆之後的代碼會變得非常難讀。但讀懂這個代碼也只是時間問題。
  36. 因此,一定不要把任何敏感信息放到會編譯進客戶端的代碼。包括一些敏感的API或者測試數據。
  37. 邏輯&業務漏洞
  38. 這個漏洞告訴我們有完善的測試流程是多麼的重要。
  39. 我們每天實踐的TDD、自動化測試等都是可以防範這種漏洞的最佳實踐。
  40. 這個漏洞發生的原因常常是因爲某個程序員爲了趕進度匆匆上線了一個沒有測試的功能造成的。
  41. 同時,絕不能依賴sonarQube/veracode等工具來幫我們檢查漏洞,它只是必須有的底線,但不是全部。還需要大家把安全牢記於心,就像人劍合一。
  42. 0day
  43. 其實我們每天code review中就能發現很多0day漏洞。所以堅持正確的敏捷實踐還能在安全上給我們帶來很多好處。
  44. 完善的測試系統也是杜絕0day漏洞的好方法。
  45. 同樣,不要依賴sonarQube/veracode等工具來幫我們檢查漏洞,更多的要靠人的安全意識。道路千萬條,安全第一條,代碼不規範,親人兩行淚。

最後

看完了這份自白書,是不是有點蠢蠢欲動。不管你是想去嘗試入侵也好,還是學習安全實踐也好,記得要做一個安全守法的小可愛哦。

黑客常常爲了金錢,虛榮心或者私利而不擇手段的入侵其他系統。有的黑客是白帽子,會公佈找到的漏洞,比如谷歌就會獎勵找到漏洞的黑客。但有的黑客會在暗網等地下市場買賣數據以謀取暴利,或者入侵系統進行引流或者植入惡意廣告來掙錢,也或者會把入侵的機器作爲肉雞做其他壞事,比如挖礦。

技術只是一種工具,就看掌握它的人如何去使用它。攻和防是安全領域永恆的話題。內建安全也一直都是TW在努力的方向。只有當我們知道了如何入侵,才能知道如何防範。

最後,這只是一份入門版的介紹,因爲內容很多,很多知識都只是基礎的提到了,未來會展開細講更多的黑客手法和安全實踐。

也歡迎任何小可愛找我一起探討最佳安(ru)全(qin)實(fang)踐(fa)。
文/ThoughtWorks 顏松柏


更多精彩洞見,請關注微信公衆號:ThoughtWorks洞見

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章