admin管理员组

文章数量:1603247

Fiddler抓包–学习记录

抓包简介

什么是抓包(what?)

抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存、伪造等操作,可以用来检查网络安全,也经常被用来进行数据截取,校验传输数据等。

抓包能做什么(why?)

网络传输的数据包往往包含很多信息,不管是开发过程中的接口调试,还是测试人员进行安全测试,校验数据准确性,或是分析数据传输协议,都需要抓取数据进行处理和分析。常用场景如下:

  • 分析数据传输协议
  • 定位网络协议,数据准确性问题
  • 从数据包中获取需要的信息
  • 将获取的数据包进行修改、伪造、重发
  • 提高工作效率

怎么抓包(how?)

抓包工具的原理都是从指定的设备(如网卡)上获取到数据,但是如果数据没有流过检测的设备,我们是无法获取数据进行抓包的,常用的接入抓包工具的方法及
抓包工具都是从指定的设备(如网卡)上获取到数据,假如数据没有流过监测的设备,那么我们是抓不到任何想要的数据的,接入抓包工具的方法,常用的有五种

  • 端口镜像:最优模式,不会留下网络痕迹,也不需要下线设备,但是需要交换机支持端口镜像。
  • ARP缓存中毒: 不需要下线设备,比较高效,需要借助其他工具。
  • 集线器: 使用方便,需要下线设备,效率低。
  • 网络分流器: 需要下线设备,成本高,比集线器效率高,抓取光纤设备数据的唯一选择。
  • 工具直接安装到主机:可能会因为主机故障导致数据包被丢弃。

Fiddler抓包常用功能场景

https通信原理

1.Fiddler截获客户端发送给服务器的HTTPS请求,Fiddler伪装成客户端向服务器发送请求进行握手 。

2.服务器发回相应,Fiddler获取到服务器的CA证书, 用root证书公钥进行解密, 验证服务器数据签名, 获取到服务器CA证书公钥。然后Fiddler伪造自己的CA证书, 冒充服务器证书传递给客户端浏览器。

3.与普通过程中客户端的操作相同,客户端根据返回的数据进行证书校验、生成密码Pre_master、用Fiddler伪造的证书公钥加密,并生成HTTPS通信用的对称密钥enc_key。

4.客户端将重要信息传递给服务器,又被Fiddler截获。Fiddler将截获的密文用自己伪造证书的私钥解开, 获得并计算得到HTTPS通信用的对称密钥enc_key。Fiddler将对称密钥用服务器证书公钥加密传递给服务器。

5.与普通过程中服务器端的操作相同,服务器用私钥解开后建立信任,然后再发送加密的握手消息给客户端。

6.Fiddler截获服务器发送的密文,用对称密钥解开,再用自己伪造证书的私钥加密传给客户端。

7.客户端拿到加密信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就这样建立了“信任”

抓取手机https数据包

  1. Fiddler配置

    1.Tools→Options→HTTPS→Caputre HTTPS CONNECTs [相应选项勾上]

    2.Tools→Options→Connections→Allow remote computers to connect [勾上]


  1. 手机配置WiFi代理

    打开系统『设置』→『WiFi』→『已连接WiFi属性』
    选择『配置代理』→『手动』会出现代理配置项控件
    配置要代理的IP(fiddler中右上角这里鼠标悬浮可以显示)和端口号(默认为8888),最后保存

  • 下载证书

    1.打开浏览器,访问[代理ip] : [端口号],比如10.1.5.48:8888
    2.点击下面的FiddlerRoot certificate开始下载

  • 安装证书

    • Android
      有以下三种方式安装:
      1.打开系统自带文件管理器,找到下载的FiddlerRoot.cer文件,点击打开,一般要验证密码,然后会提示安装
      2.【设置】里面找到【系统安全】再进入【加密与凭据】选择【从存储设备安装】之后,后面的操作基本和第一种方式一样
      3.有的手机从浏览器上下载完成,浏览器就支持直接安装证书
    • iOS
      1.下载完成会跳到【安装描述文件】界面,点击右上角【安装】,一顿操作之后安装成功
      2.去【设置】→【通用】→【关于本机】→【证书信任设置】→激活证书

