
本文共 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应用的安全性需要从多个角度进行保护。
发表评论
最新留言
关于作者
