抓包工具Charles使用,中间人攻击,手机抓包
###
1,Charles抓包工具的原理
原理都是在客户端和服务器之间充当代理服务器
正常的情况:客户端-------服务器
增加了Charles的情况:客户端 -----Charles -----服务器
Charles有两个功能,
1,接收客户端的请求,并且转发给服务器,
2,服务端返回结果给Charles,然后Charles转发给客户端,
https代理的原理:
如果是https,增加了加密的情况,这个抓包的逻辑是什么:
客户端和代理服务器建立连接,----代理服务器和真的服务器建立连接,
真的服务器下发证书给代理服务器-----代理服务器签名证书然后下发给客户端,
客户端使用签名证书生成公钥传给代理服务器,-----代理服务器用自己的签名证书解密之后,再用用服务器的证书加密传给服务器,
服务器传递加密数据给代理服务器,---代理服务器解密并加密数据传递给客户端,
然后后面的数据传输基本都是这样的了,
2,Charles的安装配置
安装是很简单的,
代理的设置:proxy--proxy setting --proxy标签页配置端口号port:8888,----ok
访问控制设置:proxy--access control setting --- 会有一个ip列表---点击add添加ip---ok
mac代理设置:系统偏好设置--网络--代理--选择http和https代理---输入ip地址和端口号--保存(ip地址可以在Charles-help-local ip address 中查看)
mac代理设置还有更简单的方法:proxy-macOS proxy,选中就可以了,
SSL代理设置:proxy -- SSL proxy setting ---选中enable ssl setting --add *:* --保存,不设置这个可能会看到请求的返回内容是乱码,是因为做了加密
3,Charles主要功能
1,支持http和https代理
2,支持流量控制,比如弱网测试
3,支持接口并发请求,可以做简单的并发测试,实际很简单,就是通过:右键--repeat advanced --设置重复次数,
4,支持重发网络请求,这个很重要,重放攻击,实际很简单,就是通过,右键--repeat ,就可以了,或者通过快速工具栏的刷新按钮也可以,
5,支持断点调试,就是拦截请求和响应,--下面有介绍,也很简单,
界面介绍:
分成三部分,
1,菜单栏,这是主导航栏,很多功能在这里,
比如清空回话,重发请求,断点调试等,
2,左侧的请求导航栏,所有的请求可以在这里看到,
这个可以看到可以通过域名查看请求,也可以通过时间查看请求,还可以过滤请求,这是主要的功能,
3,点击左侧具体的一个请求,
右侧的上半部分是请求内容,
这个部分最重要的是overview,还有一个contents,这个contents是最重要的,可以看到header,cookie,请求参数,返回内容,
右侧的下半部分是响应内容,
如果是接口的响应内容,可以通过json查看json格式的返回数据
如果是图片的响应内容,可以通过image的格式查看到图片的显示
如果是html的响应内容,可以通过html格式查看到html内容,不能像浏览器一个看到预览,因为抓包工具没有渲染页面的能力,css,js,
可以搜索内容,这个搜索实际是很强大的,但是总是定位的地方有些不准确,不知道是不是我操作有问题,
4,Charles中间人攻击,拦截请求和响应,
第一种方法,断点调试,这个这是一次性的,
打开断点调试:
首先打开代理开关,proxy--enable breakpoints
然后在要左侧,在需要断点的请求上面右键,选择breakpoint,
然后重新浏览器请求这个连接,就会进入断点,这个断点会有两次一个是request的请求发送出去之前,还有一个response接收过来的之后做拦截,
所以可以修改请求参数,也可以修改返回内容,
关闭断点调试,
关闭代理开关,proxy--disable breakpoints
如果想要关闭单个url的断点,还是在请求上右键,把breakpoint取消勾选就可以了,
第二种方法,使用映射本地文件的方式来调试,
第一步:把需要映射的html,在本地新建一个html文件,
第二步,在Charles的右侧,选择需要替换本地文件的请求,右键--点击map local,然后会自动填充进来域名端口路径,你只需要选择需要映射的本地文件,
第三步,修改本地的文件内容,刷新浏览器,就会发现返回的内容,变成自己本地的文件内容了,
还可以使用这个方式进行js的debug,
比如在html里面的script标签里面,输入alert(变量名),就会打印这个变量,
比如在某一行,输入debugger;这样就可以实现在这个地方打断点,
如果想要关闭这个map locals
在菜单,tools -map locals -然后取消掉就可以了,
5,Charles手机抓包,
要使用Charles进行手机抓包,要进行两步设置,1是Charles端的设置,2是手机端的设置,
Charles端的设置
1、让电脑和手机处于同一个局域网下,即电脑和手机连接同一个WiFi【电脑开WiFi给手机连接也可以】;
2、打开Charles,点击菜单栏中Proxy –> Proxy Settings···,设置代理端口是8888【默认】,可以不修改端口号, 点击OK::
3、查看mac电脑的ip,ifconfig,192.168.31.225
4、如果要对HTTPS抓包的话,还需要设置Proxy -> SSL Proxying Settings -> SSL Proxying -> Add,添加所有的域名和端口:
5、点击菜单栏Help->SSL Proxying->install Charles Root Certificates on a Mobile Device or Remote Browser,可以看到手机端安装证书提示:
#########
手机设置,
1、根据以上提示,打开手机的WiFi设置,连接和电脑同一个WiFi【或者连接电脑开启的热点】,设置代理IP与端口(代理IP就是上图的IP,端口就是Charles的代理端口8888);
如果使用的是genymotion模拟器,长按wifi名字,可以弹出设置代理的功能,
在真机使用adb命令,安装apk包,adb install 包名
2、手机浏览器访问网页,输入chls.pro/ssl,出现证书安装页面;
3、如果是苹果手机,点击安装后完成,在设置里面的通用,关于手机,信任证书:
4、如果是Android手机,点击下载,然后在手机设置的安全里面,安装证书:
注意如果安装证书失败了,换一个手机浏览器,比如使用Chrome浏览器,另外就是一定要开启一个无痕浏览器来访问chls.pro/ssl
否则也是安装证书会失败的,
等你安装了证书之后你就可以愉快的抓包了,哈哈哈!!!
6,Charles过滤请求
方法一、Proxy-Recording Settings-Inclede/Exclude
Inclede: 配置需要抓包的请求,其他请求被过滤,不会将请求显示到界面
exclude: 配置需要排除的请求,被配置的请求被过滤
备注
这个过滤,用的时候很不好用,有时候不生效,不知道怎么回事,
可以先采用,关闭抓包的方式,然后分析请求,不让其他的请求出现,干扰分析,
7,Charles修改请求
另外Charles修改请求的功能,要好好的用啊
这是一个重要功能,可以很好的模拟请求你,这是一个很重要的事情,
####
其他
抓包工具,比如fiddler,Charles,都是只能抓应用层的协议,wareshark可以抓传输层的协议,但是一般不用这个软件太重了,
另外python有一个抓包工具,mitmproxy,这个抓包工具很厉害,后面要学会使用,
抓包工具抓不到的原因,
1,可能是因为没有走http协议,而是走的tcp协议,你用抓包工具,就抓不到,
2,可能是缓存的原因,清空缓存试试
###