本文概要:本篇文章主要講解了局域網(wǎng)內(nèi)的DNS劫持的方法,原理,防范以及撘環(huán)境復(fù)現(xiàn)
0×01 原理
DNS決定的是我們的域名將解析到哪一個(gè)IP地址的記錄,是基于UDP協(xié)議的一種應(yīng)用層協(xié)議
這個(gè)攻擊的前提是攻擊者掌控了你的網(wǎng)關(guān)(可以是路由器,交換機(jī),或者運(yùn)營(yíng)商),一般來(lái)說(shuō),在一個(gè)WLAN下面,使用ARP劫持就可以達(dá)到此效果。
你在訪問(wèn)一個(gè)網(wǎng)站的過(guò)程中,經(jīng)歷了如下幾個(gè)階段:
以訪問(wèn)freebuf的主頁(yè)為例:
- 地址欄輸入 freebuf.com
- 訪問(wèn)本機(jī)的hosts文件,查找 freebuf.com 所對(duì)應(yīng)的 IP,若找到,則訪問(wèn)該IP
- 若未找到,則進(jìn)行這一步,去(遠(yuǎn)程的)DNS服務(wù)器上面找 freebuf.com 的IP,訪問(wèn)該IP
可以通過(guò)Wireshark抓包來(lái)看一下這個(gè)過(guò)程
中間人劫持就發(fā)生在第三步:由于惡意攻擊者控制了你的網(wǎng)關(guān),當(dāng)你發(fā)送了一個(gè)查找 freebuf.com 的IP的請(qǐng)求的時(shí)候,中間人攔截住,并返回給你一個(gè)惡意網(wǎng)址的IP,你的瀏覽器就會(huì)把這個(gè)IP當(dāng)做你想要訪問(wèn)的域名的IP!!這個(gè)IP是攻擊者搭建的一個(gè)模仿了目標(biāo)網(wǎng)站前端界面的界面,當(dāng)你在該界面輸入用戶名密碼或者付款操作的時(shí)候,就會(huì)中招。
由于DNS劫持導(dǎo)向的界面的URL是完全正確的,因此
這類攻擊一般極難分辨!

攻擊者可以將網(wǎng)頁(yè)的前端做的極為完善!幾乎和原網(wǎng)頁(yè)一模一樣,各種鏈接,也都指向正確的地方,只有這個(gè)登陸框是有問(wèn)題的,一旦輸入用戶名密碼就會(huì)被攻擊者所接受到。
0×02 防范
一般來(lái)說(shuō),這種攻擊的防范是很難的!因?yàn)閁RL和頁(yè)面都是正常的,不是對(duì)web技術(shù)有很深了解的人根本無(wú)從下手(如果攻擊者的頁(yè)面復(fù)原的足夠真實(shí)的話,但是我們還是有一些方法來(lái)進(jìn)行防范的
- 使用SSL(HTTPS)進(jìn)行登錄,攻擊者可以得到公鑰,但是并不能夠得到服務(wù)器的私鑰
- 當(dāng)瀏覽器提示出現(xiàn)證書問(wèn)題的時(shí)候,謹(jǐn)慎,再謹(jǐn)慎!確定你所在的網(wǎng)絡(luò)環(huán)境是安全的,該網(wǎng)站是可信的再去訪問(wèn)。
- 不在連接公共wifi的時(shí)候隨意進(jìn)行登陸操作

如果出現(xiàn)了像上圖這樣的提示,那么有兩種可能,
- 一種是服務(wù)器的HTTPS證書沒(méi)有正確的配置,
- 另一種就是你可能遭到了中間人劫持,數(shù)字證書無(wú)法通過(guò)瀏覽器的驗(yàn)證
一般來(lái)說(shuō),只有一些公司和學(xué)校的內(nèi)網(wǎng),一些個(gè)人站,和(12306) ,會(huì)遭遇證書配置的問(wèn)題。其他的正常大型站點(diǎn),尤其是我們經(jīng)常使用的一些網(wǎng)站,不會(huì)出現(xiàn)此類問(wèn)題,而需要登錄的,經(jīng)常遭遇釣魚的,正是這些站點(diǎn)。因此,遭遇這種情況的時(shí)候,一定不要輕易的填寫用戶名和密碼。
這種攻擊的影響的范圍一般是很小的,只局限魚一個(gè)內(nèi)網(wǎng)的范圍,總體來(lái)說(shuō)還是不必?fù)?dān)心過(guò)多,當(dāng)然,如果是運(yùn)營(yíng)商劫持,那就另當(dāng)別論,不過(guò)運(yùn)營(yíng)商劫持一般也只是插入廣告,不會(huì)大膽的直接用這種方式進(jìn)行釣魚攻擊。
0×03 攻擊者的目的
釣魚攻擊盜取密碼
誘導(dǎo)用戶進(jìn)行填寫登錄表單的操作,將POST的地址改為自己的服務(wù)器地址,以獲取受害者的用戶名和密碼
特別注意:
有一種這樣的情況,用戶在填入表單之后,用戶猶豫了,并未點(diǎn)擊提交/登錄 之類的按鈕以發(fā)送提交表單,但是此時(shí),輸入的內(nèi)容已經(jīng)通過(guò)ajax的方式發(fā)送了出去。
function submit() {
var data = {
name: $("#username").val(),
password: $("#password").val(),
};
$("#submit").attr('disabled', 'disabled');
$.post("/xxx.php",data,function(text){
$("#success").text(text);
if(text === "信息不完整,請(qǐng)重新輸入!"){
$("#submit").removeAttr('disabled')
}else{
}
})
}
一般來(lái)說(shuō),這樣的submit函數(shù)應(yīng)該是在按鈕被點(diǎn)擊之后執(zhí)行,但是攻擊者可以可以在用戶每一次輸入的動(dòng)作之后使用on事件來(lái)執(zhí)行這個(gè)函數(shù),可以使得用戶不點(diǎn)擊就發(fā)送。
釣魚攻擊劫持支付
在支付的界面進(jìn)行劫持使得用戶的支付寶,或者銀行卡支付,使得支付到攻擊者的賬戶中
植入廣告
這種方式的DNS劫持一般是運(yùn)營(yíng)商所為的,大面積的劫持

(像上圖右下角的那樣,就類似于運(yùn)營(yíng)商的廣告劫持,當(dāng)然這個(gè)可能是站點(diǎn)自己的廣告,找不到運(yùn)營(yíng)商劫持的圖了,拿這張圖演示一下)
有兩種方式
- HTTP劫持
- 將攔截到的HTML文本中間加一個(gè) position為fixed的div,一般在右下角,顯示出廣告
- DNS劫持
- 將域名劫持到一個(gè)攻擊者的網(wǎng)站中,含有廣告,再用iframe的方式來(lái)引入用戶要訪問(wèn)的網(wǎng)站。
0×04攻擊復(fù)現(xiàn)
我們可以對(duì)這種攻擊方式進(jìn)行復(fù)現(xiàn),在一個(gè)路由器下面的多臺(tái)機(jī)器,使用一臺(tái)進(jìn)行劫持,另一臺(tái)進(jìn)行模擬受害者進(jìn)行測(cè)試
準(zhǔn)備工作
- 進(jìn)行劫持的機(jī)器:
- 最好使用 kali linux
- 在本地或者遠(yuǎn)程撘一個(gè)HTTP服務(wù)器,作為釣魚網(wǎng)站,用于偽裝目標(biāo)網(wǎng)站
- 最好安裝一個(gè)大功率的無(wú)線網(wǎng)卡
- 安裝劫持工具ettercap (kali自帶)
- 測(cè)試機(jī)器安裝瀏覽器(廢話,是臺(tái)電腦都有,純命令行l(wèi)inux用lynx也可以)
- 兩臺(tái)電腦接入同一個(gè)無(wú)線路由器或者集線器(最好不要使用交換機(jī),因?yàn)楸仨氁〉媒粨Q機(jī)本身的控制才可以進(jìn)行,而路由器只需要進(jìn)行欺騙就可以)
操作指南
首先,在ettercap的配置文件里面配置你要進(jìn)行劫持的DNS
有關(guān)于ettercap dnS的配置文件的木庫(kù)在 /etc/ettercap/etter.dns
打開這個(gè)文件,我們可以看到,作者已經(jīng)內(nèi)置了一些例子

