假设一个 SQLi 易受攻击的 Web 应用程序在 Linux 系统上SELinux
以强制模式运行。 MariaDB 以非 root 用户身份运行,例如db_user
。假设我们试图利用 SQLi 漏洞并使用INTO OUTFILE
我们尝试在服务器的 Web 根目录(假设我们现在是该位置)中创建恶意 PHP 文件。 AFAIK Web 服务器应该在它自己的用户上下文中运行,例如 www-root。 SELinux 会阻止此恶意文件写入 Web 根目录吗?我是否能够在日志文件中看到此尝试?如果是的话,要去看吗?
谢谢你!
答案1
我不是 SELinux 专家(我使用 AppArmor),但一般来说我会这么说能防止此类攻击,但这取决于配置。
一般来说,SELinux 应该限制 SQL Server 只在它应该写入的目录中写入,例如/var/lib/mysql
或/var/log/mysql
。在这些地方,不安全的应用程序在访问此类文件和目录之前无处可去(并且应该通过 Unix 权限或 SELinux 停止)。
任何违反此类规则的尝试都将记录在auditd
日志文件中,位置因发行版而异
然而,这有一些警告:
INTO OUTFILE
这在很大程度上限制了您在应用程序中的使用- 如果攻击者能够访问 SQL 注入并创建输出文件,他们也可能以不同的方式获取数据,例如制作不同的选择并从应用程序中抓取数据。它需要更多的工作,但可以相当自动化
所以,是的,如果配置正确,它可以防止此类攻击,但它通常不能防止 SQL 注入攻击,只能防止那些依赖于 SQL 注入攻击的攻击。INTO OUTFILE