SQL注入漏洞解析:如何利用LOAD_FILE()和SELECT INTO OUTFILE读取与写入服务器文件[webshell] 超详细文章

发布于:2025-02-25 ⋅ 阅读:(13) ⋅ 点赞:(0)

目录

SQL读取文件漏洞

特权

数据库用户

查询用户权限

我们的UNION注入payload如下:

用户权限

代码:sql

代码:sql

代码:sql

其它权限查询

代码:sql

代码:sql

加载文件[LOAD_FILE()]

sql读取漏洞

代码:sql

代码:sql

另一个例子

代码:sql

sql文件读取漏洞利用条件

---------------------------------------------------------------------------------------------------------------------------------

SQL写入文件漏洞

安全文件隐私检查

输出[写入]文件

SQL中导出语句

select写入数据

 SQL 注入写入文件

运行webshell注意点

注入载荷UNION如下

文件写入 与 Webshell

Web Shell利用的注意点


SQL读取文件漏洞

  • SQL注入漏洞通常能让攻击者执行任意SQL语句,如果数据库配置不当或权限过宽,攻击者可以利用LOAD_FILE()(MySQL)或xp_fileexist(SQL Server)等特定的函数来读取服务器上的文件。攻击者通过构造SQL注入语句,获取数据库服务器上敏感的文件,如配置文件(如/etc/passwdweb.config等)。

特权

  • 读取数据比写入数据更为常见,写入数据严格保留给现代 DBMS 中的特权用户,因为它可能导致系统漏洞,我们将会看到这一点。
    • 例如,在 中MySQLDB 用户必须具有FILE将文件内容加载到表中,然后从该表中转储数据并读取文件的权限。
    • 因此,让我们首先收集有关数据库中用户权限的数据,以决定我们是否将文件读取和/或写入后端服务器。

数据库用户

  • 首先,我们必须确定我们在数据库中是哪个用户
    • 虽然我们不一定需要数据库管理员 (DBA) 权限才能读取数据,但这在现代 DBMS 中变得越来越必要,因为只有 DBA 才被授予此类权限。
    • 这同样适用于其他常见数据库。
    • 如果我们确实拥有 DBA 权限,那么我们拥有文件读取权限的可能性就更大

查询用户权限

  • 如果没有
    • 那么我们必须检查我们的权限以查看我们可以做什么。
    • 为了能够找到我们当前的 DB 用户
      • 我们可以使用以下任何查询:

我们的UNION注入payload如下:

cn' UNION SELECT 1, user(), 3, 4-- -

或者:

cn' UNION SELECT 1, user, 3, 4 from mysql.user-- -

这告诉我们当前的用户,在本例中是root

这是非常有希望的,因为 root 用户很可能是 DBA,这赋予我们许多特权。

用户权限

  • 现在我们知道了我们的用户,我们可以开始寻找该用户拥有的权限。
  • 首先,我们可以使用以下查询测试我们是否具有超级管理员权限:

代码:sql

cn' UNION SELECT 1, super_priv, 3, 4 FROM mysql.user-- -

再次,我们可以将以下有效负载与上述查询一起使用:

代码:sql

cn' UNION SELECT 1, super_priv, 3, 4 FROM mysql.user WHERE user="root"-- -

如果 DBMS 中有许多用户,我们可以添加WHERE user="root"仅显示当前用户的权限root

代码:sql

cn' UNION SELECT 1, super_priv, 3, 4 FROM mysql.user WHERE user="root"-- -