创建: 2023-09-01 08:19
https://scz.617.cn/network/202309010819.txt
这是一篇WEB安全白丁的扯淡,没有任何有效内容。扯淡,自然不是正经技术文,就是东拉西扯些有的没的。
HTTPS抓包这事,很多年前干过一些,SSLKEYLOGFILE+Wireshark、Burp、Fiddler、HttpWatch、HTTP Analyzer、Firefox的Live HTTP Headers、Tamper Data插件,后来F12,大概这么些,别的工具没用过。只抓过PC应用,没抓过手机应用。
虽然干过,也知道技术原理,但以我的标准看,与白丁无异。年轻时写简历,「了解、熟悉、精通」这些词的正确涵义我一直门儿清,从未用错过。近日稍微成体系地学习HTTPS抓包,目标是Windows系统HTTPS抓包,就有了这篇扯淡。
网友UID(1832267322)有次提及他喜欢用mitmproxy的upstream模式,只在客户端装mitmproxy的证书,再"-k -m upstream:"接Burp、Fiddler、Charles等工具。这个思路挺好,以前我未想过,实践后甚为满意。理论上,某工具只要能作为downstream与其他upstream串联,都有这种效果。
一直知道mitmproxy,之前从未用过,最近用上后,爽!先启动mitmproxy或mitmweb,给客户端配置代理,访问特定URL:
http://mitm.it/
根据其中的指示,安装mitmproxy证书。Firefox不用OS的根证书库,它有自己的根证书库。Chrome用OS的根证书库,它自己的设置最终还是转向OS设置。LTSB版Win10安装mitmproxy证书时,不要下载mitmproxy-ca-cert.p12,有很多教程让下载该文件并双击安装,但在Win10中这样行不通,中间有一步让输密码,无论如何无法继续,提示密码不正确。搜了一下,据说是个BUG。如下命令行同样提示密码不正确:
$ certutil.exe -importpfx root mitmproxy-ca-cert.p12
Enter PFX password:
CertUtil: -importPFX command FAILED: 0x80070056 (WIN32: 86 ERROR_INVALID_PASSWORD)
CertUtil: The specified network password is not correct.
正确搞法是,下载Android用的mitmproxy-ca-cert.cer
添加证书 certutil.exe -addstore root mitmproxy-ca-cert.cer
查看已添加证书
certutil.exe -store root mitmproxy
删除已添加证书
certutil.exe -delstore root mitmproxy
certmgr.msc同样可以导入、查看、删除证书:
受信任的根证书颁发机构->证书->右键->所有任务->导入->mitmproxy-ca-cert.cer
奇特的是,certutil.exe添加的证书,certmgr.msc可以看到并管理,certmgr.msc添加的证书,certutil.exe看不到,原因不明。所以,推荐用certutil.exe。
假设只想用Chrome测试代理,暂时不验证服务端证书,类似"curl -k",可先杀掉所有Chrome实例,再指定命令行参数启动Chrome:
--proxy-server=<http>:<port>
--proxy-server=socks5://<socks5>:<port>
--ignore-certificate-errors
若不先杀掉现有实例,据说上述命令行参数不生效,这是个坑。
mitmproxy的SOCKS代理兼容性不够,只支持SOCKS5,不支持SOCKS4,某些版本Win10的IE只支持SOCKS4。
jdk-17.0.7+7的javaw.exe启动burp 2023.9.2后,"Open Browser"访问
https://api.ipify.org/
报错
Burp Suite Professional
Error
Permission denied: no further information
curl也报错
curl --proxy http://<http>:<port> -k https://api.ipify.org
jdk-17.0.7+7的java.exe无此BUG,jdk-17.0.8的javaw.exe无此BUG。
"Fiddler Everywhere"是收费版,要破解,不想折腾。"Fiddler Classic"还是免费使用,我用这个。正经下载前要填一些信息,就像过去三年过度收集信息一样,但最终下载链接固定且可直接使用,我就不填信息。
https://www.telerik.com/docs/default-source/fiddler/fiddlersetup.exe
https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe
Fiddler的"Allow remote computers to connect"缺省清空,侦听127.0.0.1,若勾选,侦听0.0.0.0,无法指定绑某个IP,这比较扯。
从Win8开始,UWP默认不允许访问127.0.0.1;Edge算UWP,可用它实测之;这幺蛾子我才知道。Fiddler有个工具处理这种事:
Fiddler->Tools->Win8 Loopback Exemptions
参看:
《UWP默认不允许访问127.0.0.1》
https://scz.617.cn/windows/202308311521.txt
Charles 4.6.4是最后的稳定版,5.x是Beta版,但keygen仍适用。4.6.4有BUG,看不到baidu的Response,Fiddler无此幺蛾子。可以弄个Rewrite规则,访问baidu,收到Response时,在Header中"Content-Type: text/html"尾部增加";charset=UTF-8",之后Charles可正常解码Response中的汉字并显示出来。4.6.4有捕捉异常,未Rewrite时,baidu这种直接空空如野,想看hexdump都没有。5.x未捕捉此异常,若设法用java.exe启动5.x,可看到错误提示:
WARNING com.xk72.charles.CharlesContext
Uncaught exception on AWT-EventQueue-0
java.lang.StringIndexOutOfBoundsException: String index out of range: 61
LTSB版Win10中无法这样安装
Add-AppxPackage -Path charles-proxy-5.0b11-win-x86_64.appx
双击更不行,有Microsoft Store的Win10应该可以。我用7-Zip拖出来用。缺省情况下5.x无法在LTSB版Win10中启动,需要改配置。4.6.4兼容性更好。
此处留两个小作业,设法用java.exe分别启动Charles 4.6.4、5.x,不只看到GUI,还得正常抓HTTPS包,且控制台无任何警告。有一定难度,充满好奇心的可以一试。一般用不上这种启动方式,但若想调试Charles,可能就用上了。
测了若干代理转换工具,新接触到pproxy、gost、glider。pproxy是纯Python版,用得很爽,所以用py2exe转了一个standalone版。gost、glider都是Go开发的,很容易交叉编译得到gost.exe、glider.exe。便携可移动的EXE,是一种追求。
参看:
《若干代理转换工具》
https://scz.617.cn/network/202308291902.txt
抓HTTPS干坏事咱不能干,但不在现实世界用,就少点啥。微信视频号无法直接下载,网上有一堆用Fiddler、Charles下视频号的教程,有现成工具,有微信小程序。学过mitmproxy,我写了个mitmproxy插件下载视频号,你也可以这样检验学习效果。
成体系学习某项技术,自己可以定一些框架,依此填补空白,迭代更新学习文档。比如,这是我学mitmproxy时的框架:
☆ 安装mitmproxy
☆ mitmproxy基本操作
☆ mitmweb基本操作
☆ 客户端安装mitmproxy证书
1) Firefox安装mitmproxy证书
2) Chrome安装mitmproxy证书
3) Windows安装mitmproxy证书
4) curl使用mitmproxy证书
☆ mitmproxy与其他代理串联
1) Burp
2) Fiddler
3) Charles
☆ 代理类型转换
1) pproxy
2) pproxymain.exe
3) gost
4) glider
☆ 微信视频号下载
1) 启动Charles
2) 启动mitmweb
3) 客户端代理设置
4) Charles过滤规则
5) mitmproxy插件
☆ 参考资源
每一项都有如过江之鲫的现成资料可获取,但那是别人的知识,学完并写完,就变成你的知识。人有思维定势,在脑子里时不容易跳出来,写在文档中,可能很快就意识到。比如视频号下载,最初我用mitmproxy+Charles,后者GUI更好用,在此过程中学习了"Recording Settings"以及Ctrl-F的精准用法。可以直接Charles,但前面说过只装mitmproxy证书的,不纠结这点。写完"Charles过滤规则"这一小节,手工扒视频链接没问题,但GUI中再怎么加强过滤也比不过mitmproxy插件精准,想着都到这份上了,正好借此实践mitmproxy插件编写。若非写文档迭代至此,最初并未想过写插件,换句话说,写文档促使学习更进一步。显然,他日若需手机抓包,便会继续迭代更新文档。
这是一种万试万灵的学习方法,这是一套方法论。二十岁上下的,有志于网络安全行业的,问到我这儿来的,都会提一下写文档的事。事实上,我已在有意无意引导cby写文档,只不过她写的是数学文档。