写在前面
昨天在和一位朋友的合作下,发现了某个授权站点存在逻辑漏洞,过程挺好玩也挺玄幻的,这里就拿出来写写,本人菜鸡一枚,请大佬们勿喷~
过程
在对该站点进行排查的时候,我发现了其中的登录后台,便想着尝试用弱口令试试是否能直接登录。这里先尝试账号为12345,密码为12345,它的错误回显如下图:
尝试账号为admin,密码为admin,它的回显效果就不一样了,说明当服务器存在账号时回显如下,admin为真实账号,这里猜测还需要内网环境
这些前期工作都摸清楚后,然后就开始进入正题了。
路径是:
https://x.x.x/portal/register/forgetPassword
这个url为忘记密码的页面,我尝试修改密码后再次登录,看是密码正确时是否能改登录。
当填写登录名时,如果登录名存在,则网页会自动填写手机号码
1.点击获取验证码,目的在于要发送验证码,模拟真实环境下手机获取验证码。
2.下图为awvs扫描器中自动测试的payload
/portal/register/forgetPassword?account=4111111111111111&btn
=%e8%8e%b7%e
5%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参数与网页电话不一致
3.输入94102验证码,发现会自动清除,验证码已过期(在这里短信验证码是当你输入完成后就执行匹配命令的,不用点击确认按钮再执行匹配命令),于是这个时候我想到了万能密码,万能密码能在登录表单绕过登录的限制,那在验证码表单绕过sql查询语句,当输入1' or 1='1
时为True,因为输完万能密码后,服务器开始匹配(这时候没有自动清楚验证码),网页出现卡顿状态。
在验证码表单输入1' or 1='1
,当出现网页卡的现象时刷新页面
4.网页卡顿一段时间还没有好,我执行了一下刷新,发现验证码没有被服务器重置,于是我填写剩余的表单内容,并且提交,提交后网页继续卡顿,此时并无回显更改成功。
5.等网页卡顿一段时间后无回显,执行刷新,网页刷新状态如下,将验证码替换为94102,这个时候验证码有效并且不会卡顿,不会被网页清理。(个人觉得是刚刚的万能密码让服务器识别了一次验证码的验证操作,但是没有执行更改密码的操作,当再次刷新页面的时候万能密码还在,服务器已经将此验证码标为True,但是刚刚执行完全部操作无正确回显。所以我决定更换一个验证码,此时验证码不会被重置,再次输入更新密码时成功更改。)
输入我们定义的密码即可修改成功。
更改后的账号密码为admin/Admin888,尝试登录发现还是有网络环境的限制。
尝试账号密码admin/Admin888 回显效果不一样,说明当服务器存在账号时回显如下,admin为真实账号,猜测需要内网环境
尝试账号密码12345/12345,回显效果不一样,这可以证明上面那一点
这下该怎么办呢?我仍然不想放弃。在查看了该站点的通知公告等信息之后,找到了一些供应商等信息,这时我突然想到可以用统一社会信用代码进行尝试。
这里先说一下统一社会信用代码究竟是个啥:
统一社会信用代码是一组长度为18位的用于法人和其他组织身份识别的代码。统一社会信用代码(18位)包含了组织机构代码(第9-17位)和税务登记证号码 (第3-17位),因此,可以说,统一社会信用代码和组织机构代码不是一个,但有着非常密切的联系。 统一社会信用代码是一组长度为18位的用于法人和其他组织身份识别的代码。
然后我找到了很多个供应商的统一社会信用代码,将这些统一社会信用代码当作账号,经过前端输入账号密码登录时的提示,发现挺多用户都存在的。再次使用上述的方法任意修改密码,都成功了,并且成功登录了进去。这里我就以其中一个为例:
成功修改
成功登录
其中涉及到一些敏感信息,都已经打码。
至此,完成此次渗透。
来源:安全客