Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/cliffe/secgen
漏洞扫描器安全虚拟化CTF渗透测试学习与教育实验室与实践
GitHubcliffe/secgen

SecGen

创建随机不安全的虚拟机

查看仓库
2.8k326301天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

安全场景生成器(SecGen)

摘要

SecGen 创建易受攻击的虚拟机、实验环境和黑客挑战,以便学生能够学习安全渗透测试技术。

像 Metasploitable2 这样的靶机总是相同的,而本项目使用 Vagrant、Puppet 和 Ruby 来创建随机易受攻击的虚拟机,可用于学习或举办 CTF 赛事。

最新版本可在以下地址获取:http://github.com/cliffe/SecGen/

请完成一份简短调查,告诉我们您如何使用 SecGen。

如需托管解决方案,请访问:https://hacktivity.co.uk/

简介

计算机安全专业的学生能从参与黑客挑战中获益。实践性实验工作和预先配置好的黑客挑战,在安全教育以及安全爱好者的日常消遣中都是常见做法。竞技性黑客挑战,例如夺旗(CTF)竞赛,已成为行业会议上的常设项目,也是大型在线社区关注的焦点。虚拟机(VM)提供了一种共享黑客攻击目标的有效方式,并且可以专门设计用来测试攻击者的技能。像 Vulnhub 这样的网站托管着预先配置好的黑客挑战虚拟机,对于学习和提升计算机安全技能的人来说是宝贵的资源。然而,开发这些黑客挑战非常耗时,而且一旦创建,基本上就是静态的。也就是说,一旦挑战被“解决”,学生就没有剩余的挑战可做了;而如果挑战是为竞赛或评估而创建的,则无法在不冒抄袭和串通风险的情况下重复使用。

安全场景生成器(SecGen)生成随机化的易受攻击系统。虚拟机是基于场景规范创建的,该规范描述了要创建的虚拟机的约束条件和属性。例如,一个场景可以指定创建一个具有可远程利用漏洞的系统,该漏洞会导致用户级权限被攻陷,同时还有一个可本地利用的缺陷,会导致 root 级权限被攻陷。这将要求攻击者发现并利用两个随机选择的漏洞,才能获得对系统的 root 访问权限。或者,所定义的场景可以更具体,指定某些类型的服务(例如 FTP 或 SMB),甚至指定确切的漏洞(通过 CVE)。

SecGen 是一个 Ruby 应用程序,带有 XML 配置语言。SecGen 读取其配置,包括可用的漏洞、服务、网络、用户和内容,读取所请求场景的定义,应用随机化场景的逻辑,并利用 Puppet 和 Vagrant 来配置所需的虚拟机。

许可证

SecGen 是自由软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证条款重新分发和/或修改它,无论是许可证的第 3 版,还是(由您选择)任何更高版本。

SecGen 包含安装各种软件包的模块。每个 SecGen 模块可能包含或远程获取软件,并且每个模块都在随附的 secgen_metadata.xml 文件中定义了自己的许可证。

安装

SecGen 在 Ubuntu Linux 上开发和测试。理论上,如果您安装了所有必需的软件,SecGen 应该可以在 Mac 或 Windows 上运行。

SecGen 需要:

  • Ruby 2.7 至 4.0,带有开发头文件,以及 Gemfile 中的 Ruby gems(包括 Nokogiri 和 Librarian-puppet)
  • Vagrant:https://developer.hashicorp.com/vagrant
  • VirtualBox:https://www.virtualbox.org/(或 Proxmox / oVirt / ESXi,见下文)
  • ImageMagick、ExifTool、Graphviz 以及一些用于原生 gems 的库
  • Packer,仅用于 Windows 基础镜像:https://www.packer.io/

有两种安装方式。两者都已在全新的 Ubuntu 安装上测试过。

选项 1:Docker

在主机上安装 Docker 和 VirtualBox,然后让 docker/secgen-docker.sh 构建一个包含其他所有内容的容器。主机上仍然需要 VirtualBox 来提供其内核驱动。参见 docker/README.md。

git clone https://github.com/cliffe/SecGen.git
cd SecGen
docker/secgen-docker.sh run -s scenarios/default_scenario.xml

选项 2:在 Ubuntu 上原生安装(22.04、24.04、26.04;20.04 需注意下方说明)

从 Oracle 的仓库安装 VirtualBox。Ubuntu 24.04 中的 virtualbox 软件包(7.0.16)无法为当前的 HWE 内核构建其内核驱动,而 Linux 7.0 需要 VirtualBox 7.2.8 或更高版本:

sudo apt-get update
sudo apt-get install -y wget gpg lsb-release
wget -qO- https://www.virtualbox.org/download/oracle_vbox_2016.asc \
  | sudo gpg --yes --dearmor -o /usr/share/keyrings/oracle-virtualbox-2016.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" \
  | sudo tee /etc/apt/sources.list.d/virtualbox.list
sudo apt-get update
sudo apt-get install -y virtualbox-7.2

如果 KVM 已加载,VirtualBox 无法在 KVM 占用 VT-x 时启动虚拟机(VERR_VMX_IN_VMX_ROOT_MODE)。在 6.12 及更高版本的内核上,你可以让它们共存:

echo "options kvm enable_virt_at_load=0" | sudo tee /etc/modprobe.d/kvm-virtualbox.conf
sudo modprobe -r kvm_intel kvm_amd kvm; sudo modprobe kvm_intel || sudo modprobe kvm_amd

