渗透测试之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。


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

查看所有标签

猜你喜欢:

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

PHP Hacks

PHP Hacks

Jack Herrington D. / O'Reilly Media / 2005-12-19 / USD 29.95

Programmers love its flexibility and speed; designers love its accessibility and convenience. When it comes to creating web sites, the PHP scripting language is truly a red-hot property. In fact, PH......一起来看看 《PHP Hacks》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具