我在工作中管理一个网站,该网站是SQL注入攻击的受害者。通过检查日志,攻击者似乎使用了文件读取选项并从服务器获取了一堆配置文件,因为我们的 Web 开发人员马虎并使用 root mysql 帐户进行连接(具有 FILE 权限)。sqlmap
这是我试图理解的奇怪的部分。这些文件被读取了——我知道它们被读取了——因为攻击者随后在其中一个文件中使用了密码来进行一些系统渗透。查看日志,他首先抓取了一个index.php,其中引用了 config.php和其他一些文件。他们都成为了目标。
为了加强安全性,我抓取了 sqlmap 并点击了我们的服务器,在弄清楚它是如何工作的之后,我能够抓取文件。
我们的 SQL 服务器不是面向外部的,因此攻击者无法尝试此操作。这是奇怪的部分:
MySQL server
我从我的桌面连接到我们的,并尝试选择LOAD_FILE
以及LOAD DATA INFILE into TABLE.
其中一些工作。例如,select LOAD_FILE('/etc/passwd')
返回/etc/passwd.
但并非所有人都有效。
select LOAD_FILE('/var/www/site_name/index.php')
返回 NULL
。
LOAD DATA INFILE '/var/www/site_name/index.php' INTO temp;
回来:
错误 29 (HY000): 找不到文件 '/var/www/site_name/index.php' (Errcode: 13)
什么?文件未找到?嗯?
所以我对同一个文件运行了 sqlmap 并下载了它。
我跑sqlmap
了,-v 6
所以我可以看到一切 - 它正在使用 LOAD_FILE 来获取文件。
为什么注入攻击中的 LOAD_FILE 会起作用,但从 mysql 客户端命令行加载文件返回 NULL 或找不到文件?但仅适用于某些文件?/etc/passwd 和 /etc/hosts 是可读的。
有什么线索吗?