前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >渗透测试之API测试技巧

渗透测试之API测试技巧

作者头像
瓦都剋
修改2020-08-07 10:07:09
1.4K0
修改2020-08-07 10:07:09
举报
文章被收录于专栏:安全泰式柑汁安全泰式柑汁
1. 可预测性旧版API

若API形式为: /api/v3/login,那么可尝试 /api/v2/login/api/v1/login等。

2. 语义相似性

若API形式为: /api/mobile/login,那么可尝试 /api/phone/login/api/wx/login等,再比如 download_receiptexport_receipt等。

3. 不安全的直接对象引用(IDOR)

比如如下JSON Response

代码语言:javascript
复制
{"user_id":233,"nickname":"w2n1ck","phone":"15566668888"}

那么可尝试:

代码语言:javascript
复制
GET /api/user/{user_id}         //查询用户GET /api/user/{orther_user_id}  //查询其他用户POST /api/user/{user_id}        //修改用户信息PUT /api/user/{user_id}         //修改用户信息POST /api/user                  //创建新用户DELETE /api/user/{user_id}      //删除用户
4. 命令注入

在Ruby on Rails App的情况下,如果开发人员使用了 Kernel#open函数的话,使用 |管道符测试命令注入。

5. 根据返回包判断对象属性

比如更新某功能时

代码语言:javascript
复制
PUT /api/videos/233
{"name":"my_video","format":"mp4"}

但是在其他接口可能会有该对象的其他属性

代码语言:javascript
复制
GET /api/my_videos
{[{"id":233,"file_name":"my_video.mp4","path":"/my_video/path/"}]}

尝试添加隐藏属性

代码语言:javascript
复制
PUT /api/videos/233
{"name":"my_video","format":"mp4","path":"/my_video/path/../../evil/path"}
6. 平台不一致性

若web端限制较严格,可以尝试在app端测试。

7. REST API & SOAP API

对于Rest API可以修改 Content-Typeapplication/xml,并在body中添加xml代码,看是否会有错误产生。

8. header & body

http body/header 中的参数比url中的参数更容易受到攻击。

9. JWT

如果API使用JWT验证,那么CSRF就无法利用了。

10. UUID

即使id是UUID或其他非数字字符串,也要尝试发送一个数字值,比如使用 /user/detail?userId=1替换 /user/detail?userId=616d6bad-536e-44bb-9bf5-05042c9bffe8

11. 集群绕过

如果不同业务功能被分配到了不同的集群机器上,那么可能导致绕过。

代码语言:javascript
复制
# 修改密码为例POST /api/reset_pass //需要旧密码PUT /api/update_user //添加reset_pass中的参数可能直接就修改密码了
12. 子域名

不同子域名可能使用同一套API,可尝试在其他子域名测试。比如 admin.w2n1ck.com,可尝试 admin-api.w2n1ck.comadmin-api-v1.w2n1ck.com等。

13. 静态资源

由于大部分系统对静态资源的处理方式不同,所以静态资源很容易出现越权等问题。

14. 客户端

如果最新的APP无法找到突破口,可尝试下载旧版的客户端程序。

15. API重要程度

开发者可能对比较重要的接口做的防护更加完善,多留意一些不重要的API。

16. 非生产环境

开发者对于一些重要接口可能会做一些频次等限制,但是非生产环境可能就没这些限制措施。

17. 前端

前端js、webpack可能包含了大量API接口及参数。

18. 白盒审计

若通过某种途径获取到dll,jar,rar等源码,可通过反编辑等手段,阅读源码在源码中找API。

19. 导出功能

若API存在导出功能,比如导出PDF,可尝试注入特定的HTML代码。

20. 属性变形
代码语言:javascript
复制
# 数组{"id":111} --> {"id":[111]}# Json{"id":111} --> {"id":{"id":111}}# 参数污染id=111&id=222# 通配符{"id":"*"}
21. XSS防护

如果响应包是 Content-type:application/json,就不要考虑XSS攻击了。

22. 参数组合

.net应用可能会使用 Path.Combine(path_1,path_2)来组合参数,将两者连接起来得到一个完整的路径。web 应用程序的上下文中,第一个参数通常是指向图像或用户文档存储位置的绝对目录路径, 第二个参数通常是用户控制的,那么在某种程度上,如果参数path2是绝对路径,则忽略参数path1。

参考文章:

https://github.com/smodnix/31-days-of-API-Security-Tips/blob/master/README.md

https://apidock.com/ruby/Kernel/open

https://www.praetorian.com/blog/pathcombine-security-issues-in-aspnet-applications

https://medium.com/@inonst/a-deep-dive-on-the-most-critical-api-vulnerability-bola-1342224ec3f2

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小宝的安全学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 可预测性旧版API
  • 2. 语义相似性
  • 3. 不安全的直接对象引用(IDOR)
  • 4. 命令注入
  • 5. 根据返回包判断对象属性
  • 6. 平台不一致性
  • 7. REST API & SOAP API
  • 8. header & body
  • 9. JWT
  • 10. UUID
  • 11. 集群绕过
  • 12. 子域名
  • 13. 静态资源
  • 14. 客户端
  • 15. API重要程度
  • 16. 非生产环境
  • 17. 前端
  • 18. 白盒审计
  • 19. 导出功能
  • 20. 属性变形
  • 21. XSS防护
  • 22. 参数组合
  • 参考文章:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档