注意
- 不能通过无脑过滤解决。
挖掘思路
验证码绕过漏洞
验证码的作用
-
是一种区分用户是计算机还是人的公共全自动程序。
-
可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。
-
这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答验证码的问题,所以回答出问题的用户就可以被认为是人类。
-
验证码五花八门,有中文字,纯数字,点击字符、数学运算……
验证码绕过方法
-
前端验证验证码,并没有后端验证。直接抓包然后进行跑数据包,反正有没有验证码的阻碍。
-
验证码设置了但是并没有效验,乱输验证码也能够成功的登录。
-
验证码可以重复使用,比如现在的验证码1111,然后虽然你登录失败后验证码会变,但是你输入1111他却判定你验证码正确(常见)。
案例 -
验证码空值绕过,比如,我们现在抓一个包,发现登录参数是
user=admin&password=admin&yzm=4123
。yzm
验证码参数,但是我们如果去掉yzm
的传参我们就可以绕过验证码机制,直接传参user=admin&password=admin
,验证码就失效了 。 案例 -
验证码干扰过低,轻松使用脚本识别。 案例
-
输错密码两三次才需要输入验证码,替换
Cookie
\用户绑定即可绕过验证码。【cookie
是你的银行卡,session
就是银行中关于你的银行卡的信息,cookie
和session
是绑定的,session
是服务器端,cookie
是客户端。】 -
验证码会在
HTML
页面输出。 案例 -
验证码可控制,比如他的验证码包含在
URL
里面,是一个URL
传参,我们可以把URL设定,那么验证码可控制 。 案例 -
验证码有规则,比如是时间戳的后6位(
rand
函数进行随机数)。 -
有万能验证码,验证码无论是什么,只要输入
000000
就能直接绕过。 -
验证码有的时候会藏在
cookie
里面,分析一下是不是存在验证码的参数。验证码在cookie
里可能会加密,通过md5
之类的进行加密。 -
图片验证码,类型太少,容易识别。 案例
多次登录后才出现验证码绕过:
基于session的案例
基于IP的案例,换IP
【脚本换或者自己搭建免费代理池】、XXF
【X-Forwarded-For:127.0.0.1
】
基于用户: 爆破用户名,而非爆破密码
练习
- 查看源码,我们找到这个
CMS后
台登录的路径cmsadmin/a_templetex.php
。 - 我们尝试登录几次后,发现有两种提示:账户不存在、账户和密码不匹配、验证码不正确。
- 我们输入账户名admin,密码随便,抓包之后,修改密码,在发送数据包,提示账户密码不匹配,说明验证码绕过。
- 把这个包放掉之后,再次查看,提示验证码不正确,说明验证码失效。
- 我们在源码中发现了
a_templetex.php
这个文件,源码如下
- 修改数据包传参方式为
post
,修改后如下
- 上传成功后,使用蚁剑连接即可得到flag。
密码找回漏洞
有一类验证码,他并不是区分用户是计算机还是人的公共全自动程序,他是用来证明你的身份的,比如你登录微信,支付宝,支持短信验证码登录,像这类验证码他实际上是用来区分你的身份的。
当你
APP
显示的动态密码填入框里面,一般而言手机验证码时间都有5-30
分钟,如果他没有做尝试限制的话我们是不是可以进行穷举?然后直接跑出验证码然后就修改他人密码呢?
漏洞情况
越权漏洞
支付漏洞
快捷支付原理
第一种:支付宝给你一个数据,你告诉商家你已经付了钱。
第二种比较常见:用户【传参】 - 商家【价格】 - 支付宝 - 商家 - 用户
注意
- 支付漏洞并不需要代码审计。
- 支付漏洞属于逻辑漏洞,挖掘这类漏洞有发散思维,往往有事半功倍的效果,简单来说就是不按常理出牌。
常见支付漏洞
- 修改支付价格。 案例
防范措施: 传参加密,但加密可能会被解密或者复用,加密核心由前端决定;商品和钱的传参进行校验 - 修改支付状态。 案例
- 修改订单数量。 案例
- 修改附属值。
- 修改运费。 案例
- 越权支付,存在
user=id(123)
,这种传参时,尝试改改id
,尝试用别人的钱包买自己的包包。【有余额功能的网站可能存在这种漏洞。】 - 跳过支付环节。【就是前面快捷支付原理的第一种情况】 案例
- 案例
支付漏洞如何挖掘
练习1
- 我们注册一个会员后,在商品中心购买商品。
- 将商品数量改为负数,提交订单后会出现一个报错页面。
- 返回会员中心后即可发现你的余额增加,且出现flag。
练习2
- 来到靶场,首先注册并登录。我们点击任意一件商品,抓取立即购买的数据包。修改参数
num
为-1
,发现有弹窗提示。
- 我们尝试改为
0
,没有报错,但是提示操作失败,且该靶场没有付钱按钮,所以不管数量0.01
,还是0.1
,都不能通过。 - 我们再次尝试抓取加入购物车的数据包,发现传参为编码,解码后我们继续修改其数量为
-1
。
- 我们点击结算后,依然出现你是黑客的弹窗。
- 因此我们尝试考虑一下商品价格凑
0
。
- 我们提交订单后发现付款成功。
- 按照靶场题目的提示,点击退款即可得到
flag
。