跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

通过博朗语言执行外壳代码的利用分析

精选回复

发布于

0x00 前言

在之前的文章《SILENTTRINITY利用分析》 学习了C#利用IronPython引擎从内存加载有效载荷的方法,我在byt3bl33d3r的开源代码库上又看到了利用博朗语言执行外壳代码的代码,于是对这项技术做了研究。

本文将要介绍博朗语言的特点和用法,分析通过博朗语言执行外壳代码的优点,给出防御检测的建议。

0x01 简介

本文将要介绍以下内容:

博朗语言简介

博朗语言的用法

通过博朗语言执行外壳代码的实现代码

利用分析

防御检测

0x02 Boolang语言简介

学习资料:

https://github.com/boo-lang/boo

博朗是面向对象的语言,结合了计算机编程语言的语法,红宝石的功能以及C#的速度和安全性

具有如下特点:

语法非常接近Python,使用友好

静态类型,相比动态类型的Python,更加安全

可以扩充编译器,能够在100 .净框架或单声道的上运行

代码开源

0x03 Boolang语言的用法

首先需要下载编译后的博朗文件,地址如下:

https://github.com/boo-lang/boo/releases

文件中包括以下三个可执行程序:

booi.exe,用作执行脚本

booish.exe,实时编译程序,便于测试代码

booc.exe,用作编译脚本

具体用法如下:

1.使用booi.exe执行Boolang脚本

测试。嘘的内容如下:

打印"你好,世界!"

命令如下:

booi.exe测试。嘘

结果如下图

2-1.png

2.使用booish.exe实时编译

启动booish.exe,在命令行输入如下代码:

打印"你好,世界!"

结果如下图

2-2.png

3.使用booc.exe编译Boolang脚本

测试。嘘的内容如下:

打印"你好,世界!"

命令如下:

在此输入代码booc -output:test.exe test.boo

生成文件test.exe

4.使用booc.exe编译Boolang脚本(使用Boo.Lang.Compiler API)

测试。嘘的内容如下:

进口嘘.郎。编译器

进口嘘.郎。编译器。超正析象管(Image Orthicon)

进口嘘.郎。编译器。管道

编译器=boo编译器()

