csdn小程序抓包(抓包寻找奇葩的)
在公众号讨论群里,我经常遇到这样的提问:为什么断点没有断下?为什么Controller 参数的值是空的?页面为什么返回403等等各种各样的问题。作为「Java面试那些事儿」QQ群管理员的我,经常需要通过聊天 Debug ,需要根据自己对于框架和程序调试经验,来猜测小伙伴可能出现问题的点,作者虽然很努力,但效果往往不明显。群里熟悉作者的读者应该都知道,作者面对类似问题的时候,最常给出的建议就是抓包看看。为什么?因为这是作者在做网站开发时,最实用的寻找问题的技巧之一,且作者在 Java Web 开发过程中,基本上都是一直挂着 Fiddler 的状态。
每次在群里和小伙伴“聊DEBUG”,实际上我都报一种“授之于渔”的态度,希望遇到困难的小伙伴,能学会一种新的解决技巧或方法,多次的交流,我发现很多小伙伴并不是不会调试,而是不会抓包。Web应用程序的本质是 HTTP协议 在浏览器与服务器之间的一种数据表现形式,HTTP协议 才是最本质的东西,在开发中,通过抓包来寻找问题,就是 “透过现象看本质” 的一种解决问题的思路。因此,“授之以鱼不如授之以渔”,下面慢慢道来本文主题--抓包!
什么是抓包,用什么工具抓包?抓包,是一个动词,抓顾名思义,包这里指的是数据包,网络协议包。所以,抓包实际上就是查看网络程序数据包的一种技术。以前,抓包是网络管理员与Hacker最常用的一种工作技巧,可以看做一种逆向精神,也是从另一个维度进行程序调试的手段。这里,我们根据Web开发的实际需求,推荐3种比较好用的抓包工具:Fiddler、Wireshark和BurpSuite。
也就是说,Fiddler 对 Web Server 进行了反向代理,并且将浏览器的 HTTP 流量指向了 Fiddler,简单说 Fiddler 相当于 HTTP 链路上插入一个 Fillter,因此可以过滤到浏览器的 HTTP 请求,整个 HTTP 链路如下:
OK,明白了 Fiddler 的工作原理,就可以开始抓包了,运行 Fiddler。
Fiddler 的主界面大体上可以分为 4 个区域:
A区域:是所有流经 Fiddler 的 Http 数据包列表,按时间顺序排列,其中包括每次HTTP请求的域名,URL,以及返回HTTP Status。选择任意一条,对应的B,C区域就会显示该HTTP请求的请求数据包与返回数据包,快捷键 CTRL X 可以清空该列表。
B,C区域:B区域显示了该HTTP请求的请求数据包详情,可以看到HTTP协议的请求头中所有的字段(Cookie,HTTP Method,Encoding,Language,Param等),C区域则返回了HTTP返回数据包的详情。
1. 403认证失败的,可以多留意 Cookie 字段中的 Session ID。
2. Controller 参数取不到值得,可以留意一下Param中的参数列表 ,检查参数名称是否与Controller中声明一致。
3. 对于文件上传或下载失败,可以检查表单提交的类型是否正确。
...
Fiddler 这款工具就介绍到这里,Fiddler还有很多强大的功能,就等小伙伴们自己去发掘了。
WireShark
WireShark 可以说才是名副其实的抓包工具,它依赖于 WinPcap 驱动程序,直接在网卡驱动上进行抓包,因此可以抓到所有经过该网卡的所有协议的数据包,抓包能力非常强。此外, Wireshark 是一款开源的优秀项目,多年来,全球无数开发者为 WireShark 编写了数千种协议的解析插件,因此 WireShark 可以说是流量分析的必备工具。但作为只需要关注Web开发者来说,WireShark 确实过于笨重了。那作者为什么还要介绍他?原因在于 Fiddler 的工作模式问题,Fiddler 是一款基于代理技术的抓包工具,因此在一些不是由浏览器发起的HTTP 的场景,使用 Fiddler 抓包就没那么方便了,如微服务框架下的HTTP流量很可能不走系统代理。此时需要定位问题,就需要WireShark这款基于网卡的抓包神器登场了。
首先需要选择从哪个网卡抓包(可以通过ipconfig命令确定对应的网卡):
2.选择好网卡后,WireShark就开始抓包了。
Wireshark 默认抓取该网卡所有协议的数据包,非常不方便,此时就需要使用wireshark强大的过滤语法了,例如我们只抓取访问CSDN的数据包:
此外,WireShark 内置了很多过滤语法的表达式,只需要点击 filter 后面的Expression 表达式按钮即可。
TIPS
WireShark 在抓包界就像一头巨兽,非常强大,但也有他的不足,那就是无法抓取“不经过网卡的数据包”,没错,这句话没毛病。什么叫“不经过网卡的数据包”?这就要说一下操作系统网络协议驱动实现的特性了,在系统中 ,如果在本机建立的网络连接,那么数据包不会发到网卡,而是直接在内核的协议栈就进行了数据传递,简单说就是操作系统不会把发往 127.0.0.1 的数据包发往网卡,从而提高了系统的性能。但也由于改特性,工作在网卡驱动级(内核)的抓包的程序就失效了。当然可以通过为本机添加一条本机路由,即可强行让发往本机的数据包经过网卡:
添加路由:
route add <本机IP> mask <子网掩码> <网关IP>
route add 192.168.0.106 mask 255.255.255.255 192.168.0.1
删除路由:
route delete 192.168.0.106 mask 255.255.255.255 192.168.0.1
关于WireShark,作者给小伙伴的建议是,杀鸡何用宰牛刀!能用Fiddler就用Fiddler了。
BurpSuite
BurpSuite 也是一款HTTP(s)协议代理工具,使用 Java 语言开发,是一款商业软件。BurpSuite 工具实际上为 Web 渗透测试工程师量身定做的工具,可以说是一款黑客工具。它可以非常方便的编辑HTTP协议的请求数据包与返回数据包,还有很多为 Web 渗透测试开发插件,如:扫描、爆破、注入、爬虫等。该工具对于 Web 开发者来说,或许太过繁琐了,不如 Fiddler 精简,因此作者就不详细介绍该款工具了,需要的小伙伴可以自己研究研究。
关于抓取HTTPS数据包的问题
HTTPS协议是为了数据传输安全的需要,在HTTP原有的基础上,加入了安全套接字层SSL协议,通过CA证书来验证服务器的身份,并对通信消息进行加密。基于HTTPS协议这些特性,我们在使用协议代理软件进行抓包时,需要增加更多的设置,才能拦截HTTPS的消息。这里以Fiddler为例,我们讲一下Fiddler的CA证书安装。
证书安装
Fiddler的证书安装在 Tool -> Option -> HTTPS 下,选中 "Capture HTTPS CONNECTS" 和 "Decrypt HTTPS traffic"两项会弹出安装CA证书的提示:
一路点击YES,最后会提示 "Trust Success : Added Fiddlers'root certificate to the Machine Root List.",此时Fiddler便可以抓取,和解密HTTPS的数据包了。
HTTPS中间人攻击
从中间人攻击的链路结构上来说,Fiddler对HTTPS进行代理,就是一种中间人攻击:SSL劫持攻击。Fiddler实际上使用自己的不受信证书替换了正常HTTPS通信过程中的服务器证书,如果客户的没有安装Fiddler的证书,浏览器证书验证将会报:DLG_FLAGS_INVALID_CA 非法证书的错误。所以相对HTTP说,有证书验证的HTTPS能确保我们输入密码时,浏览的是真实的登录页。
但是,“天有不测风云,人有旦夕祸福”,在黑客领域,有一个领域叫社会工程学,说通俗点就是“诈骗”,黑客有可能会通过社工方式,诱骗受害者安装不受信的根证书,再结合一些流量劫持技术,就实现了HTTPS的中间人攻击。小伙伴肯定会问:谁会这么傻?呵呵,建议你看看最近很火的一个电影叫 《巨额来电》,“喂,喂,老同学!”
关于HTTPS协议可以专门讲一个章节,本文就不深入分析了,以后会有专门针对HTTPS协议的分析文章,尽情关注。
证书卸载
既然安装不受信的根证书是那么危险的一件事情,在安装不受信证书后,记得卸载。首先要明白一个道理,CA证书是操作系统管理的,也就是说证书验证这一操作是操作系统提供的接口,并不是浏览器,因此证书安装也同样是安装在了操作系统之上。这里以Windows系统为例,讲解一下受信证书的卸载。
依次打开:命令行 -> certmgr.msc -> Trusted Root Certification Authorities -> Certificates,找到 DO_NOT_TRUST_FiddlerRoot 机构的证书,选中删除即可:
注意:此步骤一定要慎重,确定删除的是 Fiddler 的证书,否则有可能导致操作系统运行异常。
总结综合 Web 程序员的应用场景,作者还是首推 Fiddler,因为免费,并且是专为HTTP 协议做的抓包软件。Wireshark 与 BurpSuite 相对来说功能庞大,但是很多功能 Web 程序员用不到,且软件配置相对 Fiddler 复杂。我认为,小伙伴在使用这些抓包软件前,一定要明白抓包软件的工作原理,是基于协议代理,还是WireShark 那样在驱动层做的镜像协议,只有明白使用的抓包工具的实现原理时,才能排查抓不到包的情况。
老话说“工欲善其事,必先利其器”,一个合理方便的开发环境,才能高效进行程序开发,如果你还在使用“笨办法Debug”,如果你常常 Debug 一上午也难以定位问题的所在,那么我认为你应该转换一下解决问题的思路或方法,而不是继续死磕浪费时间。阿里孤尽 最近出了一本很火的书《码出高效》,可见提高效率也是有方法的,小伙伴们加油!
看完记得转发哦~
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com