前言

近期,小星被授权对客户的某个系统进行测试。本期技术文章,小星将与大家分享在渗透过程中的有趣记录。

开局是一个登陆界面,只有登录和忘记密码的功能点,常规的扫目录、sql注入和弱口令等功能点都无法成功。于是,小星只能把希望放在未授权上,并把js文件翻了一遍,但结果还是失败了。最后求助于甲方客户,询问是否能够提供测试账号方便越权测试,所以才有了以下经历。

#01 系统测试过程回顾

1. 提供的测试账号有两个权限:教师权限和学校管理员权限。

2. 点击进入,小星发现教师是可以正常进入,学校管理员则需要短信验证码二次确认才能进入。于是,小星持观望态度,看看是否能先行绕过。

3. 随意输入验证码,尝试抓包,下图为验证失败的返回包。经过测试,小星发现只要将返回包中的参数code修改为0就可以绕过短信验证码的二次确认,进入校管理员后台。

(ps:也正因为这个绕过,才有了后续越权的下文。)

4. 整个系统测试下来越权漏洞较多,在此不一一举例了,绝大部分都是通过遍历参数的值即可越权访问数据。

#02 加密请求数据测试过程分享

1. 以教师身份进去后台,点击下方的应用。

2. 以当前用户的身份跳转到目标应用,但是发现数据包被加密了。

3.观察请求包,发现了会跳转到目标的URL,并携带一个token。

4. 小星猜测此处有可能存在越权,但是数据包被加密了,首先需要对数据包进行解密。数据包中参数为encrypt2,全局搜索该字符,发现加密为AES加密,加密模式为CBC,密码、偏移量都已经写在js里面了。

5.在线网站直接解密即可,解密后的明文数据中存在参数uid和phone两个参数。一般来说,如果存在越权的话,基本上就是上述的两个参数。

6. 因为我们目前不知道其他用户的uid和phone,所以需要手机其他用户的uid和phone。这里就体现了文章第一部分提到的校管理员登录绕过漏洞的重要性了。绕过学校管理员的二次确认,在学校管理员的某个功能点,可以收集到一批教师的信息,其中包含参数teacherId的值。

7. 此处猜测teacherId有可能是uid对这批教师的teacherId进行整理,并使用了AES加密。遍历密文,小星发现一些请求包的返回包中携带token,说明确实存在越权。

8. 替换密文,即可以目标用户的身份跳转到应用,达成登录任意用户账号的目的。