Charles不仅可以用于http协议攻击、XSS攻击,平时工作中也大有用处

686 阅读3分钟

Charles是一款代理服务器,通过成为手机/电脑应用层的代理截取请求和响应达到分析抓包的目的,是一款http/https协议网络抓包工具。Charles支持拦截请求与响应、修改请求与修改响应,支持快速重试请求等。

笔者使用Charles最初是为了模拟协议攻击、XSS攻击,后来觉得用于测试接口也挺方便就用来应对一些接口测试场景,最近接触新项目又用于熟悉新项目。由于项目web端和小程序端功能差异较大,想要熟悉项目代码,笔者是通过“玩”小程序了解业务流程,并用Charles查看小程序发送的请求获取服务器接口信息。

Charles官网下载链接:www.charlesproxy.com/download/

功能介绍.png

PC端支持HTTPS

  • 安装Charles代理证书 安装证书-电脑端.png

  • 启动SSL代理并配置站点匹配规则 ssl配置1.png

移动端支持HTTPS

  • Charles->SSL代理配置->安装Charles代理证书到手机 手机安装证书.png

手机安装证书2.png

  • 为手机安装证书

手机需要与电脑连接同一wifi或者确保在同一局域网内打开任意手机浏览器,输入chls.pro/ssl下载charles-proxy-ssl-proxying-certificate.pem文件。如果是Android系统,那么下载完成后修改文件的后缀名,由.pem修改为.crt,然后点击安装即可。IOS系统略有不同,但也非常简单。

代理移动端

手机需要与电脑连接同一wifi或者确保在同一局域网内。

  • Charles配置代理端口 代理配置2.png

  • 配置wifi网络->高级选项->代理改为手动,配置电脑的局域网IP地址,以及为Charles配置的代理端口 WechatIMG636.jpeg

现在就可以正常代理移动端的http/https请求了。

注意:如果没有监听到小程序发起的请求,可能需要重启小程序或者干掉微信进程重起微信再进入小程序。

Charles支持HTTPS协议的原理

Charles类似NginxNginx是反向代理,是服务器的代理,伪装服务器,Charles则是正向代理,是客户端的代理,伪装客户端。

使用Charles代理后,客户端向服务器发送请求到接收响应的过程中都发生了什么?

  • 1、客户端向服务器发起HTTPS请求;
  • 2、Charles拦截客户端的请求,伪装成客户端向服务器进行请求;
  • 3、服务器向客户端返回服务器的CA证书;
  • 4、Charles拦截服务器的响应,获取服务器CA证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端;

到此,Charles成功截获服务器的CA证书,Charles成为服务器的客户端,Charles成为真实客户端的服务器,如下图所示。

截屏2021-04-02 14.20.06.png

  • 5、客户端接收到Charles的证书后,生成一个对称密钥,用Charles的公钥加密,发送给Charles
  • 6、Charles代理客户端的请求,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器;
  • 7、服务器用自己的私钥解密对称密钥,向Charles发送响应;
  • 8、Charles拦截服务器的响应,替换成自己的证书后发送给客户端。