目录
- 预备知识
- 1.HTTP调试代理工具原理
- 2.Charles简介
- 实验目的
- 实验环境
- 实验步骤一
- 实验步骤二
- 实验步骤三
预备知识
1.HTTP调试代理工具原理
HTTP调试代理工具广泛应用于web程序开发、安全测试、流量分析等工作。HTTP调试代理工具工作于TCP/IP参考模型中的应用层,浏览器连接HTTP调试代理工具设置的代理端口后所有满足自定义规则的发往服务器的请求将发送至该工具,用户可以通过该工具确定该流量是否发送至服务器,同时可以修改请求数据(HTTP Request data)和响应数据(HTTP Response data)。HTTP数据流向如图1所示,其中实线表示HTTP请求,虚线表示HTTP响应。从功能实现角度来看,HTTP调试代理工具需要实现如下4项功能:1.解析HTTP数据,如:解析HTTP请求数据和响应数据;2.修改HTTP数据,如:在设置断点后,可修改浏览器发送过来的请求数据,或者修改服务器响应的数据;3.重定向请求,如:利用本地文件替换远程文件,调试线上的js/css代码;4.构造请求,如:构造请求发送数据,比如可以构造畸形HTTP数据来测试网站安全性。
2.Charles简介
Charles是一款常用的HTTP调试代理工具,除了Charles以外常见的HTTP调试代理工具还有有burp suite和fiddler。三种不同的HTTP调试代理工具有不同的优点,相比较而言:burp suite的优势在于功能强大、流量过滤规则丰富;fiddler的优势在于功能简单、流量过滤规则设置方法简单;Charles的优势在于用户交互性能更友好,既可以将流量按照时间序列分组也可以按照域名分组。除此之外,随着更多的网站启用HTTPS,在网络调试过程中捕获HTTPS数据包的场景越来越多,使用burp suite和fiddler都需要先处理好SSL证书的问题,但是Charles工具内置了SSL证书处理机制,几步简单的操作即可添加SSL证书到根证书,使得捕获HTTPS数据更加便捷。
实验目的
通过本实验了解HTTP调试代理工具的运行原理,掌握Charles常见功能使用方法。
实验环境
实验拓扑图:
攻击主机/漏洞主机:win7,IP地址:10.1.1.10。
辅助工具:xampp、Charles。
Charles工具请在实验机内下载使用:http://tools.hetianlab.com/tools/charles.zip。
实验步骤一
本实验从介绍Charles的基本配置开始到详细讲解Charles的捕包、重复发包、文件映射、DNS欺骗等功能的使用方法,最后介绍如何使用Charles完成文件上传绕过攻击。
1.Charles基本配置与基本功能介绍。
2.Charles的数据包修改、重复发包、文件映射、DNS欺骗和模拟慢速网络等功能的使用。
3.使用Charles完成文件上传绕过攻击。
任务描述:介绍Charles的基本配置信息和基本功能。
1.Charles界面如下:
todo
其中工具栏显示了最常用的十个功能图标,标号1-10的图标表示的功能为:
1)清除当前会话下的所有HTTP数据包。
2)开启/关闭HTTP数据包记录功能。
3)开启/关闭模拟慢速网络功能。
4)开启/关闭断点。
5)基于选中HTTP请求生成新的HTTP请求。
6)重放选中HTTP请求。
7)验证HTTP响应(HTML、CSS、RSS/Atom数据)是否符合w3c规范。
8)购买序列号。
9)工具箱。
10)设置。
2.Charles提供了HTTP代理、SOCKS代理、反向代理三种代理。
配置Charles的HTTP代理功能有两种方法,一是在菜单栏【Proxy-Proxy settings-Proxies】选项设置HTTP代理端口和SOCKS代理端口,然后在浏览器上或者其他移动客户端上根据Charles的代理地址和端口设置代理。
二是在菜单栏【Proxy-Windows proxy】选项中选中Charles将Charles设置成windows全局代理,这样做的好处是windows平台所有软件默认使用Charles作为代理。
配置和使用SOCKS代理的方法与HTTP代理类似。
配置反向代理,在菜单【Proxy-Reverse Proxies Settings】选项中可以配置远程映射的端口,比如下面的配置将remoteip.com:80端口映射到本地1080端口,本地访问1080端口将获得remoteip.com:80返回的数据。
3.在使用Charles时经常用到的功能是:
自动忽略无关域名流量的功能,在菜单【Proxy-Proxy settings-Options】选项设置自动忽略数据包的域名信息,下图设置将忽略所有www.google.com域名的流量:
设置聚焦域名流量功能,在菜单【View-Focused Hosts】选项设置关心域名信息,比如此处关心localhost的流量,如下图设置即可。
4.Charles有两种方法对流量进行分组,一是按照域名对流量进行分组:
二是按照时间序列对流量进行分组:
5.Charles有三种筛选流量的方式:
如下图所示,在Filter表单中直接输入关键词进行过滤,此方法适合临时性筛选流量。
在菜单【Proxy-Recording Settings】选项中既可以设置留下哪些流量(Include)也可以设置删除哪些流量(Exclude),此方法适合永久性筛选流量,在捕获流量前设置好规则可以减少捕获的流量数目。
选中流量后,右键选中Focus选项,逐个筛选流量,之后选中流量列表右下方的Focused按钮,即可展示所有选中的流量。此方法适合筛选那些无法通过域名来准确识别的流量。
todo
6.捕获HTTPS数据包前需要安装Charles颁发的SSL证书。点击菜单【Help-SSL Proxying-Install Charles Root Certificate】后,直接点击安装证书即可。
todo
菜单【SSL Proxy Setting】配置SSL代理。
下图是设置Charles进行SSL Proxy设置前后捕获的HTTPS数据差异对比图,左图明显都是乱码:
todo
实验步骤二
任务描述:介绍Charles常用功能,按使用频率高低逐个介绍,大部分功能见【Tools】菜单。具体讲解Charles的数据包修改、重复发包、文件映射、DNS欺骗、模拟慢速网络等功能的使用。
1.Compose/Compose Request,编辑HTTP请求来适应测试需求,比如构造畸形HTTP请求测试服务器的异常处理机制。
2.Repeat/Advanced Repeat,重复发送数据包,比如使用Charles刷票,或者测试服务器的高并发处理性能。
3.DNS Spoofing Settings,DNS欺骗功能,比如APP测试时,APP访问线上服务器一般是通过域名的方式来进行,这些域名往往都硬编码在程序中,我们可以将线上服务器的域名重定向至测试服务器的域名来进行测试。下面的实验将baidu.com重定向至本地IP,访问baidu.com的效果如图。
4.Throttle Setting,模拟慢速网络:
本功能主要应用于测试移动APP在慢速网络或高延迟网络情况下的性能差异,如下图所示可选择多种网络模式,并可自行修改MTU等参数。
5.No Caching Settings,不对数据包进行缓存:
启用该功能后,Charles会在每个HTTP请求中自动添加如下请求头:
pragma:no-cache
Cache-Control:no-cache
6.Block Cookies Settings,阻止网站返回Cookie。
7.Map Remote Settings,将网络请求文件替换成远程文件,比如将线上服务器的访问请求都重定向到测试服务器,降低线上服务器的压力。
8.Map LocalSettings,将网络请求文件替换成本地文件。该功能在web前端测试的过程中应用比较普遍,比如web前端做测试时在不方便把css文件直接部署到线上服务器的情况下,可以用本地写好的css文件代替线上css文件进行测试。
9.Rewrite Settings,对某一类网络请求进行正则替换,比如将HTTP请求中的用户名admin替换成另一个用户的用户名user。
10.Black List Settings,网络访问黑名单策略,黑名单中的流量将被丢弃或者返回403信息,如下图所示。
11.White List Settings,网络访问白名单策略,只有满足白名单规则的流量才可以通过,其它的流量被丢弃或者返回403信息。
12.Mirror Settings,将HTTP响应数据保存到本地磁盘,供后期分析和研究使用。
实验步骤三
任务描述:使用Charles完成文件上传绕过攻击(用本机模拟的,先将下载的upload.php放到C:\WWW路径下,并在C:\WWW路径下新建一个名为uploads的文件夹)。
1.访问http://10.1.1.10/upload.php,可上传图片至服务器,上传test.php文件提示如下图。upload.php文件存在文件上传漏洞,服务器程序仅仅验证上传文件的类型(Content-Type参数)是否为图片,而Content-Type参数是可以在前端修改的。
2.点击Proxy→Breakpoints Settings设置断点如下,并启用Charles断点。
3.访问http://10.1.1.10/upload.php,上传一个test.php文件,修改Charles中的数据包。
数据包修改前:
将数据包的Content-Type参数修改为image/jpeg:
4.php文件上传成功,使用Charles修改Content-Type参数绕过服务器端对上传文件的检测。访问上传文件http://10.1.1.10/uploads/test.php,结果如图。