Metasploit/PowerShell内存加载执行.NET
本文于 1941 天之前发表
前言
随着XP和2003退出Windows系统,.NET与PowerShell在渗透中将会更吃香,
虽然.NET和PowerShell可以相互调用但PowerShell的兼容性远不如.NET,
且想要执行PowerShell,前提也需要.net环境,效率方面也是程序比脚本强
同样都可内存加载,为何非要鼓吹PowerShell呢,很多PowerShell框架或模块,
兼容性和稳定性并不好都没人说,好了不扯太远,下面我们来看一下如何使用
MSF中Meterpreter的powershell模块在内存中执行.NET程序集。
0x001 C# DLL
1 | using System; |
0x002 PowerShell
首先我们先通过系统自带PowerShell执行DLL,看DLL功能是否正常。
1 | PS C:\Users\k8gege\> [Reflection.Assembly]::LoadFile("C:\Users\k8gege\msftest.dll") |
0x003 MSF加载.NET
将DLL复制至MSF服务器,使用Meterpreter的powershell模块在内存中执行DLL
1 | msf5 exploit(multi/handler) > run |
0x004 关于兼容性
1.MSF中的powershell模块稳定性和兼容性并不好,K8在两台WIN7中测试
有一台刚加载powershell模块,MET就崩溃导致权限丢失(而且还弹框)
再者某些程序集和PowerShell脚本也不能正常加载,有些功能也会失效。
这一点Cobalt Strike做得比较好,对.net和PowerShell兼容性80%吧,
.NET加载功能好比虚拟机加载操作系统,CS无法执行部分.NET函数很正常
正如Ladon在CS下执行,部分功能直接不可用,部分功能执行还有问题。
有些人可能说是Ladon的问题,当然说得也没错,但没想过CS的问题吗
它提供.NET程序执行的功能,只是使用了几个微软API接口,并不完全
试想一下被微软收购做了10几年.NET跨平台的MONO也不能保证100%兼容
CS确实是非常强大我承认(不然不使用),但强大并不等于它就没有问题
它的缺点和优点一样,非常多,你用久了懂在理懂的功能多了就会发现
MONO那么大都不能保证完全兼容.NET,CS区区几行代码能完全兼容吗?
我上面说的Ladon在CS下有问题,说Ladon也有问题没错,是因为我认为
写一个好的渗透工具,应尽量兼容各种环境。不过CS也只是使用的工具,
还不是目标环境,要是连工具自身有BUG的模块都能完全兼容,就是完美。
目前Ladon有几个模块不兼容CS,在CNA脚本里有注明,用前必看。其它模块
可能在CS下使用远不如EXE好用,特别是那些没把时间改成3秒内的,默认60秒
才有回显,说成是Ladon扫描慢(即便改成0秒也慢),因为CS无法完美快速回显。
看看CS自带的简单端口扫描或其它扫描,光扫几台机器,CS的回显就很慢吧。
何况Ladon还是外置插件,如Ladon扫描百度子域名很快,但在CS下回显很慢,
并不是Ladon扫得慢,好比把水管前面接一根吸管,要装满一桶水,能快吗。
Ladon扫描很快如同水管,但CS回显如同吸管,水管里的水再快也会因吸管变慢。
2.powershell模块也支持EXE程序,但需要把.exe改成.dll后缀才能加载。
因为通过powershell加载,如果通过系统本身的PowerShell加载都不正常,
MSF加载也会失败,因为MSF并不是虚拟一个.NET加载功能。
如下所示,有时通过系统PowerShell加载ex一样报错
PS C:\Users\k8gege> [Reflection.Assembly]::LoadFile(“C:\Users\k8gege\test.exe”)
使用“1”个参数调用“LoadFile”时发生异常:“生成此程序集的运行时比当前加载的运
行时新,无法加载此程序集。 (异常来自 HRESULT:0x8013101B)”
所在位置 行:1 字符: 32
- [Reflection.Assembly]::LoadFile <<<< (“C:\Users\k8gege\test.exe”)
- CategoryInfo : NotSpecified: (:) [], MethodInvocationException
- FullyQualifiedErrorId : DotNetMethodException
0x005 结论
虽然本文介绍了通过MSF加载执行.NET程序的方法,但是从兼容性以及稳定性来看
目前在实战中还是慎用为好,以免因为弹框或崩溃导致权限丢失。不能因为MSF强大
而无脑使用它的所有功能,程序强大并不代表所有功能模块都稳定好用。只需要使用
稳定好用的模块功能即可,其它模块可以等作者更新稳定后再使用。
注意:我这里说的是不推荐用MSF中的PowerShell加载模块,并不是说MSF。
如同说霍金身体残废,但却没有说他是废人哦,何况只是说他一只手受伤。
转载声明
K8博客文章随意转载,转载请注明出处! © K8gege http://k8gege.org

扫码加入K8小密圈