作者很調(diào)皮的把微軟公司的主頁(yè) microsoft.com 解析到了 linux.org 的ip,開源萬(wàn)歲!linux是至大的!
回歸正題,我們可以參照這幾個(gè)例子來(lái)編寫我們自己需要的劫持規(guī)則格式就是 域名 dns記錄類型 IP
什么是dns記錄類型呢?
| 記錄類型 |
描述 |
| A |
A (Address)記錄是用來(lái)指定主機(jī)名(或域名)對(duì)應(yīng)的IPv4地址記錄 |
| AAAA |
A (Address)記錄是用來(lái)指定主機(jī)名(或域名)對(duì)應(yīng)的IPv6地址記錄 |
| CNAME |
也被稱為規(guī)范名字。這種記錄允許您將多個(gè)名字映射到同一臺(tái)計(jì)算機(jī)。 通常用于同時(shí)提供WWW和MAIL服務(wù)的計(jì)算機(jī) |
| MX |
是郵件交換記錄,它指向一個(gè)郵件服務(wù)器,用于電子郵件系統(tǒng)發(fā)郵件時(shí)根據(jù) 收信人的地址后綴來(lái)定位郵件服務(wù)器 |
| NS |
解析服務(wù)器記錄。用來(lái)表明由哪臺(tái)服務(wù)器對(duì)該域名進(jìn)行解析。 |
更詳細(xì)的描述可以參見維基百科 DNS解析記錄-維基百科
一般來(lái)說(shuō),在做DNS劫持的時(shí)候,我們使用A記錄,比如我們要把百度劫持到bing(考慮到有些朋友并沒(méi)有扶墻),首先用 ping / traceroute / whois 之類的東西獲取bing.com的ip 13.107.21.200
我們?cè)谶@個(gè)文件中加上一條劫持的規(guī)則

做DNS劫持的時(shí)候,我們需要將其劫持到我們自己的HTTP服務(wù)器處,使用 ifconfig (*nix) , ipconfig (windows)來(lái)查看本機(jī)的IP地址,一般來(lái)說(shuō)局域網(wǎng)地址為 192.168.xxx.xxx,10.xxx.xxx.xx,172.xxx.xxx.xxx

下一步,就是使用apache或者nginx之類的web server 來(lái)?yè)移鹞覀冏约旱姆⻊?wù)器,用lamp之類的也可以,網(wǎng)上教程很多,不再贅述。
下一步,打開ettercap

先選擇 sniff->unified sniff
然后打開 hosts->host list
選中全部的主機(jī),點(diǎn)擊add to target 1

然后點(diǎn)擊 Mitm->ARP Posining
選中第一個(gè)選框 sniff remote connections
然后在 plugin->manage plugin 里面雙擊dns spoof 來(lái)激活這個(gè)插件

這個(gè)時(shí)候,目標(biāo)就已經(jīng)處于被劫持的狀態(tài)了
使用測(cè)試機(jī)器的瀏覽器訪問(wèn)你劫持了的網(wǎng)站,就可以看到你自己撘的服務(wù)器頁(yè)面了,我這里沒(méi)有改動(dòng),是apache的默認(rèn)頁(yè)面

當(dāng)然,這個(gè)攻擊是有不小的失敗幾率的,這是由于中間人攻擊的原理,網(wǎng)卡的問(wèn)題,網(wǎng)關(guān)的限制,還有 DNS緩存,等多種因素導(dǎo)致的,因此,劫持失敗也是很有可能的。
0×05 更深入的了解
如果想要學(xué)習(xí)這方面更深入的內(nèi)容,可以先復(fù)習(xí)一下各位的計(jì)算機(jī)網(wǎng)絡(luò)的知識(shí),了解應(yīng)用層協(xié)議HTTPS,HTTP,DNS的一些細(xì)節(jié)。對(duì)于數(shù)據(jù)鏈路和傳輸層的ARP協(xié)議也需要比較深刻的了解
kali linux在無(wú)線方面有很多很好用的工具比如aircrack-ng,ettercap,arpspoof,sslstrip等等可以使用,可以參考kali docs進(jìn)行學(xué)習(xí)
|