图片来源于Pexels网络人人网内容。我看得很清楚。可怕吗?我被一个公司老板买来运行在一个配置非常高的Linux服务器上,这个服务器上的网卡很烂。所有进出公司的网络数据包都要经过它,它不断抓取数据包发给我分析。你也应该知道网络通信是有层次的,最常见的就是TCP/IP协议体系。拿到数据包之后,我就得按照这个协议规范,一层一层的去掉协议的壳,拿到他们的payload数据。对于TCP会话重组,我主要关注TCP协议,因为很多应用都是使用TCP进行传输,比如通过HTTP上网,通过SMTP发送邮件,微信聊天等等。我想控制网络中的通信。我要做的第一件事是使用TCP。我得想办法把TCP传输的数据包重新组装成一个完整的会话,这样才能知道应用层传输的是什么,这一步称为会话重组。不过,这个TCP协议有点复杂。除了我们抓包的乱序情况外,它还有三次握手、四次握手、超时重传、延迟回复等多种机制。有时候会遇到时间跨度很长的长连接,这无疑让我重新组织TCP会话变得非常困难。我必须重新组装TCP会话的唯一线索是数据包标头中的序列号SEQ和确认号ACK。不过,我还是砸了RFC规范,克服了所有这些问题。能够成功的将TCP会话数据一一重组,成功率还是挺高的。应用协议识别到TCP会话重组,我可以拿到里面传输的数据。接下来要做的是识别在应用层传输的是什么应用程序?用我们的行话来说,就是识别应用协议。这时候就得看端口了。根据三次握手包的方向,我可以判断谁是client,谁是server。看服务器的端口号(这个可以在TCP头中看到),就知道是什么服务了。常见的有以下几种:22:SSH远程登录25:邮件服务53:域名解析服务80:HTTPweb服务3306:MySQL数据库服务3389:远程桌面连接服务最常见的是80端口的Web服务,人们每天上网时都会使用它们。有时web服务不使用端口80,而是用其他东西代替,但这并不困扰我。我可以分析一下TCP的负载数据的特点,看看有没有HTTP协议的特点,因为HTTP协议的特点太复杂了。明显地!后来根据端口的经验出错的概率越来越大,所以我就统一根据内容来识别判断,??不再信任端口了。每个应用程序都有自己的协议特征。这个身份我下了功夫,不会轻易说出来。文件还原知道了应用层协议是什么之后,我就可以完全理解应用层协议传输的数据了。我们以最常见的Web服务为例。HTTP协议是一种基于请求-响应的协议。比如下面的通信:请求是GET包,请求的资源好像是JPG图片。再看响应包,状态码是200OK,好像没有问题。看Content-Type,image/jpeg,是JPG图片,没了。现在我可以定位到响应包的payload段,也就是在HTTP头中,两个回车换行(0D0A)之后就是数据了。找到数据所在的位置,然后根据Content-Length的大小,提取数据写入PNG格式的文件,就大功告成了!妈呀,哪个血少又在看美图了!上述文件传输协议提取过程称为文件还原。除了HTTP协议,我还支持文件传输协议FTP,邮件传输协议SMTP,文件共享的SMB协议。我可以把你通过这些协议传输的文件还原出来,这不是很可怕吗?HTTPS解密有一天,发现80端口的数据包越来越少了。与此同时,443端口的通信数据不知不觉就变多了。后来才知道,为了不让像我这样的网络中间人窥探我的隐私,他们都使用了一种叫做HTTPS的技术。HTTPS对传输的数据进行了加密,这样我拿到之后就加密了,传输的是什么内容是无从知晓的。不过,这家公司的老板很聪明。他要求公司员工在电脑上安装“安全软件”。打着保护电脑不被入侵的名义,实际上是在他们的电脑上劫持了一个中间人,更换了HTTPS证书(不信你可以看看这个:谁动了你的HTTPS流量?)。这个“安全软件”充当中介,告诉我HTTPS证书和密钥,我就可以解密HTTPS流量了!我仍然可以确切地知道你在互联网上做什么!你以为网络不通我只能在一旁听吗??图案!如果你去访问那些敏感网站,或者试图偷偷把老板托付给我这个重点看护人的数据,那我就不会看起来那么简单了,这时候我会启动屏蔽功能。为了不影响公司网络的运行,我一般都是旁路部署,这样哪天遇到BUG,立马撤掉。这个所谓的bypassdeployment,就是把抓到的包复制过来,而不是由我转发。但是,这也给我造成了一些阻塞网络通信的麻烦。如果我串联连接到网络,那就简单了。当遇到那些可疑的网络连接时,我只是丢弃数据包而不转发它们。但是现在我不是串联的,而是bypassdeployment,怎么办?聪明如我,怎么会被这个小问题难倒呢?我是TCP协议方面的专家。当我发现有可疑连接建立时,我会防患于未然!具体来说,TCP连接的建立需要三次握手:当我发现可疑的SYN包,在服务器回复第二次握手包之前,我就捂住耳朵,以迅雷不及掩耳之势偷铃,用服务器IP的名字伪造一个RST数据包给客户端,这样连接就被我砍掉了!虽然这一招不能保证100%成功,但是我离客户端更近了,我伪造的数据包一般都比真正的服务端响应包早一步到达客户端,所以成功率还是挺高的!哦,说曹操,曹操就到!发现了一个可疑的连接,不说了,我要忙了~彩蛋:悄悄告诉你,上次公司HR给我导入了一批url列表,让我重点看看是谁访问:www.lagou.comwww.zhipin.cpmwww.liepin.com作者:轩辕智峰编辑:陶家龙来源:转载自公众号编程科技宇宙(ID:xuanyuancoding)
