本期嘉宾:3stoneBrother,京东集团攻防与实验室安全工程师,业务蓝军负责人,熟悉Web渗透测试,长期致力于甲方web业务安全方向攻击与防御研究。
✎小课堂黑板报
Web作为一个公司对外提供服务的入口,如果开发者的安全意识不强,就会导致Web应用安全问题层出不穷。黑客往往以Web漏洞为入口,进而操作和控制网站,最终达到入侵的目的。JSRC小课堂Web安全专题,将以Web安全存在率较高的逻辑漏洞为学习切入点,逐步带来由中级到高级的Web攻击手法演示,以及漏洞挖掘案例和经验讲解。欢迎热爱Web安全的小伙伴一起交流学习。
互联网公司业务上线前会经过代码审计、白盒测试、黑盒测试等,业务漏洞的挖掘难度越来越高,如何快速有效地挖掘更多逻辑漏洞呢?
基础知识:认证缺失和认证缺陷漏洞
认证缺失和认证缺陷漏洞主要指功能级访问控制缺失,例如任意增删改查用户信息。实际业务场景中,可能出现开发人员安全意识比较薄弱的现象,例如业务上线前没有做认证处理,或者认证处理环节没有问题,但是没有控制好权限,导致可越权获取高权限用户的敏感信息。
那么如何快速发现认证缺失漏洞和认证缺陷漏洞,避免敏感信息泄漏呢?基于工具开发主要由四个环节组成,即域名信息收集、站点信息爬取、规则的分析与提取和批量处理结果分析与展示。
Step 1 域名信息收集
如何进行域名收集呢?建议可以通过如下三种方式:
搜索引擎:如Google
优点:被动获取。
缺点:依赖于搜索引擎的爬虫能力,搜索引擎难于爬去域名下的所有站点信息。
证书透明度
下面是我常用的证书透明度检索站点:
https://crt.sh/
https://developers.facebook.com/tools/ct/search/
https://transparencyreport.google.com/https/certificates
优点:被动获取。
缺点:通配符Wildcard SSL 证书存在,部分子域名无法获取。例如:
子域名爆破
我常用的两个子域名爆破的工具是:
https://github.com/lijiejie/subDomainsBrute
https://github.com/OJ/gobuster.git
优点:更加灵活,可以相对全面获取信息。
缺点:主动扫描,并发量过大可能影响线上业务,且依赖于字典的质量。
Step 2 站点信息爬取
域名收集完成后,就需要进行站点信息爬取。针对静态网页的站点信息爬取,可以通过python的requests库。
动态网页的站点信息爬取会相对复杂些,无法通过python的requests请求来实现,原因是存在javascript异步请求加载的接口。这里就要提到PhantomJS,PhantomJS是一个基于Webkit的“无界面”浏览器,它会把网站加载到内存并执行页面上的JavaScript。它不会展示图形界面,所以运行起来比完整的浏览器要高效。
如果我们把Selenium和PhantomJS结合在一起,就可以运行一个非常强大的网络爬虫,这个爬虫可以处理JavaScrip、Cookie、headers,以及任何我们真实用户需要做的事情。
Step 3 规则的分析与提取
规则的分析和提取具体指:确认是否存在认证缺失或授权缺陷的标准。
如何确认是否存在认证缺失?
我们从认证层面可以从如下环节进行验证,即统一单点登录、自建系统登录、无需登录和异常页面。
统一单点登录:响应码302,重定向URL:
https://sso.*.com/login? ReturnUrl=http://files.*.com。
自建登录系统:响应码302,存在login、password、passwd、登录、注册等字段。
无需登录:响应码200,且响应包数据长度大于一定阈值。
异常页面:发出的链接没有数据包返回,即死链接,不需再做下一步分析。
如何确认是否存在授权缺陷?
如果响应返回敏感信息,则可能存在授权缺陷,我们可以通过正则表达式进行验证。
正则表达式(Regular Expression),又称规则表达式或常规表示法,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。我常用的测试正则表达式的工具是https://regex101.com/。我们在上述工具中应用正则表达式,对动态爬取的站点信息进行模式匹配,提取、统计和分析符合规则列表的数据,根据这些特征确定是否存在认证缺失和认证缺陷漏洞。
部分策略规则图示:
Step 4 批量处理结果分析与展示
检测完是否存在证缺失漏洞和认证缺陷漏洞,就到了确认命中率的时刻啦。
认证缺失的批量命中情况可参考下图:
1.单点登录
2.自建登录系统
3.不用登录
4.异常