感慨时间不够用,给我一天48小时就好了,感慨精力有限,让我一天干12小时都不带累的就好了…。之前我老婆还和我说,娃儿如果可以一下子就长大就好了,我们能把理想一下子都实现就好了,我想了想感觉心好慌,如果是那样,人生还需要几十年寿命么,人生的意义又是什么!!!起码现在我很享受目前的生活。
人生最重要的还是方向,坚定不移的方向。
愿世界多一点理智,理性!!阿弥陀佛,善哉!
本人安卓开发的,所以首选Fiddler手机抓包,如果是抓取网页数据,工具应该更多,自行谷歌
Fiddler - 实现手机抓包
http安全找了2天, 目前为止本人没有能力去非常深入探讨该技术,到时找了些书籍,如果有兴趣的或者外语还可以的都可以自己去学习,我后面会学习总结的,如果有可能也会写文章的。
2020年必看的国外最佳黑客书籍
《黑客攻防实战案例解析》自己谷歌下载PDF
如果你是一名前端开发或者测试人员,那么fiddler绝对是最值得掌握的工具之一。fiddler是最强大的web调试工具之一,他能记录所有客户端和服务器的http/https请求以及响应,允许你监视,允许你设置断点调试,甚至篡改请求和响应。
Fiddler在浏览器与服务器之间建立一个代理服务器。Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1, 端口:8888. 当Fiddler退出的时候它会自动注销,这样就不会影响别的程序。
1、开发环境的host配置;
2、前后端接口联调;
3、定位线上bug——将发布文件代理到本地,快速定位线上bug;
4、性能分析和优化——Inspectors 、Timeline;
fiddler没有手机客户端,都是安装在PC上,要实现对手机上的程序抓包,则需要对PC上的fiddler和手机端做一些配置。步骤如下:
前提条件:
1).测试手机需要支持Wifi
2).测试手机与电脑需要同一网络
(1)电脑下载Fiddler
官网: http://www.telerik.com/feddler
下载地址: https://www.telerik.com/download/fiddler
(2) PC端Fiddler配置
允许监听https
打开Fiddler Tool->Fiddler Options->HTTPS 。
勾选上Capture HTTPS CONNECTs(捕获 HTTPS 连接)(由于我们只抓手机的,所以这里选择 from remote clients only)、 Decrypt HTTPS traffic (HTTPS 请求解密)和 ignore server certificate errors(忽略服务器证书错误)
安装证书(首次使用无证书,会弹出是否信任fiddler证书和安全提示,直接点击yes就行),重启Fiddler生效。
有时候没有弹窗安装证书或根本就没有提示,这种情况一般在Win7中较多出现,Win7的系统https方面 在.net Framework4.0上有bug
解决方案是:
cd D:\tools\fiddler //fiddler的安装目录
然后执行以下命令
makecert.exe -r -ss my -n “CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com” -sky signature -eku 1.3.6.1.5.5.7.3.1 -h 1 -cy authority -a sha1 -m 120 -b 22/11/2020
注意:这个命令最后的日期 22/11/2020 一定要大于现在的日期 否则创建证书是过期的
这样执行完之后 再去重新配置一次 就可以正确安装证书了。
允许手机远程连接
点击 Fiddler->Tools -> Options,在 Connections 面板选中 Allow remote computers to connect 允许其他设备连接(此操作需重启Fiddler生效)。
“fiddler listens on port:”默认为8888,如你本机电脑的端口8888已被占用,那填写一个未被占用的端口
查看电脑ip地址
通过cmd命令行输入ipconfig查询
或者将鼠标置于fiddler右上角的online中即可显示电脑的ip地址:
(3) 安卓端配置
给fiddler安装certmaker插件
由于默认的证书不符合android和ios的证书要求,所以,需要下载certmaker插件,双击安装后,重启fiddler。注意这一步很重要,必须使用certmaker插件,不要使用默认的证书生成器,否则抓不到包。
将 Fiddler 代理服务器的证书导到手机上才能抓这些 APP 的包。
导入的过程:打开浏览器,在地址栏中输入代理服务器的 IP 和端口(即电脑的IP加fiddler的端口),会看到一个Fiddler 提供的页面,然后确定安装就好了
打开手机的 设置 —> WlAN ,选择连接的wifi(必须保证PC端与移动端在同一个网段中)。
长按该wifi,然后选择“修改网络”,然后勾选“显示高级选项”,选择手动代理设置,主机名填写Fiddler所在电脑的ip,端口填写Fiddler端口,默认8888,保存即可。
配置完发现手机浏览器其他网址不可上网,可以在“对以下网址绕过代理” 处填写相关网址 及可对相关网址上网
(4)iphone配置
1.将无线局域网处于和Fiddler所在工具的电脑同一网段;点击感叹号
2.然后滑动到页面最下方,点击“配置代理”,配置代理默认是关闭的。
3.安装证书
在 Safair 浏览器中打开 电脑ip:8888,例如“192.168.1.1:8888”。
点击圈出来的链接安装证书
点击描述文件
点击信任此证书:
以上就ok了
参考来自Android平台HTTPS抓包解决方案及问题分析
Android从7.0开始系统不再信任用户CA证书(应用targetSdkVersion >= 24时生效,如果targetSdkVersion < 24即使系统是7.0+依然会信任)。也就是说即使安装了用户CA证书,在Android 7.0+的机器上,targetSdkVersion >= 24的应用的HTTPS包就抓不到了。
那么,我们如果绕过这种限制呢?已知有以下四种方式(低于7.0的系统请忽略):
1 AndroidManifest中配置networkSecurityConfig
如果我们想抓自己的App,只需要在AndroidManifest中配置networkSecurityConfig即可:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
但是这么做仅仅是针对自己的项目,而且作为项目负责人来说肯定尽可能希望自己的app不被人抓取信息
2 调低targetSdkVersion < 24
同样的道理,针对自己的项目可以更改
3 平行空间抓包(推荐)
如果我们希望抓targetSdkVersion >= 24的应用的包,那又该怎么办呢?我们可以使用平行空间或者VirtualApp来曲线救国。平行空间和VirtualApp这种多开应用可以作为宿主系统来运行其它应用,如果平行空间和VirtualApp的targetSdkVersion < 24,那么问题也就解决了。
在此,我推荐使用平行空间,相比部分开源的VirtualApp,平行空间运行得更加稳定。但必须注意平行空间的版本4.0.8625以下才是targetSdkVersion < 24,别安装错了。当然,HttpCanary的设置中是可以直接安装平行空间的。
4 安装到系统CA证书目录
对于Root的机器,这是最完美最佳的解决方案。如果把CA证书安装到系统CA证书目录中,那这个假CA证书就是真正洗白了,不是真的也是真的了。由于系统CA证书格式都是特殊的.0格式,我们必须将抓包工具内置的CA证书以这种格式导出,HttpCanary直接提供了这种导出选项。
操作路径:设置 -> SSL证书设置 -> 导出HttpCanary根证书 -> System Trusted(.0)
PS. 很不幸的HttpCanary v2.8.0前导出的证书名称可能不正确,建议升级到v2.8.0以上版本操作。
导出.0格式的证书后,可以使用MT管理器将.0文件复制到/etc/security/cacerts/目录下,或者通过adb remount然后push也可(这里稍微提一下,别在sdcard里找这个目录)。
视图功能区域
会话的概念:一次请求和一次响应就是一个会话。
fiddler主界面如下:
快捷功能区中常用几项解释
快捷功能区:
1:给会话添加备注信息
2:重新加载当前会话
3:删除会话选项
4:放行,和断点对应,后面详细讲解
5:响应模式。也即是,当Fiddler拿到远程的response后是缓存起来一次响应给客户端还是以stream的方式直接响应。
6:解码。有些请求是被编码的,点击这个按钮后可以根据响应的编码格式自动解码。
7:查找会话。
8:保存会话。
9:截屏。截屏后,会以会话的方式返回一个截图。
这里列举两个栗子,一个是美团v7.5.1版本,一个是自己的项目。并不是说自己的项目多么优秀,但是针对http数据加密我还是比较满意的,起码是参照SSL/TLS中的密钥生成以及数据加密思路来的,相对来说比较难破译,美团最新的版本我也看了,大家感兴趣可以去看看
美团V7.5.1的登录
1.请求的会话:
2.请求携带的数据
这里看到了,输入的密码压根就没有加密(我也是醉了,最新的没有这个问题,但是也是一样的,这些信息一目了然可以看到)
3.响应的数据
如果按照以上的结局来看,只要我能监听到对方的请求(对黑客来说应该不是难事,尤其是安卓手机),我就完全可以获取到对方的登录用户名和密码
我们的项目
1.会话列表
这边我们的项目有个特点,即使请求的用户名和密码是相同的,但是每次请求的data以及响应的数据都是不同的,因为密钥每次都是请求都是唯一的。
参考文献:接口测试之——fiddler抓包、过滤、断点调试
1.Fiddler 过滤功能
Fiddler过滤不是重点,这里随便提一下,感兴趣可以去以上参考文献详细查看
2.冒充和篡改报文
冒充表示请求携带参数更改
篡改是针对响应的数据进行篡改
命令行输入:bpu api.xxx.xxx/user/login ,点击enter
然后点击登录按钮,出现如下,前面有个T 的红色小图标表示被打了断点
如下图所示,请求携带参数:这里的data,tm,ver都可改,
这是响应并没有及时反馈给app,而是被截留:首先点击①,会先在TextView面板中出现响应数据,然后就可以针对②响应数据进行更改,在点击③按钮,表示数据提交给了app客户端
注:以上https表示未进过SSL/TLS认证的,如果进过SSL认证也是请求不到的,如下图所示
其实也可以不需要再手机上设置代理,只要在同一wifi下即可抓取当下wifi下的流量包
新思路:直接让路由器连接代理,路由设备就会走代理服务器,然后直接对代理服务器使用fiddler或其他抓包工具进行抓包即可
可参考如下内容:
通过Proxifier、V2ray和Newwifi捕获任意的http和https流量