天天看点

31类API安全测试的小技巧

31类API安全测试的小技巧

随着RESTful API、GraphQL API等API技术的发展,掌握API安全技术是渗透测试工程师的一项基本技能,在渗透测试过程中会用到各种API安全工具和技巧,其中API安全小贴士是入门学习的首选推荐,这里将它的中文版转发过来。

//////////

1. API版本漏洞,比如存在api/v3/login则检测api/v1/login,低版本API可能存在更多漏洞。

2. API多端/多接入点漏洞,比如认证接口,可能存在移动端、PC端、web端不同的认证接口或者不同的认证入口,/api/mobile/login 、 /api/v3/login 、 /api/magic_link等。

3. BOLA(失效的对象级授权和访问控制),BOLA像十年前的SQL注入一样,在API安全中广泛存在,作者通过一个附件材料,详细地介绍了BOLA问题的根源、如何发现和检测、如何防范和规避,并针对不同的角色(技术经理、开发人员、渗透人员)给出了建议。

4. 命令行注入,

以https://apidock.com/ruby/Kernel/open为例,开发人员使用了这个接口可能会导致命令行的存在。

5. API接口也会存在SSRF,可以利用此漏洞可以探测内网IP地址、端口、下载大文件导致Dos、显示内网控制台等。

6. 批量分配问题,现代开发框架鼓励开发人员在不理解安全含义的情况下使用批量分配方式的数据结构,往往仅仅通过修复http请求方法即可获取额外的信息,比如同一个接口由PUT请求调用修改为GET请求。 

7. 同一功能多个接口问题,当一家公司对外提供API接口给开发者时,同样的功能下,API接口与移动端、PC端接口实现方式一定要单独测试验证,不要假定跟移动端、PC端具备同样的安全机制。

8. 多协议问题,当渗透测试时,如果是REST API,试着仅仅将content-type修改为 "application/xml",添加一段xml后发出请求,验证其是否支持SOAP协议,从而发现是否存在安全漏洞。

9. HTTP header标志符安全问题,当渗透测试REST API,HTTP header中的标志符往往比url中的标志符更容易发现安全问题。

10. 破坏功能级的授权和访问控制,来发现管理类API接入点,比如正常的请求是GET /api/v1/users/<id> 将其修改为 DELETE / POST 去尝试删除或创建用户。

11. 使用header认证,如果验证机制不支持cookie方式,则需要通过防护设计来保护API免受CSRF攻击。 

12. 测试数值枚举,即使ID值为GUID生成的,也可以使用数值类型的来测试,比如使用 /?user_id=111来代替 [email protected]的值,有时候授权机制同时支持数值型和字符串型两种方式。

13. 批量分配问题导致授权绕过,比如POST /api/reset_pass 接口调用时需要验证旧密码,而PUT /api/update_user 接口调用可能就不需要旧密码。

14. 尝试扩展攻击面,比如通过http://Virustotal.com或 http://Censys.io可能发现同一API的不同的配置或不同的版本,以帮助你发现问题。

15. 静态资源授权问题,很多时候,应用程序本身授权访问控制在开发方面可能做得很好,但对静态资源的保护,比如说视频、图片、文件,在访问控制做得不够,存在未授权访问问题。

16. 渗透测试工具选择Burp Suite,即使免费版也提供树状视图,帮助你管理和发现所有你可以访问的API接口。 

17. Mobile Certificate Pinning,当你测试Android或iOS APP时,在逆向工程或打补丁之前,看看老的版本是否存在Mobile Certificate Pinning不可用的问题。

18. 多关注很少人使用的功能,企业和开发者更多的关注那些使用量高的API,对于使用频率低的API,往往存在有趣的漏洞。

19. 以下这些功能可能存在更多的漏洞,比如组织机构内的用户管理、 CSV/HTML/PDF文件导出、客户视图、子账号的管理创建、对象共享(比如图片、文档等)。 

20. 限流测试,尤其是在测试环境中,开发人员往往丢失限流机制,导致被暴力破解。

21. 使用 http://archive.com扩展攻击面,在http://archive.com上寻找老版本的应用,扫描js文件来发现url地址,扩大攻击点。

22. 个人信息泄露,一般来说,安全设计默认是保护个人信息隐私的,但通常后端工程师将json数据全部返回给前端工程师,由前端工程师做好数据过滤后展现。渗透时可以找到API调用入口,获取所有的信息,比如/download_receipt,/export_receipt等。

23. 下载应用APP或者应用源码,通过逆向工程(比如DLL文件: 使用IL-spy; Java反编译使用Luyten)来发现更多的问题。

24. 渗透测试环境下认证, 授权, 限流、输入验证的安全机制,在测试环境中,研发人员往往禁用这些安全机制,渗透人员可以利用此来扩大攻击面。

25. 攻击导出PDF功能,导出功能往往使用扩展类库来处理导出功能,比如转换html为PDF,可以试试html注入。

26. 常用授权绕过技巧,在某些场景下,授权机制依赖于某个ID值,如果将ID值篡改为对象,比如数组对象、JSON对象,则发生授权绕过。

类似的攻击手法有:

数组绕过:{“id”:111} --> {“id”:[111]}JSON 

对象绕过:{“id”:111} --> {“id”:{“id”:111}}

两次传值绕过:/api?id=非法参数值&id=恶意参数值

正则匹配绕过:{"user_id":"*"}

27. 当后端服务存在XSS保护时,以JSON代替试试。某些场景下,后端服务对html中存在xss具备保护机制,一旦触发则无应答或异常响应,试试以JSON格式的响应。

28. .NET应用测试技巧:有时候,开发者使用path_1,path_2两个参数来构造绝对路径,可能存在如果path_2为绝对路径时,则path_1则被忽略。

29.  善于利用API公开资料,大多数API接口都会有接口说明文档,并配备使用的源码样例程序,渗透测试人员要善于利用这些资料,分析用户、角色、资源之间的关系,从而发现更多的漏洞。

30.  渗透测试进入僵持阶段怎么办?扩大攻击面。如果有移动端应用,可以从应用市场下载历史版本,寻找安全机制缺失的API调用接口,比如授权、参数过滤、速率限制、影子API等。

31. 关注速率限制类型的安全漏洞,尤其是带有limit / page之类的参数,比如/api/news?limit=100,/api/news/pageNo/10/pageSize/50之类的接口,通过修改参数值测试是否存在Http Dos漏洞。

-End-

作者简介

继续阅读