警惕:程序員現(xiàn)場(chǎng)演示:揭秘http劫持本質(zhì),在也不敢使用免費(fèi)wifi

這幾天瓶子哥所在辦公室電腦一打開網(wǎng)頁全是廣告,而且這個(gè)廣告還是很流氓的那種,直接霸屏,在原網(wǎng)頁上面嵌入了一層js廣告,必須得點(diǎn)擊它才能繼續(xù)瀏覽原始網(wǎng)頁,非常之流氓。氣得我是咬牙切齒,無處訴苦,還有我們經(jīng)常會(huì)發(fā)現(xiàn)打開網(wǎng)站莫名其妙的就被跳轉(zhuǎn)到hao123等網(wǎng)站上去了,后面還帶個(gè)推廣渠道的小尾巴。

今天我就以此為導(dǎo)火線,來分析下網(wǎng)站劫持這點(diǎn)貓膩,讓你洞悉網(wǎng)絡(luò)上的各種坑,以便更好的保護(hù)自己的錢財(cái)隱私不被壞人利用。

現(xiàn)如今網(wǎng)上泛到處泛濫著釣魚網(wǎng)站,頁面小廣告、電商劫持返利,流氓軟件推廣等,很多都通過如下手段實(shí)現(xiàn):

1.DNS劫持

2.中間人劫持

DNS劫持

DNS劫持一般用作釣魚網(wǎng)站,誘導(dǎo)用戶跳轉(zhuǎn)到劫持人預(yù)設(shè)的欺騙性網(wǎng)站,假網(wǎng)站會(huì)和用戶要訪問的網(wǎng)站在外觀上做的基本一模一樣,不細(xì)心觀察就很容易被騙過去,如果用戶警覺性不高,輸入相關(guān)網(wǎng)站的賬號(hào)密碼,則就會(huì)輕而易舉的被劫持人獲取到用戶的個(gè)人信息。

DNS劫持原理:

DNS(域名系統(tǒng))的作用是把網(wǎng)絡(luò)地址(域名,以一個(gè)字符串的形式)對(duì)應(yīng)到真實(shí)的計(jì)算機(jī)能夠識(shí)別的網(wǎng)絡(luò)地址(IP地址),以便計(jì)算機(jī)能夠進(jìn)一步通信,傳遞網(wǎng)址和內(nèi)容等。

比如我們?cè)L問baidu.com的時(shí)候?qū)嶋H上網(wǎng)絡(luò)是通過尋址 111.13.100.92來定位到baidu的web服務(wù)器的。而一般DNS劫持只能在特定的被劫持的網(wǎng)絡(luò)范圍內(nèi)進(jìn)行。

DNS劫持的方式:

一般都是通過各種漏洞、暴力破解等攻陷用戶或企業(yè)的路由器,然后篡改路由器里面的DNS設(shè)置,將DNS修改為劫持者預(yù)設(shè)的DNS服務(wù)器,用戶訪問網(wǎng)站后就很容易被釣魚。

所以我們平時(shí)在設(shè)置密碼時(shí)候一定要復(fù)雜一點(diǎn),避免被它人攻破,這里不做展開講。

今天我們主要講講中間人劫持的技術(shù)和如何用程序來實(shí)現(xiàn)。

簡(jiǎn)單來說,中間人劫持就是劫持者在用戶端和要訪問的服務(wù)器端的中間某個(gè)環(huán)節(jié)通過技術(shù)手段劫持到用戶的訪問流量,然后冒充服務(wù)器和用戶端在兩者之間進(jìn)行數(shù)據(jù)的篡改轉(zhuǎn)發(fā)。這中間可以使用http的302碼暫時(shí)重定向以及200 OK來進(jìn)行數(shù)據(jù)的轉(zhuǎn)發(fā)和響應(yīng),以便實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。

進(jìn)行流量的代理劫持后(均為http劫持,https無法劫持)可以做哪些業(yè)務(wù)呢?,

1.iframe插入小廣告

2.訪問某些網(wǎng)站直接302跳轉(zhuǎn)劫持到其他網(wǎng)站,例如劫持到hao123很普遍。

