HTTP抓包实战

开始读《HTTP抓包实战》,在这个作业满天飞的日子里,计划1周读完,本篇博文对其中的部分知识点做一下简单的记录。

1、HTTP抓包分析使用的工具不再是wireshark(研究TCP/IP协议使用),而是使用 fiddler,版本4。其实 fiddler 做HTTP数据包分析的原理就是相当于一个web代理,如下图:

fiddler在中间,可以记录所用的HTTP流量。fiddler启动时,会偷偷把 Internet 选项中的代理修改为 :127.0.0.1,端口: 8888; fiddler在关闭时,会自动在Internet选项中取消代理,这样就不会对其他程序产生影响。如下图:

fiddler界面如下图,使用方法请自行百度或google.

2、在 fiddler中抓取 https 的流量,需要做如下图配置并安装证书。

IEchrome等浏览器都是使用windows证书库来验证证书,但是firefox浏览器是自己维护一个证书列表,所以需要在firefox中单独安装 fiddler证书。在上图中的action选项中可以下载fiddler的根证书到桌面,firefox >> 工具 >> 选项 >> 隐私与安全 >> 证书 >> 查看证书 >> 证书机构中可以导入证书,这里,fiddler的作者开了个玩笑,证书名叫DO_NOT_TRUST_FiddlerRoot

3、在抓包时,我们经常能看到 tunnel to的握手包,这对我们分析数据包没啥作用,可以在fiddler >> rules >> hide connects中设置其隐藏掉。

4、Win+R输入certmgr.msc查看windows证书管理库

5、https://www.wangjibao.com.cn/2018/11/13/HTTP%E6%8A%93%E5%8C%85%E5%AE%9E%E6%88%98/#more

上面是个url的例子,https协议,www.wangjibao.com.cn为域名,这里使用的是默认80端口,所以省略端口显示,后面的/2018/11/13/HTTP%E6%8A%93%E5%8C%85%E5%AE%9E%E6%88%98/代表资源的路径,后面的#号代表啥呢,其实这是个 锚点(anchor),我们知道,当一个页面非常长的时候,我们可以在页面中根据锚点直接定位到我们需要的地方。

6、HTTP的状态码,200类是成功,300类代表重定向,400类代表客户端错误,500类错误代表服务器错误。

其中的206(Partial Content)代表的是部分内容,迅雷、HTTP下载工具就是使用206状态码来实现的断点续传。

当遇到301 或 302的响应时,浏览器会自动根据response中的重定向url重新访问资源地址。如下图(京东之前叫360buy):

先访问www.360buy.com返回301说这个网址已经move permanently了,给了个http://www.jd.com,然后,浏览器就是访问这个网址,但是服务器说302,代表说,这次对了,但是为了安全,去访问另一个网址吧https://www.jd.com吧,接着就会发现,129号中显示了tunnel to,代表开始握手协商了。

其实,这里301或302还是有区别的,301代表旧url已经永久移除了,搜索引擎会把权重计算到新的url上。但302代表旧url还在,只是临时重定向到新url上,搜索引擎会把权重计算到旧url上。

7、常用的HTTP请求方法就是 getpost

我们登录国科大的选课网站,在 fildder中,可以清楚的看到,用户名和密码被包含在post请求的body中,发送给了服务器。同样,如果是get请求,包含在url?后面的字段可以在QueryString中看到对应的Name--Value字段。

8、可以在fiddler >> tools >> user-agent中修改User-Agent字段的值,如下图,再浏览某些网页时,就变成了对应的显示模式。

9、Ajax (Asynchronous Javascript And XML”: 异步 JavaScript 和 XML),是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

10、在 Rules >> Automatic Breakpoint >> after/before Response中可以设置拦截HTTP请求。比如,我可以设置拦击HTTP的响应,然后在raw中修改页面的title字段,点击Run to Completion发成修改后的发送。

1号包中的红色代表拦截到了,这时别忘了,之前设置的全局断点给取消掉,不然会影响其他请求的发送和接收。效果如下图:

注意:修改操作必须在raw选项框里。当然,也可以设置局部断点,bpu www.baidu.com设置只拦截百度的请求,取消拦截在页面左下角的命令框中输入bpu即可;bpafter www.baidu.com拦截响应,bpafter取消拦截响应。

11、浏览器中的缓存

如下图,浏览器想请求某个资源的时候,先检查本地缓存,如果本地缓存存在这个文件的时候,直接获取该文件的最后修改时间等信息,构造数据包发送请求(内含有If-Modified-Since字段和If-None-Match字段)给服务器,服务器根据这两个值,结合自身的Last-Modified字段和Etag字段来判断需不需要发送数据给浏览器,如果不需要(1、Request中的If-Modified-Since的时间大于或等于Resonse中的Last-Modified的时间;2、ETag值和If-None-Match相匹配,说明hash值不变文档没改变),则服务器发送 304 Response给浏览器,告诉它,直接使用缓存就行了,节省时间加快网页加载速度。

当然,我们也可以 ctrl + F5强制刷新浏览器,告诉服务器,我不使用缓存,请发送最新的数据资源给我。

其中的pragma是HTTP1.0中使用的,Cache-Control是现在HTTP1.1用的,同时存在这两个字段,完全是为了兼容。

