如何發(fā)現(xiàn)和利用WEB應(yīng)用程序中潛藏的安全漏洞
一、前言
本文旨在告訴讀者如何去發(fā)現(xiàn)和利用潛藏在WEB應(yīng)用程序中的安全漏洞。懂得這些安全漏洞是如何產(chǎn)生的,才能讓我們?cè)诜雷o(hù)的過程中得心應(yīng)手。這當(dāng)中,我會(huì)試著把一些背景知識(shí),理論,小工具等等東西都介紹給大家。安全意識(shí)從來都是一把雙刃劍—-針對(duì)應(yīng)用程序的開發(fā)者和黑客們!開發(fā)者從中知道黑客是如何黑進(jìn)他們的系統(tǒng)的,而黑客也緊跟開發(fā)者的腳本學(xué)習(xí)到了開發(fā)上的知識(shí),促使一系列的技術(shù)更新和完善??偠灾诳秃烷_發(fā)者之間的戰(zhàn)斗永不停歇,這場(chǎng)戰(zhàn)斗至少促成一種東西叫:進(jìn)步!
回頭看看早期的WEB站點(diǎn),可能沒幾個(gè)人真正了解過,除了放幾個(gè)靜態(tài)的html頁(yè)面。再看看今天流行的WEB頁(yè)面,或者我稱呼它為WEB應(yīng)用程序比較貼切。它具備多功能,動(dòng)態(tài)交互,注冊(cè)和登陸的高級(jí)使用功能,配合服務(wù)器端的WEB有類似專門的瀏覽器。您可曾想過,這當(dāng)中的大部分交互和保留的信息中,大部分都是私有和敏感的信息呢。所以安全的確是一個(gè)大問題啊。
尋找WEB應(yīng)用程序,我覺得首先應(yīng)該看看是誰開發(fā)了這套程序。舉例來說:如果您已找到我網(wǎng)站上面有XSS的漏洞,那么您幾乎可以在我的寫的其他WEB代碼上找到類似的漏洞(想看看我的站嗎?后面有留我的網(wǎng)址)。 換句話說:如果我在WEB程序上犯了一個(gè)開發(fā)錯(cuò)誤(卻一直沒有去糾正過它),那說明我沒有足夠的能力去修復(fù)和意識(shí)到這個(gè)問題。這極有可能導(dǎo)致我還會(huì)在其他WEB開發(fā)中犯下同樣的錯(cuò)誤。
二、常見的WEB應(yīng)用場(chǎng)景
(1) 購(gòu)物 (京東網(wǎng))
(2) 社交網(wǎng)絡(luò)(人人網(wǎng))
(3) 銀行(招商銀行)
(4) 搜索 (百度)
(5) 拍賣 (淘寶)
(6) 博客 (百度博客)
(7) 電子郵件 (網(wǎng)易EMAIL)
(8) 交互信息 (互動(dòng)百科)
這些場(chǎng)景,只是舉例。隨著時(shí)代的進(jìn)步,玩轉(zhuǎn)這些服務(wù)需要一個(gè)過程!但在這個(gè)過程中,人們逐漸把自己需要使用的服務(wù)遷移到這些WEB應(yīng)用程序上面。比如,把微軟的office辦公遷移到google的在線辦公上面去;把outlook的email發(fā)信收信功能遷移到hotmail上面去了。換句話說,WEB應(yīng)用程序必定會(huì)帶來一系列的安全問題。如今的WEB安全早已經(jīng)成為了焦點(diǎn)。當(dāng)然,也成了開發(fā)者和黑客們之間戰(zhàn)場(chǎng)!根據(jù)OWASP統(tǒng)計(jì),大部分WEB應(yīng)用程序都是不安全的,有些甚至都沒有接觸過SSL這個(gè)東西。去年OWASP發(fā)布了一個(gè)跟web有關(guān)的漏洞分布圖,見下:
自己去琢磨參透一下上圖的含義吧。
三、 核心防御機(jī)制
核心的防御元素概況起來有這么幾點(diǎn):(1)處理用戶的每個(gè)訪問點(diǎn),確保用戶不會(huì)獲得沒有授權(quán)的存取這是每個(gè)WEB應(yīng)用都應(yīng)該做到的安全點(diǎn)位,目的是控制和處理用戶的每個(gè)授權(quán)點(diǎn)。不同的用戶都有自己不同的訪問區(qū)域,比如匿名用戶,普通用戶,管理員,他們都能訪問到屬于各自不同權(quán)限范圍內(nèi)的內(nèi)容。如果要細(xì)分一下,不如看看之前有牛人提到的縱橫的權(quán)限授權(quán)注意事項(xiàng)。這里提出3個(gè)重要的,影響防御機(jī)制的要素:::1 認(rèn)證環(huán)節(jié),WEB訪問用戶是誰?匿名用戶還是普通用戶,還是管理員?::2 會(huì)話管理,每個(gè)會(huì)話ID都精確對(duì)應(yīng)到訪問的每個(gè)訪問用戶,如何控制和處理好它們?::3 訪問控制,對(duì)每個(gè)單獨(dú)的請(qǐng)求都要做出正確的存取判斷,到的是允許還是拒絕?
以上3個(gè)核心環(huán)節(jié),缺一不可,就好比一個(gè)連鎖酒店一樣,任何一個(gè)環(huán)節(jié)出了問題都可能導(dǎo)致黑客可以繞過其安全機(jī)制獲得非法訪問的權(quán)限。(2)處理用戶每次輸入,阻止不希望看到的輸入形式出現(xiàn)眾所周知,黑客每次都輸入各種稀奇古怪的字符來攻擊WEB應(yīng)用。對(duì)此,采取對(duì)輸入的數(shù)據(jù)進(jìn)行校驗(yàn)是WEB安全防御中最大的一個(gè)安全防護(hù)環(huán)節(jié)。不可輕視。 (3) 應(yīng)對(duì)攻擊者,采取適當(dāng)?shù)姆烙陨踔林鲃?dòng)防御性的措施來挫敗攻擊者這關(guān)鍵還是看WEB應(yīng)用程序的安全防御機(jī)制。上面提到防御性措施和主動(dòng)性防御旨在阻撓黑客進(jìn)一步滲透和攻擊系統(tǒng)。這期間,如果能將被攻擊的消息和數(shù)據(jù)發(fā)送給網(wǎng)站管理員的話,將有助于及時(shí)封堵網(wǎng)站的安全漏洞。我來舉個(gè)例吧,比如有個(gè)黑客通過一句話木馬老去鏈接一個(gè)網(wǎng)站的一個(gè)文件。1個(gè)小時(shí)下來,這個(gè)文件的訪問頻率肯定是非常高了。剩下的,你懂的。類似的,針對(duì)攻擊者的安全防御機(jī)制還有: 錯(cuò)誤信息處理,日志審核,重復(fù)攻擊,管理員監(jiān)控警報(bào)等等。(4) 應(yīng)用程序管理,類似自檢功能。管理員需要將程序的功能都監(jiān)控起來(比如日志記錄),聽起來有點(diǎn)像QA做的事情。目的是要確保這個(gè)功能接口的配置正確。(不正確的WEB應(yīng)用程序配置,常常是開發(fā)者帶給黑客的“禮物”,這不是運(yùn)維的問題,不要混淆,這里沒有在搭建配置NGINX)??v觀一下,大部分WEB應(yīng)用程序都有一個(gè)類似管理后臺(tái),而大部分管理后臺(tái)中卻有安全機(jī)制不太明確的地方。我注意到有這么幾個(gè)內(nèi)部安全弱點(diǎn): ::1 在認(rèn)證環(huán)節(jié),如何判斷對(duì)方是否是真正的管理員。一個(gè)攻擊者通過類似萬能密碼就進(jìn)入了管理后臺(tái),這很有可能危及整個(gè)WEB主機(jī)安全。 ::2 有的管理面板在后臺(tái)可以創(chuàng)建一個(gè)跟管理員權(quán)限一樣大的用戶出來,這種高級(jí)權(quán)限的分發(fā)機(jī)制有時(shí)候很難把控。 ::3 跨站攻擊能夠讓一個(gè)具有管理員權(quán)限的session會(huì)話暴露給其他非法的使用者,還記得打后臺(tái)的那些xss腳本嗎?在應(yīng)用功能模塊里對(duì)邊界層數(shù)據(jù)進(jìn)行校驗(yàn)是不可缺少的:
四、攻擊應(yīng)用
第一步得做的,自然是盡可能多的收集需要攻擊站點(diǎn)的信息。下面列出的步驟可以方便您在“攻擊”之旅上更順暢:
(1) 像蜘蛛一樣收集對(duì)方站點(diǎn)信息當(dāng)然目標(biāo)是全面的收集有用的站點(diǎn)內(nèi)容信息。想要最快的熟悉查看對(duì)方的網(wǎng)站布局,可以看看robot.txt 和 對(duì)方的網(wǎng)站地圖。有時(shí)候在這些文件里常常隱含著一些敏感的信息,您一定會(huì)對(duì)其感興趣的。而這樣的信息收集工具都有哪些呢,舉例如下:- Paros 這是一個(gè)java程序,基于http和https的方式來評(píng)估web的安全風(fēng)險(xiǎn),可以在線編輯提交給服務(wù)器端的http消息體(有點(diǎn)像burp和zap)。其他特性包括蜘蛛功能,客戶端證書,代理鏈,集成的xss和sql注入掃描功能。- Burp Spider 這個(gè)不多說了,玩過burp都知道,更的介紹來這里看看。- Web Scarab 這個(gè)工具是一個(gè)可以分析http/https協(xié)議的框架工具,也是java寫的,跨多平臺(tái)。有多種工作模式,含有大量插件,用法都較為常見,易學(xué)上手。當(dāng)用蜘蛛收集這些站點(diǎn)的信息的時(shí)候,我們總是希望可以得到一些隱藏的內(nèi)容比如備份文件和一些有用的文檔。比如,我們?nèi)绻梢酝ㄟ^蜘蛛爬行獲得一些對(duì)方網(wǎng)站新開發(fā)的功能模塊(這些模塊頁(yè)面由于沒有測(cè)試而匆忙上線的),或者得到一些沒有下線的有漏洞的老網(wǎng)頁(yè)模塊,一些有價(jià)值的配置文件等等(包含文件,源文件和日志文件等等)。
(2)投射攻擊面把您采集得到的信息投射到不同的攻擊層面上來和攻擊渠道結(jié)合起來看的話,我們大致列出下面的幾個(gè)方面供大家參考:
- 客戶端校驗(yàn) 有些WEB代碼在客戶端校驗(yàn)用戶的數(shù)據(jù),嘗試檢查一下這些數(shù)據(jù)是否在服務(wù)器端有無做過校驗(yàn)?
- 數(shù)據(jù)庫(kù)交互 注意檢查是否有sql注入攻擊
- 文件的上傳和下載 注意檢查是否有LFI漏洞和#0覆蓋漏洞
- 用戶輸入數(shù)據(jù)展現(xiàn) 是否可以考慮可以丟個(gè)跨站腳本上去
- 動(dòng)態(tài)的網(wǎng)站重定向 是否可以注入惡意的http header進(jìn)去
- 用戶登錄 此處可以枚舉用戶,弱口令用戶和暴力破解用戶密碼?
- 多級(jí)登錄 對(duì)方的登錄邏輯是否完善可靠,比如oauth 1.0
- Session數(shù)據(jù) 考慮對(duì)方是否正確的處理了Session數(shù)據(jù),其數(shù)據(jù)令牌是否可以被猜解?
- 權(quán)限控制 對(duì)方是否對(duì)垂直和水平權(quán)限深刻領(lǐng)悟?有些開發(fā)者者真的就是只懂編碼,真正的碼農(nóng),可悲。
- 用戶模擬 嘗試修改URL參數(shù)來提升登陸用戶的訪問級(jí)別,特權(quán)訪問- 明文通訊 session劫持,捕獲用戶登陸憑證和敏感數(shù)據(jù)
- 離線的站點(diǎn)鏈接 有些高端網(wǎng)站用了url重寫隱藏了真實(shí)地址上面的參數(shù),離線站點(diǎn)鏈接可能暴露了這些參數(shù)的真實(shí)排布
- 系統(tǒng)對(duì)外的開放的接口 這些接口往往泄露了一些特別的存取權(quán)限和特定session的處理接口- 錯(cuò)誤消息 一些敏感信息泄露(類似http 500 錯(cuò)誤泄露的mssql信息)
- 電子郵件交互 是否可以郵件掛馬發(fā)給對(duì)方使其中招?
- 本地代碼組件下載 此類組件往往跟服務(wù)器有通訊接口,該接口是否可以溢出?
- 第三方組件 眾所周知的漏洞利用,比如大牛最愛的fckeditor…- web標(biāo)頭信息的泄露 該信息可以明確對(duì)方的web服務(wù)器版本,跑的什么服務(wù),這些版本和服務(wù)都有什么眾所周知的漏洞可以加以利用。
(3)關(guān)于繞過客戶端機(jī)制的舉例- 表單里面的隱藏域看看下面這段代碼:
Product: Sony VAIO A217S
Quantity:
很明顯,price就是一個(gè)隱藏域,它會(huì)被POST提交:POST /order.asp HTTP/1.1
Host: wahh-app.com
Content-Length: 23
Quantity=1&price=1224.95
我們可以采用2種方式來修改隱藏域,1、將它們保存到本地,然后用html代碼填寫好相應(yīng)的價(jià)格,提交到服務(wù)器。2、用上面我們提到的交互式工具webscrab或者burp來實(shí)時(shí)修改提交的參數(shù)。這樣就能隨意的修改這個(gè)價(jià)格參數(shù)了(如果服務(wù)器端不做校驗(yàn)的話)。http cookies如何修改cookies呢?作為提交數(shù)據(jù)的一部分,我們可以用交互式的webscrab或者burp來實(shí)現(xiàn)。當(dāng)然了,現(xiàn)在也有人玩fiddler,工具是死的,人是活的。繞過客戶端數(shù)據(jù)檢查的相關(guān)的方式還有很多,比如url參數(shù)變化,referer的改寫等等。結(jié)論WEB服務(wù)器端接受客戶端提交的數(shù)據(jù)最終不像預(yù)期那樣可信。在客戶端對(duì)數(shù)據(jù)進(jìn)行的校驗(yàn),最終都可能在提交的過程中被修改。具備簡(jiǎn)單的工具和很少的技術(shù)含量就可以實(shí)施客戶端的攻擊。我們應(yīng)該規(guī)避這些攻擊,而且也是可以做到規(guī)避的。就看你做沒做。
五、攻擊認(rèn)證機(jī)制
這個(gè)比較好玩,認(rèn)證最好的體現(xiàn)就在登陸用戶上面。首先我們要做的就是看看這個(gè)網(wǎng)站是否有對(duì)注冊(cè)密碼的嚴(yán)格要求。如果一個(gè)網(wǎng)站沒有對(duì)密碼的嚴(yán)格規(guī)定,那么必定存在弱口令密碼之類的東西。如果對(duì)方?jīng)]有對(duì)密碼認(rèn)證制定嚴(yán)格的策略的話,那就可以使用暴力破解的工具來對(duì)弱口令賬號(hào)進(jìn)行攻擊。其他攻擊認(rèn)證機(jī)制的環(huán)節(jié)有:1. 攔截?cái)?shù)據(jù)包,并且修改數(shù)據(jù)包 如果對(duì)方在處理認(rèn)證憑證上面不是太下功夫的話2. 密碼更改功能 是否可以改到其他賬號(hào)的密碼3. 密碼找回功能 還記得用burp找回賬號(hào)丟失的密碼嗎?4. “記住我”這個(gè)按鈕的功能使session持久,以至于可以持久到被人xss后還可以用。5. 后臺(tái)可以預(yù)見的初始化密碼, 比如 admin888 地球人都知道的6. 不安全的證書分布 遺失的SSL證書驗(yàn)證機(jī)制可能讓后臺(tái)形同虛設(shè)7. 不安全的存儲(chǔ)憑證 有些安全憑證被存放到了可以被非法獲取的地方最重要的實(shí)踐還是要從不同的角度去嘗試。特別留意主窗口的登陸窗體,那里常常有注冊(cè)賬號(hào),找回密碼,記住密碼等諸多功能。這些地方都富含了潛在的漏洞和缺陷?;〞r(shí)間到攻擊映射層面的每個(gè)地方,也許真的會(huì)換來意想不到到的“回報(bào)”。