记录渗透时遇到的一些问题和解决方法
2025/9/21大约 4 分钟
浏览器挂着BP的CA证书却还是被HSTS拦截了怎么办
在历史记录中找到目标站点,右键选择忘记该站点然后刷新即可
HSTS
HSTS (HTTP严格传输安全 / HTTP Strict Transport Security)
原理解析 Gemini生成
两大信任模型的“战争”:本地信任 vs 全局策略
当浏览器决定是否信任一个HTTPS连接时,它内部实际上有两个“部门”在同时工作,它们各自遵循不同的规则手册。
部门一:证书验证部 (The Certificate Validation Department)
- 职责: 负责检查网站出示的“身份证”(SSL证书)本身是否合法。
- 规则手册:
- 签发者是谁?: 这张身份证的颁发机构(Issuer),在我的“可信CA根证书列表”里吗?这个列表由操作系统和浏览器厂商预置,包含了像DigiCert, Let's Encrypt等几十个全球公认的权威机构。
- 给谁用的?: 身份证上的名字(Common Name/Subject Alternative Name)和我正在访问的网站域名(www.starbucks.com)匹配吗?
- 过期了吗?: 身份证在有效期内吗?
- 被吊销了吗?: 这张身份证是不是已经被签发机构宣布作废了?
- 被拦截的操作 (SEC_ERROR_UNKNOWN_ISSUER): 失败在规则1。因为PortSwigger CA不在浏览器预置的“可信CA列表”里。
- 尝试的解决方案 (导入Burp CA证书): 您通过“走后门”的方式,手动地在“可信CA列表”里,为PortSwigger CA增加了一条记录。您告诉证书验证部:“以后见到PortSwigger盖的章,就认!”。
到此为止,如果只有这一个部门在工作,您导入证书后就应该能直接访问了。 但事实并非如此,因为还有第二个、权限更高的部门。
部门二:安全策略执行部 (The Security Policy Enforcement Department)
- 职责: 负责执行比证书验证更高级、更严格的安全策略。它不管证书本身怎么样,它只执行写在自己“最高指令手册”里的命令。HSTS (HTTP Strict Transport Security) 就是这本手册里最重要的一条规则。
- 规则手册 (HSTS策略):
- 检查HSTS缓存: 当你准备访问www.starbucks.com时,我先查一下我的HSTS缓存列表里,有没有关于这个域名的“最高指令”?
- 发现指令: 哦,查到了!星巴克服务器在很久以前就告诉我:“在max-age指定的时间内(例如一年),访问我的时候,必须满足一个额外的、强制性的条件:连接的证书链必须是完全有效且无错误的,并且最终能追溯到一个公共的、预先信任的根CA。”
- 一票否决: 现在,安全策略执行部会向证书验证部下达指令:“听着,虽然你们部门说这张PortSwigger CA签发的证书是你们新认可的‘自己人’,但它不符合我手册里‘必须由公共权威机构签发’的这条最高指令。因此,我一票否决这次连接。不许建立连接,并向用户报告安全错误。”
这就是HSTS的霸道之处:它为“信任”增加了一个不可逾越的、更高的标准。 它覆盖了你手动的本地信任设置。
最终解决方案:“忘记此站点”的“物理”操作
在历史记录里选择“忘记此站点”,在浏览器内部触发了一个非常强大的操作。
- 它做了什么?: 这个操作的本质,是物理上删除了浏览器本地存储中,与starbucks.com这个域名相关的所有数据文件。这包括:
- cookies.sqlite: 所有的Cookies。
- places.sqlite: 历史记录和书签。
- 以及最重要的,存储HSTS策略的文件(在火狐里是SiteSecurityServiceState.txt的一部分)。
- 为什么有效?:
- 当您执行这个操作后,安全策略执行部的那本“最高指令手册”里,关于starbucks.com的那一页,被物理撕掉了。
- 现在,您重新访问https://www.starbucks.com。
- 安全策略执行部先去查它的手册,发现“咦?没有关于星巴克的最高指令了。” 于是它无事可做,保持沉默。
- 流程现在完全交给了证书验证部。
- 证书验证部开始工作,它看到一张由PortSwigger CA签发的证书。它查了一下自己的“可信CA列表”,发现“哦!这是我们老大(你)前几天刚让我加进来的‘自己人’!”
- 所有检查通过,连接成功建立!