主要功能

  • Statistics 统计信息
  • Inspectors 信息分析
  • Fiddler orchestra (远程代理)
  • FiddlerScript (核心配置脚本)
  • Composer 自定义请求
  • AutoResponder 自动响应
  • TimeLine
  • Filters 过滤器
  • Logs 日志

FiddlerScript是Fiddler核心配置的脚本,功能非常强大,它允许你增强Fiddler UI,添加新的特性,修改请求与响应内容等等。
它是基于JScript.NET 语言。在Fiddler 中点击菜单“Rules > Customize Rules”后,可以编写Fiddler Script 脚本,只要一保存,Fiddler 将会重新编译脚本并自动加载,如果加载成功,则会播放声音并在Fiddler 状态栏显示"CustomRules.js was loaded at " 提示信息,如果编译失败,将会显示错误提示信息。

主要方法(static function 方法名)
OnBoot fiddler 启动时调用
OnShutdown fiddler 关闭时调用
OnAttach fiddler 注册成系统代理时调用
OnDetach fiddler 取消注册系统代理时调用
Main 在每次fiddler启动时和编译CustomRules.js 脚本时调用
OnBeforeRequest 常用,在请求之前时调用
OnBeforeResponse 常用,在这个方法中修改Response的内容
OnExecAction 在Fiddler界面中左下方的QuickExec Box,如果你的脚本处理了指定的命令,则返回true,否则返回false
常用的调试方法如下:

OnBeforeRequest

static function OnBeforeRequest(oSession: Session) {
        //会隐藏所有url中包含“localhost”的抓包信息
        if (oSession.uriContains("localhost") {
            oSession["ui-hide"] = "true";
        }
        //将包含指定地址的url标记为某种颜色
        if (oSession.HostnameIs("mobile.touna")) {
            oSession["ui-color"] = "green";
        }
       // Delay sends by 300ms per KB uploaded.请求延迟
       oSession["request-trickle-delay"] = "300"; 
       // Delay receives by 150ms per KB downloaded.响应延迟
       oSession["response-trickle-delay"] = "150"; 
}


OnBeforeResponse

//替换指定地址的响应数据
static function OnBeforeResponse(oSession: Session){
       if(oSession.uriContains(".baidu")){
            if(oSession.GetResponseBodyAsString().Contains("百度")){
                oSession.utilReplaceRegexInResponse("百度", "投哪");
            } 
        }
}

AutoResponder

自动响应,本地保存一次respons,激活后会优先覆盖原响应
应用场景:修改respons内容
比较难重现的场景,先本地存一份
如下图点击[Generate File]默认会在桌面保存一分响应的所有数据内容

编辑自动响应

点击[Edit File With …]会进入 编辑状态
编辑时要注意,修改了body内容,Content-Length会变化,要作相应的加减

自定义请求

可以发起16种请求,常用的Http请求get和post,输入url 、header 中的Content-Type、body内容
点击右上角[Execute]开启请求

重复请求

1.选中会话,可选中多条
2.点击左上角[Replay]或者鼠标右键菜单中选择[Replay]→[Resissue Requests]

断点

可以分别在发送请求之前和响应返回之后修改数据

当点一次GO时会跳到拦截一小段时间内的请求,此时并不会有返回结果,可以去修改请求参数,再点GO才会有返回结果。当开启断点时,客户端发起请求,页面会卡住,直到点Go或者点Run to Completion断点后,Inspectors里面的内容变为可编辑状态,把word字段修改为“上海”

可以看出左上角还是“深圳”,实际内容已经变成了“上海”,请求参数已经修改成功,所以说一般重要的功能都会对url加密,在实际工作中可以用来测试接口,使用各种参数请求后是否接口报错

本文标签: Fiddler