渗透测试之API测试技巧

栏目: IT技术 · 发布时间: 4年前

内容简介:若API形式为:若API形式为:比如如下JSON Response

若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

{"user_id":233,"nickname":"w2n1ck","phone":"15566668888"}

那么可尝试:

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 函数的话,使用 1 管道符测试命令注入

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

比如更新某功能时

PUT /api/videos/233

{"name":"my_video","format":"mp4"}

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

GET /api/my_videos

{[{"id":233,"file_name":"my_video.mp4","path":"/my_video/path/"}]}

尝试添加隐藏属性

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. 集群绕过

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

# 修改密码为例
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. 属性变形

# 数组
{"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 应用程序的上下文中,第一个参数通常是指向图像或用户文档存储位置的绝对目录路径, 第二个参数通常是用户控制的,那么在某种程度上,如果参数path_2是绝对路径,则忽略参数path_1。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithm Analysis in Java

Data Structures and Algorithm Analysis in Java

Mark A. Weiss / Pearson / 2011-11-18 / GBP 129.99

Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course wa......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具