3.各種電商返利劫持

4.劫持任意.app下載為吸費(fèi)流氓軟件。

5.無限擴(kuò)展。。。。

限于篇幅,這里只演示302如何進(jìn)行上述業(yè)務(wù)的實(shí)現(xiàn)。

1 .原理分析

302重定向原理:

如上圖,客戶端請(qǐng)求A服務(wù)器,A服務(wù)器返回302碼響應(yīng)說請(qǐng)重新到B服務(wù)器訪問資源,客戶端然后重啟發(fā)起向B服務(wù)器請(qǐng)求,B服務(wù)器響應(yīng)返回真正數(shù)據(jù)。

比如在我在安智市場(chǎng)下載一個(gè)今日頭條,下載請(qǐng)求鏈接是:www.anzhi.com/dl_app.php?s=3072998&n=5,緊接著服務(wù)器返回了 HTTP/1.1 302 Moved Temporarily 告訴我需要重定向到Location標(biāo)識(shí)的網(wǎng)址去下載:http://wap.apk.anzhi.com/data5/apk/201812/11/9e592fde5e51ac1b935a8e88dd2901de_06264700.apk。

下面就是安智市場(chǎng)下載apk的一個(gè)302重定向的例子,藍(lán)色箭頭標(biāo)識(shí)重定向。

知道了瀏覽器遵循302跳轉(zhuǎn)這個(gè)功能后,我們中間人劫持就可以冒充服務(wù)器對(duì)客戶發(fā)起的網(wǎng)站請(qǐng)求做302重定向?qū)崿F(xiàn)上述的業(yè)務(wù)功能。

這里我們以實(shí)現(xiàn)訪問http://shop.boqii.com 跳轉(zhuǎn)到 https://www.csdn.net/?TestName=dapingzi 為例演示中間人劫持,302重定向到csdn網(wǎng)站。

2.代碼實(shí)現(xiàn):

代碼實(shí)現(xiàn)過程之前我們先看下需要的技術(shù)要求:

1)首先要劫持掉用戶的流量,比如通過技術(shù)手段攻破用戶的路由器,或者利用免費(fèi)wifi來吸引用戶連接上我們的網(wǎng)絡(luò)。

2) 在路由器上部署嗅探程序。

下面為了方便,我利用本機(jī)電腦ubuntu下模擬路由器來實(shí)現(xiàn)中間人劫持。

程序的技術(shù)要求:

1)利用原始套接字開啟混雜模式進(jìn)行HTTP流量嗅探。

2)HTTP請(qǐng)求報(bào)文的解包。

3) 解析出應(yīng)用層數(shù)據(jù),分析特征網(wǎng)址,匹配要做業(yè)務(wù)的網(wǎng)址。

4)按照HTTP協(xié)議封裝302重定向報(bào)文,將302應(yīng)用層報(bào)文再次進(jìn)行原始報(bào)文組包,調(diào)換源目的IP地址,然后發(fā)送包出去,完成整個(gè)業(yè)務(wù)邏輯。

代碼片段實(shí)現(xiàn):

1)原始套接字進(jìn)行http流量嗅探

創(chuàng)建原始套接字

int socket_fd = socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL));if(socket_fd < 0){dbg_printf("socket is fail! ");return(-1);}

過濾HTTP GET請(qǐng)求

struct sock_fprog prog;prog.len = sizeof(tcp_filters)/sizeof(tcp_filters[0]);prog.filter = tcp_filters;ret = setsockopt(socket_fd,SOL_SOCKET,SO_ATTACH_FILTER,&prog,sizeof(prog));if(0 != ret){dbg_printf("setsockopt is fail! ");goto out;}

開啟混雜模式

struct packet_mreq mr;memset(&mr,0,sizeof(mr));mr.mr_ifindex = id;mr.mr_type =(on_off) ? PACKET_MR_PROMISC : PACKET_DROP_MEMBERSHIP;ret = setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP,&mr,sizeof(mr));

通過select 監(jiān)聽獲取http報(bào)文

