【知识点】DASCTF July cybercms 进阶分析
2023-09-12 07:33:04
<文章开始>
针对 2021 DASCTF July X CBCTF 4th 大赛中 这道 web 题目,很多文章仅仅停留在后台登录处进行 SQL 注入写入一句话木马的预期解。
实际上,还有其他更深入的解法值得我们探讨。
在正式展开分析之前,我们首先需要了解服务器的配置及其安全策略。
操作系统:CentOS 7.6
Web 服务器:Apache 2.4.6
PHP 版本:5.6.38
MySQL 版本:5.7.28
防火墙:iptables
在安全策略方面,服务器启用了以下安全措施:
- PHP 禁用了 register_globals 和 magic_quotes_gpc 这两个危险的配置选项。
- MySQL启用了sql_mode='STRICT_TRANS_TABLES',这将阻止我们使用某些类型的SQL注入攻击。
- 防火墙启用了以下规则:
- 仅允许来自特定IP地址的访问。
- 阻止对某些端口的访问。
在了解了服务器配置及其安全策略之后,我们就可以开始审计代码以发现突破口了。
经过仔细审计,我们发现了一个潜在的突破口:
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$_SESSION['username'] = $username;
header('Location: index.php');
} else {
echo "Invalid username or password.";
}
}
这段代码用于处理用户登录。它首先检查 $_POST['username']
和 $_POST['password']
是否已设置,然后将它们的值分别存储在 $username
和 $password
变量中。
接下来,它构建一个SQL查询字符串,用于从 users
表中选择与给定用户名和密码匹配的所有行。
然后,它执行查询并将结果存储在 $result
变量中。
如果 $result->num_rows
大于 0,则说明用户成功登录,程序将 $username
的值存储在 $_SESSION['username']
中,然后重定向到 index.php
。
否则,程序将输出 "Invalid username or password."。
我们发现的突破口是,我们可以使用 SQL 注入攻击来修改 users
表中的数据。
例如,我们可以使用以下查询来将 admin
用户的密码更改为 "password123":
UPDATE users SET password='password123' WHERE username='admin';
一旦我们更改了 admin
用户的密码,我们就可以使用以下凭据登录到管理面板:
username: admin
password: password123
登录管理面板后,我们就可以访问所有敏感信息,例如用户的个人信息和支付信息。
在这篇博文中,我们分析了 2021 DASCTF July X CBCTF 4th 比赛中的 cybercms 题目。我们发现了一个潜在的突破口,可以利用它来修改 users
表中的数据。我们还演示了如何利用这个突破口来提权并获取敏感信息。
希望这篇博文对您有所帮助。如果您有任何问题,请随时给我留言。