12、URL只能使用英文字母、数字或者某些标点符号,URL Encode(URL 编码)就是把所有非英文字母、数字字符都替换成百分号(%)后加两位十六进制数。如:

https://www.wangjibao.com.cn/2018/11/13/HTTP抓包实战 编码后变成了如下模式,

1
https://www.wangjibao.com.cn/2018/11/13/HTTP%E6%8A%93%E5%8C%85%E5%AE%9E%E6%88%98/

13、Fiddler提供了丰富的插件,可以在https://www.telerik.com/fiddler/add-ons中下载安装使用,如`Java Script FormatterGalleryWinDiff`(比较两个session的不同)等等。

14、 Fiddler中可以在线调试 JavaScript文件,使用的是AutoResponder功能,如下图,其原理就是当命中某个文件时,自动替换成我们设置的文件返回给客户端,就不去服务器索取了。

当然,不仅可以替换 JS 文件,还可以替换网页中的图片为本地我们设置的图片。

15、我们还可以直接编辑Fiddler Script来修改HTTP请求或者响应,并且不中断程序(之前介绍的设置断点的方式,会使得程序中断)。Rules >> Coustomize Rules中,打开Fiddler ScriptEditor来编辑CustomRules.js文件,如图:

16、HTTP的Cookie机制

因为HTTP协议是无状态的,可以通过Cookie来维持会话。登录 http://piaoweb.sstm.org.cn,可以在fiddler中看到cookie的运行机制,如下图:

浏览器把Cookie通过HTTP请求中的Header发送给服务器,同时,服务器通过HTTP响应中的Header(Set-Cookie机制)把Cookie发送给浏览器。

上图中的 HttpOnly字段是说通过JavaScript脚本无法读取到Cookie信息,可以有效防止XSS攻击。

浏览器根据服务器返回的Set-Cookie设置好本地Cookie以后,浏览器每次请求服务器的资源时,就在Header中将Cookie附加上,这样,服务器就认为浏览器是登录状态。

17、Cookie劫持攻击

这里我们使用豆瓣网为例,演示一下Cookie劫持攻击。

(1)登录豆瓣网,用Fiddler抓取登录过程产生的数据包,可以看到一个如下图中的包,里面含有我们需要的cookie

(2)我们打开这个会话的session,可以看到用户的cookie,其中的dbcl2是和用户登录相关的。

(3)我们在该会话上右键,replay >> Reissue and Edit,将cookie中的此字段删除,然后Run to Completion放行,可以看到此时我们现在是非登录状态,并且跳转到了登录界面,服务器返回302

(4)现在我们知道,这个cookie字段就是和用户登录相关的,并且已经劫持到了,那么如何利用它呢?可以利用之前提到的Fiddler Script,编写脚本,每次发送数据包的时候,自动加上这个cookie不就行了,并且这个操作不会有任何中断。

Fiddler Script中的OnBeforeRequest函数中添加如下代码段:

1
2
3
4
if(oSession.uriContains("douban.com")){
var sCookie = "dbcl2=\"170842457:NW8ZWiZHFUU\"";
oSession.oRequest["Cookie"] = sCookie;
}

再次访问豆瓣网,发现自己已经处于登录状态了。

18、HTTP基本验证

用户名+冒号+密码Base64编码后生成字符串,放在header中的Authorization字段中,发送给服务器。

19、手机Fiddler抓包

手机和电脑处于同一局域网中,在fiddler >> Tools >> Options >> Connections中将allow remote computers to connect勾选上,同时在手机的wlan设置中,将其代理设置成电脑,IP为电脑IP,端口为8888;同时,在手机的安全设置中可以安装之前下载的fiddler root根证书,这样,就可以捕获到手机的https数据包了。

20、Replay菜单的详细说明:

Reissue Requests:重新发送请求,和菜单栏上的Replay按钮是一样的功能。

Reissue Unconditionally:无条件反复发送选中的请求。

Reissue and Edit:把选中的请求以原来的形式重新发送,在每个新的Session中设置断点,在请求发送给服务器之前,可以修改请求。

Reissue and Verify:重新发送请求,检查响应,如果响应和上一个请求一样,就会变成绿色。

Reissue Sequentially:选中多个Session会按顺序一个一个重新发送请求,是单线程模式。

Reissue from Composer:在Composer中编辑该请求。

Revisit in IE:在IE浏览器中用Get方法访问这个请求。

21、重放攻击,在Fiddler中,可以使用Composer编辑数据包并进行发送。

其实,重放攻击危害很大,比如说,某网站的投票或者点赞功能,当我们抓取到某个点赞的包时,我们可以重复发送这个数据包来进行刷票。再比如说,某些软件的注册,当我们抓取到某个注册请求包的时候,我们进行大量重复发送,对app造成的损失还是很大的。

解决方案:在HTTP请求中,添加时间戳stamp和数字签名sign。数字签名保证有效性,时间戳保证时效性。

22、后面的3–4个章节是使用JMeter对网站做自动化测试和压力测试的,在此略过。

-------------本文结束感谢您的阅读-------------
您的鼓励就是我创作的动力,求打赏买面包~~
0%