记一次神奇的渗透测试之逻辑缺陷 - 低调求发展潜心学安全

admin 2021年12月31日15:10:27评论102 views字数 2419阅读8分3秒阅读模式

前几天发现了一个专属的已授权网站存在逻辑漏洞,整个过程比较的奇幻,这里就分享给大家。

过程

前期排查和信息收集

在对该网站进行信息收集的时候,我发现了其中的后台登录点,便想着用弱口令看看可不可以直接登录。这里先尝试admin123/admin123,这里出现了账号密码错误的提示,提示如下图,通过后续的渗透可以知道admin123这个账户不存在:

然后再继续尝试admin/admin后,它的提示就和上面的不一样了,提示如下。这说明了在这里存在admin这个账户。通过后续的渗透可以知道admin这个账户应该是最高权限的管理员,想要成功登录该账户应该得需要内网环境才可以:

这些前期工作全部都排查完成后,下面就要开始进入渗透测试了。

进入渗透测试

路径是:
https://x.x.x.x/portal/register/forgetPassword
这个url是忘记密码的页面。当填写登录名时,如果登录的账户存在,则页面会自动填写手机号码,这为我的后续的渗透带来了便利:

然后这里点击获取验证码,我想要发送验证码到该手机号码上:

在此之前我用awvs已经扫描了该网站,下图为awvs其中的一个关于这个忘记密码页面发送短信验证码的自动测试payload:
/portal/register/forgetPassword?account=4111111111111111&btn=%e8%8e%b7%e5%8f%96%e9%aa%8c%e8%af%81%e7%a0%81&code=94102&Cto=d47867b3be2f4f67aa693ddde6d7904d&msgCode=94102&password=g00dPa%24%24w0rD&phone=555-666-0606&repassword=g00dPa%24%24w0rD
Payload中94102为awvs扫描时发送的短信验证码,于是我开始用这个短信验证码开始测试。这个短信验证码应该是通过扫描出来的长度以及形状刚好符合网站验证码长度(5位数)的短信验证码。
注:awvs扫描的该payload中,phone的值与页面自动填写的手机号码不一致,这里为555-666-0606

输入94102验证码,发现会自动清除,验证码已过期(在这里短信验证码是当你输入完成后就执行匹配命令的,不用点击确认按钮再执行匹配命令)。那么这下该怎么办呢?这个时候我想到了万能密码。万能密码能在登录表单绕过登录的限制,那么在验证码表单也能绕过sql查询语句。当我这里输入1' or 1='1 时为True,因为输完万能密码后,服务器开始匹配(这时候没有自动清除验证码),网页出现卡顿状态:

在验证码表单输入1' or 1='1,当出现网页卡的现象时刷新页面

网页卡顿一段时间以后还没有好,这时我就点击了下刷新来以此刷新页面,发现验证码没有被服务器重置,于是我填写剩余的表单内容,并且提交,提交后网页继续卡顿,此时并无回显更改成功:

等网页卡顿一段时间后无回显,执行刷新,网页刷新状态如下,将验证码替换为94102,这个时候验证码有效并且不会卡顿,不会被网页清除。(个人觉得这里是因为刚刚的万能密码让服务器识别了一次验证码的验证操作,但是没有执行更改密码的操作,当再次刷新页面的时候万能密码还在,服务器已经将此验证码标为True,但是刚刚执行完全部操作无正确回显。所以我决定更换一个验证码,此时验证码不会被重置,再次输入更新密码时成功更改。)
输入我们要更改的密码即可修改成功。

账户为admin,这里更改后的密码为test6666。然后这里回到后台登录点登录发现还是会提示该用户在该网络环境限制登录。因此我判断出了admin这个账户应该是最高权限的管理员,想要成功登录该账户应该得需要内网环境才可以:

这里再次尝试账户为admin123,密码为admin123,页面的错误提示就不一样了。因此可以知道admin123这个账户不存在:

已经到了这里,却出现这样的局面,我十分的不甘心,并不想就此放弃,不然就是前功尽弃了。那么这里又开始回到最初的起点:信息收集。在我更加仔细地把这个网站的大大小小的通知公告等信息全部都翻了一遍以后,我这里找到了这家公司的补充供方的单位名称等信息,这时我突然考虑到可以通过这些单位名称去找到对应的统一社会信用代码来进行尝试。

这里我要先来介绍一下统一社会信用代码是什么:
统一社会信用代码是一组长度为18位的用于法人和其他组织身份识别的代码,统一社会信用代码由国家标准委发布。统一社会信用代码制度是以公民身份号码和组织机构代码为基础的主体标识代码制度,标准规定统一社会信用代码用18位阿拉伯数字或大写英文字母表示,分别是1位登记管理部门代码、1位机构类别代码、6位登记管理机关行政区划码、9位主体标识码、1位校验码。由登记管理部门代码、机构类别代码、登记管理机关行政区划码、主体标识码(组织机构代码)和校验码五个部分组成。因此统一社会信用代码(18位)包含了组织机构代码(第9-17位)税务登记证号码(第3-17位),所以可以说统一社会信用代码组织机构代码虽然不是同一个东西,但却有着非常密切的联系。 统一社会信用代码是一组长度为18位的用于法人和其他组织身份识别的代码。

以下我列出我找到的这家公司的补充供方的信息:

然后到某平台上去查找它们所对应的统一社会信用代码

然后我找到了很多个补充供方的统一社会信用代码,然后我将这些统一社会信用代码分别都作为账户,经过输入账户密码登录时的提示,发现挺多账户是存在的,然后使用上述的漏洞一一对它们进行了修改密码,无一例外都成功了,并且也登录了进去,这里也体现出了admin这个账户应该是最高权限的管理员,而它们应该都只是普通账户。那么我用其中的某账户为例:
以下为成功修改了密码的截图:

以下为成功使用修改后的密码登录该账户的截图:

上述漏洞我均已提交至平台并已经修复了。

BY:先知论坛

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月31日15:10:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次神奇的渗透测试之逻辑缺陷 - 低调求发展潜心学安全https://cn-sec.com/archives/710591.html

发表评论

匿名网友 填写信息