diff --git a/404.html b/404.html index 8256bf8b..096ae649 100644 --- a/404.html +++ b/404.html @@ -990,6 +990,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/changelog/index.html b/changelog/index.html index 0b3fa352..9e6f0a29 100644 --- a/changelog/index.html +++ b/changelog/index.html @@ -1001,6 +1001,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/developpers/provisioning/index.html b/developpers/provisioning/index.html index fe4963eb..be24f1d9 100644 --- a/developpers/provisioning/index.html +++ b/developpers/provisioning/index.html @@ -997,6 +997,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/developpers/structure/index.html b/developpers/structure/index.html index 891ee473..64dc9e29 100644 --- a/developpers/structure/index.html +++ b/developpers/structure/index.html @@ -997,6 +997,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/extensions/elk/index.html b/extensions/elk/index.html index 9e106131..e2d3b215 100644 --- a/extensions/elk/index.html +++ b/extensions/elk/index.html @@ -1052,6 +1052,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/extensions/exchange/index.html b/extensions/exchange/index.html index 7e2b9b8f..dd5b3cb2 100644 --- a/extensions/exchange/index.html +++ b/extensions/exchange/index.html @@ -1061,6 +1061,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/extensions/index.html b/extensions/index.html index 05b132dd..5fae9a3b 100644 --- a/extensions/index.html +++ b/extensions/index.html @@ -1003,6 +1003,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/extensions/wazuh/index.html b/extensions/wazuh/index.html index d859713c..1f962683 100644 --- a/extensions/wazuh/index.html +++ b/extensions/wazuh/index.html @@ -1061,6 +1061,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/extensions/ws01/index.html b/extensions/ws01/index.html index ad2a6951..2372bddd 100644 --- a/extensions/ws01/index.html +++ b/extensions/ws01/index.html @@ -1013,6 +1013,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/index.html b/index.html index 17b90a98..9fd0ec0b 100644 --- a/index.html +++ b/index.html @@ -1009,6 +1009,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/installation/index.html b/installation/index.html index d9fa81f8..4cb771f3 100644 --- a/installation/index.html +++ b/installation/index.html @@ -1003,6 +1003,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/installation/linux/index.html b/installation/linux/index.html index b5ff5b0d..9693c778 100644 --- a/installation/linux/index.html +++ b/installation/linux/index.html @@ -1061,6 +1061,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/installation/windows/index.html b/installation/windows/index.html index f7194210..7f49b1a8 100644 --- a/installation/windows/index.html +++ b/installation/windows/index.html @@ -1085,6 +1085,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/instances/index.html b/instances/index.html new file mode 100644 index 00000000..9a0b8f70 --- /dev/null +++ b/instances/index.html @@ -0,0 +1,1429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 🇮 instances - Game Of Active Directory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + Skip to content + + +
    +
    + +
    + + + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + +

    🇮 instances

    +

    When you create a lab, goad will create an instance folder. +All the instances are stored in the workspace/ folder inside goad.

    +
    workspace/
    +    .
    +    ├── 6caf1a-goad-light-azure              # Instance ID
    +    │   ├── exchange_inventory               # extension inventory
    +    │   ├── instance.json                    # instance json file (name, status, etc..)
    +    │   ├── inventory                        # provider inventory
    +    │   ├── provider                         # provider folder
    +    │   │   ├── jumpbox.tf
    +    │   │   ├── linux.tf
    +    │   │   ├── main.tf
    +    │   │   ├── network.tf
    +    │   │   ├── outputs.tf
    +    │   │   ├── terraform.tfstate
    +    │   │   ├── terraform.tfstate.backup
    +    │   │   ├── variables.tf
    +    │   │   └── windows.tf
    +    │   └── ssh_keys                         # the keys generated by this instance
    +    │       └── ubuntu-jumpbox.pem
    +    ├── 7b12f1-goad-light-vmware             # another instance
    +    │   ├── instance.json
    +    │   ├── inventory
    +    │   ├── inventory_disable_vagrant
    +    │   ├── provider
    +    │   │   └── Vagrantfile
    +    │   └── ssh_keys
    +
    +

    instance creation

    +
      +
    • On instance folder creation (when you run install or create_empty), the provider files inside the template/ folder are copied into the instance.
    • +
    • These files are merged with the datas inside ad/<lab>/providers/<provider>/ folder and the datas inside extensions/<extension>/providers/<provider>/
    • +
    • +

      The merged result is present in the workspace/<instance_id>/provider/ folder and contain all the recipes to create the infrastructure

      +
    • +
    • +

      inventories files are also copied from ad/<lab>/provider/<provider>/inventory and extensions/<extension>/inventory (see provisioning for more information in provisioning)

      +
    • +
    + + + + + + + + + + + + + +
    +
    + + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/labs/GOAD-Light/index.html b/labs/GOAD-Light/index.html index 20d4d656..98cbdcc5 100644 --- a/labs/GOAD-Light/index.html +++ b/labs/GOAD-Light/index.html @@ -1070,6 +1070,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/labs/GOAD/index.html b/labs/GOAD/index.html index 41f88650..b10bce5e 100644 --- a/labs/GOAD/index.html +++ b/labs/GOAD/index.html @@ -1079,6 +1079,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/labs/MINILAB/index.html b/labs/MINILAB/index.html index b891586d..f09c7297 100644 --- a/labs/MINILAB/index.html +++ b/labs/MINILAB/index.html @@ -1013,6 +1013,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/labs/NHA/index.html b/labs/NHA/index.html index 18f93ad8..c8d175fd 100644 --- a/labs/NHA/index.html +++ b/labs/NHA/index.html @@ -1013,6 +1013,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/labs/SCCM/index.html b/labs/SCCM/index.html index bcd3151c..92fce17d 100644 --- a/labs/SCCM/index.html +++ b/labs/SCCM/index.html @@ -1079,6 +1079,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/labs/index.html b/labs/index.html index f13d4dab..b3db6014 100644 --- a/labs/index.html +++ b/labs/index.html @@ -1003,6 +1003,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/packer/packer/index.html b/packer/packer/index.html index bdcf27e0..c73a4281 100644 --- a/packer/packer/index.html +++ b/packer/packer/index.html @@ -992,6 +992,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/providers/aws/index.html b/providers/aws/index.html index f55c0aba..616d5dfb 100644 --- a/providers/aws/index.html +++ b/providers/aws/index.html @@ -1124,6 +1124,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/providers/azure/index.html b/providers/azure/index.html index 59a50327..415c94d4 100644 --- a/providers/azure/index.html +++ b/providers/azure/index.html @@ -1124,6 +1124,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/providers/index.html b/providers/index.html index d60f7a20..805f5160 100644 --- a/providers/index.html +++ b/providers/index.html @@ -1003,6 +1003,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/providers/ludus/index.html b/providers/ludus/index.html index 9cc29722..abff3cbe 100644 --- a/providers/ludus/index.html +++ b/providers/ludus/index.html @@ -1061,6 +1061,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/providers/proxmox/index.html b/providers/proxmox/index.html index f6e5f791..ad910040 100644 --- a/providers/proxmox/index.html +++ b/providers/proxmox/index.html @@ -1061,6 +1061,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/providers/virtualbox/index.html b/providers/virtualbox/index.html index 491d2aca..c6f742af 100644 --- a/providers/virtualbox/index.html +++ b/providers/virtualbox/index.html @@ -1070,6 +1070,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/providers/vmware/index.html b/providers/vmware/index.html index fb1740cf..3e05c73b 100644 --- a/providers/vmware/index.html +++ b/providers/vmware/index.html @@ -1070,6 +1070,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/provisioning/index.html b/provisioning/index.html index dcbb3226..6919ff84 100644 --- a/provisioning/index.html +++ b/provisioning/index.html @@ -13,7 +13,7 @@ - + @@ -999,6 +999,26 @@ + + +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + @@ -1011,6 +1031,17 @@ + + @@ -1021,6 +1052,70 @@ + + + + @@ -1145,6 +1240,59 @@ + + + @@ -1162,7 +1310,76 @@

    🛠️ provisioning

    -

    🚧 TODO

    +

    This page describe how the provisioning is done with goad. +The provisioning of the LABS is done with Ansible for all providers.

    + +

    Lab data

    +

    The data of each lab are stored in the json file : ad/<lab>/data/config.json, this file is loaded by each playbook to get all the lab variables (this is done by the data.yml playbook call by all the over playbooks)

    +

    Extension data

    +

    If an extension need data it will be stored in extensions/<extension>/data/config.json but the loading must be done by extension install.yml playbook.

    + +
    # read local configuration file
    +- name: "Read local config file"
    +  hosts: domain:extensions
    +  connection: local
    +  vars_files:
    +    - "../data/config.json"
    +  tasks:
    +    - name: merge lab variable with local config
    +      set_fact:
    +        lab: "{{ lab|combine(lab_extension, recursive=True) }}"
    +
    +

    Inventories

    +

    Ansible work with inventories. Inventories files contains all the hosts declaration and some variables.

    + +

    The inventory files are given to ansible in this order : +- lab inventory file +- workspace provider inventory file +- workspace extension(s) inventory file(s) +- globalsettings.ini file

    +

    The order is important as it determine the override order. hosts declarations are merged between all inventory and variables with the same name are override if the same variable is declared.

    + +

    playbooks

    + +

    labs build

    + diff --git a/questions/index.html b/questions/index.html index f37648c0..0c9652d0 100644 --- a/questions/index.html +++ b/questions/index.html @@ -1001,6 +1001,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/references/index.html b/references/index.html index 2d5c89c9..5211c642 100644 --- a/references/index.html +++ b/references/index.html @@ -1001,6 +1001,26 @@ +
  • + + + + + 🇮 instances + + + + +
  • + + + + + + + + +
  • diff --git a/search/search_index.json b/search/search_index.json index ab002172..f3f73829 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Game Of Active Directory","text":"

    Welcome to GOAD (v3) documentation !

    Game Of Active Directory is a free pentest active directory LAB(s) project (1).

    1. GOAD is free if you use your own computer, obviously we will not pay your electricity bill and your cloud provider invoice ;)

    The purpose of this tool is to give pentesters a vulnerable Active directory environment ready to use to practice usual attack techniques. The idea behind this project is to give you an environment where you can try and train your pentest skills without having the pain to build all by yourself. This repository was build for pentest practice

    Note

    GOAD main labs (GOAD/GOAD-Light/SCCM) are not pro labs environments (like those you can find on HTB). Theses labs give you an environment to practice a lot of vulnerability and missconfig exploitations. Sure you can use them like pro labs, but it will certainly be too easy due to the number of vulns. Consider more GOAD like a DVWA but for Active Directory. If you want a chall deploy the lab NHA.

    Warning

    This lab is extremely vulnerable, do not reuse recipe to build your production environment and do not deploy this environment on internet without isolation (this is a recommendation, use it as your own risk).

    Windows Licenses

    This lab use free windows VM only (180 days). After that delay enter a license on each server or rebuild all the lab (may be it's time for an update ;))

    "},{"location":"changelog/","title":"Road Map","text":""},{"location":"changelog/#sccm","title":"SCCM","text":""},{"location":"changelog/#extensions","title":"Extensions","text":""},{"location":"provisioning/","title":"\ud83d\udee0\ufe0f provisioning","text":"

    \ud83d\udea7 TODO

    "},{"location":"questions/","title":"Frequent asked questions","text":"

    How can i change the default keyboard layout

    edit globalsettings.ini files and change the variable keyboard_layouts

    I already got a lab installed with v2, is v3 will use it ?

    Sorry no, the v3 of GOAD doesn't look for already installed lab. Best way to migrate is trash your old lab and build a new one.

    Can i use goad to create a course for my student ?

    Sure GOAD is a GPL project. Feel free to reuse it to give course.

    "},{"location":"references/","title":"References","text":"

    \ud83d\udea7 TODO

    "},{"location":"thx/","title":"Special Thanks to","text":""},{"location":"thx/#enterprise","title":"Enterprise","text":""},{"location":"troobleshoot/","title":"troubleshoot","text":"

    Tip

    In most case if you get errors during install, don't think. Select the failed instance \u0300load <instance_id> and just replay the install with provision_lab to relaunch all or provision_lab_from <playbook> if you know the last failed playbook (most of the errors which could came up are due to windows latency during installation, wait few minutes and replay the install)

    \ud83d\udea7 TODO refresh me with new goad version :)

    "},{"location":"troobleshoot/#vagrant-up-winrm-digest-initialization-failed-initialization-error","title":"vagrant up - WinRM - digest initialization failed : Initialization Error","text":"
    DC01: WinRM username: vagrant\nDC01: WinRM execution_time_limit: PT2H\nDC01: WinRM transport: negotiate\nAn error occurred executing a remote WinRM command.\n\nShell: Cmd\nCommand: hostname\nMessage: Digest initialization failed: initialization error\n
    "},{"location":"troobleshoot/#vagrant-up-cannot-load","title":"vagrant up - cannot load","text":"
    <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- winrm (LoadError)\n    from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'\n    from /usr/share/rubygems-integration/all/gems/vagrant-2.3.4/plugins/communicators/winrm/shell.rb:9:in `block in <top (required)>'\n    from /usr/share/rubygems-integration/all/gems/vagrant-2.3.4/lib/vagrant/util/silence_warnings.rb:8:in `silence!'\n
    "},{"location":"troobleshoot/#vagrant-up-cannot-load-such-file-winrm-elevated-loaderror","title":"vagrant up - cannot load such file -- winrm-elevated (LoadError)","text":"
    <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- winrm-elevated (LoadError)\n        from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'\n        from /usr/share/rubygems-integration/all/gems/vagrant-2.3.4/plugins/communicators/winrm/shell.rb:12:in `<top (required)>'\n        ...\n
    "},{"location":"troobleshoot/#ansible-persistent-unreachable-error","title":"ansible persistent \"unreachable error\"","text":""},{"location":"troobleshoot/#the-naming-context-specified-for-this-replication-operation-is-invalid","title":"The naming context specified for this replication operation is invalid","text":"
    TASK [groups_domains : synchronizes all domains] *******************************************************************************************************************************************************************************************************************************\nchanged: [dc03]\nchanged: [dc01]\nfatal: [dc02]: FAILED! => {\"changed\": true, \"cmd\": \"repadmin /syncall /Ade\", \"delta\": \"0:00:01.090773\", \"end\": \"2023-10-18 09:30:26.016579\", \"msg\": \"non-zero return code\", \"rc\": 1, \"start\": \"2023-10-18 09:30:24.925805\", \"stderr\": \"\", \"stderr_lines\": [], \"stdout\": \"Syncing all NC's held on winterfell.\\r\\r\\nSyncing partition: DC=north,DC=sevenkingdoms,DC=local\\r\\r\\nCALLBACK MESSAGE: Error contacting server CN=NTDS Settings,CN=WINTERFELL,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=sevenkingdoms,DC=local (network error): 1722 (0x6ba):\\r\\r\\n    The RPC server is unavailable.\\r\\r\\n\\r\\r\\nSyncAll exited with fatal Win32 error: 8440 (0x20f8):\\r\\r\\n    The naming context specified for this replication operation is invalid.\\r\\r\\n\", \"stdout_lines\": [\"Syncing all NC's held on winterfell.\", \"\", \"Syncing partition: DC=north,DC=sevenkingdoms,DC=local\", \"\", \"CALLBACK MESSAGE: Error contacting server CN=NTDS Settings,CN=WINTERFELL,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=sevenkingdoms,DC=local (network error): 1722 (0x6ba):\", \"\", \"    The RPC server is unavailable.\", \"\", \"\", \"\", \"SyncAll exited with fatal Win32 error: 8440 (0x20f8):\", \"\", \"    The naming context specified for this replication operation is invalid.\", \"\"]}\n
    "},{"location":"troobleshoot/#vagrant-up-vagrant-cant-use-the-requested-machine-because-it-is-locked","title":"vagrant up - Vagrant can't use the requested machine because it is locked","text":"
    ==> GOAD-SRV03: Configuring and enabling network interfaces...\nVagrant can't use the requested machine because it is locked! This\nmeans that another Vagrant process is currently reading or modifying\nthe machine. Please wait for that Vagrant process to end and try\nagain. Details about the machine are shown below:\n
    "},{"location":"troobleshoot/#the-server-has-rejected-the-client-credentials","title":"The server has rejected the client credentials","text":"
    An exception occurred during task execution. To see the full traceback, use -vvv. The error was:    at Microsoft.ActiveDirectory.Management.Commands.ADCmdletBase`1.BeginProcessing()\nfailed: [dc02] (item={'key': 'AcrossTheSea', 'value': ['essos.local\\\\daenerys.targaryen']}) => {\"ansible_loop_var\": \"item\", \"attempts\": 3, \"changed\": false, \"item\": {\"key\": \"AcrossTheSea\", \"value\": [\"essos.local\\\\daenerys.targaryen\"]}, \"msg\": \"Unhandled exception while executing module: The server has rejected the client credentials.\"}\n
    "},{"location":"troobleshoot/#groups-domain-error","title":"Groups domain error","text":"
    An exception occurred during task execution. To see the full traceback, use -vvv. The error was:    at Microsoft.ActiveDirectory.Management.Commands.ADCmdletBase`1.BeginProcessing()\nfailed: [192.168.56.xx] (item={'key': 'DragonsFriends', 'value': ['sevenkingdoms.local\\\\tyron.lannister', 'essos.local\\\\daenerys.targaryen']}) => {\"ansible_loop_var\": \"item\", \"attempts\": 3, \"changed\": false, \"item\": {\"key\": \"DragonsFriends\", \"value\": [\"north.sevenkingdoms.local\\\\jon.snow\", \"sevenkingdoms.local\\\\tyron.lannister\", \"essos.local\\\\daenerys.targaryen\"]}, \"msg\": \"Unhandled exception while executing module: Either the target name is incorrect or the server has rejected the client credentials.\"}\n
    "},{"location":"troobleshoot/#error-add-warning","title":"Error Add-Warning","text":"
    An exception occurred during task execution. To see the full traceback, use -vvv. The error was: at , : line 475\nfailed: [192.168.56.11] (item={'key': 'arya.stark', 'value': {'firstname': 'Arya', 'surname': 'Stark',\n...\n\"msg\": \"Unhandled exception while executing module: The term 'Add-Warning' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.\"}+\n
    "},{"location":"troobleshoot/#a-parameter-cannot-be-found-that-matches-parameter-name-acceptlicense","title":"A parameter cannot be found that matches parameter name 'AcceptLicense'","text":"
    fatal: [xxx]: FAILED! => {\n    \"changed\": false,\n    \"msg\": \"Problems installing XXXX module: A parameter cannot be found that matches parameter name 'AcceptLicense'.\",\n    \"nuget_changed\": false,\n    \"output\": \"\",\n    \"repository_changed\": false\n}\n
    "},{"location":"troobleshoot/#old-ansible-version","title":"old Ansible version","text":"
    ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.\n\nThe error appears to have been in '/home/hrrb0032/Documents/mission/GOAD/roles/domain_controller/tasks/main.yml': line 8, column 3, but maybe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n- name: disable enhanced exit codes\n^ here\n

    solution : upgrade Ansible

    "},{"location":"troobleshoot/#old-ansiblewindows-version","title":"old ansible.windows version","text":"
    ERROR! couldn't resolve module/action 'win_powershell'. This often indicates a misspelling, missing collection, or incorrect module path.\n
    "},{"location":"troobleshoot/#winrm","title":"winrm","text":"
    PLAY [DC01 - kingslanding] *******************************************************\n\n\n\nTASK [Gathering Facts] ***********************************************************\nfatal: [192.168.56.10]: FAILED! => {\"msg\": \"winrm or requests is not installed: No module named winrm\"}\n\n\n\nPLAY RECAP ***********************************************************************\n192.168.56.10              : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   \n

    solution : pip install pywinrm

    "},{"location":"troobleshoot/#winrm-send-input-timeout","title":"winrm send input timeout","text":"
    TASK [Gathering Facts] ****************************************************************************************************************************************************\n[WARNING]: ERROR DURING WINRM SEND INPUT - attempting to recover: WinRMOperationTimeoutError\nok: [192.168.56.11]\n

    solution : wait or if crashed then re-run install

    "},{"location":"troobleshoot/#domain-controller-ensure-users-are-present","title":"Domain controller : ensure Users are present","text":"

    TASK [domain_controller : Ensure that Users presents in ou=<kingdom>,dc=SEVENKINGDOMS,dc=local] ***************************************************************************\nAn exception occurred during task execution. To see the full traceback, use -vvv. The error was:    at Microsoft.ActiveDirectory.Management.Commands.ADCmdletBase`1.ProcessRecord()\nfailed: [192.168.56.10] (item={u'key': u'lord.varys', u'value': {u'city': u\"King's Landing\", u'password': u'_W1sper_$', u'name': u'Lord Varys', u'groups': u'Small Council', u'path': u'OU=Users,OU=Crownlands,OU=kingdoms,DC=SEVENKINGDOMS,DC=local'}}) => {\"ansible_loop_var\": \"item\", \"changed\": false, \"item\": {\"key\": \"lord.varys\", \"value\": {\"city\": \"King's Landing\", \"groups\": \"Small Council\", \"name\": \"Lord Varys\", \"password\": \"_W1sper_$\", \"path\": \"OU=Users,OU=Crownlands,OU=kingdoms,DC=SEVENKINGDOMS,DC=local\"}}, \"msg\": \"Unhandled exception while executing module: An unspecified error has occurred\"}\n
    solution : re-run install

    "},{"location":"troobleshoot/#mssql-unable-to-install-sql-server","title":"mssql : Unable to install SQL Server","text":"
    TASK [mssql : Install the database]\nfatal: [192.168.56.22]: FAILED! => {\"attempts\": 3, \"changed\": true, \"cmd\": \"c:\\\\setup\\\\mssql\\\\sql_installer.exe /configurationfile=c:\\\\setup\\\\mssql\\\\sql_conf.ini /IACCEPTSQLSERVERLICENSETERMS /MEDIAPATH=c:\\\\setup\\\\mssql\\\\media /QUIET /HIDEPROGRESSBAR\", \"delta\": \"0:00:34.891185\", \"end\": \"2022-08-17 21:26:53.976793\", \"msg\": \"non-zero return code\", \"rc\": 2226323458, \"start\": \"2022-08-17 21:26:19.085608\", \"stderr\": \"\", \"stderr_lines\": [], \"stdout\": \"Microsoft (R) SQL Server Installer\\r\\nCopyright (c) 2019 Microsoft.  All rights reserved.\\r\\n\\r\\nDownloading install package...\\r\\n\\r\\n\\r\\nOperation finished with result: Failure\\r\\n\\r\\nOops...\\r\\n\\r\\nUnable to install SQL Server (setup.exe).\\r\\n\\r\\n      Exit code (Decimal): -2068643838\\r\\n      Exit message: No features were installed during the setup execution. The requested features may already be installed. Please review the summary.txt log for further details.\\r\\n\\r\\n  SQL SERVER INSTALL LOG FOLDER\\r\\n      c:\\\\Program Files\\\\Microsoft SQL Server\\\\150\\\\Setup Bootstrap\\\\Log\\\\20220817_142624\\r\\n\\r\\n\", \"stdout_lines\": [\"Microsoft (R) SQL Server Installer\", \"Copyright (c) 2019 Microsoft.  All rights reserved.\", \"\", \"Downloading install package...\", \"\", \"\", \"Operation finished with result: Failure\", \"\", \"Oops...\", \"\", \"Unable to install SQL Server (setup.exe).\", \"\", \"      Exit code (Decimal): -2068643838\", \"      Exit message: No features were installed during the setup execution. The requested features may already be installed. Please review the summary.txt log for further details.\", \"\", \"  SQL SERVER INSTALL LOG FOLDER\", \"      c:\\\\Program Files\\\\Microsoft SQL Server\\\\150\\\\Setup Bootstrap\\\\Log\\\\20220817_142624\", \"\"]}\n

    solution : re-run installer

    "},{"location":"troobleshoot/#vagrant-not-working-on-ubuntu-2204","title":"vagrant: Not working on Ubuntu 22.04","text":"

    I was using the version of Vagrant in the Ubuntu repo, and then tried to use the version 2.4.0 and 2.3.4 binaries from hashicorp, but kept on running into this error:

    The guest machine entered an invalid state while waiting for it\nto boot. Valid states are 'starting, running'. The machine is in the\n'poweroff' state. Please verify everything is configured\nproperly and try again.\n\nIf the provider you're using has a GUI that comes with it,\nit is often helpful to open that and watch the machine, since the\nGUI often has more helpful error messages than Vagrant can retrieve.\nFor example, if you're using VirtualBox, run `vagrant up` while the\nVirtualBox GUI is open.\n\nThe primary issue for this error is that the provider you're using\nis not properly configured. This is very rarely a Vagrant issue.\n
    Solution : install vagrant from the hashicorp repo

    "},{"location":"troobleshoot/#proxmox-error-creating-vm-403-permission-check-failed-sdnzoneslocalnetworkvmbr310-sdnuse","title":"proxmox: error creating VM: 403 Permission check failed (/sdn/zones/localnetwork/vmbr3/10, SDN.Use)","text":"

    The error may look similar to below:

    ==> proxmox-iso.windows: Error creating VM: error creating VM: 403 Permission check failed (/sdn/zones/localnetwork/vmbr3/10, SDN.Use), \nerror status: {\"data\":null} (params: ......\n

    It may be fixed by delegating the SDN.Use privilege to the packer user

    pveum role modify Packer -privs \"VM.Config.Disk VM.Config.CPU VM.Config.Memory Datastore.AllocateTemplate Datastore.Audit Datastore.AllocateSpace Sys.Modify VM.Config.Options VM.Allocate VM.Audit VM.Console VM.Config.CDROM VM.Config.Cloudinit VM.Config.Network VM.PowerMgmt VM.Config.HWType VM.Monitor SDN.Use\"\n

    "},{"location":"troobleshoot/#proxmox-proxmox-isowindows-error-creating-vm-error-creating-vm-unable-to-create-vm-103-unsupported-format-qcow2","title":"proxmox: ==> proxmox-iso.windows: Error creating VM: error creating VM: unable to create VM 103 - unsupported format 'qcow2'","text":"

    The error may look similar to below:

    root@goadprovisioning:~/GOAD/packer/proxmox# packer build -var-file=windows_server2019_proxmox_cloudinit.pkvars.hcl .\nproxmox-iso.windows: output will be in this color.\n\n==> proxmox-iso.windows: Retrieving additional ISO\n==> proxmox-iso.windows: Trying ./iso/Autounattend_winserver2019_cloudinit.iso\n==> proxmox-iso.windows: Trying ./iso/Autounattend_winserver2019_cloudinit.iso?checksum=sha256%3A43857cb780de3a58696285f644034499d4b29608b3c511feb27e315832b696c4\n==> proxmox-iso.windows: ./iso/Autounattend_winserver2019_cloudinit.iso?checksum=sha256%3A43857cb780de3a58696285f644034499d4b29608b3c511feb27e315832b696c4 => /root/GOAD/packer/proxmox/iso/Autounattend_winserver2019_cloudinit.iso\n    proxmox-iso.windows: Uploaded ISO to local:iso/Autounattend_winserver2019_cloudinit.iso\n==> proxmox-iso.windows: Creating VM\n==> proxmox-iso.windows: No VM ID given, getting next free from Proxmox\n==> proxmox-iso.windows: Error creating VM: error creating VM: unable to create VM 103 - unsupported format 'qcow2' at /usr/share/perl5/PVE/Storage/LvmThinPlugin.pm line 87., error status:  (params: map[agent:1 args: boot: cores:2 cpu:kvm64 description:Packer ephemeral build VM hotplug: ide2:local:iso/windows_server_2019.iso,media=cdrom kvm:true machine: memory:4096 name:WinServer2019x64-cloudinit-qcow2 net0:virtio=5E:5D:24:C4:0F:DA,bridge=vmbr3,tag=10 numa:false onboot:false ostype:win10 pool:GOAD sata0:vms:40,discard=ignore,format=qcow2 scsihw:lsi sockets:1 startup: tags: vmid:103])......\n

    Filesystems such as ZFS (and others) do not support qcow2. From my reading the best approach is to use an ext4 filesystem and modify config.auto.pkrvars.hcl with the newly created ext4 volume.

    root@goadprovisioning:~/GOAD/packer/proxmox# vi config.auto.pkrvars.hcl\n...\nproxmox_vm_storage      = \"ext4-qcow2\"\n...\nroot@goadprovisioning:~/GOAD/packer/proxmox# packer build -var-file=windows_server2019_proxmox_cloudinit.pkvars.hcl .\nproxmox-iso.windows: output will be in this color.\n\n==> proxmox-iso.windows: Retrieving additional ISO\n==> proxmox-iso.windows: Trying ./iso/Autounattend_winserver2019_cloudinit.iso\n==> proxmox-iso.windows: Trying ./iso/Autounattend_winserver2019_cloudinit.iso?checksum=sha256%3A43857cb780de3a58696285f644034499d4b29608b3c511feb27e315832b696c4\n==> proxmox-iso.windows: ./iso/Autounattend_winserver2019_cloudinit.iso?checksum=sha256%3A43857cb780de3a58696285f644034499d4b29608b3c511feb27e315832b696c4 => /root/GOAD/packer/proxmox/iso/Autounattend_winserver2019_cloudinit.iso\n    proxmox-iso.windows: Uploaded ISO to local:iso/Autounattend_winserver2019_cloudinit.iso\n==> proxmox-iso.windows: Creating VM\n==> proxmox-iso.windows: No VM ID given, getting next free from Proxmox\n==> proxmox-iso.windows: Starting VM\n
    "},{"location":"troobleshoot/#proxmox-packer-error-creating-vm-volume-localisowindows_xxxiso-does-not-exist","title":"proxmox - packer error creating vm : volume 'local:iso/windows_XXX.iso' does not exist","text":"
    ==> proxmox-iso.windows: Error creating VM: error creating VM: unable to create VM 116 - volume 'local:iso/windows_server2019_XXX_en-us.iso' does not exist, error status:  (params: map[agent:1 args: boot: cores:2 cpu:kvm64 description:Packer ephemeral build VM hotplug\n: ide2:local:iso/windows_server2019_XXX_en-us.iso,media=cdrom kvm:true machine: memory:4096 name:WinServer2019x64-cloudinit-qcow2-uptodate net0:virtio=DA:CB:EB:85:08:0E,bridge=vmbr3,tag=10,firewall=false onboot:false ostype:win10 pool:Templates sata0:local:80,format=q\ncow2 scsihw:lsi sockets:1 startup: tags: vmid:116])   \n

    verify your iso files inside proxmox and be sure the iso you want to use exist in proxmox

    "},{"location":"troobleshoot/#ansible-adapter-name-error","title":"ansible adapter name error","text":"
    No MSFT_NetAdapter objects found with property 'Name' equal to 'Ethernet'\n\nor \n\nNo MSFT_NetAdapter objects found with property 'Name' equal to 'Ethernet2 '\n
    "},{"location":"troobleshoot/#unreachable-proxmox-ansible","title":"unreachable - proxmox, ansible","text":"
    fatal: [dc01]: UNREACHABLE! => {\"changed\": false, \"msg\": \"ssl: HTTPSConnectionPool(host='192.168.10.40', port=5986): Max retries exceeded with url: /wsman\n
    "},{"location":"vulnerabilities/","title":"Vulnerabilities","text":"

    vulnerabilities

    "},{"location":"developpers/provisioning/","title":"Provisioning","text":""},{"location":"developpers/provisioning/#provisioning","title":"Provisioning","text":""},{"location":"developpers/structure/","title":"Structure","text":""},{"location":"developpers/structure/#lab-organization","title":"Lab organization","text":"
    ad/\n  labname/            # The lab name must be the same as the variable : domain_name from the data/inventory\n    data/\n      config.json     # The json file containing all the variables and configuration of the lab\n      inventory       # The global lab inventory (provider independent) (this should no contains variables)\n    files/            # This folder contains files you want to copy on your vms\n    scripts/          # This folder contains ps1 scripts you want to play on your vm (Must be added in the \"scripts\" entries of your vms)\n    providers/        # Your lab available provider\n      vmware/\n        inventory     # specific vmware inventory\n        Vagrantfile   # specific vmware vagrantfile\n      virtualbox/\n        inventory     # specific virtualbox inventory\n        Vagrantfile   # specific virtualbox vagrantfile\n      proxmox/\n        terraform/    # specific proxmox terraform recipe\n        inventory     # specific proxmox inventory\n      azure/\n        terraform/    # specific azure terraform recipe\n        inventory     # specific azure inventory\n
    "},{"location":"extensions/","title":"Extensions","text":""},{"location":"extensions/elk/","title":"elk","text":"

    \ud83d\udea7 TODO rewrite and retest for v3

    "},{"location":"extensions/elk/#elk_1","title":"elk","text":""},{"location":"extensions/exchange/","title":"exchange","text":"

    Thanks!

    Credits and huge thanks to aleemladha for his exchange role and his help to test the extension.

    resources

    Exchange is really HUGE, it will add a vm with at least 12Gb of RAM be sure your computer support it before install

    impacts

    Modify the ad schema and add a computer (warning the exchange machine is really heavy)

    "},{"location":"extensions/exchange/#prerequisites","title":"Prerequisites","text":""},{"location":"extensions/exchange/#installation","title":"Installation","text":""},{"location":"extensions/wazuh/","title":"wazuh","text":"

    Thanks!

    Credits and huge thanks to aleemladha for the ansible role. https://github.com/Orange-Cyberdefense/GOAD/pull/215

    impacts

    add a wazuh machine and a wazuh agent on all windows machine\"

    "},{"location":"extensions/wazuh/#prerequisites","title":"Prerequisites","text":""},{"location":"extensions/wazuh/#installation","title":"Installation","text":""},{"location":"extensions/ws01/","title":"ws01","text":"

    \ud83d\udea7 TODO

    "},{"location":"installation/","title":"\ud83d\ude80 Installation","text":"

    In the last version, GOAD use no more bash for the installation/management script. The goad management script is now written in python to permit more flexibility and cover the needs to create a Windows WSL support.

    "},{"location":"installation/#tldr-quick-install","title":"TLDR - quick install","text":"TLDR : ubuntu 22.04 quick install
    # Install vbox\nsudo apt install virtualbox\n\n# Install vagrant\nwget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg\necho \"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\nsudo apt update && sudo apt install vagrant\n\n# Install Vagrant plugins\nvagrant plugin install vagrant-reload vagrant-vbguest winrm winrm-fs winrm-elevated\n\n# Add some dependencies\nsudo apt install sshpass lftp rsync openssh-client python3.10-venv\n\ngit clone https://github.com/Orange-Cyberdefense/GOAD.git\ncd GOAD\n# verify installation\n./goad.sh -t check -l GOAD -p virtualbox\n\n# install\n./goad.sh -t install -l GOAD -p virtualbox\n\n# launch goad in interactive mode\n./goad.sh\n
    "},{"location":"installation/#installation_1","title":"Installation","text":""},{"location":"installation/#configuration-files","title":"Configuration files","text":""},{"location":"installation/#homegoadgoadini","title":"$HOME/.goad/goad.ini","text":"
    [default]\n; lab: goad / goad-light / minilab / nha / sccm\nlab = GOAD\n; provider : virtualbox / vmware / aws / azure / proxmox\nprovider = vmware\n; provisioner method : local / remote\nprovisioner = local\n; ip_range (3 first ip digits)\nip_range = 192.168.56\n\n[aws]\naws_region = eu-west-3\naws_zone = eu-west-3c\n\n[azure]\naz_location = westeurope\n\n[proxmox]\npm_api_url = https://192.168.1.1:8006/api2/json\npm_user = infra_as_code@pve\npm_node = GOAD\npm_pool = GOAD\npm_full_clone = false\npm_storage = local\npm_vlan = 10\npm_network_bridge = vmbr3\npm_network_model = e1000\n\n[proxmox_templates_id]\nwinserver2019_x64 = 102\nwinserver2016_x64 = 103\nwinserver2019_x64_utd = 104\nwindows10_22h2_x64 = 105\n\n[ludus]\n; api key must not have % if you have a % in it, change it by a %%\nludus_api_key = change_me\nuse_impersonation = yes\n
    "},{"location":"installation/#global-configuration-globalsettingsini","title":"Global configuration : globalsettings.ini","text":""},{"location":"installation/linux/","title":"Linux","text":""},{"location":"installation/linux/#prepare-your-hypervisor","title":"Prepare your hypervisor","text":"Virtualbox Vmware workstation Azure Aws Proxmox\ud83c\udfdf\ufe0f Ludus

    Disk space

    The lab takes about 77GB (but you have to get the space for the vms vagrant images windows server 2016 (22GB) / windows server 2019 (14GB) / ubuntu 18.04 (502M)) The total space needed for the lab is ~115 GB (depend on the lab you use and it will take more space if you take snapshots), be sure you have enough disk space before install.

    RAM

    Depending on the lab you will need a lot of ram to run all the virtual machines. Be sure to have at least 20GB for GOAD-Light and 24GB for GOAD.

    Tip

    Vmware workstation is now free for personal use !

    Disk space

    The lab takes about 77GB (but you have to get the space for the vms vagrant images windows server 2016 (22GB) / windows server 2019 (14GB) / ubuntu 18.04 (502M)) The total space needed for the lab is ~115 GB (depend on the lab you use and it will take more space if you take snapshots), be sure you have enough disk space before install.

    RAM

    Depending on the lab you will need a lot of ram to run all the virtual machines. Be sure to have at least 20GB for GOAD-Light and 24GB for GOAD.

    git clone https://github.com/Orange-Cyberdefense/GOAD.git\ncd GOAD\nsudo apt install python3.11-venv\n./goad.sh\n...>exit\nvim ~/.goad/goad.ini # add the api_key in the config file (keep impersonate to yes and use an admin user)\n./goad.sh -p ludus\n...>set_lab XXX # GOAD/GOAD-Light/NHA/SCCM\n...>install\n
    "},{"location":"installation/linux/#prepare-your-python-environment","title":"Prepare your python environment","text":"
    sudo apt install python<version>-venv\n
    sudo apt install python3.10-venv\n

    Python version

    Be sure to use a python version between python3.8 and python 3.11. Others python versions are not supported by now due to incompatibility with the fixed version in the requirements.

    "},{"location":"installation/windows/","title":"Windows","text":"

    Info

    To use GOAD on windows you will need WSL.

    "},{"location":"installation/windows/#prepare-windows-host","title":"Prepare Windows Host","text":"Virtualbox Vmware Workstation Aws Azure Promox\ud83c\udfdf\ufe0f Ludus

    If you want to use virtualbox as an hypervisor to create your vm.

    Disk space

    The lab takes about 77GB (but you have to get the space for the vms vagrant images windows server 2016 (22GB) / windows server 2019 (14GB) / ubuntu 18.04 (502M)) The total space needed for the lab is ~115 GB (depend on the lab you use and it will take more space if you take snapshots), be sure you have enough disk space before install.

    RAM

    Depending on the lab you will need a lot of ram to run all the virtual machines. Be sure to have at least 20GB for GOAD-Light and 24GB for GOAD.

    If you want to use vmware workstation as an hypervisor to create your vm.

    Tip

    Vmware workstation is now free for personal use !

    Disk space

    The lab takes about 77GB (but you have to get the space for the vms vagrant images windows server 2016 (22GB) / windows server 2019 (14GB) / ubuntu 18.04 (502M)) The total space needed for the lab is ~115 GB (depend on the lab you use and it will take more space if you take snapshots), be sure you have enough disk space before install.

    RAM

    Depending on the lab you will need a lot of ram to run all the virtual machines. Be sure to have at least 20GB for GOAD-Light and 24GB for GOAD.

    Nothing to prepare on windows host, install and prepare wsl and next follow linux install from your wsl console : see aws linux install

    Nothing to prepare on windows host, install and prepare wsl and next linux install from your wsl console see azure linux install

    Not supported, you will have to create a provisioning machine on your proxmox and run goad from then (see proxmox linux install)

    Not supported, you will have to act from your ludus server (see ludus linux install)

    "},{"location":"installation/windows/#prepare-wsl-environment","title":"Prepare WSL environment","text":"

    Now your host environment is ready for virtual machine creation. Now we will install WSL to run the goad installation script.

    "},{"location":"installation/windows/#install-wsl","title":"Install WSL","text":""},{"location":"installation/windows/#prepare-wsl-distribution","title":"Prepare WSL distribution","text":"
    cd /mnt/c/whatever_folder_you_want\ngit clone https://github.com/Orange-Cyberdefense/GOAD.git\ncd GOAD\n./goad.sh\n
    "},{"location":"labs/","title":"Labs","text":""},{"location":"labs/GOAD-Light/","title":"GOAD-Light","text":"

    This is a light version of goad without the essos domain. This lab was build for computer with less performance (min ~20GB).

    Missing scenarios:

    "},{"location":"labs/GOAD-Light/#servers","title":"Servers","text":"

    This lab is actually composed of five virtual machines:

    domain : sevenkingdoms.local

    domain : north.sevenkingdoms.local

    "},{"location":"labs/GOAD-Light/#usersgroups-and-associated-vulnerabilitesscenarios","title":"Users/Groups and associated vulnerabilites/scenarios","text":"

    NORTH.SEVENKINGDOMS.LOCAL

    SEVENKINGDOMS.LOCAL

    "},{"location":"labs/GOAD-Light/#computers-users-and-group-permissions","title":"Computers Users and group permissions","text":""},{"location":"labs/GOAD/","title":"GOAD","text":"

    GOAD is the first and main lab of this project. It contains 3 domains and 2 forest.

    "},{"location":"labs/GOAD/#servers","title":"Servers","text":"

    This lab is actually composed of five virtual machines:

    domain sevenkingdoms.local

    domain north.sevenkingdoms.local

    domain essos.local

    "},{"location":"labs/GOAD/#writeup","title":"WRITEUP","text":""},{"location":"labs/GOAD/#computers-users-and-group-permissions","title":"Computers Users and group permissions","text":""},{"location":"labs/GOAD/#usersgroups-and-associated-scenarios","title":"Users/Groups and associated scenarios","text":"

    NORTH.SEVENKINGDOMS.LOCAL

    SEVENKINGDOMS.LOCAL

    ESSOS.LOCAL

    "},{"location":"labs/MINILAB/","title":"MINI lab","text":""},{"location":"labs/NHA/","title":"NINJA HACKER ACADEMY","text":"
    ./goad.sh -t install -l NHA -p virtualbox -m docker\n
    ./goad.sh -t disablevagrant -l NHA -p virtualbox -m docker\n
    ./goad.sh -t stop -l NHA -p virtualbox -m docker\n./goad.sh -t start -l NHA -p virtualbox -m docker\n

    And you are ready to play ! :)

    ./goad.sh -t enablevagrant -l NHA -p virtualbox -m docker\n

    Tip

    No bruteforce, if not in rockyou do not waste your time and your cpu/gpu cycle.

    "},{"location":"labs/SCCM/","title":"SCCM lab","text":"

    Thanks!

    Thanks a lot to my colleague Issam (@KenjiEndo15), who start the project and provide me a lot of ansible roles to start from !

    "},{"location":"labs/SCCM/#servers","title":"Servers","text":"

    4 virtual machines with Windows Server 2019

    All vms got defender activated

    "},{"location":"labs/SCCM/#prerequisites","title":"Prerequisites","text":""},{"location":"labs/SCCM/#writeup","title":"Writeup","text":""},{"location":"labs/SCCM/#proxmox-installation","title":"proxmox installation","text":"

    1) create a template with the windows_server2019_proxmox_cloudinit_uptodate.pkvars.hcl packer file (guide here: https://mayfly277.github.io/posts/GOAD-on-proxmox-part2-packer/) (note the id after the creation)

    2) create the variable file (ad/SCCM/providers/proxmox/terraform/variables.tf) by coping the template (ad/SCCM/providers/proxmox/terraform/variables.tf.template) and change the value according to your proxmox environnement

    3) on the provisioning computer :

    ./goad.sh -t check -l SCCM -p proxmox -m local\n./goad.sh -t install -l SCCM -p proxmox -m local\n

    4) if something goes wrong (restart of the vms during install, etc...), you can rerun only ansible with -a

    ./goad.sh -t install -l SCCM -p proxmox -m local -a\n

    "},{"location":"providers/","title":"\ud83c\udfd7 Providers","text":"

    The architecture is slightly different depending on the provider. Please consult the provider you use to understand the behavior.

    "},{"location":"providers/aws/","title":"Aws","text":"

    Thanks!

    Thx to @ArnC_CarN for the initial work on the aws provider

    The architecture is quite the same than the Azure deployment.

    Warning

    LLMNR, NBTNS and other poisoning network attacks will not work in aws environment. Only network coerce attacks will work.

    "},{"location":"providers/aws/#prerequisites","title":"Prerequisites","text":""},{"location":"providers/aws/#aws-configuration","title":"AWS configuration","text":"

    You need to configre AWS cli. Use a key with enough privileges on the tenant.

    aws configure\n
    "},{"location":"providers/aws/#goad-configuration","title":"Goad configuration","text":"
    # ~/.goad/goad.ini\n...\n[aws]\naws_region = eu-west-3\naws_zone = eu-west-3c\n
    "},{"location":"providers/aws/#installation","title":"Installation","text":"
    # check prerequisites\n./goad.sh -t check -l GOAD -p aws\n# Install\n./goad.sh -t install -l GOAD -p aws\n

    or from the interactive console :

    GOAD/aws/remote/192.168.56.X > install\n
    "},{"location":"providers/aws/#startstopstatus","title":"start/stop/status","text":""},{"location":"providers/aws/#vms-ami","title":"VMs ami","text":"
    \"dc01\" = {\n  name               = \"dc01\"\n  domain             = \"sevenkingdoms.local\"\n  windows_sku        = \"2019-Datacenter\"\n  ami                = \"ami-018ebfbd6b0a4c605\"\n  instance_type      = \"t2.medium\"\n  private_ip_address = \"{{ip_range}}.10\"\n  password           = \"8dCT-DJjgScp\"\n}\n
    "},{"location":"providers/aws/#how-it-works","title":"How it works ?","text":""},{"location":"providers/aws/#install-step-by-step","title":"Install step by step","text":"
    GOAD/aws/remote/192.168.56.X > create_empty # create empty instance\nGOAD/aws/remote/192.168.56.X > load <instance_id>\nGOAD/aws/remote/192.168.56.X (<instance_id>) > provide # play terraform\nGOAD/aws/remote/192.168.56.X (<instance_id>) > sync_source_jumpbox # sync jumpbox source\nGOAD/aws/remote/192.168.56.X (<instance_id>) > prepare_jumpbox # install dependencies on jumpbox\nGOAD/aws/remote/192.168.56.X (<instance_id>) > provision_lab # run ansible\n
    "},{"location":"providers/aws/#tips","title":"Tips","text":""},{"location":"providers/azure/","title":"Azure","text":"

    Thanks!

    Thx to Julien Arault for the initial work on the azure provider

    Warning

    LLMNR, NBTNS and other poisoning network attacks will not work in azure environment. Only network coerce attacks will work.

    "},{"location":"providers/azure/#prerequisites","title":"Prerequisites","text":""},{"location":"providers/azure/#azure-configuration","title":"Azure configuration","text":"

    You need to login to Azure with the CLI.

    az login\n
    "},{"location":"providers/azure/#goad-configuration","title":"Goad configuration","text":"
    # ~/.goad/goad.ini\n...\n[azure]\naz_location = westeurope\n
    "},{"location":"providers/azure/#installation","title":"Installation","text":"
    # check prerequisites\n./goad.sh -t check -l GOAD -p azure\n# Install\n./goad.sh -t install -l GOAD -p azure\n

    or from the interactive console :

    GOAD/azure/remote/192.168.56.X > install\n
    "},{"location":"providers/azure/#startstopstatus","title":"start/stop/status","text":"

    Info

    The command stop use deallocate, it take a long time to run but it is not only stopping the vms, it will deallocate them. By doing that, you will stop paying from them (but you still paying storage) and can save some money.

    "},{"location":"providers/azure/#vms-sku","title":"VMs sku","text":"
    \"dc01\" = {\n  name               = \"dc01\"\n  publisher          = \"MicrosoftWindowsServer\"\n  offer              = \"WindowsServer\"\n  windows_sku        = \"2019-Datacenter\"\n  windows_version    = \"17763.4377.230505\"\n  private_ip_address = \"{{ip_range}}.10\"\n  password           = \"8dCT-DJjgScp\"\n  size               = \"Standard_B2s\"\n}\n
    "},{"location":"providers/azure/#how-it-works","title":"How it works ?","text":""},{"location":"providers/azure/#install-step-by-step","title":"Install step by step","text":"
    GOAD/azure/remote/192.168.56.X > create_empty # create empty instance\nGOAD/azure/remote/192.168.56.X > load <instance_id>\nGOAD/azure/remote/192.168.56.X (<instance_id>) > provide # play terraform\nGOAD/azure/remote/192.168.56.X (<instance_id>) > sync_source_jumpbox # sync jumpbox source\nGOAD/azure/remote/192.168.56.X (<instance_id>) > prepare_jumpbox # install dependencies on jumpbox\nGOAD/azure/remote/192.168.56.X (<instance_id>) > provision_lab # run ansible\n
    "},{"location":"providers/azure/#tips","title":"Tips","text":""},{"location":"providers/ludus/","title":"\ud83c\udfdf\ufe0f Ludus","text":"

    Thanks!

    Huge shootout to @badsectorlabs for Ludus and Erik for his support and tests during the ludus provider creation

    Install on ludus server only

    To add GOAD on Ludus please use goad directly on the server. By now goad can work only directly on the server and not from a workstation client.

    git clone https://github.com/Orange-Cyberdefense/GOAD.git\ncd GOAD\nsudo apt install python3.11-venv\n./goad.sh\nexit\n
    "},{"location":"providers/ludus/#goad-configuration","title":"Goad configuration","text":"
    # ~/.goad/goad.ini\n...\n[ludus]\nludus_api_key = changeme\nuse_impersonation = yes\n
    "},{"location":"providers/ludus/#install","title":"Install","text":"
    ./goad.sh -p ludus\nGOAD/ludus/local > set_lab XXX # GOAD/GOAD-Light/NHA/SCCM\nGOAD/ludus/local > install\n

    Info

    On ludus the config ip_range is not used and is ignored. The ips will be setup automatically during the lab installation

    "},{"location":"providers/proxmox/","title":"Proxmox","text":""},{"location":"providers/proxmox/#prerequisites","title":"Prerequisites","text":""},{"location":"providers/proxmox/#installation","title":"Installation","text":"
    # check prerequisites\n./goad.sh -t check -l GOAD -p proxmox\n# Install\n./goad.sh -t install -l GOAD -p proxmox\n
    "},{"location":"providers/virtualbox/","title":"Virtualbox","text":""},{"location":"providers/virtualbox/#prerequisites","title":"Prerequisites","text":""},{"location":"providers/virtualbox/#check-dependencies","title":"Check dependencies","text":"
    ./goad.sh -p virtualbox\nGOAD/virtualbox/local/192.168.56.X > check\n

    Info

    If there is some missing dependencies goes to the installation chapter and follow the guide according to your os.

    Note

    check give mandatory dependencies in red and non mandatory in yellow (but you should be compliant with them too depending one your operating system)

    "},{"location":"providers/virtualbox/#install","title":"Install","text":"
    ./goad.sh -p virtualbox\nGOAD/virtualbox/local/192.168.56.X > set_lab <lab>  # here choose the lab you want (GOAD/GOAD-Light/NHA/SCCM)\nGOAD/virtualbox/local/192.168.56.X > set_ip_range <ip_range>  # here choose the  ip range you want to use ex: 192.168.56\nGOAD/virtualbox/local/192.168.56.X > install\n
    ./goad.sh -t install -p virtualbox -l <lab> -ip <ip_range_to_use>\n
    "},{"location":"providers/vmware/","title":"Vmware","text":"

    Quote

    \"Virtualbox c'est no way\" @mpgn

    "},{"location":"providers/vmware/#prerequisites","title":"Prerequisites","text":""},{"location":"providers/vmware/#check-dependencies","title":"check dependencies","text":"
    ./goad.sh -p vmware\nGOAD/vmware/local/192.168.56.X > check\n

    Info

    If there is some missing dependencies goes to the installation chapter and follow the guide according to your os.

    Note

    check give mandatory dependencies in red and non mandatory in yellow (but you should be compliant with them too depending one your operating system)

    "},{"location":"providers/vmware/#install","title":"Install","text":"
    ./goad.sh -p vmware\nGOAD/vmware/local/192.168.56.X > set_lab <lab>  # here choose the lab you want (GOAD/GOAD-Light/NHA/SCCM)\nGOAD/vmware/local/192.168.56.X > set_ip_range <ip_range>  # here choose the  ip range you want to use ex: 192.168.56 (only the first three digits)\nGOAD/vmware/local/192.168.56.X > install\n
    ./goad.sh -t install -p vmware -l <lab> -ip <ip_range_to_use>\n
    "},{"location":"usage/","title":"Usage","text":""},{"location":"usage/goad_args/","title":"Argument mode","text":"
    usage: goad.py [-h] [-t TASK] [-l LAB] [-p PROVIDER] [-ip IP_RANGE] [-m METHOD] [-i INSTANCE] [-e EXTENSIONS] [-a ANSIBLE_ONLY] [-r RUN_PLAYBOOK]\n\nDescription : goad lab management console.\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -t TASK, --task TASK  tasks available : (install/start/stop/restart/destroy/status/show)\n  -l LAB, --lab LAB     lab to use (default: GOAD)\n  -p PROVIDER, --provider PROVIDER\n                        provider to use (default: vmware)\n  -ip IP_RANGE, --ip_range IP_RANGE\n                        ip range to use (default: 192.168.56)\n  -m METHOD, --method METHOD\n                        deploy method to use (default: local)\n  -i INSTANCE, --instance INSTANCE\n                        use a specific instance (use default if not selected)\n  -e EXTENSIONS, --extensions EXTENSIONS\n                        extensions to use\n  -a ANSIBLE_ONLY, --ansible_only ANSIBLE_ONLY\n                        run only provisioning (ansible) on instance (-i) (for task install only)\n  -r RUN_PLAYBOOK, --run_playbook RUN_PLAYBOOK\n                        run only one ansible playbook on instance (-i) (for task install only)\n\nExample :\n - Install GOAD on virtualbox : python3 goad.py -t install -l GOAD -p virtualbox\n - Launch GOAD interactive console : python3 goad.py\n
    "},{"location":"usage/goad_console/","title":"GOAD interactive mode","text":"

    Launch goad interactive mode

    "},{"location":"usage/goad_console/#enter-interactive-mode","title":"Enter interactive mode","text":"

    To enter interactive mode just launch goad without the -t parameter

    ./goad.sh\n
    "},{"location":"usage/goad_console/#no-lab-instance-selected","title":"No lab instance selected","text":"
    *** Lab Instances ***\ncheck ................................... check dependencies before creation\ninstall / create ........................ install the selected lab and create a lab instance\ncreate_empty ............................ prepare a lab instance folder without providing and provisioning\nlist .................................... list lab instances\nload <instance_id> ...................... load a lab instance\n\n*** Configuration ***\nconfig .................................. show current configuration\nlabs .................................... show all labs and available providers\nset_lab <lab> ........................... set the lab to use\nset_provider <provider> ................. set the provider to use\nset_provisioning_method <method> ........ set the provisioning method\nset_ip_range <range> .................... set the 3 first digit of the ip to use (ex: 192.168.56)\n
    "},{"location":"usage/goad_console/#check","title":"check","text":"

    Will check the lab dependencies

    check\n

    "},{"location":"usage/goad_console/#install","title":"install","text":"

    Install the lab with the current select config

    install\n

    "},{"location":"usage/goad_console/#create_empty","title":"create_empty","text":"

    Create an empty instance folder (into the workspaces/ folder)

    create_empty\n

    "},{"location":"usage/goad_console/#list","title":"list","text":"

    List instances

    alias : ls

    list\n

    "},{"location":"usage/goad_console/#load","title":"load","text":"

    Select an instance by his name

    alias : use, cd

    load <instance name>\n

    "},{"location":"usage/goad_console/#config","title":"config","text":"

    show current configuration

    config\n

    "},{"location":"usage/goad_console/#labs","title":"labs","text":"

    show available labs

    labs\n

    "},{"location":"usage/goad_console/#set_lab","title":"set_lab","text":"

    Choose the lab to use (GOAD/GOAD-Light/NHA/SCCM/MINILAB)

    set_lab <lab_name>\n
    "},{"location":"usage/goad_console/#set_provider","title":"set_provider","text":"

    Choose the provider to use (virtualbox/vmware/aws/azure/ludus/proxmox)

    set_provider <lab_name>\n
    "},{"location":"usage/goad_console/#set_provisioning_method","title":"set_provisioning_method","text":"

    Choose the provisioning method (local/runner/docker/remote) (most of the time you don't have to change it)

    set_provisioning <provisioning_method>\n
    "},{"location":"usage/goad_console/#set_ip_range","title":"set_ip_range","text":"

    Set the ip range you want to use (Three first digit, example : 192.168.10)

    set_ip_range <ip_range>\n
    "},{"location":"usage/goad_console/#instance-selected","title":"Instance selected","text":"
    *** Manage Lab instance commands ***\nstatus .................................. show current status\nstart ................................... start lab\nstop .................................... stop lab\ndestroy ................................. destroy lab\n\n*** Manage one vm commands ***\nstart_vm <vm_name> ...................... start selected virtual machine\nstop_vm <vm_name> ....................... stop selected virtual machine\nrestart_vm <vm_name> .................... restart selected virtual machine\ndestroy_vm <vm_name> .................... destroy selected virtual machine\n\n*** Extensions ***\nlist_extensions ......................... list extensions\ninstall_extension <extension> ........... install extension (providing + provisioning)\nprovision_extension <extension> ......... provision extension (provisioning only)\n\n*** JumpBox ***\nprepare_jumpbox ......................... install package on the jumpbox for provisioning\nsync_source_jumpbox ..................... sync source of the jumpbox\nssh_jumpbox ............................. connect to jump box with ssh\nssh_jumpbox_proxy <proxy_port> .......... connect to jump box with ssh and start a socks proxy\n\n*** Providing (Vagrant/Terrafom) ***\nprovide ................................. run only the providing (vagrant/terraform)\n\n*** Provisioning (Ansible) ***\nprovision <playbook> .................... run specific ansible playbook\nprovision_lab ........................... run all the current lab ansible playbooks\nprovision_lab_from <playbook> ........... run all the current lab ansible playbooks from specific playbook to the end\n\n*** Lab Instances ***\ncheck ................................... check dependencies before creation\ninstall ................................. install the current instance (provide + prepare_jumpbox + provision_lab\nset_as_default .......................... set instance as default\nupdate_instance_files ................... update lab instance files\nlist .................................... list lab instances\nload <instance_id> ...................... load a lab instance\n\n*** Configuration ***\nconfig .................................. show current configuration\nunload .................................. unload current instance\ndelete .................................. delete the currently selected lab instance\n
    "},{"location":"usage/goad_console/#status","title":"status","text":"

    Give the current lab status

    status\n
    "},{"location":"usage/goad_console/#start","title":"start","text":"

    Start the current lab instance

    start\n
    "},{"location":"usage/goad_console/#stop","title":"stop","text":"

    Stop the current lab instance

    stop\n
    "},{"location":"usage/goad_console/#destroy","title":"destroy","text":"

    Danger

    Destroy the current lab instance vms

    destroy\n
    "},{"location":"usage/goad_console/#start_vm","title":"start_vm","text":"

    Start a vm

    start_vm <vm_name>\n
    "},{"location":"usage/goad_console/#stop_vm","title":"stop_vm","text":"

    Stop a vm

    stop_vm <vm_name>\n
    "},{"location":"usage/goad_console/#restart_vm","title":"restart_vm","text":"

    Restart a vm (start and stop)

    restart_vm <vm_name>\n
    "},{"location":"usage/goad_console/#destroy_vm","title":"destroy_vm","text":"

    Danger

    Destroy a vm

    destroy_vm <vm_name>\n
    "},{"location":"usage/goad_console/#list_extensions","title":"list_extensions","text":"

    List available extensions

    list_extensions\n
    "},{"location":"usage/goad_console/#install_extension","title":"install_extension","text":"

    Add an extension to the lab (providing + provisioning)

    Warning

    An installed extension can be deleted

    install_extension <extension_name>\n
    "},{"location":"usage/goad_console/#provision_extension","title":"provision_extension","text":"

    Launch provisioning (ansible) for the extension

    provision_extension <extension_name>\n
    "},{"location":"usage/goad_console/#prepare_jumpbox","title":"prepare_jumpbox","text":"

    Prepare jumpbox : run the preparation script on the jumpbox (install dependencies)

    prepare_jumpbox\n
    "},{"location":"usage/goad_console/#sync_source_jumpbox","title":"sync_source_jumpbox","text":"

    Rsync goad source with the jumpbox

    sync_source_jumpbox\n
    "},{"location":"usage/goad_console/#ssh_jumpbox","title":"ssh_jumpbox","text":"

    SSH into the jumpbox

    ssh_jumpbox\n
    "},{"location":"usage/goad_console/#ssh_jumpbox_proxy","title":"ssh_jumpbox_proxy","text":"

    SSH into the jumpbox with a socks proxy option (-D)

    ssh_jumpbox_proxy <socks_proxy_port>\n
    "},{"location":"usage/goad_console/#provide","title":"provide","text":"

    Launch providing (machine creation)

    provide\n
    "},{"location":"usage/goad_console/#provision","title":"provision","text":"

    Launch specific playbook (use playbook in ansible/ folder)

    provision <playbook.yml>\n
    "},{"location":"usage/goad_console/#provision_lab","title":"provision_lab","text":"

    Launch all the lab provisioning (install labs on machines with ansible)

    provision_lab\n
    "},{"location":"usage/goad_console/#provision_lab_from","title":"provision_lab_from","text":"

    Launch the lab provisioning from a specific playbook (use playbook in ansible/ folder)

    Tip

    useful if the install crash to not redo all the provisioning

    provision_lab_from <playbook.yml>\n
    "},{"location":"usage/goad_console/#check_1","title":"check","text":"

    Launch the check (same as without instance)

    check\n

    "},{"location":"usage/goad_console/#install_1","title":"install","text":"

    Launch the install (useful if you created an empty instance)

    install\n

    "},{"location":"usage/goad_console/#set_as_defualt","title":"set_as_defualt","text":"

    Set the current instance as default (automatically loaded on goad start)

    set_as_defualt\n

    "},{"location":"usage/goad_console/#update_instance_files","title":"update_instance_files","text":"

    Recreate the files inside the workspace folder

    update_instance_files\n

    "},{"location":"usage/goad_console/#list_1","title":"list","text":"

    List instances

    alias : ls

    list\n
    "},{"location":"usage/goad_console/#load_1","title":"load","text":"

    Select an instance by his name (here change the current instance)

    alias : use, cd

    load <instance name>\n
    "},{"location":"usage/goad_console/#config_1","title":"config","text":"

    Show current configuration

    config\n

    "},{"location":"usage/goad_console/#unload","title":"unload","text":"

    Unload the instance (alias cd ..)

    unload\n

    "},{"location":"usage/goad_console/#delete","title":"delete","text":"

    Danger

    delete the current instance lab and vms

    delete\n
    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Game Of Active Directory","text":"

    Welcome to GOAD (v3) documentation !

    Game Of Active Directory is a free pentest active directory LAB(s) project (1).

    1. GOAD is free if you use your own computer, obviously we will not pay your electricity bill and your cloud provider invoice ;)

    The purpose of this tool is to give pentesters a vulnerable Active directory environment ready to use to practice usual attack techniques. The idea behind this project is to give you an environment where you can try and train your pentest skills without having the pain to build all by yourself. This repository was build for pentest practice

    Note

    GOAD main labs (GOAD/GOAD-Light/SCCM) are not pro labs environments (like those you can find on HTB). Theses labs give you an environment to practice a lot of vulnerability and missconfig exploitations. Sure you can use them like pro labs, but it will certainly be too easy due to the number of vulns. Consider more GOAD like a DVWA but for Active Directory. If you want a chall deploy the lab NHA.

    Warning

    This lab is extremely vulnerable, do not reuse recipe to build your production environment and do not deploy this environment on internet without isolation (this is a recommendation, use it as your own risk).

    Windows Licenses

    This lab use free windows VM only (180 days). After that delay enter a license on each server or rebuild all the lab (may be it's time for an update ;))

    "},{"location":"changelog/","title":"Road Map","text":""},{"location":"changelog/#sccm","title":"SCCM","text":""},{"location":"changelog/#extensions","title":"Extensions","text":""},{"location":"instances/","title":"\ud83c\uddee instances","text":"

    When you create a lab, goad will create an instance folder. All the instances are stored in the workspace/ folder inside goad.

    workspace/\n    .\n    \u251c\u2500\u2500 6caf1a-goad-light-azure              # Instance ID\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 exchange_inventory               # extension inventory\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 instance.json                    # instance json file (name, status, etc..)\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 inventory                        # provider inventory\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 provider                         # provider folder\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 jumpbox.tf\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 linux.tf\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 main.tf\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 network.tf\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 outputs.tf\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 terraform.tfstate\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 terraform.tfstate.backup\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 variables.tf\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 windows.tf\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 ssh_keys                         # the keys generated by this instance\n    \u2502\u00a0\u00a0     \u2514\u2500\u2500 ubuntu-jumpbox.pem\n    \u251c\u2500\u2500 7b12f1-goad-light-vmware             # another instance\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 instance.json\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 inventory\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 inventory_disable_vagrant\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 provider\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 Vagrantfile\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 ssh_keys\n
    "},{"location":"instances/#instance-creation","title":"instance creation","text":"