1. 程式人生 > >精通JavaScript攻擊框架:AttackAPI(上)

精通JavaScript攻擊框架:AttackAPI(上)

宇文

多年來客戶端安全一直未引起人們的足夠重視,但是如今情況發生了急劇轉變,客戶端安全已經成為資訊保安領域的焦點之一。Web惡意軟體、AJAX蠕蟲、瀏覽歷史暴破、登入檢測、傀儡控制技術網路埠掃描以及瀏覽器劫持等各種技術只是安全研究人員地下實驗室的部分技術,但是已經帶來了非常大的影響。

一種型別的安全專業浮現並變成主流利用機制時,供應廠商和個人就會開始發行框架和自動工具,來處理工具和測試過程。雖然供應廠商最初主要將精力放在AJAX審計工具方面,但是安全研究人員更關注的是連綿的系統邊界,以探索事實真相。

由於存在多種可能的攻擊向量,Web應用程式安全社群也建立了多個框架來探測、利用安全漏洞

,從而揭示Web 開發社群所面臨的種種問題。而本文將向大家介紹AttackAPI的詳細使用方法。

一、AttackAPI概述

AttackAPI是一個基於Web的攻擊構造庫,它可以結合PHPJavaScript及其他客戶端和伺服器端技術進行使用。AttackAPI有幾十個不同功能的模組組成,這些模組既可以從瀏覽器使用,也可以從JavaScript直譯器執行,例如 Mozilla Rhino。它的目標是為實現漏洞利用而提供一個簡單易用的介面,主要用於測試和驗證之用。

在開始研究AttackAPI子程式之前,我們先來做一些準備工作。首先,下載該庫,然後搭設一個測試環境,我們將在這個環境中開發大部分示例程式。為此,我們需要安裝、執行以下應用程式:
支援PHP 4.x或者更新的版本的HTTP伺服器(Apache+PHP或者AppServ)

www.apache.org/
www.php.net/
www.appservnetwork.com/
從GNUCITIZEN下載最新的AttackAPI
www.gnucitizen.org/projects/attackapi
Mozilla的網路瀏覽器Firefox
www.getfirefox.com
Firefox擴充套件Firebug,地址www.getfirebug.com/

啟動Apache HTTP 伺服器並且確保已在正常執行中。 在網上,介紹這類任務文件很多,在此不再贅述。然後,從GNUCITIZEN下載AttackAPI程式包 ,並且將其抽取到Web伺服器的根資料夾中。例如,如果使用的是AppServ,那麼可以將這些檔案放在C:AppServwwwattackapi中。

確保執行的Firefox已經安裝了Firebug。我們之所以不辭勞苦的準備這些東西,是因為它們可以在將來為我們剩下許多力氣,當我們從Firebug的動態控制檯下做這些工作的時候,要比不停地儲存和開啟一些隨機的臨時檔案要輕鬆得多。雖然我們這裡使用的是Firefox,但是這裡的例子照樣可以用在其它瀏覽器上,只需稍作修改即可。

做好這些初始設定後,開啟Firefox,從localhost導航至AttackAPI資料夾,即http://localhost/attackapi。這時就會看到如圖1所示內容。

\

從AttackAPI的檔案結構來到Build|Tests|firetest-interactive.htm,這個檔案中包含了下面我們將用到的一些元素。因為我們不會對開啟的頁面的HTML內容做任何修改,所以開啟 Firebug,並調整控制檯使其擴充套件至整個螢幕。
確保位於Console 選項卡中,並輸入命令:dir(AttackAPI)。如果一切正常的話,就會看到如圖2所示的AttackAPI 文件物件模型(DOM)結構。

\

在本文剩下部分中,我們將使用$A物件而不是AttackAPI來訪問和呼叫庫物件和方法。$A物件是AttackAPI的一個獨立的例項,並且包含更易使用的AttackAPI方法的快捷方式。 AttackAPI是一個結構化程度很高的庫,通過圖2可以看出,它還進一步分為AttackAPI.core(庫核心)、AttackAPI.dom(跨瀏覽器的方法)和AttackAPI.utils(跨直譯器的方法)。通過使用上面所說的約定,AttackAPI的base64編碼函式的完整路徑為$A.encodeBase64,是不是非常簡潔呀?!這樣輸入程式碼的時候是不是省力氣了,所以說,懶惰是促進人類進步的主要動力之一。