编译器参数。输入。添加(字符串输入('

命令如下:

booc -output:test.exe test.boo

生成文件test.exe

5.使用c#调用Boolang脚本

参考资料:

https://github.com/boo-lang/boo/wiki/Scripting-with-the-Boo.郎。编译器应用程序接口

脚本。嘘的内容如下:

静态定义字符串manip(item as string)://静态让我们无需实例化类就可以调用此方法。

返回" ${item} "?"你到底在说什么,"

runBoo.cs的内容如下:

使用系统;

使用系统。文本;

使用系统。反思;

利用嘘.郎。编译器;

利用嘘.郎。编译器。超正析象管(Image Orthicon)

利用嘘.郎。编译器。管道;

命名空间控制台应用程序一

{

班级计划

{

静态void Main(string[] args)

{

boo编译器编译器=new boo编译器();

编译器参数。Input.Add(新文件输入(‘剧本。boo’));

编译器参数。pipeline=new CompileToMemory();

编译器参数。Ducky=真

编译器上下文上下文=编译器run();

//请注意,如果嘘脚本有错误,下面的代码可能会引发错误。

//戳上下文。要确认的错误。

如果(上下文GeneratedAssembly!=空)

{

类型scriptModule=上下文.生成的程序集。GetType(“脚本模块”);

方法信息字符串manip=脚本模块.get方法(“string manip”);

字符串输出=(字符串)字符串映射.Invoke(null,new object[]{ ' Tag ' });

控制台WriteLine(输出);

}

其他

{

foreach(编译器错误上下文中出现错误。错误)

控制台WriteLine(错误);

}

}

}

}

使用csc.exe编译runBoo.cs,命令如下:

C:\Windows\Microsoft .NET \ framework 64 \ v 4。0 .30319 \ CSC。exe/r:Boo .Lang.dll,Boo .郎。Compiler.dll,Boo .郎。Parser.dll/t:exe朗布。铯

生成文件runBoo.exe,调用脚本。嘘的命令如下:

runBoo.exe剧本

结果如下图

2-3.png

注:

runBoo.exe的同级目录下需要存在以下三个动态链接库:

嘘。Lang.dll

嘘郎。Compiler.dll

嘘。Lang.Parser.dll

这种方法的优点是Boolang脚本可以在内存中编译和运行。与上面的例子相对应,runBoo.exe编译并运行内存中的script.boo。

0x04 通过Boolang语言执行shellcode的实现代码

来自https://github.com/byt3bl33d3r/OffensiveDLR/.的代码

1.使用c#调用Boolang脚本

需要以下两个代码文件:

(1)runBoo.cs

代码地址:

https://github . com/byt 3 bl 33 d3r/offensive DLR/blob/master/run boo . cs

0x04-5中runBoo.cs的结构基本相同。

32位和64位外壳代码分别保存在数组中。

命令行的第一个参数充当传入的Boolang脚本文件。

命令行的第二个参数用作注入外壳代码的方法。

(2)shellcode.boo

代码地址:

https://github . com/byt 3 bl 33 d3r/offensive DLR/blob/master/shellcode . boo

Boolang脚本,它支持以下三种注入方法:

InjectQueueUserAPC,它通过QueueUserAPC注入到explorer.exe进程中

通过CreateThread注入当前进程

InjectRemote,通过CreateRemoteThread注入explorer.exe进程

具体用法如下:

(1)使用csc.exe编译runBoo.cs

该命令如下所示:

C:\Windows\Microsoft。NET \ framework 64 \ v 4 . 0 . 30319 \ CSC . exe/r:Boo。Lang.Compiler.dll,Boo。Lang.dll,Boo。Lang.Parser.dll/t:exe runboo . cs

生成文件runBoo.exe

(2)测试功能

命令如下所示:

runBoo.exe外壳代码

runBoo.exe shellcode . boo InjectSelf

runBoo.exe shell code . boo inject remote

注:

以下三个dll需要存在于runBoo.exe的同级目录中:

嘘。Lang.dll

嘘。Lang.Compiler.dll

嘘。Lang.Parser.dll

解决方案1:

使用ILMerge

参考资料:

https://github.com/boo-lang/boo/wiki/Merge-Boo.Lang.dll转换为您的exe或dll

2.使用Powershell调用Boolang脚本

需要以下两个代码文件:

(1)Invoke-JumpScare.ps1

代码地址:

https://github . com/byt 3 bl 33 d3r/offensive DLR/blob/master/Invoke-jump scare . PS1

功能和runBoo.cs一样,只是需要的三个dll(boo . lang . DLL,boo.lang.compiler.dll,boo.lang.parser.dll)是通过反射加载的,在同一个目录下不再需要这三个DLL文件。

不需要用csc.exe编译,也不会生成中间文件。

注:

可以将Boolang脚本的内容保存在变量中,这样就不需要额外的Boolang脚本,所有的函数只需要一个Powershell文件。

(2)shellcode.boo

代码地址:

https://github . com/byt 3 bl 33 d3r/offensive DLR/blob/master/shellcode . boo

同上。

实际测试如下

3-1.png

0x05 利用分析

与开源的Boolang代码相比,byt3bl33d3r的开源代码中增加了以下函数:

支持Powershell调用,省略用csc.exe编译的步骤。Boolang脚本动态编译,即时执行,使用反射加载所需的三个dll,不需要依赖三个dll。

添加shellcode的功能。

这种利用方法具有以下优点:

使用Boolang语言执行shell代码,启动代码(Powershell脚本)不包含恶意函数,有效载荷可以保存在另一个脚本文件中。

简单理解:

用Boolang语言开发了Powershell格式的脚本解释器,可以动态加载内存中另一个脚本文件中的代码。

0x06 防御检测

在之前的文章《渗透技巧——Use AutoIt script to create a keylogger》中介绍了类似的方法。另一个脚本文件中的代码是由脚本解释器启动的,所以防御检测方法是类似的。

使用组合方式,我们在检测时通常会遇到以下情况:启动程序与有效载荷分离,静态检测困难。

但是这种技术绕不过程序行为的检测,所以可以通过检测进程行为来防御。

0x07 小结

本文介绍了Boolang语言的特点和用法。结合byt3bl33d3r的开源代码,分析了用Boolang语言实现shellcode的优势,并给出了防御检测的建议。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。