风之栖息地

phpmyadmin4.8.1 后台LFI

字数统计: 595阅读时长: 2 min
2018/07/01 Share

之前ChaMd5团队报出来的phpmyadmin的文件包含漏洞,今天就来分析复现一下。

分析

漏洞的输入点是 include $_REQUEST['target'];出现了文件包含这种危险操作,那么有很大概率出现问题。

我们只要绕过57、58、59行的检测就可以成功控制包含文件。

第57行用正则匹配开头为index的路径,只要路径开头没有index即可。

第58行检索输入中是否有黑名单的字符,黑名单在第50行,可以看到 import.php和export.php,只要参数中没这两个php就行。

第59行要看Core类的方法checkPageValidity。

第452行的第三个if判断,检查了输入中的白名单,如果有这些php就直接返回true。

没什么用,继续看下面的操作。mb_substr截取字符串从开始的位置到?处的字符串,再次检索白名单。

虽然可以在url中加入?来通过这个判断,但是随后的include因为有?,所以就无法包含我们控制的文件。

之后,重点来了,在465行出现了一个url解码操作。由于这里解码之后又重复了一遍上面的截取操作,所以这里我们就可以让?编码两次来绕过白名单检测,之后返回到include的时候也能包含我们想要的文件。最后的payload如下:

1
127.0.0.1/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../tongfang.txt

db_sql.php是白名单中的一个,然后用两次URl编码过的?截断,两次URL编码的?在php的urldecode后会变成?,从而绕过检测,之后include文件时,服务器会认为db_sql.php%3f是一个目录,然后包含最后的文件。

利用

  1. 利用创建新的表,在表的字段中放入Webshell,然后包含数据库文件
  2. 执行SELECT '<?php phpinfo(); ?>',然后包含php的session文件

推荐用第二种方法更加隐蔽并且不需要猜测数据库文件路径,效果如下:

总结

总的来说这个漏洞需要在登录phpmyadmin之后才能利用,所以只要密码强度够,暂时就不会有太大危险,但还是推荐尽快升级。另外如果是在session中写了Webshell,用菜刀连的时候必须要有phpmyadmin的session才行……

Reference

ChaMd5的文章

CATALOG
  1. 1. 分析
  2. 2. 利用
  3. 3. 总结
  4. 4. Reference