5.1 验证码绕过和密码找回
5.1.1 验证码的作用
验证码的作用:验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。
可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。
这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
验证码五花八门,有中文字,纯数字,点击字符、数学运算……
还有一种验证码是用来方便快捷验证用户身份的如短信验证码,邮箱验证码.



5.1.2 验证码绕过方向
(如果后台验证码可以绕过,爆破
可以提交两个漏洞,一个弱密码,一个验证码绕过。
1.逻辑方向
2.通过python,golang等程序自动识别。
5.1.3 验证码绕过常见姿势
设置了验证码并不是完全可靠,在很多情况存在验证码绕过的情况(举例是在登录处)
一、前端验证验证码,并没有后端验证。直接抓包然后进行跑数据包,反正有没有验证码的阻碍.(指的是浏览器生成我们可以抓包直接跑)
二、验证码设置了但是并没有效验,乱输验证码也能够成功的登录(估计老板没给开发工资吧)
三、验证码可以重复使用,比如现在的验证码1111,然后虽然你登录失败后验证码会变,但是你输入1111他却判定你验证码正确(常见)http://www.anquan.us/static/bugs/wooyun-2016-0169672.html
四、.验证码空值绕过,比如,我们现在抓一个包,发现登录参数是user=admin&password=admin&yzm=4123。 yzm验证码参数,但是我们如果去掉yzm的传参我们就可以绕过验证码机制,直接传参user=admin&password=admin,验证码就失效了。
三、四较为常用。
五、验证码可控制,比如他的验证码包含在URL里面,是一个URL传参,我们可以把URL设置定,那么验证码可控制
六:验证码会在HTML页面输出。
https://www.uedbox.com/post/16869/
七、验证码可控制,比如他的验证码包含在URL里面,是一个URL传参,我们可以把URL设置定,那么验证码可控制 https://www.uedbox.com/post/29913/
八、验证码有规则,比如是时间戳的后6位(rand函数进行随机数)
九、有万能验证码,验证码无论是什么,只要输入000000就能直接绕过
十、验证码有的时候会藏在cookie里面,分析一下是不是存在验证码的参数
十一、图片验证码,类型太少,容易识别
https://www.uedbox.com/post/24112/
多次登录后才出现验证码绕过:
基于session:https://www.uedbox.com/post/22043/
基于ip: https://www.uedbox.com/post/28442/
基于用户: 爆破用户名,而非爆破密码
5.1.4 密码找回漏洞
有一类验证码,他并不是区分用户是计算机还是人的公共全自动程序,他是用来证明你的身份的,比如你登录微信,支付宝,支持短信验证码登录,像这类验证码他实际上是用来区分你的身份的。
当你QQ密码忘记密码的时候,你需要找回密码,然后他要求把APP显示的动态密码填入框里面,一般而言手机验证码时间都有5-30分钟,如果他没有做尝试限制的话我们是不是可以进行穷举?然后直接跑出验证码然后就修改他人密码呢?

第一种就是找回密码,往邮箱发送明文或密文的密码或者验证码(手机短信验证就是往你手机号码发验证码)通过这样的方法来判断是否是本人

第二种发送一个重置密码的链接到邮箱

上述的密码找回方法会有什么样的漏洞呢?
1.验证码发送后前端返回
(https://www.uedbox.com/post/13890/)
2.验证码无次数限制可爆破
(https://www.uedbox.com/post/15675/)
3.验证码可控
(https://www.uedbox.com/post/26992/)
4.直接修改密码页面
(https://www.uedbox.com/post/35739/)
5.越权漏洞-->自己验证码通过改包然后修改他们密码
https://www.uedbox.com/post/24098/
https://www.uedbox.com/post/42136/
越权漏洞
什么是越权?
越权漏洞是一种很常见的逻辑安全漏洞。
是由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能,从而导致越权漏洞。
目前存在着两种越权操作类型:横向越权操作(水平越权)和纵向越权(垂直越权)操作。
越权一般分为水平越权和垂直越权。
水平越权是指相同权限下不同的用户可以互相访问
垂直越权是指使用权限低的用户可以访问到权限较高的用户
水平越权测试方法主要就是看看能否通过A用户操作影响到B用户
垂直越权的测试思路就是低权限用户越权使用高权限用户的功能,比如普通用户可使用管理员功能。

平行:同学通过修改参数影响到B同学,为平行越权
垂直:A同学通过修改参数影响到老师,为垂直越权。
交叉:既可以平行越权,又可以垂直越权.
把握住传参就能把握住逻辑漏洞的命脉
越权测试过程
/把握住传参就能把握住逻辑漏洞的命脉/
登录A用户是,正常更改或者是查看A用户信息,然后抓取数据包,将传参ID修改为其他用户,如果成功查看或者修改了同权限其他用户的信息就属于水平越权测试。(如果可以影响到高权限用户就是垂直越权)
为什么登录A用户修改资料修改的是A用户的,而不是B的。【一般指定用户通过用户id,或者用户名(用户名一般会出现在数据库中,中文不识别,所以一般都用id)】

传参ID参数需要自己检测(常见:uid= id= user= 等)通常使用burp进行爆破传参(传参可能在GET POST COOKIE)
常见平行越权(不需要输入原密码的修改密码,抓包改用户名或者用户id修改他人密码
修改资料的时候修改用户id
查看订单的时候,遍历订单id)
常见越权漏洞
1.通过修改GET传参来越权
2.修改POST传参进行越权
3.修改cookie传参进行越权
可以在浏览器、APP、应用程序(exe)
还有一类叫做未授权访问,严格意义上而言这个不属于越权漏洞,但是在日常测试中常常会遇见
(只要输入正确的网址就可以直接访问,例如/admin默认是登录,登录后跳转到user.php,然后你直接访问user.php,发现你直接有后台权限)
Web攻防之业务安全实战指南 (陈晓光 胡兵 张作峰 等 著) 建议下载PDF观看
靶场是一个很老的报修系统,虽然很老,但是还是有些网站在使用。(BWSsoft报修系统)
(靶场:https://hack.zkaq.org/?a=user&f=login)
我们想去做一个越权,那么我们先想办法取得一个普通权限用户,于是乎先注册,注册这个地方存在XSS注入
注册好后我就拥有了一个普通权限账户我注册了账户a3,我要看a1的报修地址和联系电话,但是看不到


我们抓包分析下数据包

发现数据包的cookie似乎包含了username,将username改为a1,然后没有用,我们尝试改下realname=a1

支付漏洞
一、快捷支付原理
互联网发达,网购变多
商户网站接入支付结果有两种方式,一种是通过浏览器进行跳转通知,一种是服务器端异步通知
浏览器跳转(并不安全)
基于用户访问的浏览器,如果用户在银行页面支付成功后,直接关闭了页面,并未等待银行跳转到支付结果页面,那么商户网站就收不到支付结果的通知,导致支付结果难以处理。而且浏览器端数据很容易被篡改而降低安全性
服务器端异步通知
该方式是支付公司服务器后台直接向用户指定的异步通知URL发送参数,采用POST或GET的方式。商户网站接收异部参数的URL对应的程序中,要对支付公司返回的支付结果进行签名验证,成功后进行支付逻辑处理,如验证金额、订单信息是否与发起支付时一致,验证正常则对订单进行状态处理或为用户进行网站内入账等
相对于其他漏洞来说,支付漏洞应该是大家最喜闻乐见的了,比如一分钱购买手机(但是大家渗透测试要有分寸)

支付漏洞并不需要代码审计,各位同学可以放心。
支付漏洞属于逻辑漏洞,挖掘这类漏洞有发散(QiPa)思维,往往有事半功倍的效果,简单来说就是不按常理出牌。
如今二维码支付的时代,我们挖洞是再订单生成时让金额减少,而不是支付的时候才让金额减少。
靶场

Cookie:
Hm_lvt_b60316de6009d5654de7312f772162be=1592207938,1592219433; todos=e2d4f7dcc43ee1db7f69e76303d0105ca%3a1%3a%7bi%3a0%3bO%3a6%3a%22readme%22%3a1%3a%7bs%3a6%3a%22source%22%3bs%3a8%3a%22flag.php%22%3b%7d%7d; PHPSESSID=7n2mmurnj7e2bk0fdn5rk4tjb3; ASPSESSIONIDQCSTRTTQ=OKINBAKADGIEBLNPGHMMMHKF; BWSsoft%5F2010=realname=jiang&dlcs=1&username=jiang&wxqy=&bumen=jiang&loginname=jiang&danwei=jiang&shenfen=2&UserID=12&admin=0&wxlb=&phone=jiang&CookieDate=
shenfen=2&UserID=12&admin=0
shenfen=2&UserID=12&admin=0


可见这里我们修改了shenfen变量的值将2改为1我们就由普通用户变为了管理人员

但是将我们想进后台的时候,在抓包,将变量shenfen修改成1,但我们发现,即使修改了还是被拦截了。
于是我们设想一下,是否和之前的admin变量有关
shenfen=2&UserID=12&admin=0
是不是这里shenfen代表是不是管理员,admin代表能不能进后台,于是我们进后台之后抓包,将每一个包的
Shenfen值由2改为1 将 admin值由0改为1,我们会发现有很多数据包,那是因为后台可能有很多界面,所以我们需要一一修改。
当我们把每一个包都修改之后我们就会发现我们成功以管理员身份登陆了后台。

然后我们进入用户管理界面,依旧是一直抓包修改cookie数据,Shenfen值由2改为1 将 admin值由0改为1,然后我们发现我们成功来到了用户管理界面,这时我们可以进行修改普通用户的权限,将我们之前创建的用户修改管理员权限,或者直接创建一个管理员用户
同时我们也发现了flag
flag{yuequan_good!@}

二、常见支付漏洞
修改支付的价格(https://www.uedbox.com/post/22477/)
支付三步曲——订购、订单、付款
三个步骤当中的随便一个步骤进行修改价格测试,如果前面两步有验证机制,那么你可在最后一步付款时进行抓包尝试修改金额,如果没有在最后一步做好检验,那么问题就会存在,其修改的金额值你可以尝试小数目或者尝试负数。
修改支付状态(https://www.uedbox.com/post/24090/)
订单完成——未完成(傻傻分不清)
A订单-0001完成——B订单-0002未完成
付款时尝试把订单B的单号给成订单A
其实也不局限于付钱:
http://woo.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0156253
修改订单数量(https://www.uedbox.com/post/23143/)
一支笔1块,买0支,或者买-1支(不久等于免费了么?
修改附属值
优惠劵
优惠劵其基本都是优惠,一般用优惠劵进行消费一般出现在第二个步骤当中:确认购买信息,在这个步骤页面当中,你可以选择相关优惠劵,然后直接修改金额大于或等于商品的价格就可以,或者直接修改其为负值进行尝试,最后进行支付,如果对这点没有加以验证,那么问题就会产生,直接支付成功
例外就是x大佬,买商品,优惠券x27张(可怕。。。)
三、如何挖掘
找到关键的数据包
可能一个支付操作有三四个数据包,我们要对数据包进行挑选。
分析数据包
支付数据包中会包含很多的敏感信息(账号,金额,余额,优惠),要尝试对数据包中的各个参数进行分析。
不按套路出牌
多去想想开发者没有想到的地方
pc端尝试过,wap端也看看,app也试试。
四、防御方法
后端检查每一项值,包括支付状态。
校验价格、数量参数,比如产品数量只能为正整数,并限制购买数量
与第三方支付平台检查,实际支付的金额是否与订单金额一致。
支付参数进行MD5 加密、解密、数字签名及验证,这个可以有效的避免数据修改,重放攻击中的各种问题
金额超过阈(yu)值,进行人工审核