警惕:程序员现场演示:揭秘http劫持本质,在也不敢使用免费wifi

这几天瓶子哥所在办公室电脑一打开网页全是广告,而且这个广告还是很流氓的那种,直接霸屏,在原网页上面嵌入了一层js广告,必须得点击它才能继续浏览原始网页,非常之流氓。气得我是咬牙切齿,无处诉苦,还有我们经常会发现打开网站莫名其妙的就被跳转到hao123等网站上去了,后面还带个推广渠道的小尾巴。

今天我就以此为导火线,来分析下网站劫持这点猫腻,让你洞悉网络上的各种坑,以便更好的保护自己的钱财隐私不被坏人利用。

现如今网上泛到处泛滥着钓鱼网站,页面小广告、电商劫持返利,流氓软件推广等,很多都通过如下手段实现:

1.DNS劫持

2.中间人劫持

DNS劫持

DNS劫持一般用作钓鱼网站,诱导用户跳转到劫持人预设的欺骗性网站,假网站会和用户要访问的网站在外观上做的基本一模一样,不细心观察就很容易被骗过去,如果用户警觉性不高,输入相关网站的账号密码,则就会轻而易举的被劫持人获取到用户的个人信息。

DNS劫持原理:

DNS(域名系统)的作用是把网络地址(域名,以一个字符串的形式)对应到真实的计算机能够识别的网络地址(IP地址),以便计算机能够进一步通信,传递网址和内容等。

比如我们访问baidu.com的时候实际上网络是通过寻址 111.13.100.92来定位到baidu的web服务器的。而一般DNS劫持只能在特定的被劫持的网络范围内进行。

DNS劫持的方式:

一般都是通过各种漏洞、暴力破解等攻陷用户或企业的路由器,然后篡改路由器里面的DNS设置,将DNS修改为劫持者预设的DNS服务器,用户访问网站后就很容易被钓鱼。

所以我们平时在设置密码时候一定要复杂一点,避免被它人攻破,这里不做展开讲。

今天我们主要讲讲中间人劫持的技术和如何用程序来实现。

简单来说,中间人劫持就是劫持者在用户端和要访问的服务器端的中间某个环节通过技术手段劫持到用户的访问流量,然后冒充服务器和用户端在两者之间进行数据的篡改转发。这中间可以使用http的302码暂时重定向以及200 OK来进行数据的转发和响应,以便实现自己的业务逻辑。

进行流量的代理劫持后(均为http劫持,https无法劫持)可以做哪些业务呢?,

1.iframe插入小广告

2.访问某些网站直接302跳转劫持到其他网站,例如劫持到hao123很普遍。

3.各种电商返利劫持

4.劫持任意.app下载为吸费流氓软件。

5.无限扩展。。。。

限于篇幅,这里只演示302如何进行上述业务的实现。

1 .原理分析

302重定向原理:

如上图,客户端请求A服务器,A服务器返回302码响应说请重新到B服务器访问资源,客户端然后重启发起向B服务器请求,B服务器响应返回真正数据。

比如在我在安智市场下载一个今日头条,下载请求链接是:www.anzhi.com/dl_app.php?s=3072998&n=5,紧接着服务器返回了 HTTP/1.1 302 Moved Temporarily 告诉我需要重定向到Location标识的网址去下载:http://wap.apk.anzhi.com/data5/apk/201812/11/9e592fde5e51ac1b935a8e88dd2901de_06264700.apk。

下面就是安智市场下载apk的一个302重定向的例子,蓝色箭头标识重定向。

知道了浏览器遵循302跳转这个功能后,我们中间人劫持就可以冒充服务器对客户发起的网站请求做302重定向实现上述的业务功能。

这里我们以实现访问http://shop.boqii.com 跳转到 https://www.csdn.net/?TestName=dapingzi 为例演示中间人劫持,302重定向到csdn网站。

2.代码实现:

代码实现过程之前我们先看下需要的技术要求:

1)首先要劫持掉用户的流量,比如通过技术手段攻破用户的路由器,或者利用免费wifi来吸引用户连接上我们的网络。

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

下面为了方便,我利用本机电脑ubuntu下模拟路由器来实现中间人劫持。

程序的技术要求:

1)利用原始套接字开启混杂模式进行HTTP流量嗅探。

2)HTTP请求报文的解包。

3) 解析出应用层数据,分析特征网址,匹配要做业务的网址。

4)按照HTTP协议封装302重定向报文,将302应用层报文再次进行原始报文组包,调换源目的IP地址,然后发送包出去,完成整个业务逻辑。

代码片段实现:

1)原始套接字进行http流量嗅探

创建原始套接字

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请求

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 监听获取http报文

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

2)HTTP数据报文解包

这里利用以太网头部(struct ethhdr *eth ),ip头部(struct iphdr *iph),tcp头部(struct tcphdr *tcph )来进行报文解析解包,最后得到应用层HTTP数据报文。参照网络协议数据报文格式解包就行了,具体过程不再累述。

3)HTTP头部解析

HTTP头部由多个字段组成,例如我们访问shop.boqii.com后http请求报文头部字段如下

我们这里只是简单的要获取到用户请求网址的url,因此只需要解析出HOST和URL字段。这里大家可以使用开源的httpparser来进行http协议格式的解析。

上述的host:shop.boqii.com, url:/,匹配到shop.boqii.com/这个用户请求后,就可以做业务了。

4)302响应组包

劫持到用户这个请求后(演示网站为shop.boqii.com),我们要做的业务是重定向到csdn网站,按照http协议格式来组包302响应格式:

"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)将应用层的302数据再次封包,调换源目的IP地址,发包出去。

将302响应数据再次按照tcp/ip/以太网帧格式封包后,调换源目的IP地址然后发包出去,达到冒充服务器端进行数据回应。成功劫持用户请求。

限于篇幅影响,这里就不做过多技术讲解,虽然看似功能不太复杂,但是用到的技术细节还是比较多的,喜欢的话,老铁们可以关注瓶子哥一波哈,后面更多精彩的文章等着你。

具体的演示效果如下:

(晕,这里好像传不了视频,如果干兴趣的话可以看我公众号的这篇文章,视频演示还是比较有意思)

上面视频完成如下测试功能,mtop程序没有运行前,能够正常访问shop.boqii.com ,www.anzhi.com, m.2345.com网站,开启mtop程序后,

1)shop.boqii.com 跳转到 http://www.anzhi.com?TestName=dapingzi 并且带了个大瓶子尾巴

2)访问m.2345.com / www.anzhi.com 返回给用户:“哈哈,哥们儿,你被黑了!!!

至此,完成一个简单的流量劫持,事实上,如果劫持了用户的流量,黑客做的事情可能就不会像瓶子哥这么友善了哈,比如推广病毒软件,电商推广,广告,利用会话劫持获取用户的cookie,登录账户等。

所以作为一个普通的用户而言,面对中间人的潜在威胁,也需要提高自己的安全防范意识,平时的密码要设置级别高点,不要轻易接入公共场所免费wifi,而且要尽量使用https链接来访问网站,提高警惕性。对于异常的SSL证书也要格外的小心,尤其是在涉及到金钱交易的时候,更加需要小心谨慎,避免落入他人的陷进之中。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容