文章转载至:
https://xz.aliyun.com/t/16747
作者:消失的猪猪
一次客户系统的测试,全程码死,整个系统存在多种类型漏洞。给大家看看,展开思路,自我感觉属于是相当经典的一次测试,漏洞也是相当经典的几种漏洞。
开局一个登录口,有账号登录、短信登录、忘记密码:
一般来说,忘记密码可以用来枚举账号是否存在,直接抓取忘记密码的数据包进行爆破,提示手机号无效:
那就直接爆破,账号用手机号字典。字典哪来呢?有一个手机号字典各位师傅应该都有,其次就是用脚本生成,按地区生成手机号。
之前有很多在线生成的,现在全部停用了……但是github有这个生成的脚本,大家可以看一下:
https://github.com/search?q=%E6%89%8B%E6%9C%BA%E5%8F%B7%E7%94%9F%E6%88%90&type=repositories
用户枚举到成功爆破
这里存在枚举,不存在的时候会提示账户不存在,账号存在密码错误时会提示错误次数,连续错误五次后,账号会被锁定一段时间:
然后在我字典的操作下,爆破的错误次数没到五次就进去了。建议大家在日常没事的时候可以统计下,哪些弱口令是出现最多的,把这些单独创建一个文本,按出现频率依次排序:
任意用户登录
成功登录后,会首先跳转到上图中的界面,选择身份进入系统。最开始我没看数据包,直接在页面F12定位,发现有一串值:
开始我不知道这是啥,后面查看数据包,发现原来这个值是ID……
通过修改这个ID可以登录任意一个用户:
SQL注入
登入系统后,通过瞎注自动插入引号判断,发现注入。系统内有很多注入点,我这边就挑一个给大家展开说一下子:
接下来验证注入,这里我就不贴SQLMap的图了,最开始梭哈过,跑着跑着卡住不动了,不过这也不是第一次了,习惯了……
直接手工来吧。通过响应包可见,一个单引号与两个单引号时,响应返回内容不一致,说明单引号可以对其产生影响:
但是,现在并不能确定单引号就是闭合符合,所以我们构造语句继续确认,语句如下:
1'||'1'='1
1'||'1'='2
正常来说如果是单引号闭合的话,上面两条语句返回的内容应该是不一致的,但是上面的语句并未生效。
这说明,闭合符号可能不是单引号。那么,有可能存在括号,继续构造语句:
1')||(1='1
1')||(1='2
OK,果然带括号,构造语句确认到数据库名长度为7:
接下来我们继续构造语句,来获取库名:
1')||(substr('abc',1,1)='a')and(1='1
1')||(substr(database(),1,1)='X')and(1='1
垂直越权
其中一个模块,点击提示无权限:
好好好,原状态码为1,咱们这边拦截响应包,更改状态码为:0
奥利给给,成功进入页面:
原文始发于微信公众号(犀利猪安全):极致经典 | 一次客户系统渗透,多种经典漏洞集合于一身
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论