渗透测试基础-验证码绕过和密码找回漏洞

只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪!

验证码简介

既然说验证码绕过,那我们就来在简单了解一下什么是验证码?验证码有什么作用?

验证码(captcha)

completely automated public turing test to tell computers and humans apart
(全自动区分计算机和人类的图灵测试)

其用处就是:用于区分用户是计算机还是人的公共全自动程序

在很多情况下,机器在某方面是远远强于人类的,比如在网页留言的这样一个场景,如果人工输入和点击的方式来进行刷屏,5秒一条留言差不多了吧,快一点可能3秒一个。如果用机器来操作,1秒它能几十条都发好了,这样就可能会照成留言板块的异常,让别人不能正常使用。如果在以上场景,加入一个在留言时需要验证码的机制,这样人工来留言,基本所需时间还是差不多,可机器在不做其他方法绕过的情况下,可能就没办法像刚刚那样持续刷屏。

这里在介绍一下常见的验证码绕过方式

  1. 验证码可重复使用 2. 验证码在客户端进行 3. 验证码可识别 4. 空验证码绕过 5. 是否校验客户端可控 6. 错误超过一定次数才启用验证 7. 验证码数量有限 8. 验证码可预测

来实际看看各种案例

验证码可重复使用

这种情况较为常见,可以看看下面的网页
在这里插入图片描述
这里是一个靶场的后台,我们能看到这个地方是有验证码的防护机制,看看这个验证码重复使用是怎样的一个过程。

输入弱口令测试,账号:admin 密码:123456 验证码:1740

在这里插入图片描述

Burp 抓住登录的数据包,放入 Repeater 模块,多次点发送数据包Go,发现返回的数据包里面一直显示的是账号和密码不对并没有说我验证码有问题, 那这里就基本确定是存在验证码重复利用的漏洞情况。

在这里插入图片描述
既然这里没有验证码的限制,直接数据包放入Intruder 模块,对密码进行爆破尝试

在这里插入图片描述
在这里插入图片描述

因为这里没有验证码的保护,我们很快就找到对应的密码。

验证码在客户端进行

验证码设置了但是并没有校验,乱输入验证码也能够成功的登录,这个就有点当摆设的意思了。

验证码可识别

这个就需要工具的帮助了,让工具来识别验证码的数字,或者其他类型的验证码,这里介绍一款验证码识别工具:PKAV-HTTP-Fuzzer,网上很多使用教程和安装包。

既然是验证码可识别,那这里的防护方法可采用加强验证码的复杂度来抵挡,方法有:图片添加混淆线段图片内容辨别(可以是形状,物体,或生活常见物);简单的数学题目滑块图形旋转对准阴影等等方式

空验证码可绕过

在这里插入图片描述
还是已上面这个图来说,空验证码可绕过的情况就是:图片那里明明传了验证码字段和参数&ucode=8103

如果将这个数据删除了,可能后端就不对其做验证。他这里很可能是后端写了个 if函数,当验证码存在时,或者不存在时所执行的事情,这里就属于逻辑漏洞了。

是否校验客户端可控制

在是传参里面可写入验证码字段,当在验证码里输入什么,验证码就是什么,如果验证码写1234,那么这个验证码就不会改变,一直是1234,这样就可以算做是没有验证码了。

错误一定次数才开启

既然是错误一定次数才开启,那它肯定是基于一定的数据来确定你已经尝试了多次了。这里 一种是基于Session,一种是基于 IP

Session是在Cookie里面的,只要一直替换Cookie的值就可以做到第一种的验证码绕过,而不提示需要输入验证码。

第二种是看你的 IP号,一般是由X_FORWARDED_FOR来获取我们的 IP ,当多次是这个 IP 时,就会要求验证码或者IP 封锁。这里只要代理轮询替换IP即可绕过。

验证码可预测

比如用时间戳来做验证码的 。时间戳在很多地方是能得到当前时间的具体数值的,比如这个网站:https://tool.lu/timestamp/,(这个网站不但可得到当前的时间戳值,也能根据值,得到具体的时间是多少)。用时间戳作为验证码的话,我们可采用python编写相应工具,获取时间戳值,带入数据中爆破。

========================================================

密码找回漏洞

