逻辑漏洞
逻辑漏洞是指由于程序逻辑不严谨或逻辑太复杂,而导致一些逻辑分支不能够正常处理或处理发生错误,一般出现在以下几个方面:
-
任意密码修改(没有旧密码验证)
-
越权访问
-
密码找回
-
交易支付金额
逻辑漏洞出现在方方面面,主要原因是应用场景不同产生的逻辑方面的漏洞也不同。比如金融网站和互联网网站以及购物网站,挖掘逻辑漏洞方法完全不一样。
我们将所有逻辑漏洞的问题分为前端和后端两个部分,总体思路都是先测试前端再测试后端。简单来说其实就是能突破规则限制的就是漏洞【像不可修改的通过抓包可以修改了】。
1、发现网站的功能模块(修改密码、修改资料)
2、针对具体功能确定业务流程
3、拦截http/https请求,分析其参数项的含义
4、修改参数值,尝试触发逻辑漏洞
水平越权: 水平越权访问是一种“基于数据的访问控制”设计缺陷引起的漏洞。由于服务器端在接收到请求数据进行操作时没有判断数据的所属人/所属部门而导致的越权数据访问漏洞。
水平越权测试方法:主要通过看看能否通过A用户操作影响到B用户
假设用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。
垂直越权:权限ID不变,权限类型改变
垂直越权是一种“基于URL的访问控制”设计缺陷引起的漏洞,又叫做权限提升攻击。
垂直越权测试思路:看看低权限用户是否能越权使用高权限用户的功能,比如普通用户可以使用管理员的功能。
由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
通过验证码:可以采用爆破、抓包修改手机号码
1、前端
修改返回包看是否能跳过验证步骤.
2、验证码爆破
验证码包括图片验证码和手机验证码,先测试图片验证码,将使用正确密码登录的包再重放一次,如果回显还是正确登录的话说明并没有对图片验证码进行限制,可以尝试撞库。
至于手机验证码,通常是尝试爆破,如果网站发到手机上的短信没有写什么在xx时间内有效之类的则有可能没有时间限制,将登录包右键发送至Intruder(即测试器模块)设置好爆破位置后在载荷里选择数值后这样填写。
3、修改发送包手机号
首先用自己的手机收到正确验证码,在点击注册时拦截包将手机号改为其他手机号,如果成功的话就注册了别人的手机号,这是因为后端仅验证了验证码是否是正确的而没有验证验证码是否与手机匹配。
流程小结:
1、前端判断【回显及判断】
2、验证码爆破
3、修改发送包手机号或邮箱【提交时修改手机号或者修改验证码发送包的手机号】
4、【邮箱找回】链接尝试修改用户参数【注意token等参数】
1、修改支付的价格:在支付当中,购买商品一般分为三个步骤:订购、确认信息、付款。如果这三步中有一步没有做好验证,都可能会导致修改金额大小的漏洞产生
2、修改支付状态:问题出现在没有对支付状态的值跟实际订单支付的状态进行校验,导致单击支付时抓包修改确定支付或未支付的参数为支付状态的值,从而达到支付成功
3、修改购买数量:修改附属值:在很多的平台可以利用积分或优惠券,这个时候我们也可以去尝试
4、修改购买数量:修改附属值:在很多的平台可以利用积分或优惠券,这个时候我们也可以去尝试
a、修改优惠券的金额,当我们选择了相关的优惠券之后我们可以尝试修改优惠券金额的大小,如果能够成功购买者说明,存在漏洞
b、修改优惠券金额及业务逻辑问题
c、修改积分金额
5、修改支付接口:一些网站支持很多种的支付接口,如:自家的支付工具、第三方支付工具、每一个支付的接口值不同,如果我们抓包修改不存在的支付接口进行支付。如果程序员没有做好不存在的支付接口的处理就会产生漏洞
6、多重替换支付:如果挑选出两个订单,商品、价格都不相同,如果服务端没有做好相关的验证,在支付过程中,将一个订单的值修改为另一个订单的值,最后支付,那么我们就可以用订单一的价格购买到订单二的商品
7、重复支付:如果没有对订单多重提交进行校验,那么可能导致无限制的刷牌子
8、最小额支付:如果在测试过程中支付负数或者0.01时支付失败,可以将最小额设置为1元进行尝试
9、值为最大值支付问题:我们可以把金额设置成999999999或者将其附属值设置成999999999,由于逻辑设置问题,我们最终支付的金额会变成0
10、越权支付:在支付过程中修改用户ID,这样就可以用其他用户来进行支付
11、无限制试用:对于一些商品的试用,在支付时修改接口,将购买接口改成试用接口,这样一次次的累加,就可以无限期的试用了
12、修改优惠价格:有一些商品会有优惠价格,我们在支付时可以修改这个优惠金额
在支付这里,我们一般认为,只要有参数,就都可以修改,都有可能出现问题。使用两个账号来对比测试,这样可以更快发现可疑参数。
该攻击方式原理非常简单: 一般来说,在用户输入密码等关键信息,错误达到一定次数时,就会锁定该账户,使得该账户在短时间内无法正常使用.
所以,如果攻击者故意多次输入错误的关键信息,即可利用系统的锁定功能使该用户的账号停用.
-
永远不要相信来自用户的输入,使用合理(严格)的权限校验规则。
-
使用后台登录态作为条件进行权限判断,尽量不要使用前端传进来的参数作为判断条件。
-
在获取手机验证码时需要先进行验证码验证,验证码后端生成后端验证,尽量使用复杂验证码防止被自动识别
-
每次验证码在验证后删除该验证码的session 防止验证码复用
-
限制验证码输入错误次数和获取验证码次数
-
cookie中设定多个验证,例如APP的cookie中,需要sign和ssid两个参数配对,才能返回数据。
-
用户的cookie数据加密应严格使用标准加密算法,并注意密钥管理。
-
用户的cookie的生成过程中最好带入用户的密码,一旦密码改变,cookie的值也会改变。
-
cookie中设定session参数,以防cookie可以长时间生效。
身份认证安全
1、暴力破解:burp、htpwdScan(撞库必备)、hydra
2、session及cookie类:会话固定攻击,利用服务器的session不变机制,来冒充他人;cookie伪冒:修改cookie中的某个参数可以登录其他用户
3、弱加密:未使用https,前端加密,用密文去后台校验
业务一致安全
1、手机号篡改:抓包修改手机号码参数为其他号码尝试登录,看看是否能够访问其他人的业务
2、邮箱或用户篡改:抓包修改用户或者邮箱参数为其他用户或者邮箱
3、订单id篡改:查看自己的订单id,然后修改id(加一或减一),查看能否查看到其他订单的信息
4、商品编号篡改:例如在积分兑换的地方,100个积分只能兑换商品编号为0001的商品,1000积分只能兑换0005的商品,但是自己只有100积分想要兑换500积分的商品时,我们就可以尝试在用100积分兑换时,把商品编号进行篡改
5、用户id篡改:抓包查看自己的id,然后对id进行加一减一的修改操作,看看能不能查看到其他用户的信息
业务数据篡改
1、金额数据篡改:抓包修改金额字段
2、商品数量篡改:用一个商品的价格购买多件商品
3、最大数限制突破:商品限制用户购买数量时,服务器仅在页面通过js脚本限制,未在服务器端校验用户提交的数量,通过抓包修改商品最大限制时,将请求中的商品数量改为大于最大数限制的值,查看能否完成接下来的业务
4、本地js参数修改:
部分的应用程序通过javascript处理用户提交的请求,我们可以通过修改js脚本,测试修改后的数据是否产生影响
用户输入合格性
1、注入测试
2、XSS测试
3、Fuzz
4、用户交互的地方的应用漏洞
密码找回漏洞
密码找回的一般流程:
a、首先尝试正常密码找回流程,选择不同的找回方式,记录所有的数据包
b、分析数据包,找到敏感部分
c、分析后台找回机制所采用的验证手段
d、修改数据包
验证码突破
1、验证码暴力破解
2、验证码时间及次数测试:抓取携带验证码的数据包,不断重复提交
3、验证码客户端回显测试:当客户端有需要和服务器进行交互时,发送验证码时,可使用firebug
4、验证码绕过测试:当第一步向第二步跳转时,抓取数据包,对验证码进行篡改清空测试,来进行验证
5、验证码js绕过:短信验证码程序逻辑存在设计缺陷,将业务流程的第一步、第二步、第三步都放到同一个页面里面,验证第一个验证码是通过js来判断的,可以修改验证码在没有获取验证码的情况下可以填写实名信息,并提交成功
业务授权安全
1、未授权访问
2、越权访问
业务流程乱序
顺序执行缺陷:当我们开始业务的顺序是A、B、C时,如果设置有缺陷我们就有可能从A之后直接跳到C
业务接口调用安全
1、重放攻击:恶意大量重复注册,使对方服务器维持不住
2、内容编辑:将发送的数据包进行修改
失效绕过测试
1、时间刷新缺陷
2、时间范围测试
·END·
▼
谨记责任,高歌向前
▼
微信公众号:蝰蛇安全实验室
文案 | 大川儿
排版 | Ooyun
审核 | Crispitol
指导老师 | Hard Target
本文始发于微信公众号(蝰蛇安全实验室):逻辑漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论