验证码绕过、密码找回漏洞

发布于 2022-03-16  792 次阅读


前言

逻辑漏洞

​ 因为代码的逻辑产生了问题所产生的漏洞
​ A -> B -> C
​ A -> C

常见逻辑漏洞

  • 验证码绕过
  • 密码找回
  • 支付漏洞
  • 越权漏洞

验证码

​ 验证码的核心:区分用户是计算机还是人的公共全自动程序

  1. 如果没有验证码是不是就可以尝试用脚本去跑密码
  2. 6位 =100w种组合 (输错密码不会冻卡)
  3. 人脑的记忆是有限、人会有一些自己的习惯

弱密码

  • 密码中存在名字、身份证、生日、电话号码
  • 名字的缩写+生日

验证码绕过

  • 识别并执行:代码基础(一般不一定会被认为是漏洞)
  • 逻辑产生问题 - 漏洞:依靠的是程序逻辑(利用简单)

三、验证码绕过的常见姿势

前端验证码[JS处理]

1、前端验证验证码,并没有后端验证。

2、直接抓包然后进行跑数据包,反正有没有验证码的阻碍

任意验证码

验证码设置了但是并没有效验,乱输验证码也能够成功的登录(估计老板没给开发工资吧)

验证码重复使用

验证码可以重复使用,比如现在的验证码1111,然后虽然你登录失败后验证码会变,但是你输入1111他却判定你验证码正确(常见)
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0169672

验证码空值绕过

比如:我们现在抓一个包,发现登录参数是user=admin&password=admin&yzm=4123。
yzm验证码参数,但是我们如果去掉yzm的传参我们就可以绕过验证码机制,直接传参user=admin&password=admin,验证码就失效了。
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0155066

1、删除验证码可以绕过

2、输错密码两三次才需要输入验证码(替换Cookie\用户绑定)

3、if(如果有验证码传参){验证码校验}else{执行执行账号密码登录}
4、Cookie和Session
(1)Cookie 给用户的
(2)Session 和 Cookie 是绑定的

5、爆破
不仅仅是爆破密码 => 不断地替换密码(后台、前台都可以)
爆破账号:拿一个简单的密码,不断地去替换账号

脚本识别验证码

验证码干扰过低,轻松使用脚本识别
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0194576

验证码在前端输出

1、验证码会在HTML页面输出。
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0146767

2、前端源码你是知道的,写个简单的脚本就可以获得

验证码可控制

验证码可控制,比如他的验证码包含在URL里面,是一个URL传参,我们可以把URL设置定,那么验证码可控制。
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-071289

验证码有规则

验证码有规则,比如是时间戳的后6位(rand函数进行随机数)

万能验证码

  • 有万能验证码,验证码无论是什么,只要输入000000就能直接绕过
  • 通讯公司?超级密码:000000(设备 -> 做一些调试)

验证码藏在Cookie里

验证码有的时候会藏在cookie里面,分析一下是不是存在验证码的参数

图片验证码太少

图片验证码,类型太少,容易识别
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0102178

多次登录后才出现验证码绕过

  • 基于session
    https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0114450
  • 基于IP给验证码:Steam(登录验证码)
    https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-080327
  1. 换IP[脚本换IP -> 代理池、自搭建免费代理池]
  2. 换IP[X-FORWARDED-FOR: 127.0.0.1]
  3. 基于用户:爆破用户名,而非爆破密码

密码找回漏洞

验证码:是区分用户的身份(手机验证码、邮箱验证码)

验证码发送后前端返回

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0114577

验证码无次数限制可爆破

4位 => 1w种组合 (5分钟 10分钟 15分钟过期)
6位 => 100w种组合
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0155994

验证码可控

2017年6月1号 法律里程碑 网络安全法
法律是有滞后性
但是不要做违法犯罪的事情
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-086716

直接修改密码页面

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-040908

越权漏洞

自己验证码通过改包然后修改他们密码
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0102205
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-016896

密保问题

在注册之前,通过预先设定一个密保问题,忘记密码时,通过此密保进行认证,认证成功进入密码修改页面。
1、密保问题可能容易直接被猜测 (比如很多学校的知道学号和身份证号码就可以重置校园通的密码)

2、密保问题答案页面中显示(数据包里面可能自带了密保答案,可能在JS里面)

五、靶场做法-初识代码审计的魅力

(一)常规拿shell:SQL注入、文件上传

(二)代码审计拿shell

1、靶场使用的是一个CMS,叫做UsualToolCMS-8.0-Release,源码课件中有,后台存在验证码绕过漏洞。

2、进入后台之后我们其实也还是只能操作网站,如果想要操纵目标计算机就需要后台Getshell,想办法让自己的一句话木马到目标网站上。
(以往都是上传,但是其实不需要上传也能把自己的一句话木马搞到目标站点上)

3、打开cmsadmin/a_templetex.php

4、file_put_contents 是写文件,这个在条件竞争中接触过

5、看这个$content如果能由我决定,是不是就可以写一句话木马了?

6、$filename如果由我控制的话是不是就可以决定写的文件名字了?

7、在这里很明显$content是获取了POST传参

8、在这里很明显$filename是获取了POST传参

9、那只要确定传参不会被过滤、代码能执行到这一步,那就达成写马的一切条件了。

靶场实操

image-20220313234208896
image-20220313234939022
image-20220313235118624

发现显示并不一样,用户名是admin

抓包跑密码

image-20220314195122520

密码是root

image-20220314195150742

成功进入后台

对CMS代码进行分析,这里存在漏洞

image-20220314195811822

通过构造

对这个页面进行抓包

https://6kgd8020.ia.aqlab.cn/cmsadmin/a_templetex.php
image-20220314200126486

把数据包修改为post传参

image-20220314200925886

写入马

image-20220314204049151
image-20220314204028452

得到shell