环境准备:
phpstudy的安装
在官网下载phpstudy
下载地址:
1. 64位:http://public.xp.cn/upgrades/phpStudy_64.7z
2. 32位:http://public.xp.cn/upgrades/phpStudy_32.7z
安装好后如图所示
配置好环境变量如图(系统变量)
2.phpmyadmin的安装及配置
在官网下载安装包
解压后放到phpstudy 的www目录,确保可以访问
参考配置phpmyadmin
1、直接到官网下载文件,phpMyAdmin-4.3.7-all-languages.zip
2、解压到web目录下,命名为phpMyAdmin
3、配置config文件 ,打开libraries下的config.default.php文件,依次找到下面各项,按照说明配置即可:
(1)访问网址
$cfg['PmaAbsoluteUri'] = '';这里填写phpmyadmin的访问网址 ,我这里为http://localhost:8088/phpMyAdmin
(2)mysql主机信息
$cfg['Servers'][$i]['host'] = 'localhost'; // MySQL hostname or IP address
填写localhost或mysql所在服务器的ip地址,如果mysql和该phpmyadmin在同一服务器,则按默认localhost
$cfg['Servers'][$i]['port'] = ''; // MySQL port - leave blank for default port
mysql端口,如果是默认3306,保留为空即可。
(3)mysql用户名和密码
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user 访问phpmyadmin使用的mysql用户名 fg['Servers'][$i]['password'] = ''; // MySQL password (only needed对应上述mysql用户名的密码
(4)认证方法
$cfg['Servers'][$i]['auth_type'] = 'COOKIE';
在此有四种模式可供选择,COOKIE,http,HTTP,config
config方式即输入phpmyadmin的访问网址即可直接进入,无需输入用户名和密码,是不安全的,不推荐使用。
当该项设置为COOKIE,http或HTTP时,登录phpmyadmin需要数据用户名和密码进行验证,,具体如下:
PHP安装模式为Apache,可以使用http和COOKIE;
PHP安装模式为CGI,可以使用COOKIE
(5)短语密码(blowfish_secret)的设置
$cfg['blowfish_secret'] = '';
如果认证方法设置为COOKIE,就需要设置短语密码,置于设置为什么密码,由自己决定 ,但是不能留空,否则登录phpmyadmin时提示错误。
最后就会安装完成!
配置成功后,访问自己的127.0.0.1端口下的phpmyadmin目录
如果出现报错
Warning: Unsupported declare 'strict_types' in D:\phpstudy_pro\WWW\phpmyadmin\index.php on line 8Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in D:\phpstudy_pro\WWW\phpmyadmin\index.php on line 63
可能是php版本问题,可切换php7及以上版本解决此问题
配置成功后访问路径127.0.0.1/phpmyadmin
可以看见phpmyadmin的登陆页面
Mysql Getshell漏洞利用前提条件:
知道网站的绝对路径(通过网页的404页面,报错或者phpinfo)
Gpc没有开启,单引号不会被转义(若被转义,则无法执行正常的sql语句)
GPC:magic_quotes_gpc=On,PHP解析器就会自动为post、get、COOKIE过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符(认为是php的字符)引起的污染
要有file权限,默认下只有root有此权限
对目录要有写的权限,一般image之类的存放突破的目录就有
没有配置secure-file-priv
漏洞复现1(利用写入的权限):
查询secure_file_priv的开启状态
利用show global variables like '%secure%' 语句查询开启secure_file_priv的状态
secure_file_priv的Value值为NUll代表着限制了mysql不允许导入和导出
要是想使语句导出成功,需要在mysql文件夹下配置my.ini
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入导出做限制
在[mysqld]内加入secure_file_priv ="" 即可
选择自己的留言板作为靶场,找到一个传id的地方
测试可知为整型的注入,and 1=1正常 and 1=2报错,利用order by 可以查询到列数为9
利用文件写入权限写入一句话木马
union select 1,"",3,4,5,6,7,8,9 into outfile 'D:/phpstudy_pro/WWW/liuyanban/a1.php'
这里需要注意/或者\\是正确的,\是不正确的
绝对路径是按照报错返回的值确定的
上传成功后利用蚁剑链接,即可getshell
漏洞复现2(利用日志文件getshell):
首先知道phpmyadmin的账号密码,利用弱口令可以得到
mysql 5.0版本以上会创建日志文件,修改日志的全局变量,也可以getshell。但是也要对生成的日志有可读可写的权限。
首先查看日志的状态
show variables like '%general%';
可以知道sql语法的执行日志存放在LAPTOP-1DSIFCE7.log文件中
如果修改general_log_file的值,就会把执行的sql语句放到特定的路径,进而可以getshell
利用命令SET GLOBAL general_log='on'可以开启日志文件的存放
SET GLOBAL general_log='on'
执行完此命令可以利用查询语句查看到general_log成功开启
然后设置general_log_file的Value值为www目录下的文件路径(前提是已经知道绝对路径)
利用命令
SET GLOBAL general_log_file='D:/phpstudy_pro/WWW/test.php'
注意反斜杠的转义
执行成功可以在目录下看见test.php文件
由于执行的语法都会存放在设置的这个文件中,那么我们就可以利用select语句写入一句话木马
SELECT '
可以在test.php文件中看到自己写的语法
使用菜刀蚁剑等shell工具可以getshell
也可以在sqlmap里加上--os-shell参数一键getshell!
选择web支持的语言和需要连接的用户
输入ipconfig后确认即可。