BUUCTF:[GWCTF 2019]我有一个数据库------phpMyAdmin漏洞学习
发布日期:2021-05-08 04:03:18 浏览次数:21 分类:精选文章

本文共 1628 字,大约阅读时间需要 5 分钟。

[GWCTF 2019] 我有一个数据库

数据库安全一直是网络安全领域的重要话题,而最近的GWCTF 2019题目中,我遇到了一个关于数据库安全的题目。这个题目看起来有点挑战性,但经过仔细分析,我发现了一些有趣的方法。

一、参考

在研究这个题目时,我参考了一些公开的安全研究资料。根据这些资料,攻击者通常会利用一些常见的Web应用漏洞来获取对数据库的控制权。

二、从里面摘抄了一些东西

通过研究,我总结出了以下几种常见的方法:

1. 读取phpinfo(任意文件读取)

phpinfo函数是PHP的内置函数,用于显示关于PHP环境的信息。如果一个Web应用中包含了phpinfo函数的输出,攻击者可以利用这一点来获取更多的信息。例如,通过构造特定的URL参数,可以让phpinfo函数读取任意文件内容。这种方法的具体实现方式是通过在URL中添加参数,如?targer=db_sql.php%253f/…/…/…/…/…/…/…/shell.php

2. 写入Shell

在数据库中创建一个新的表并插入一条特定的SQL语句,可以触发Shell的执行。例如,在MySQL中,可以通过以下语句实现:

CREATE TABLE `new_table` (  `id` INT AUTO_INCREMENT PRIMARY KEY,  `shell` TEXT) ENGINE=InnoDB DEFAULT CHARSET=latin1;INSERT INTO `new_table` (`shell`) VALUES ('rm -rf /');

这样做的好处是,生成的FRM文件会被存储在MySQL的数据目录下,而这一步可以帮助攻击者获取Shell访问权限。

3. 直接包含Session文件

在某些情况下,Web应用会将Session数据存储在文件中。如果攻击者能够获取到这些Session文件,可以通过包含这些文件来获取Shell访问权限。例如,在Apache服务器中,Session文件通常存储在phpStudy\tmp\tmp目录下,文件名为sess_加上当前用户的Session ID。通过将这些文件包含到Web应用中,可以直接获取Shell。

4. phpMyAdmin的防护机制

phpMyAdmin在检查文件时,会对请求的参数进行过滤,确保只允许白名单中的文件被包含。如果请求中包含?target=index.php?id=1这样的参数,phpMyAdmin会阻止其执行。这种机制的目的是为了防止恶意攻击,但如果攻击者能够绕过这些过滤机制,也可以通过包含特定的文件来获取权限。

三、声明几点

1. 任意文件包含

通过构造特定的URL参数,可以让Web服务器包含任意文件。例如,?file=dp_***.php…/…/…/…/…/…/…/shell.php。如果包含成功,攻击者可以通过路径遍历的方法,最终到达shell.php文件。

2. URL编码的双重解码

在Apache服务器中,GET参数会被首先解码一次,然后再次解码。例如,?target=db_sql.php%253f/…/…/…/…/…/…/…/shell.php会被解码为?target=db_sql.php?/…/…/…/…/…/…/…/shell.php。如果白名单中包含?target=index.php?id=1,则会返回true,从而允许任意文件包含。

3. 任意代码执行

目前还没有找到直接执行任意代码的方法,但包含Session文件的方法在某些情况下是可行的。

四、关于这个BUU题目

如果上述方法都被防护了,那么对于这个BUU题目来说,似乎非常有趣。如果我有一个数据库,那么上述方法可能都无法奏效。不过,这个题目可能还有其他隐藏的方法,需要进一步研究。

总的来说,这个题目让我对数据库安全有了更深的理解,同时也让我意识到,Web应用的安全性需要从多个角度进行保护。

上一篇:维度建模和范式建模对比
下一篇:常用压缩格式效率对比

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年03月27日 06时27分53秒