美文网首页Linux学习之路我用 LinuxLinux
警惕:程序员现场演示:揭秘http劫持本质,在也不敢使用免费wi

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

作者: 瓶子哥_ | 来源:发表于2018-12-17 14:28 被阅读9次

    这几天瓶子哥所在办公室电脑一打开网页全是广告,而且这个广告还是很流氓的那种,直接霸屏,在原网页上面嵌入了一层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证书也要格外的小心,尤其是在涉及到金钱交易的时候,更加需要小心谨慎,避免落入他人的陷进之中。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/fsaqkqtx.html