由於我們需要輸入的程式碼較多,所以建議使用更大的命令列,首先在“選項”下拉選單中選擇“更大的命令列”選項,如同圖3所示。

\

這時命令列會出現在視窗的右側,如下圖所示:

\

因為我們要鍵入許多程式碼,所以難免出現輸入錯誤。所以開啟更大的命令列之後,改起來會更快、更好。
需要注意的是,我們可以使用Load AttackAPI 書籤將AttackAPI 載入到選擇的頁面上,尤其是當我們需要為某個站點開發利用程式,但是又不想通過Firebug修改該頁面的原始碼或者插入指令碼標籤的時候格外有用。該bookmarklet可以是從www.gnucitizen.org/projects/load-attackapi-bookmarklet下載。現在開始研究AttackAPI的客戶端踩點功能。

二、客戶端踩點

攻擊者一旦控制了受害者的瀏覽器,他們首先要做的第一件事情就是弄清楚他們俘獲的到底是什麼樣的客戶端和平臺。為達到這一目的,他們只需在Firebug的命令列中輸入下列命令便可:
console.log($A.getAgent() );
console.log($A.getPlatform() );
命令列視窗下方的“執行”按鈕,就會看到這兩個函式的執行結果,如下圖所示:

\

如您所見,瀏覽器型別和作業系統版本已經展現在我們眼前了——事情就是這麼簡單!
然而,攻擊者能做的事情遠不止這些。在Firebug的命令列下輸入如下所示的兩行命令:
console.dir($A.getCookies() );
console.dir($A.getPlugins() );
命令列視窗下方的“執行”按鈕,就會看到這兩個函式的執行結果,如下圖所示:

\

GetCookies函式會檢索出所有可用的Cookie,注意,這裡的getCookies函式是一個易於使用的JavaScript 物件,這樣我們就無需對DOM物件document.cookie 進行手動解析了。 與getCookies函式類似,getPlugins函式會列出目前已經安裝的所有瀏覽器外掛;這個函式能夠執行在大多數瀏覽器上,但是Internet Explorer(IE)除外。

這裡需要注意,如果客戶端使用的是IE的話,AttackAPI能夠訪問儲存在剪貼簿中的資料:我們可以使用AttackAPI.dom.getClipboard來讀取剪貼簿,並能使用AttackAPI.dom.setClipboard 函式來設定剪貼簿。通常情況下,剪貼簿會儲存有攻擊者感興趣的內容,例如使用者有時候會複製貼上他們的密碼。通過使用這項功能,攻擊者可以很輕鬆地竊取剪貼簿中的資料,進而利用這些資料來控制使用者帳戶。

我們知道,攻擊者可以攻擊位於區域網內部的裝置。為此,他們必須具有對區域網內部結構有一個很好的瞭解才行,對內部網路圖範圍更應該有一個詳細的瞭解。他們可以做出以下假設,家庭使用者的地址範圍為192.168.0.0–192.168.1.0,邊界路由器地址為192.168.0.1或者192.168.1.1,而企業使用者位於10.0.0.0範圍內,因為這個地址範圍能夠容納更多的使用者。另一方面,在下列三個AttackAPI函式的幫助下攻擊者可以很輕鬆地獲得內部網路資訊:

console.log($A.getInternalIP() );
console.log($A.getInternalHostname() );
console.dir($A.getInternalNetworkInfo() );

命令列視窗下方的“執行”按鈕,就會看到這兩個函式的執行結果,如下圖所示:

\

攻擊者可以很輕鬆地使用以下命令推測出邊界路由器:

console.log(new String($A.getInternalIP() ).replace(/.d+$/, ‘.1’) );
知道了這些,攻擊者可以針對它發動大量不同的攻擊,以確定它的型別和版本,並最終通過跨站點指令碼攻擊(XSS)或者某些其他弱點來利用這個邊界路由器。儘管老練的攻擊者能夠輕鬆提出一個合理的猜測,然而,猜測畢竟只是猜測而已,它未必總是有效。下面的內容中,我們將要利用AttackAPI進行更多的網路操作,但是現在我們只把精力集中在客戶端調查上。

對於AttackAPI來說,激動人心的功能並不在於獲取代理、平臺、cookies、外掛和內部網路資訊,更多好戲還在後頭。只要簡

轉載於: