0x00 前言


在之前的文章《SILENTTRINITY利用分析》学习了C#利用IronPython引擎从内存加载payload的方法,我在byt3bl33d3r的GitHub上又看到了利用Boolang语言执行shellcode的代码,于是对这项技术做了研究。

本文将要介绍Boolang语言的特点和用法,分析通过Boolang语言执行shellcode的优点,给出防御检测的建议。

0x01 简介


本文将要介绍以下内容:

  • Boolang语言简介
  • Boolang语言的用法
  • 通过Boolang语言执行shellcode的实现代码
  • 利用分析
  • 防御检测

0x02 Boolang语言简介


学习资料:

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

Boolang是面向对象的语言,结合了Python的语法,Ruby的功能以及C#的速度和安全性

具有如下特点:

  • 语法非常接近Python,使用友好
  • 静态类型,相比动态类型的Python,更加安全
  • 可以扩充编译器,能够在.NET Framework或Mono上运行
  • 代码开源

0x03 Boolang语言的用法


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

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

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

  1. booi.exe,用作执行脚本
  2. booish.exe,实时编译程序,便于测试代码
  3. booc.exe,用作编译脚本

具体用法如下:

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

test.boo的内容如下:

print "Hello, World!"

命令如下:

booi.exe test.boo

结果如下图

Alt text

2.使用booish.exe实时编译

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

print "Hello, World!"

结果如下图

Alt text

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

test.boo的内容如下:

print "Hello, World!"

命令如下:

enter code herebooc -output:test.exe test.boo

生成文件test.exe

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

test.boo的内容如下:

import Boo.Lang.Compiler
import Boo.Lang.Compiler.IO
import Boo.Lang.Compiler.Pipelines

compiler = BooCompiler()
compiler.Parameters.Input.Add(StringInput("<script>", "print('Hello!')"))
compiler.Parameters.Pipeline = Run()

compiler.Run()

命令如下:

booc -output:test.exe test.boo

生成文件test.exe

5.使用c#调用Boolang脚本

参考资料:

https://github.com/boo-lang/boo/wiki/Scripting-with-the-Boo.Lang.Compiler-API

script.boo的内容如下:

static def stringManip(item as string): //static lets us invoke this method without needing to instanize a class.