密码找回一般是用作于手机短信验证码,邮箱验证码这样,这种验证码的作用和前面的不一样,前面是为了区分是机器还是人,这个是为了确定用户身份,确定权限的。验证码发到手机或邮箱上,输入正确短信验证码就可以执行重置密码或其他操作。

这里常见的漏洞类型有:

  1. 验证码返回给客户端 2. 业务流程缺陷 3. 验证码无时间间隔限制 4. 验证码可爆破 5. 验证码在客户端生成

验证码返回给客户端

在进入密码找回页面,点击发送验证码的时候,服务器会根据数据库所储存的值,将验证码发送到对应的接收处,邮箱或者短信等。可是在发送验证码之后,会返回一个数据包,在返回的数据包里面居然会有着刚刚发送给用户的短信验证码。那这里只要知道被攻击者的手机或者邮箱号,就能做到任意密码重置。

验证码无时间限制

这个也好理解,就是验证码在接受到了之后,没有对时间和次数做出限制,与可重复利用是一个道理,正常使用的验证码应该满足两个基本条件,1.在使用过后,这条验证码将失效。2.验证码的有效期应维持在5分钟以内。

验证码可控制

在注册用户时,抓了个数据包,看到里面有验证码的数据,将验证码的发送的对象改为其他用户,同时还能对验证码发送的内容进行编辑,这里如果冒充权威机构发送恶意短信,就会照成较为麻烦的事情发生。

========================================================

靶场演练(包含代码审计)

在这里插入图片描述
进入靶场,先进行一下网站目录扫描,扩大我们的攻击面
在这里插入图片描述
这里御剑扫描发现,网站存在一个robots.txt的文件,其文件的主要用处就是让网络上的爬虫,不对robots.txt里面存在的目录内容进行爬取,但是这个文件的存在并没有直接的限制能力,所有定性为爬虫的君子协议
在这里插入图片描述
在这里插入图片描述
发现有一个登陆点。

在这里插入图片描述

测试发现这里的验证码是可重复利用的漏洞,爆破跑出了其密码为root,登录进去
在这里插入图片描述
这样我们就进入了后台,按说进了后台就可以找文件上传点了。但这里还有其他的做题方法。

我们先是访问一个文件名,并对其GET传入x=m,然后写入语句filename=‘nf.php’&content=<?php eval($_REQUEST[8]);?>。这样,一个叫做nf.php的木马文件就创建好了。接下来说一下原理,不过咱们这里得进入源码中,查看了发生了什么事情。

a_templetex.php 先看一下这个文件是如何编写的。

在这里插入图片描述

先看这样一个函数
file_put_contents($filenames,$contents)

这个函数的用法是,在某个文件里面写入某些数据第一个参数是文件名第二参数个是文件内容,如果第一个参数的文件没有的话,那么它会创建一个新的。

然后先看这个文件名,从下往上追溯,这里往上追是因为代码是从上往下执行的,得先知道怎么才会执行到刚刚的函数才可以。
在这里插入图片描述
看到在上面代码中就有变量 $filenames ,变量所等于的值是dir,而这里的dir存放的文件位置,然后在后面加上一个文件名。在继续往上追。

在这里插入图片描述
这样就找到了源头,文件名是通过post传进来的,说明是能控制的值

然后看下文件内容contents的源头在哪
在这里插入图片描述
这里的iconv,是为了编码用的,我们这不需要理会,在往上游查
在这里插入图片描述
这里也是用post传进来的,也就是说,post可以控制生成什么文件,可以控制文件里面写入什么内容。在看看怎么才能执行

在这里插入图片描述
当条件x=满足时,下面的代码就可以执行了,那要怎么传x=m呢 在往上看
在这里插入图片描述
GET传参就能满足,所以这里就可以如上面那样做
在这里插入图片描述
先看一下,这个时候文件是不在的。
在这里插入图片描述
在这将数据包改为GET数据包,然后在最下面加入文件名和文件内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

漏洞总结

验证码和密码找回漏洞其实在生活中挺多的,基本都是出在逻辑问题上,我们可以在测试的时候,多去关注数据包里面传输的内容,稍做改变可能就能找到一个漏洞。有关防护方法,上面都多多少少有提到,这里就不在赘述了。

《最好的防御,是明白其怎么实施的攻击》

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jinxya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值