SecGen 场景使用 VirtualBox 默认 192.168.56.0/21 之外的仅主机网络范围,因此允许任意范围:

sudo mkdir -p /etc/vbox
echo '* 0.0.0.0/0 ::/0' | sudo tee /etc/vbox/networks.conf

从 HashiCorp 的仓库安装 Vagrant(Ubuntu 26.04 不再打包它,而且较旧的 Vagrant 版本已无法再从 Vagrant Cloud 下载 box):

wget -qO- https://apt.releases.hashicorp.com/gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" \
  | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update
sudo apt-get install -y vagrant

安装 Ruby 和其他所需软件包:

sudo apt-get install -y git ruby-full ruby-dev build-essential patch pkg-config zlib1g-dev liblzma-dev \
  imagemagick exiftool libpq-dev libcurl4-openssl-dev libxml2-dev libxslt1-dev graphviz libgraphviz-dev \
  libpcap-dev libsqlite3-dev libgpgme-dev libyaml-dev libffi-dev libssl-dev

克隆 SecGen 并安装 gems。使用 bundle install,而不是 bundle update:Gemfile.lock 固定了在所有受支持的 Ruby 上都能正常工作的版本,而 bundle update 会将其替换为最新版本,这些版本可能无法正常工作。

git clone https://github.com/cliffe/SecGen.git
cd SecGen
sudo gem install bundler -v '~> 2.4'
sudo bundle install

然后尝试默认场景(首次运行时会从 hacktivity.co.uk 下载基础 box):

ruby secgen.rb run

注意:

  • Ubuntu 20.04 (Ruby 2.7): HashiCorp 的 apt 仓库在 20.04 上不再通过验证;请改为从 https://releases.hashicorp.com/vagrant/ 上的 .deb 安装 Vagrant。不要安装 ruby-bundler 包。它会带来一个 Debian 打包的 thor gem,随后 bundle install 会失败并报错 "Could not find thor-0.19.4.gem"。请按上文使用 sudo gem install bundler -v 2.4.22(2.4 是最后一个支持 Ruby 2.7 的 Bundler 版本)。
  • Ruby 4.0: bundle install 会重新解析几个 gem(librarian-puppet 及其依赖项)并在本地重写 Gemfile.lock,因为为 Ruby 2.7 固定的版本不允许 Ruby 4。
  • 已经在旧系统上使用 SecGen?拉取后,再次运行 sudo bundle install。
  • 内存: 在 VirtualBox 上,基于桌面基础镜像(Kali、Debian KDE)构建的 VM 每个获得 3000 MB,其他 VM 为 1024 MB,因此一个包含攻击 VM 和桌面目标(例如 scenarios/ctf/nosferatu.xml)的 CTF 需要大约 6 GB 的可用 RAM。可使用 --memory-per-vm 或 --total-memory 覆盖。

要使用 Windows 基础盒子,你需要安装 Packer。使用以下命令:

curl -SL https://releases.hashicorp.com/packer/1.3.2/packer_1.3.2_linux_amd64.zip -o packer_1.3.2_linux_amd64.zip
unzip packer_1.3.2_linux_amd64.zip
sudo mv packer /usr/local/
sudo bash -c 'echo "export PATH=\"\$PATH:/usr/local/\"" >> /etc/environment'
sudo vagrant plugin install winrm
sudo vagrant plugin install winrm-fs

用法

基本用法:

ruby secgen.rb run

gify goodness

gify goodness

SecGen 接受参数以改变其行为方式,当前已实现的参数有:

   ruby secgen.rb [--options] <command>
      OPTIONS:
      --scenario [xml file], -s [xml file]: Set the scenario to use
        (defaults to /home/secgen/SecGen/scenarios/default_scenario.xml)
      --project [output dir], -p [output dir]: Directory for the generated project
        (output will default to /home/secgen/SecGen/projects/SecGen20200313_094915)
      --shutdown: Shutdown VMs after provisioning (vagrant halt)
      --network-ranges: Override network ranges within the scenario, use a comma-separated list
      --forensic-image-type [image type]: Forensic image format of generated image (raw, ewf)
      --read-options [conf path]: Reads options stored in file as arguments (see example.conf)
      --memory-per-vm: Allocate generated VMs memory in MB (e.g. --memory-per-vm 1024)
      --total-memory: Allocate total VM memory for the scenario, split evenly across all VMs.
      --cpu-cores: Number of virtual CPUs for generated VMs
      --help, -h: Shows this usage information
      --system, -y [system_name]: Only build this system_name from the scenario
      --snapshot: Creates a snapshot of VMs once built
      --no-tests: Prevent post-provisioning tests from running.

      VIRTUALBOX OPTIONS:
      --gui-output, -g: Show the running VM (not headless)
      --nopae: Disable PAE support
      --hwvirtex: Enable HW virtex support
      --vtxvpid: Enable VTX support
      --max-cpu-usage [1-100]: Controls how much cpu time a virtual CPU can use
        (e.g. 50 implies a single virtual CPU can use up to 50% of a single host CPU)

      OVIRT OPTIONS:
      --ovirtuser [ovirt_username]
      --ovirtpass [ovirt_password]
      --ovirt-url [ovirt_api_url]
      --ovirtauthz [ovirt authz]
      --ovirt-cluster [ovirt_cluster]
      --ovirt-network [ovirt_network_name]
      --ovirt-affinity-group [ovirt_affinity_group_name]
下载工具