Categories
程式開發

我是如何在7分鐘內黑掉40家網站的?


我是如何在7分鐘內黑掉40家網站的? 1

我的一個朋友告訴我,他的網站上發現了一個XSS漏洞,他想讓我深入看看。

XSS,又稱跨站腳本攻擊Cross-site scripting,它是一種安全漏洞。 XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載並執行攻擊者惡意製造的網頁程序。

我向他申請了正式的許可,這樣我能在這個網站和服務器上做完整的滲透測試。

注:這一步非常重要,注意法律風險

為了保護隱私,我用這個地址來代替我朋友的網站

1、端口掃描

第一步就是盡可能多地了解你的“敵人”,並且盡量不要驚動它們。

這時候,我開始啟動計時器計時。
我是如何在7分鐘內黑掉40家網站的? 2

這次掃描花了大概兩分鐘

掃描發現了很多開放的端口!通過FTP(port 21)和SMB(ports 139/445),我們可以猜出這個服務器是用於保存文件和共享文件的。

與此同時,它還是一個Web服務器(port 80/443和相應的代理 8080/8081) 。

如果上面的信息不夠,我可能還會做一個UDP 端口的掃描。現在唯一允許我們與之交互的端口(不需要登錄服務器)是80/443。

沒有浪費一點兒時間,我啟動了gobuster來探索這個Web服務器上讓我“感興趣”的文件。與此同時,我也通過手工的方式開始挖掘。

$gobuster -u http://example.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100 /admin  /login 

我發現/admin這個路徑對應這“管理工具”,通過認證的用戶可以修改這個web服務器上的東西,由於我沒有用戶名和密碼,在這裡走不下去了。 (劇透:gobuster也沒有發現什麼有價值的東西)

已經過去三分鐘了,還沒有發現有用的東西。

2、獲取Webshel​​l

瀏覽這個網站的時候,它需要我登錄,沒問題,用一個假的e-mail創建一個賬戶,點擊確認郵件,幾秒鐘後就登錄了。

這個網站對我的登錄表示歡迎,提示我到個人主頁去修改頭像,很貼心嘛!

網站看起來像是自己開發的,要不要“試試不受限的文件上傳”漏洞?

我迅速在本機生成了一個文件:

我是如何在7分鐘內黑掉40家網站的? 3

然後試著把它當作圖像文件上傳, 成功了!

為了避免這個漏洞,上傳者一定要對上傳的文件做處理,檢查文件擴展名,把它替換成.jpeg、.jpg,這樣可以避免遠程代碼執行。

當然,我上傳的文件沒有縮略圖:

我是如何在7分鐘內黑掉40家網站的? 4

通過“複製圖片地址”的功能,我得到了這個URL,在瀏覽器中運行一下:

我是如何在7分鐘內黑掉40家網站的? 5

哈哈,看起來我們已經有一個可以工作的webshel​​l了。

這個web服務器居然運行著Perl腳本,我從我最喜歡的備忘錄中找了一個reverse shell 腳本,設置好了IP和端口,這樣我就獲得了一個低權限的shell ——抱歉,沒有屏幕截圖。

大約5分鐘以後,我獲得了一個低權限的shell。

3、拿下數據庫

讓我十分驚奇的是,這個服務器不僅host一個web站點,而是40個!

$ ls /var/www access.log site1/ site2/ site3/ {… 更多的sites}

你也許猜到了,我具備這些web站點目錄讀的權限,可以讀任意的後端代碼。

我把注意力集中到example.com的代碼中,很明顯,在cgi-admin/pages目錄中,所有的perl腳本都是用root來連接MySQL數據庫的,密碼也是明文存放的, 我們假設它們是 root:pwned42

執行這條命令:

`mysql -u root -p -h localhost victimdbname 

Password: pwned42 

我就以root權限登錄了數據庫。

我是如何在7分鐘內黑掉40家網站的? 6

僅僅7分鐘, 我具備了對35個數據庫完全的讀寫權限!

在這裡,我有道德義務停下來,潛在的損害非常巨大。一個攻擊者可以做這些事情:

  • dump這些數據庫,這將導致35家公司的數據洩露。
  • 刪除所有數據庫。
  • 使用cronjob在apache裡留個後門

該休息一下了,停止計時器。

4、還會有什麼問題呢?

我告訴朋友這些發現,獲得進一步挖掘的許可。

在將權限升級到威力巨大的root之前,我先看看我這個有限權力的用戶能訪問哪些有趣的文件。

此時我想起來那個開放的SMB 端口,這意味著系統中應該有個文件夾在用戶之間共享,經過一番探索,我找到了這個目錄/home/samba/secured,裡邊的內容如下(請原諒為了隱私,我隱去了大量信息)

我是如何在7分鐘內黑掉40家網站的? 7

在這些目錄中發現了大量的屬於公司用戶的敏感數據,包括:

  • .psd/.ai files (設計師應該知道這些文件多重要,這是它們的工作成果)
  • Cookie sqlite files
  • 發票
  • 盜版的電子書 (我看到這些的時候不由得笑了,誰說老外不看盜版?)
  • Wifi密碼

攻擊者就可以做這些事情:

  • 到這些公司辦公室的外邊“露營”, 登錄公司的內網,然後做各種各樣有趣的、能在內網實施的攻擊。
  • 把這些敏感數據洩露出去。

這些目錄花費了我不少時間,這個漏洞後果非常嚴重。

最後一擊

用apache這個賬戶在四周看了很久以後,我決定是時候去釣個大魚了:獲取root權限

通常,操作系統是打過補丁的,只有那些配置錯誤的服務才有可能給你想要的root權限, 但是在現實的世界中,人們很少給操作系統打補丁!

這個服務器運行的是什麼操作系統呢?

我是如何在7分鐘內黑掉40家網站的? 8

內核是什麼版本?

我是如何在7分鐘內黑掉40家網站的? 9

看起來這是一個老版本!這個版本有個漏洞,叫Dirty Cow,可以提升用戶的訪問權限。

我是如何在7分鐘內黑掉40家網站的? 10

網上有篇博客講述瞭如何測試內核是否有這個漏洞,並且提供了一個腳本。

執行這個腳本,root最終到手!

我是如何在7分鐘內黑掉40家網站的? 11

遊戲結束了

我立刻給朋友寫了一封郵件,全面地告訴他這些滲透測試的細節和每一步的可能影響,然後結束了當晚的活動。

一個攻擊者可以做的事情:

  • 讀/寫服務器上所有的文件
  • 植入一個持久的後門
  • 安裝惡意軟件,並且傳播到內網
  • 安裝勒索軟件(劫持35家公司的數據庫和相關數據可不是一件小事)
  • 把這個服務器當作礦機
  • 把服務器當作殭屍網絡的一部分
  • 把服務器當作C2C服務器
  • … (發揮你的想像力)

第二天,朋友聯繫了我,說他聯繫了負責那個服務器的公司,那個文件上傳的漏洞已經fix了。

總結

  • 有文件上傳漏洞的Web應用可能導致黑客獲得一個低權限的shell

    要仔細設計文件上傳組件

  • 明文的密碼,讓我們可以讀寫35個Mysql 數據庫

    所有的數據庫都用同一種密碼可不是什麼好事情

  • 有很多的敏感數據可以閱讀

    要小心地給用戶分配文件訪問權限,遵循最小權限原則

  • 內核的漏洞讓我們獲得了root權限,

    記住給操作系統打補丁

本文轉自碼農翻身,英文原文:

How I Hacked 40 Websites in 7 minutes