1.逻辑漏洞
1.1. 简介
逻辑漏洞就是指攻击者利用业务/功能上的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。 逻辑漏洞的破坏方式并非是向程序添加破坏内容,而是利用逻辑处理不严密或代码问题或固有不足,进行漏洞利用的一个方式。
1.2逻辑漏洞类型
1.2.1登录功能
- 返回凭证
- 暴力破解用户密码
- 验证码登录爆破
- 验证码复用
- 验证码登录绕过短信轰炸
- session覆盖
1.2.2注册功能
- 任意用户注册
- 短信轰炸返回凭证
- 注册覆盖
1.2.3密码找回功能
- 任意用户重置
- 短信轰炸
- 返回凭证
1.2.4会员系统
- 用户越权访问
- 订单查看修改
- 收获地址越权查看修改
- 资料越权查看修改
- 换绑手机修改
- 换绑短信轰炸
- 水平垂直越权
2.实战
2.1密码爆破
有些网站对用户的登录尝试次数没有做限制,没有账户锁定机制,我们可以进行暴力破解
首先随便输一个账号密码进行抓包 开启代理,打开burpsuite工具,点击login并拦截包
抓包点击右键后发送到intruder模块
1.点击清除把所有变量清除
2.分别双击输入的用户名和密码,点击添加,变为有效载荷
3.选择攻击类型,攻击类型有四种,这里出于实际情况,我们选择第四种集束炸弹的模式
接着分别添加用户名字典和密码字典 开始爆破
因为账号密码都需要爆破,因此有效载荷集为2
添加密码字典 开始暴力破解
根据长度可以得出用户名为admin 密码为 password
(medium)
将难度修改为Medium
通过比较可以看出相比Low级别的代码,Medium级别的代码主要增加了mysql_real_escape_string函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,”,x1a)进行转义,基本上能够抵御sql注入攻击, 同时增加了sleep(2) 破解失败 会停止运行两秒 但是仍然可以通过暴力破解 只不过相较于low级别慢一点
(high)
相较于medium级别 增加了token认证
先了解一下token
基于Token的身份验证的过程如下:
1.用户通过用户名和密码发送请求。
2.服务器端程序验证。
3.服务器端程序返回一个带签名的token
给客户端。
4.客户端储存token
,并且每次访问API
都携带Token
到服务器端的。
5.服务端验证token
,校验成功则返回请求数据,校验失败则返回错误码。
请求中发送token
而不再是发送cookie
能够防止CSRF
(跨站请求伪造)。即使在客户端使用cookie
存储token
,cookie
也仅仅是一个存储机制而不是用于认证。不将信息存储在Session
中,让我们少了对session
操作。
token
是有时效的,一段时间之后用户需要重新验证。
因为token是随机的 所以破解时候token这一项也需要破解
首先抓包 可以看到有token
将token和password两项设置为变量 (因为已知用户名为admin,为了方便演示,不在破解用户名)攻击模式使用Pitchfork
将密码和token值设置为变量
选择第三种攻击类型——音叉攻击,表示使用两个字典,密码和token的值进行逐行匹配
首先设置密码字典
设置token参数
选择options将线程数设置为1(递归查找,将上一个请求的相应token作为下一个请求的payload的token,所以就不并发。因为token是每次验证完后才会新生成token,所以不能使用多线程进行爆破)
继续下滑找到Grep-Extract
Grep-Extract模块进行相应设置,获取相应的token,截取相应token的前后标识,用于下次截取
回到有效载荷页面
设置第二个参数——token,有效载荷类型改为递归搜索,英文为recursive grep。
在第一个请求的初始有效负载部分把我们复制的token粘贴上去
完成以后,点击开始攻击。
2.2验证码漏洞
2.2.1验证码爆破
与上面爆破用户名,密码方法类似
服务端未对验证时间、次数作出限制,存在爆破的可能性。简单的系统存在可以直接爆破的可能性,但做过一些防护的系统还得进行一些绕过才能进行爆破。burpsuite对纯数字验证码爆破时间估计:对于4位纯数字验证码:从0000~9999的10000种可能用多线程在5分钟内跑完并不是很难。对于6位纯数字验证码:六位数的验证码1000000位,单从爆破时间上来看就比4位数的多100倍。
2.2.2验证码不失效
这里说的是图形验证码使用过一次未立即失效引起的问题 , 验证码使用后依然可以继续使用 。
2.2.3短信验证码可预测
这里的短信验证码可预测,是指的在发送短信验证码的同时,拦截数据包请求,而后进行发包,会看到返回的手机验证码,或在发送请求短信的时候,即将发送至手机里的验证码出现在请求数据
2.3密码重置漏洞
简单来说就是未验证短信验证码与手机的匹配关系(却验证了短信验证码与图片验证码)服务器端应该是只检查是否发送过验证码,但未验证验证码与手机号的匹配关系,导致任意账号重置。
首先,对目标手机号码进行密码重置发送验证消息
接着,对自己手机号码发送验证消息
将目标手机号与自己的验证码结合
更改成功
2.4越权漏洞
如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
2.4.1水平越权
以pikachu靶场为例
登录一个用户
在url中将name改为其他用户 越权成功
2.4.2垂直越权
垂直越权就是通过自身低权限账号去执行高权限账号所能执行的操作
其实垂直越权漏洞是需要一定的条件的,需要抓取到高权限用户的数据包,而抓取这个数据包是有一定的困难的,比如可以盲猜数据包,或者通过网站获取源码本地搭建去获取,
先登录超级管理员,去执行只有管理员才可以操作的新增账号的功能,用burp抓包。退出登录。登录普通用户,执行新增账号操作。如果成功,则存在垂直越权漏洞。
先添加用户
进行抓包
退出登录,在repeater中执行。返回登录界面,要求登录。
在burp获取cookie。
然后找到之前添加用户的post请求,发送到repeater。
目前的管理员登录态是退出的,现在我们把这个登录态换成现在登录的普通用户的登录态。以普通用户的身份执行管理员操作。点击执行。返回pikachu,刷新页面。
又出现了一个2122用户,说明存在垂直越权漏洞。
2.5用户名枚举
当你在登录界面随意输入一个用户名和密码时候,提示的不是用户名或密码错误,而是该用户不存在,则该漏洞存在。可以枚举用户名,当出现密码错误时候,证明该用户名存在。
3.支付系统
3.1.简介
支付漏洞在漏洞中一直是处于高风险漏洞,对于企业来说相应的危害是很大的,同样对于用户的风险也很大的,比如当攻击者通过修改,使用他人账号的余额进行购买,那么就属于支付中的越权漏洞了。
3.2.购买流程
选择商品和数量--产生订单--选择邮寄地址及支付方式--订单支付-一完成支付。
3.3.支付漏洞分类
3.3.1.修改支付价格
对于修改支付价格,通常来说购买一件物品需要选中自己所需购买的物品,其次确认相关的信息,最后支付价钱,而在这个过程中,可以在选中时就修改价格,若有相关的验证,则可以向后边退,一步一步测试。
3.3.2.修改支付状态
其实这里的支付状态挺好理解的,把支付未成功修改为支付成功即可,这个也是由于支付的状态未和实际订单的支付状态进行校验而产生的。
3.3.3.修改购买数量
在支付的过程中,数量也同时决定着价格,比如:1个数量商品对应的是100,2个数据就是200,那么当你修改这个值数量值为负数时,那么其金额也会变为负数,最后就会导致支付问题的产生。
3.3.4.替换支付
替换支付简单来说,首先去产生两个订单,但是这两个订单的商品是不一样的,其价格也是不一样的,如果服务端未做好相应的验证,那么在支付过程中去替换数据,最后支付,这时候就可以使用订单支付的价格购买到其他贵的物品。
4.接口逻辑漏洞
4.1.URL重定向
4.1.1.漏洞介绍
URL重定向(URLredirection)漏洞,又称跳转漏洞。指的是网络应用程序接受用户可控的输入作为到外部站点的链接,然后在重定向中使用该链接。可以认为是SSRF一种。
4.1.2.漏洞原理
http参数可能包含URL值,并且可能导致Web应用程序将请求重定向到指定的URL。通过将URL值修改为恶意站点,攻击者可以成功启动网络钓鱼诈骗并窃取用户凭据。由于修改后的链接中的服务器名称与原始站点相同,因此网络钓鱼尝试具有更可信赖的外观。
4.1.3.漏洞危害
1.网络钓鱼:即攻击者将漏洞用比较有名的域名伪装,用户没有注意到以此放心点击。被窃取敏感信息。
2.绕过保护机制;获取权限或假冒身份
3.用户的访问可能会被重定向到不可靠的网页。不可靠网页中可能存在恶意软件并可能攻陷用户电脑。一旦用户电脑被攻陷,用户就暴露在大量各种网络危机中。而且用户和网络服务器的交互也可能被攻陷,导致个人身份,密码等关键敏感信息的泄漏。
4.1.4漏洞利用条件
URL从用户可控制的输入中提取:
该URL未经验证,就被用于网络应用程序的重定向地址。