渗透测试基础 |
您所在的位置:网站首页 › 短信验证码逻辑错误 › 渗透测试基础 |
渗透测试基础-验证码绕过和密码找回漏洞
验证码简介验证码可重复使用验证码在客户端进行验证码可识别空验证码可绕过是否校验客户端可控制错误一定次数才开启验证码可预测密码找回漏洞验证码返回给客户端验证码无时间限制验证码可控制靶场演练(包含代码审计)漏洞总结
只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪! 验证码简介既然说验证码绕过,那我们就来在简单了解一下什么是验证码?验证码有什么作用? 验证码(captcha) completely automated public turing test to tell computers and humans apart (全自动区分计算机和人类的图灵测试) 其用处就是:用于区分用户是计算机还是人的公共全自动程序 在很多情况下,机器在某方面是远远强于人类的,比如在网页留言的这样一个场景,如果人工输入和点击的方式来进行刷屏,5秒一条留言差不多了吧,快一点可能3秒一个。如果用机器来操作,1秒它能几十条都发好了,这样就可能会照成留言板块的异常,让别人不能正常使用。如果在以上场景,加入一个在留言时需要验证码的机制,这样人工来留言,基本所需时间还是差不多,可机器在不做其他方法绕过的情况下,可能就没办法像刚刚那样持续刷屏。 这里在介绍一下常见的验证码绕过方式 验证码可重复使用 2. 验证码在客户端进行 3. 验证码可识别 4. 空验证码绕过 5. 是否校验客户端可控 6. 错误超过一定次数才启用验证 7. 验证码数量有限 8. 验证码可预测来实际看看各种案例 验证码可重复使用这种情况较为常见,可以看看下面的网页 输入弱口令测试,账号:admin 密码:123456 验证码:1740 用Burp 抓住登录的数据包,放入 Repeater 模块,多次点发送数据包Go,发现返回的数据包里面一直显示的是账号和密码不对,并没有说我验证码有问题, 那这里就基本确定是存在验证码重复利用的漏洞情况。
因为这里没有验证码的保护,我们很快就找到对应的密码。 验证码在客户端进行验证码设置了但是并没有校验,乱输入验证码也能够成功的登录,这个就有点当摆设的意思了。 验证码可识别这个就需要工具的帮助了,让工具来识别验证码的数字,或者其他类型的验证码,这里介绍一款验证码识别工具:PKAV-HTTP-Fuzzer,网上很多使用教程和安装包。 既然是验证码可识别,那这里的防护方法可采用加强验证码的复杂度来抵挡,方法有:图片添加混淆线段;图片内容辨别(可以是形状,物体,或生活常见物);简单的数学题目;滑块图形旋转对准阴影等等方式 空验证码可绕过
如果将这个数据删除了,可能后端就不对其做验证。他这里很可能是后端写了个 if函数,当验证码存在时,或者不存在时所执行的事情,这里就属于逻辑漏洞了。 是否校验客户端可控制在是传参里面可写入验证码字段,当在验证码里输入什么,验证码就是什么,如果验证码写1234,那么这个验证码就不会改变,一直是1234,这样就可以算做是没有验证码了。 错误一定次数才开启既然是错误一定次数才开启,那它肯定是基于一定的数据来确定你已经尝试了多次了。这里 一种是基于Session,一种是基于 IP Session是在Cookie里面的,只要一直替换Cookie的值就可以做到第一种的验证码绕过,而不提示需要输入验证码。 第二种是看你的 IP号,一般是由X_FORWARDED_FOR来获取我们的 IP ,当多次是这个 IP 时,就会要求验证码或者IP 封锁。这里只要代理轮询替换IP即可绕过。 验证码可预测比如用时间戳来做验证码的 。时间戳在很多地方是能得到当前时间的具体数值的,比如这个网站:https://tool.lu/timestamp/,(这个网站不但可得到当前的时间戳值,也能根据值,得到具体的时间是多少)。用时间戳作为验证码的话,我们可采用python编写相应工具,获取时间戳值,带入数据中爆破。 ======================================================== 密码找回漏洞密码找回一般是用作于手机短信验证码,邮箱验证码这样,这种验证码的作用和前面的不一样,前面是为了区分是机器还是人,这个是为了确定用户身份,确定权限的。验证码发到手机或邮箱上,输入正确短信验证码就可以执行重置密码或其他操作。 这里常见的漏洞类型有: 验证码返回给客户端 2. 业务流程缺陷 3. 验证码无时间间隔限制 4. 验证码可爆破 5. 验证码在客户端生成 验证码返回给客户端在进入密码找回页面,点击发送验证码的时候,服务器会根据数据库所储存的值,将验证码发送到对应的接收处,邮箱或者短信等。可是在发送验证码之后,会返回一个数据包,在返回的数据包里面居然会有着刚刚发送给用户的短信验证码。那这里只要知道被攻击者的手机或者邮箱号,就能做到任意密码重置。 验证码无时间限制这个也好理解,就是验证码在接受到了之后,没有对时间和次数做出限制,与可重复利用是一个道理,正常使用的验证码应该满足两个基本条件,1.在使用过后,这条验证码将失效。2.验证码的有效期应维持在5分钟以内。 验证码可控制在注册用户时,抓了个数据包,看到里面有验证码的数据,将验证码的发送的对象改为其他用户,同时还能对验证码发送的内容进行编辑,这里如果冒充权威机构发送恶意短信,就会照成较为麻烦的事情发生。 ======================================================== 靶场演练(包含代码审计)
测试发现这里的验证码是可重复利用的漏洞,爆破跑出了其密码为root,登录进去 我们先是访问一个文件名,并对其GET传入x=m,然后写入语句filename=‘nf.php’&content=。这样,一个叫做nf.php的木马文件就创建好了。接下来说一下原理,不过咱们这里得进入源码中,查看了发生了什么事情。 a_templetex.php 先看一下这个文件是如何编写的。 先看这样一个函数 file_put_contents($filenames,$contents) 这个函数的用法是,在某个文件里面写入某些数据,第一个参数是文件名,第二参数个是文件内容,如果第一个参数的文件没有的话,那么它会创建一个新的。 然后先看这个文件名,从下往上追溯,这里往上追是因为代码是从上往下执行的,得先知道怎么才会执行到刚刚的函数才可以。
然后看下文件内容contents的源头在哪
验证码和密码找回漏洞其实在生活中挺多的,基本都是出在逻辑问题上,我们可以在测试的时候,多去关注数据包里面传输的内容,稍做改变可能就能找到一个漏洞。有关防护方法,上面都多多少少有提到,这里就不在赘述了。 《最好的防御,是明白其怎么实施的攻击》 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |