Powershell Empire 绕过AV实现远控

简介:

1. 前言

谁都喜欢框架。无论对于是平时出于各种目的游走在网页和服务器中的黑客,还是从事网络安全测试的安全人员来说,一个好的漏洞框架发挥的作用不言而喻。这其中的Metasploit脱颖而出。虽然这款框架集成了从漏洞发现到漏洞利用的几乎所有功能,但是不得不承认其在木马后门的免杀方面现如今已经不足以应付一些流氓杀软了。但是,Powershell Empire可以。本篇文章是笔者在一次偶然的机会中接触到powershell empire后进行简单初步的摸索,由于关于这款工具的文章很少,大部分都没有涉及到里面模块作用和原理,官方文档能提供的信息也不多。所以我也是尽力把自己理解的写出来,笔者能力有限,更深层次的利用和原理剖析还在逐步进行。请谅解。

Powershell

2. 为什么是Powershell?

empire选择了poweeshell作为攻击平台总是有原因的。其作为windows平台下的一种命令行外壳程序和脚本环境,它可以使命令行用户和脚本编写者利用.NET Farmework。 说到这里,你可能还是一脸懵逼,我也是,毕竟这只是powershell的官方解释。那我们来看下empire开发者是怎么讲的:

其中重要的一段是:"Scripting languages offer an advantage to an attacker because they provide a layer of abstraction that AV has no idea how to interpret. For example, a common AV bypass technique is to package malicious Python scripts into an executable. AV has a hard time distinguishing the resulting binary as malicious or legitimate because the Python interpreter itself has plenty of legitimate uses. PowerShell offers a distinct advantage in this scenario due to its tight integration with the Windows OS and considering it’s based upon the .NET framework. With such a powerful scripting environment, there is no need to drop files on disk. Everything, with the possible exception of the script itself run entirely memory-resident."

大致意思是:脚本语言为攻击者提供了一个优势,因为它们提供了一个抽象层,杀软(AV)不知道如何解释。例如,常见的杀软旁路技术是将恶意Python脚本打包成可执行文件。杀软很难将生成的二进制文件区分为恶意的或合法的,因为Python解释器本身有很多合法用途。PowerShell在这种情况下提供了明显的优势,因为它与Windows操作系统的紧密集成,并考虑到它基于.NET框架。使用如此强大的脚本环境,不需要将文件放在磁盘上。所有的东西,除了脚本本身的可能例外,它完全是内存驻留的。

no need to drop files on disk:无需写入硬盘,内存驻留。empire使攻击者能在内存中运行命令,也就是empire使用powershell作为攻击平台,并且有大概率成功绕过AV的原因。

这种内存中运行的命令是否会让后来的入侵取证出现困难?这个我还未咨询相关的大佬和老师,暂时就不得而知了。

3. 初识Empire

和Metasploit一样,empire集成了对主机控制提权,内网主机探测等主流的渗透测试功能。

其重要的由四大部分:listeners(侦听器)、stagers(驿站)、agents(会话代理)、modules(模块)

  • listeners相当于msf中的监听模块,用来设置本地IP进行会话监听的。
  • stargers就是一段恶意代码,它通过本机的会话代理(agent)实现本机与被攻击主机的会话通道。
  • agents相当于msf中的session,当我们在被攻击主机上成功执行恶意代码(即木马后门) 时,会反弹一个shell,并通过agent构建本地和被害主机会话。
  • modules这是一个我们在控制了目标主机后,对目标内网或域进行渗透所要使用的主要模块,其包含了很多功能,具体的笔者还在摸索中。

3.1 配置侦听器(Listener)

使用listeners命令,加载当前活动的侦听器。没有的话也会提示你。你可以输入help查看帮助,选择Listeners下可以使用的命令。这里我们首先创建一个活动的侦听器。


 
 
  1. (Empire: listeners) > uselistener 

TAB键弹出可用的侦听建立途径

从图中可以看出具体有七种侦听途径建立方式,其中有五种是通过http协议进行建立通信的,他们之间具体的差别主要在于目标主机的第三方软件配置的差别,关于这一点,empire的官方文档给出了解释:传送门。剩下的是我们熟悉的msf中常用的meterpreter以及使用条件需要目标主机安装第三方软件dropbox的dbx途径。这里我们选择比较通用的http通道。使用info查看详细配置信息。


 
 
  1. (Empire: listeners) > uselistener http 
  2. (Empire: listeners/http) > info 

然后进行配置:


 
 
  1. (Empire: listeners/http) > set Host 192.168.1.144 
  2. (Empire: listeners/http) > set Port 1234 

然后execute生成侦听

然后main指令回到主菜单,可以看到一个侦听已经激活。listener列表显示详细信息。

3.2 配置Stagers

配置好侦听后就要配置我们的攻击代码了,也就是木马后门。使用usestager命令TAB键可以看到所有根据不同系统的生成木马后门的文件类型。

其中multi为通用模块、osxmac操作系统、另外还有linux与windows模块。 生成的文件类型有.dll,bat,vbs等等。其中就包括前段时间office宏命令漏洞的主角windos/macro模块。

实战中直接命令usestager [具体模块]就可以在/tmp目录下生成一个特定文件格式的木马后门,然后通过webshell上传运行就可以了。这里因为演示需要就不进行具体文件生成,直接使用launcher+语言类型(这里是powershell)+侦听的名字(这里是侦听的默认名字是http,也可以在设置侦听时自己更改),如下:


 
 
  1. (Empire) > launcher powershell http 

生成一个powershell语言的内容,直接在powershell目录下执行就行了:

运行,发现杀软并没有有明显变化,但也并不能证明其免杀效果,因为不清楚杀软是否对powershell的行为流量进行监控。

3.2.1 由此衍生的骚操作

从上面这里我们可以看到执行恶意的 powershell命令时杀软并没有给出任何报毒反映,那么我们在此基础上进一步将这个利用点扩大化,进行一次模拟网络钓鱼。如何实现?这里我们就要用到最近才出现的office无宏命令执行漏洞了。

这个office漏洞的原理简单的说就是,在office中可以通过一种存在于windows内部程序进行数据动态交换的DDE协议进行命令执行,从而达到调用windows内其他程序的目的。看到这里,你应该有点想法了。没错,我们就是用这个命令执行的漏洞,执行我们前面的powershell恶意命令,看会不会有我们想要的那种效果。

(1)先将上面生成的攻击代码写成psl文本,放入本地lamp环境根目录:

先将上面生成的攻击代码写成psl文本,放入本地lamp环境根目录

(2) 编写钓鱼的word文档:

(3) 先用 杀软扫下有没有报毒,再发送至虚拟机。这里因为虚拟机的win7没有word,我就暂时以我的物理机来实验吧(拼了)

结果杀软未报毒 最终,反弹了自己物理机的shell..............

再此过程中杀软除了powershell启动的一瞬间给了一次见惯不怪的警告(原来警告确实重要!),之后的会话一直没结束。成功验证操作。

言归正传,此时,empire的agent已有反应,远控回话已开启。此时,我们使用命令interact进入已经建立的会话名。

help查看我们在已建立的会话中所能使用的命令,查看目标主机信息。

能成功执行,继续深入,使用mimikatz命令可以查看目标主机的用户名以及密码,但是我么可以看到这里失败了。

爆出了needs to elevated content的错误,这里大家应该明白需要提权了。那么empire有没类似于msf中的提权命令呢?有的。     


 
 
  1. (Empire PHWC8BT4) >bypassuac [侦听名] 

就可以进行提权。

但是如果运气不好也会出现提权不成功的情况。刚刚说过它和msf一样有相应的提权方式,empire中的module模块中含有相应的扫描模块可以在一键命令提权失败的情况下,进行扫描,找出对应的提权方法,这是后话了。虽然它和msf在提权上的成功率上的比较,笔者还没比较过,但应该是有差别的。

list列出提权后的会话列表,发现多出一个和原来会话主机名相同,但Username前多一个星号的会话,这个带星号的用户就是提权后的高权限用户了。我们现在interact进入这个高权限用户的会话中,查看用户密码。

可以看出,提权后我们可以对目标主机进行更多的操作,可以直接找出目标的用户名和密码的hash,如果用户密码是弱口令的话,甚至可以直接爆出密码明文。接着如果目标主机有其他内网主机的话就可以进一步地“为所欲为”了。

在控制目标主机后,我们可以将这个会话发送给msf,使用meterpreter进行更多操作。

4. 我们的杀软在做什么

首先实验一开始,我们使用了恶意的powershell的命令进行攻击。杀软并没有进行报错,毫无反应,证明杀软暂时对Powershell的执行并没有多少设防,但此时我们的攻击端也未进入agent会话,因为不懂杀软是怎样基于行为进行查杀的,所以我们暂时不能说明它不可以拦截恶意行为。 而后,攻击端interact连接进会话,攻击机和目标靶机形成数据交互,而且是我们通过http通道建立的。我们再看看目标靶机,依旧毫无反应,这其实很奇怪了,现在的杀软既然已经开始对于电脑中的可以行为进行检测,特别是这种很有疑点的外部通讯,应该是重点查杀的对象,但这里杀软并没有给出任何反应。难道是因为我们的侦听模块是使用的http通道?大胆猜测下,应该是的。 接下来的操作目标靶机的杀软都没有反应。到了提权的那一步我就开始使用杀软进行主动扫描,按照杀软的描述,其对磁盘和内存进程都会扫描。但是结果提醒我是安全的。

一片绿色,完全没有问题。就和我们前面的钓鱼一样,木马后门如入无人之境。 为了体现这种powershell马的特点和优势,我有生成了几个msf下典型的木马,其中包括未经过编码处理的木马,经过encode十多次的木马和加壳木马,无一例外被杀软查杀,只是后两种有概率在种入木马时运行前不会报毒,但是在运行时,无一例外均被杀。甚至加壳的马会直接被我物理机上的杀软查出。

5. 最后

empire虽然已经比较强大了,但是使用工具的意义并不是它能给我们带来的效益和那种快感,其真正意义在于研究其背后所利用的漏洞原理。这里利用powershell进行攻击,并建立有效的攻击机与目标机的连接,最吸引人的是原始开发者的思路,这才是empire带给我最大的收获。顺着这个思路似乎已经有其他发现了。


原文发布时间为:2017-11-06

本文作者:C1em0

本文来自云栖社区合作伙伴51CTO,了解相关信息可以关注51CTO。


目录
相关文章
|
2月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
75 0
|
3月前
|
Windows
Powershell 重新排列去重 Windows环境变量
【9月更文挑战第13天】本文介绍如何使用PowerShell对Windows环境变量进行重新排列和去重。首先通过`$env:`访问环境变量,接着使用`-split`命令分割路径,再利用`Select-Object -Unique`去除重复项。之后可根据需要对路径进行排序,最后将处理后的路径组合并更新环境变量。注意修改环境变量前应备份重要数据并了解潜在影响。
137 10
|
7月前
|
存储 Ubuntu Linux
windows可以安装Ubuntu,ubuntu上也可以安装Powershell
powerhsell除了可以在windows上使用外,还可以在Ubuntu上部署开发环境。下面介绍Ubuntu上安装powershell的方法。
216 0
|
Shell Linux 开发工具
windows中cmd和PowerShell批处理命令
之前在 Git 批量删除本地分支,有用到 Linux 或 MacOS 下的批处理命令,这个命令中的 grep、xargs 本身是 Shell script,在 windows 中的 cmd 和 PowerShell 中是不能用的
111 0
|
JavaScript Windows
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题
|
Windows
使用PowerShell获取Windows当前锁屏壁纸
使用PowerShell获取Windows当前锁屏壁纸 如果原始图片丢了,用这段代码就可以提取当前锁屏壁纸了!
191 0
|
应用服务中间件 nginx Windows
Windows PowerShell 中启动 Nginx 报错解决方案
Windows PowerShell 中启动 Nginx 报错解决方案
Windows PowerShell 中启动 Nginx 报错解决方案