然后你把这个服务器黑掉!
然后再通过服务器找到后台数据库,如果不能最终黑掉数据库那就是没有办法!
如果能,那就直接改数据库,把那个10次改成。。。。。一夜之间你想几次就几次!
抓包的基本原理就是中间人攻击 HTTPS 的握手过程 。Mac 上可使用 Charles 进行抓包。本质上就是两段 HTTPS 连接,Client <-->Man-In-The-Middle 和 Man-In-The-Middle <-->Server。使用 Charles 进行抓包,需要 Client 端提前将 Charles 的根证书添加在 Client 的信任列表中。回顾之前的 HTTPS 的握手过程 ,可以知道 SSL 的核心过程就是客户端验证证书链合法性——客户端检查证书链中是否有一个证书或者公钥存在于客户端的可信任列表中。
手机系统中内置了上百份不同的根证书。Certificate Pinning 的原理其实就是 app 中内置需要被信任的特定证书,app 在验证服务器传过来的证书链时,使用这些特定证书来验证的。
证书的主要作用是公钥的载体,但在实践中我们更多是去 pinning 公钥, SubjectPublicKeyInfo(SPKI) 。这是因为很多服务器会去定期旋转证书,但是证书旋转后,证书中的公钥还是相同的公钥。
如果私钥泄露了,那么服务器端就不得不使用新的私钥做出新的证书。客户端为了预防这种情况,可以提前 pinning 这些新的证书。这样,当服务器替换新的证书时,客户端 app 就可以不做任何改动。
从 SDK 24 开始,Android 支持通过 xml 来配置 certificate pinning,见 Network Security Configuration 。
其中 <pin> 节点接受 SubjectPublicKeyInfo 的 hash 值。
OkHttp 从 2.1 开始直接支持 Certificate Pinning 。
我在项目实践中发现有的服务器并不会在 ssl 握手阶段 将完整的证书链传输过来——只会传证书链中的根证书和叶子证书。如果安卓系统中使用 HttpUrlConnection 访问服务器,抛出如下类似异常:
但是浏览器对于这种缺失中间证书的服务器却能验证通过,主要原因是浏览器访问有完整证书链的网站时,如果发现证书链中有浏览器没有内置的中间证书,那么浏览器会将该证书缓存下来,这样浏览器访问其他没有该中间证书的服务器时,就可以使用这个缓存的中间证书来验证证书链。
解决安卓上出现这个问题的方法是将这个中间证书通过 app 添加到信任证书列表中。我们需要将该中间证书加入到 App 运行时所用的 TrustManager 中。
使用 X509TrustManagerExtensions 可以将证书 pinning 到 app 中。 X509TrustManagerExtensions.checkServerTrusted() 允许开发者在系统对证书链验证通过后,再次使用自己的方法验证证书链。
使用方法如下:
大家好,我是阿萨。最近碰到使用浏览器使用HTTPS抓包时,抓包工具无法抓包。而且还是使用HSTS的模式以及SSL Pinning 技术。
首先介绍下HSTS:
HSTS(HTTP Strict Transport Security)国际互联网工程组织IETF正在推行一种新的Web安全协议
HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。
需要详细了解SSL Pinning的,自行搜索。
因为强制使用了自己证书校验,抓包工具的SSL证书就校验不通过了,这时需要将网站证书导入抓包工具中才能正常工作。
那有些人就说了,我没有证书咋办呢?
别急。我们先打开需要抓包的网址。HTTPS的网址前面会有一把锁。点开锁,可以查看证书详情。以Mac 电脑 Chrome 浏览器 Stack Overflow 网站截图为例。
点 Connection is Secure 位置。
点击 Certificate is valid 打开链接。查看证书名称。
打开KeyChain ( 可以直接在浏览器里管理证书位置打开keyChain)。找到对应证书。点击右键,导出你想要的格式
导出证书后,倒入抓包工具的证书管理工具里,重启抓包工具就可以了。
windows导出证书和mac的导出方法不一致。
Windows 的浏览器查看证书位置,可以直接导出证书。
Mac是key chain管理的。
大家赶快试一试吧。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)