在一次针对教育行业目标的信息收集后,我发现了一个心理测评系统的登录入口。

面对登录框,一套完整的安全测试思路可以帮助我们系统地寻找突破口。

我首先尝试了常见的弱口令组合,使用admin/123456成功进入了系统后台。

进入后台后,首要任务是寻找可能存在的敏感信息泄露。很快,在“个人报告”功能模块中,发现了大量数据。

该接口直接泄露了超过4万条个人报告记录。不仅如此,系统内其他数据接口也存在类似问题。

观察请求参数,发现存在user_id、task_id等ID参数。我通过抓包并对这些ID参数进行遍历测试(例如从1遍历到9999),发现不同ID对应的数据量差异很大,最多的一个接口返回了近6000条数据,最少的也有一两条。


累计下来,通过这些接口泄露的数据总量至少达到了十万条级别。
在完成信息泄露漏洞的确认后,我开启了自动化SQL注入测试插件,并在后台进行各种功能点击,以让流量经过插件检测。这里有一个关键点:开启插件后,应避免进行“增加”、“删除”这类会修改数据的操作,以免对目标系统造成影响。主要进行“查询”、“点击”等操作,几分钟后,插件报告了结果。
整理发现,系统内共有7个不同接口的参数存在SQL报错注入漏洞。


为了进一步验证和利用,我使用sqlmap对其中一个注入点进行了测试。

成功获取了当前数据库名,并探测到数据库服务器版本为MySQL 5.1或以上。

进一步可以dump指定表的结构和数据。

其他几个注入点利用方法同理,这里不再一一展示。
完成注入漏洞的挖掘后,我继续对后台功能进行深入测试。在“测评任务”管理页面,发现了一个“导出人员名单”的功能。

点击任务选项中的“更多”,然后选择“导出人员名单”,系统会生成一个包含用户敏感信息的Excel文件。

导出的文件内容包含了账号、姓名等大量敏感数据。

对于这类导出功能,常见的安全问题是越权访问和未授权访问。由于当前身份是管理员,我重点测试是否存在“未授权访问”漏洞。
测试方法很简单:将下载链接复制到一个全新的、未登录过该系统的浏览器窗口中直接访问。测试发现,该文件下载链接无需任何身份认证即可直接访问并下载。


从文件大小来看,这些文件同样包含了大量数据。
后续,通过浏览器插件识别出该网站采用ThinkPHP框架开发。我直接使用针对ThinkPHP的漏洞扫描工具进行检测。

扫描结果显示存在一处信息泄露漏洞(对应CVE-2022-25481)。通过访问特定的payload路径,可以泄露服务器环境信息。

在返回的信息中,可以清晰地看到网站的绝对路径(DOCUMENT_ROOT)。如果之前挖掘的SQL注入点具备写文件权限(例如数据库用户为root),结合这个绝对路径,理论上可以尝试写入Webshell。考虑到当前已发现的漏洞危害等级已经足够,后续的利用点到为止,未再进行深入测试。