ret = select(raw_socket_fd+1, &rfds, NULL, NULL,NULL);

2)HTTP數(shù)據(jù)報(bào)文解包

這里利用以太網(wǎng)頭部(struct ethhdr *eth ),ip頭部(struct iphdr *iph),tcp頭部(struct tcphdr *tcph )來進(jìn)行報(bào)文解析解包,最后得到應(yīng)用層HTTP數(shù)據(jù)報(bào)文。參照網(wǎng)絡(luò)協(xié)議數(shù)據(jù)報(bào)文格式解包就行了,具體過程不再累述。

3)HTTP頭部解析

HTTP頭部由多個(gè)字段組成,例如我們?cè)L問shop.boqii.com后http請(qǐng)求報(bào)文頭部字段如下

我們這里只是簡(jiǎn)單的要獲取到用戶請(qǐng)求網(wǎng)址的url,因此只需要解析出HOST和URL字段。這里大家可以使用開源的httpparser來進(jìn)行http協(xié)議格式的解析。

上述的host:shop.boqii.com, url:/,匹配到shop.boqii.com/這個(gè)用戶請(qǐng)求后,就可以做業(yè)務(wù)了。

4)302響應(yīng)組包

劫持到用戶這個(gè)請(qǐng)求后(演示網(wǎng)站為shop.boqii.com),我們要做的業(yè)務(wù)是重定向到csdn網(wǎng)站,按照http協(xié)議格式來組包302響應(yīng)格式:

"HTTP/1.1 302 Moved Temporarily ""Location: https://www.csdn.net/?TestName=dapinzi ""Content-Type: text/html; charset=iso-8859-1 ""Content-length: 0 ""Cache-control: no-cache ""Connection:close "" ";

5)將應(yīng)用層的302數(shù)據(jù)再次封包,調(diào)換源目的IP地址,發(fā)包出去。

將302響應(yīng)數(shù)據(jù)再次按照tcp/ip/以太網(wǎng)幀格式封包后,調(diào)換源目的IP地址然后發(fā)包出去,達(dá)到冒充服務(wù)器端進(jìn)行數(shù)據(jù)回應(yīng)。成功劫持用戶請(qǐng)求。

限于篇幅影響,這里就不做過多技術(shù)講解,雖然看似功能不太復(fù)雜,但是用到的技術(shù)細(xì)節(jié)還是比較多的,喜歡的話,老鐵們可以關(guān)注瓶子哥一波哈,后面更多精彩的文章等著你。

具體的演示效果如下:

(暈,這里好像傳不了視頻,如果干興趣的話可以看我公眾號(hào)的這篇文章,視頻演示還是比較有意思)

上面視頻完成如下測(cè)試功能,mtop程序沒有運(yùn)行前,能夠正常訪問shop.boqii.com ,www.anzhi.com, m.2345.com網(wǎng)站,開啟mtop程序后,

1)shop.boqii.com 跳轉(zhuǎn)到 http://www.anzhi.com?TestName=dapingzi 并且?guī)Я藗€(gè)大瓶子尾巴

2)訪問m.2345.com / www.anzhi.com 返回給用戶:“哈哈,哥們兒,你被黑了?。?!

至此,完成一個(gè)簡(jiǎn)單的流量劫持,事實(shí)上,如果劫持了用戶的流量,黑客做的事情可能就不會(huì)像瓶子哥這么友善了哈,比如推廣病毒軟件,電商推廣,廣告,利用會(huì)話劫持獲取用戶的cookie,登錄賬戶等。

所以作為一個(gè)普通的用戶而言,面對(duì)中間人的潛在威脅,也需要提高自己的安全防范意識(shí),平時(shí)的密碼要設(shè)置級(jí)別高點(diǎn),不要輕易接入公共場(chǎng)所免費(fèi)wifi,而且要盡量使用https鏈接來訪問網(wǎng)站,提高警惕性。對(duì)于異常的SSL證書也要格外的小心,尤其是在涉及到金錢交易的時(shí)候,更加需要小心謹(jǐn)慎,避免落入他人的陷進(jìn)之中。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容