【接口漏洞专题】接口遍历、接口调用重放、接口参数篡改、接口未授权访问
【接口漏洞专题】接口遍历、接口调用重放、接口参数篡改、接口未授权访问
目录
一、接口调用遍历:
1.1、原理:
1.1.1、初期
在对功能进行设计的时候,就会相应的设计接口(方便去调用这些功能)。
1.1.2、编码
接口根据具体的功能需求进行封装(各部分可以直接调用)
1.1.3、实现
通过客户端传入的不同参数,获取对应数据,或执行相应的功能
1.2、示例:
查询功能,客户端通过对应的接口,传入userID等相应的参数,筛选出对应userID的信息,并返回给客户端。
1.3、漏洞产生的原因:
1.3.1、明文传输:
没有使用HTTPS等安全协议进行加密传输,直接将敏感的信息通过明文在客户端与服务器之间传输
1.3.2、无Session检验:
如果没有对userID参数与对应的Session进行一致性验证,可能存在非法的越权访问
1.4、利用过程:
1.4.1、抓包拦截
使用burpsuite等抓包工具代理
1.4.2、产生数据包
在网站上点击各种地方(登录,查询等等),burpsuite会对整站的数据包进行爬取,并保存在site map(网站地址)中
1.4.3、过滤数据包
使用burpsuite的过滤器,对数据包进行过滤,找到含id参数的请求数据包
1.4.4、接口遍历
对于找到的数据包发送到Intruder中,对id参数进行遍历,并分析响应信息
二、接口调用重放:
2.1、原理:
顾名思义,就是将截获的正常数据包,再次发送给服务器(已经接过该数据包),且能被服务器执行,重发次数多了就崩了。
2.2、产生的地方:
支付接口、发送短信接口、发送邮件接口、验证码接口、订单生成接口、评论提交接口……
2.3、漏洞产生的原因:
(1)未采取验证或验证不全面
(2)未控制数据包相关限制,就好比上限等(未做好输入控制)
(3)对应的唯一的token,和token使用后失效,失效时间
(4)为对数据包中的参数进行过滤,导致恶意语句执行
(5)没有判断时间戳的机制
(6)未做好输出控制
2.4、利用过程:
2.4.1、截取
攻击者通过网络监听或抓包等方法获取到了正常的请求数据包
2.4.2、重发
虽然这个数据包已经被服务器成功接收到了,但是因为服务器验证机制漏洞,再次把数据包发送给服务器,达到欺骗服务器目的
2.4.3、执行
数据包中恶意操作被服务器执行
三、接口调用参数篡改:
3.1、原理:
顾名思义,通过对漏洞的利用(或者抓包),对传入接口的参数进行修改。
3.2、参数的加密:
3.2.1、规则
客户端和服务端约定的加密方法、加密秘钥等
3.2.2、加密
使用秘钥对参数加密(得签名值signature),将签名值放入参数中
3.2.3、发送
发送到服务器
3.2.4、解密
根据约定好的秘钥解密(得签名值autograph)
3.2.5、验证
对比2次签名值(signature和autograph的值),一样则合法,反之不合法
3.3、产生漏洞原因:
(1)Session覆盖问题(Session中存储重要的凭证),如果是从客户请求的参数中获取相关凭证,就可能接收到是被篡改的参数
(2)从前端获取的相关凭证,要与Session中的凭证相符合
(3)没有对前后端进行分离
3.4、产生的地方
(短信、邮政……)短信验证码、邮件验证码……
3.5、利用过程:
3.5.1、提交
输入正确的手机号或邮箱地址参数提交
3.5.2、修改
通过Session覆盖等手段修改手机号或邮箱,改为目标手机号/邮箱
3.5.3、实现
如果修改了对应请求中参数后,修改后的目标能收到信息,则表示接口参数修改并成功执行,存在篡改漏洞
四、接口未授权访问:
4.1、原理:
在很多功能设计的时候,特定功能的接口调用,需要进行身份验证通过后,才能调用使用特定功能,通过各种漏洞去访问无权访问的,就属于未授权。
4.2、产生原因:
4.2.1、未使用检验方法:
(1)未使用Token验证,或者Token使用后未失效,被攻击者利用
(2)未对会话状态进行验证(即是否是登录状态)
(3)未进行Session验证(Session中包含身份凭据)
(4)未对请求者身份与所请求数据所有者是否进行验证(唯一性)
4.3、 利用过程:
4.3.1、发现
寻找接口身份验证的不足(如未做身份验证或校验不足)
4.3.2、利用
利用漏洞(身份认证的缺陷),进行非授权访问(越权,垂直越权和水平越权)调用接口
五、相关介绍
5.1、webservice:
5.1.1、原理:
字面意思是web服务意思(分布式计算技术),网络上存在可用的API(接口),即可直接在网络环境进行调用的方法(远程调用)
5.1.2、测试链接:
5.2、callback自定义:
5.2.1、原理:
被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数(官方文档)
5.2.2、示例
这个就是好像C语言中import<>一样,调用系统库里面的代码(导入模块)。
- 点赞
- 收藏
- 关注作者
评论(0)