0

我在工作中管理一个网站,该网站是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 是可读的。

有什么线索吗?

4

1 回答 1

0

事实证明,经过几天的努力,我发现另一位管理员移动了一些东西,以至于我以为我正在访问的面向外部的服务器实际上正在将端口 80 转发到另一台更新的服务器。两台服务器上都有一个数据库副本。因此,当执行 SQL 注入时,它会访问内部/较新的数据库,并且可以读取该服务器上的文件。当我使用 mysql 客户端访问相同的 IP 地址时,它正在读取不同文件系统上的数据库的旧副本,该副本与其他服务器没有相同的文件。

从那以后,人头就滚了。感谢您的努力,很抱歉在此浪费任何人的时间。

于 2015-05-10T15:49:17.583 回答