Building an Active Directory Pentesting Home Lab in VirtualBox
Tags: cybersecurity, tutorial, windows
Published: 2022-03-04 01:39:38

Active Directory is often one of the largest attack services in Enterprise settings. In fact, the [OSCP Exam was recently updated](https://www.offensive-security.com/offsec/oscp-exam-structure/) to have less emphasis on buffer overflows but added a section dedicated to Active Directory.  

AD can be confusing at first to learn, but one of the best ways to learn anything in software, is by installing and setting it up ourselves.

## Downloading Windows Server 2019

Find the [Windows Server 2019 download](https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2019) from the Microsoft Evaluation Center. Scroll down to the option "Windows Server 2019", and select the ISO download option, which Microsoft is apparently labeling as "Please select your experience:"

![Windows Evaluation Center Downloads](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nt7ojsgyhomv3pjcjta3.jpg)

Before the download will start, you'll be prompted to fill out some personal information. It asks for a work email, but a personal email (ie gmail, etc) should work fine too. Finally select your language, then start the download.  

After clicking download, you should see the file pop up in your downloads bar, and the webpage will update to reflect the file name of the Windows Server 2019 Eval version you're downloading.

![Download Starting](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/26yad9povzymmzlloy04.jpg)

## Installing Windows Server 2019 in VirtualBox  
In VirtualBox, start by clicking the New VM button, the blue spikey looking thing. In the VM Options pop-up, for `Name` type in "Windows Server 2019", for `Machine Folder` select a folder on your host computer where you want to store your VM files. Select "Microsoft Windows" for `Type`, and for `Version` select "Windows 2019 (64-bit)". Then click "Continue".  

![New VirtualBox Machine](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2zf2p475usfd1rnygf4.jpg)

In the next options panel, "Memory size", you can leave the default at 2048MB, aka 2GB, which is the minimum required memory amount for Windows Server 2019, or. But if you have the host RAM to spare, bumping up the VM memory to 4096MB or a little more is reccommended.  

![VirtualBox memory size](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xscjiw1w37b3yo1o66ri.jpg)

(For our pentesting lab, these small values are fine, obviously though in a production setting you'd need significantly more RAM to run smoothly)

For the "Hard disk" panel, select "Create a virtual hard disk now", then select "VDI (VirtualBox Disk Image)" and hit Continue. For "Storage on physical hard disk" I'm selecting the "Dynamically allocated" option.  

The "File location and size" should default to a new folder with your VM name from earlier, in the directory you also specified in the earlier step. I'd reccommend leaving this default so that all the VM files are contained in a single location. I'm leaving my VDI size at 50.00GB.  

![Create new Hard Disk](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3521fz3f5q18znmx2x16.jpg)

![Select Hard Disk Type](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6jnaugijjbnm95zy023y.jpg)

After clicking through that, our new VM should appear in the left-hand sidebar, I have a few other VM's already installed which is why my machine appears further down on the list.  

![New VM Created Successfully](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2hvg1l8t7k8i4jup9v28.jpg)

Now that we have a VM created, we still need to install Windows Server 2019 onto our Virtual Machine. With the new VM highlighted (the background color should be a light blue) click the settings button.

In the new pop-up, select "Storage", then under the "Storage Devices" window, click the empty disc icon. On the right-hand windows "Attributes", click the blue disk icon, click "Choose a disk file", then find the Windows Server 2019 .iso file we downloaded earlier. The filename will probably be the same or similar to: `17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso`. If the iso is loaded up correctly, you should see the "Empty" next to the disk icon change to the .iso file name. Click "OK" to save changes and close the pop-up. 

![Add iso file to our VM](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8lp2znpkd9g870hnc88h.jpg)

In VirtualBox, the steps that we just took are equivalent to inserting an install CD (or in this day and age, an install USB). So now we'll need to turn on the VM so we can actually install Windows Server from that .iso.  

With the new VM still highlighted, click the green "Start" arrow. A new window should pop-up on your host machine. This is our Server 2019 VM. After it finishes initially booting up, you'll see the Windows Server 2019 installation prompt. 

![Installing Windows Server 2019](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/64hwadgqbf0stps0h7yu.jpg)

Leave the default settings as-is, and click next. You should see a new tab with a single "Install Now" button. Click that, and on the "Windows Setup" tab that appears, You should see 4 different versions of Server 2019. The option that we want is "Windows Server 2019 Standard Evaluation (Desktop Experience)".

It's important to select the "**Desktop Experience**" version of Server 2019, this is the version of Windows Server that has a GUI similar to a standard Windows 10 install. In prior versions of Windows Server, you were able to install a GUI after initial installation, but that is no longer the case, so let's make sure we're installing the GUI version from the start.  

After selecting the correct version, you'll need to accept Windows License terms. Then select the "custom install" version, since this is a fresh machine and we're not upgrading from any previous versions. Our VirtualBox VDI should appear in the Windows Install tab as "Drive 0 Unallocated Space", it should be selected by default, so click the Next button.  

This will start the actual installation of Windows Server 2019 Desktop Experience. Like the download step from earlier, this process will take a little bit of time to run, so let Windows do it's thing through the install process. You'll probably notice that the Virtual Machine restarts a couple times through the install. This is normal.  

## Initial Login & Setup

Once the install is finished, you'll need to supply a few more configuration settings to complete setting up your Windows Server VM. The built-in administrator username is pre-selected as "Administrator", for a password, I'm using `P@ssw0rd!`, not very secure, but it'll work for a small-scale home lab.  

Additionally, back in the VirtualBox manager, you can save the Administrator password for this machine by clicking "Settings", in the "General" tab, select "Description" then add some notes with our machine credentials.  

![VirtualBox VM Description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2586wipr46cbezw3xmrp.jpg)

Once you've entered and saved our Administrator password, Windows should finish applying those new settings, and then open up a to a standard lock screen which should look familiar to you if you've used Windows 10 before.  

To login to our Windows Server VM, we'll need to hit "Ctrl + Alt + Delete". I work on both macOS and Windows Hosts, and trying to figure out the equivalent keys between various hosts can be a pain. Fortunately, VirtualBox has a nice built-in feature that allows us to input "Ctrl + Alt + Delete".  

On a macOS host, make sure you have your Windows Server 2019 VM selected, then in the upper menu bar, select "Input", hover over the "Keyboard" option, then click "Insert Ctrl-Alt-Delete". That dropdown will also show you what the keyboard shortcut on your host is to enter that without having the select the menu bar option.  

Once that's entered, you should be able to type in our Administrator password, `P@ssw0rd!` and login. 

![Windows Server Lock Screen](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2det6ukd0doel680hdjq.jpg)

On initial login, I got an automatic prompt asking if I wanted to turn on "Network Discovery", I went ahead and turned that on.  

___
**Side Note:** To the best of my knowledge, enabling "Network Discovery" doesn't affect ICMP settings. Ie, if you were to try to ping your Server 2019 VM from another host in your VirtualBox network right now, it wouldn't work. That's skipping ahead a couple steps though, so don't worry too much about it right now if that doesn't make sense to you.
___

You'll also most likely see that the "Server Manager" program starts up by default. The astute readers among you might have noticed a _tiny_ bright Orange "1" followed by a large heading labeled "Configure this local server". I think that means Windows wants us to click on it.  

![Windows Server Manager](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ie6efa9q49sbhhwmoio0.jpg)

Clicking on that link takes us to the "Local Server" configuration page, which can also be access via the left-hand sidebar.  

There's two main settings to take note of at the moment, the first is our `Computer Name`: "WIN-K3SDKO5BM8I", the second is the name of our `Workgroup`: "WORKGROUP".  

![Server Manager Local Server](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gkxmgsd9h1etotpd9pql.jpg)

I won't go into too much detail about the differences between a `Workgroup` and a `Domain` but one of the key differences for our use case is that in a `Workgroup`, user accounts are managed by *individual computers*, whereas in a domain user accounts are managed *by a central server or servers*, called *domain controllers*.  

You might also hear it explained that in a `Workgroup`, all the various computers in that `Workgroup` are essentially peers, and no one single computer has elevated or admin credentials above the others in that `Workgroup`. `Domains`, conversely, have that central `domain controller` as the top-level administrative component, and as such have admin rights over the various user accounts within the `Domain`.  

Active Directory Domains is what you're more likely to see in larger scale, or Enterprise environments, and that's what we're trying to set up (albeit on a smaller scale) for our local pen-testing environment.  

With that explanation out of the way, let's go ahead and get started on our AD setup.

## Installing Active Directory  

To start, let's rename our Windows Server 2019 `Computer Name` to something reflective of the fact that this will become our Domain Controller. Click the light-blue computer name, then in the "System Properties" pop-up, select the "Change..." button down next to the "To rename this computer...." text.  

I'm renaming my computer the very creative name, ADAMDC. Adam, for my name, and DC to reference the fact that this is our domain controller.

![Renaming our Server](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/phygt78u93oxtiutqb70.jpg)

![Renaming our Server](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pci885p9mmho8pzbv76z.jpg)

Hit "OK" and after a few seconds that should update. You'll also see a pop-up stating that you'll have to restart in order for our name change to take effect. Hit "apply" in the "System Properties" window to save the changes. But choose the "restart later" option, to delay the automatic restart. 

We still need to setup some VirtualBox networking options, something we can't do while our VM is running, so this is a good opportunity to shutdown our VM.  

Click the "Windows" button in the bottom left-hand screen, then the power button icon and select "Shut down". This should be very familiar if you're used to working with Windows 10. What might not be familiar is the next pop-up, selecting a reason for shutting down.  

![Shutdown](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y3uo1ukxg2emojny5hji.jpg)

In our case, we'll just select "Other (Planned)" as the reason every time we shutdown our Windows Server VM. This isn't a production server, so it's not really important or even necessary to log reasons for shutdown.  

![Mr. Resetti but Windows](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xkfpsdqpc8ci4brcl0uo.jpg)

If you do shutdown without go through that process (ie you just close your virtual machine window) you'll get a mildly annoying pop-up the next time you turn on the vm. It's kinda like Microsoft's version of [Mr. Resetti](https://animalcrossing.fandom.com/wiki/Resetti).

Once that completes shutting down, click back into your "VirtualBox Manager".

### Installing Active Directory - VBox Network Configuration

We haven't look too much into our actual VirtualBox setup so far, other than what was absolutely needed to get our Windows Installation up and running. Now though, we're going to want to make sure we have our networking options setup and configured correctly before we move onto to actually installing Active Directory.  

VirtualBox has a couple different types of virtual networking options, but the one we're going to focus on is a "Host-Only" adapter. TODO MORE INFO

First, ensure that you have a network setup in VirtualBox. 

Click "Tools" and then the hamburger menu looking thing to the right of it. You should see 4 options pop-up, "Welcome", "Media", "Network", "Cloud". Network is the option we want so click on that. 

If you don't already have a network click the "Create" button to make a new one, otherwise click properties to edit your existing one. Make sure the "DHCP Server" option is disable, and also select "Configure Adapter Manually"

Give your adapter the settings of:  
IPv4 Address: `192.168.56.1`  
IPv4 Network Mask: `255.255.255.0`  

![VirtualBox Network](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kipdkk5c7hbouaao65fc.jpg)

Still in VirtualBox Manager, select your Windows Server VM again, and select the options for that VM.

In the Options pop-up, choose the "Network" tab, I have a NAT adapter in the Adapter 1 slot, so in Adapter 2 I've checked "Enable Network Adapter", set the Attached to: value as "Host-only Adapter", and for Name:, that's the name of the network we just created, I've selected my VBox network.

![VirtualBox Host-only Adapter](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bxh728g5vykmhz6usfmq.jpg)

Save those settings, and it's time to start up our Windows Server VM Again. Click the green start arrow. Then login with our administrator credentials.  

When you login, Server Manager should pop-up automatically again. Confirm that our computer rename from earlier successfully completed, then minimize Server Manager, and open up Command Prompt.

![Renaming our Server Worked](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nb5zd248ow2cvvhuxj59.jpg)

In command prompt, type the following:

```cmd
ipconfig
```

You should see an output with two network adapters listed (Virtualbox treats these as Ethernet connections). The first Network should be your NAT. That's how your VM gets external internet access. The second adapater should be the host only adapter we just setup, so you should notice that the IP will be in the range of the subnet that we specified when setting up the network a few moments ago.  

![Running ipconfig](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0n3xa7fzzyhlvhg1f4yp.jpg)

Now we need to manually assign our Windows Server Computer a static IP for our host-only network. Open up Control Panel, then select "Network and Internet", then "Network Sharing Center". You should once again see our two networks listed.

![Network and Sharing Center](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2kwwrpqku7lo5tfsx8oj.jpg)

Click the host-only network Ethernet (should most likely be Ethernet2), then select "Properties", then in the properties pop-up select the "Internet Protocol Version 4 (TCP/IPv4)" so that it is highlighted. Then click properties for IPv4.  

![Manually selecting IPv4](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2csvktbg5peqe24pq1xh.jpg)

A new window should popup, and "Obtain an IP address automatically" is most likely pre-selected. Choose "Use the following IP address:"

IP Address: `192.168.56.2`   
Subnet mask: `255.255.255.0`  
Default gateway: `192.168.56.1`  

Preferred DNS server: `192.168.56.2`

![Set IP and DNS](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yfamlwrcyu8ub73hokkd.jpg)

With those settings inputted, click through the various "OK" buttons to apply the changes.

Back in command prompt type `cls` to clear out previous ipconfig command. Then, re-run ipconfig.  

![New IP who dis?](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c4lr47ysio27gqj3czls.jpg)
<small style="text-align: center">New IP, who dis?</small>

With all that setup out of the way, we now have a local network (the host-only network) that our VirtualMachines can use to talk to each other. We also assigned our server a static IP in that network which is recommended before setting up Active Directory. Finally, we pointed the preferred DNS server to our Windows Server Machine. We'll install a DNS server later to handle DNS for our AD Domain.  

## Installing Active Directory - Back to Windows Server
___

So, we now have our domain ***controller*** ready (not *entirely* true but we'll fix that shortly), but we still need a ***domain*** for it to be in control of.  

Return to the Server Manager Dashboard, and this time, select option 2 from the middle list. It's the "Add Roles and Features" link. The "Add Roles and Features Wizard" should pop up.

Click "Next >" on the "Before You Begin" page, then on "Installation Type" ensure the first option "Role-based or feature-based installation" is still selected and click "Next >"  

![Role Based Install](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dazhobzqlrt3t506u58o.jpg)

On the "Select destination server" page, you should see our Windows Server 2019 Machine, named `ADAMDC`, in the Server Pool list, and click next.

![Server List](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vakno0kwyls8tv2w4vo3.jpg)

In the "Server Roles" you'll want to check the "Active Directory Domain Services" box. (This is the whole thing we've been working towards). 

![Server Roles AD DS](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xezf7pbze2xriayzrhwo.jpg)

When you click that box, a new pop-up will appear confirming that you want to add the additional required services for AD. 

We do. Click "Add Features".

![Server Roles](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cwq2bbpxzydoyu2sq1dg.jpg)

Click "Next" through the "Features" page.  

That'll bring you to the Active Directory Domain Services information page. Give it a quick read, then click "Next >" 

![Active Directory Domain Services](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/irq3nio5904ix3afp78s.jpg)

This is it, the confirmation page. As Uncle Ben said, "With great power comes great responsibility." When you're ready, click "Install".  

![Ready to Install](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qaj4wp2xzzzoobgj3w9z.jpg)

The installation will start and run for a little, you can close out of the installer window if you want, but since we're already in a VM you can also just open up a different window on your host to watch youtube while we wait.

After the installation completes, we still have a little more work to do. Remember earlier when I said we had our "domain controller" ready? Well, I might've lied a little bit, back then it was still just a lowly server. But I think our server has performed admirably so far, and is worthy of a promotion.

Click the "Promote this server to a domain controller" link. If you closed out of the installation wizard, you can also find this link back in Server Manager.  

![Promotion](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/889tg84xaxmmf1lm4248.jpg)
![Promotion](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/swfk988st8rzzy1uy4wz.png)

That will pull up the "Active Directory Domain Service Deployment Configuration Wizard" Select "Add a new forest" radio button, and I'm using the Root domain name: `adamdomain.com`. Which for the record, is a domain I do not own. This isn't something you'd want to do in a real-world install, but since this is just for our home lab I think it'll be fine.  

![AD DS Configuration](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/szmgz4bffunmxva3kiwu.jpg)

Leave Forest & Domain functional level at "Windows Server 2016", and add a (DSRM) password, I'm going to use `P@ssw0rd!` again since this isn't a real AD install. Then go to the next page.

![Forest Configuration](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gv3f1ybtdnrwaifz9ywj.jpg)

On DNS Options, uncheck "Create DNS delegation" and click "Next". 

![DNS delegation](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vu14ochldpm2xih2woii.jpg)

Wait for the NetBIOS domain name to automatically detect your domain name then click "Next".

Click "Next" again on the Paths page to accept the defaults.  

![Path Defaults](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yisa4lwbnidawc4zjpdj.jpg)

On the "Review Options" page, there isn't much for us to do, click "Next" and the Configuration Wizard will run a check script to ensure the Active Directory install can complete successfully on your machine.  

On mine, I got a warning about weak cryptography algorithms and a warning about our first network adapter (the VirtualBox NAT) not having a static IP.

![Review Options 2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2xtf0uun9bsyux6jn6sg.jpg)

We can ignore those and click "Install". This will initiate the rest of the Active Directory installation process. This process might take a while to complete, and like some of the previous stages, will lock out and reset while it runs.  

Once the server finishes install AD and resets, you'll see the lock screen again. Enter "Ctrl + Alt + Delete", but this time, you should notice the login page looks different than before.  

This is part of the change from our Server being in a WORKGRUP into a Domain. Log in with our adminstrator credentials, those are still valid. Then when "Server Manager" starts up again, click "Local Server". It will take a couple moments for the information on the Local Server panel to update. but you should see that it now reflects our AD install.  

![It worked](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/32caqumaz2ft0pwwgydr.jpg)

With that done, we now have Active Directory installed, we don't have any other users, or other computers connected to our Domain yet, but we can do those things in another write-up.  

One other thing that I noticed and found interesting through the install is that after the install was finished ICMP was enabled when prior to that it was not. If you had tried to ping our Windows Server Prior to the AD installation, you would've gotten "Destination Host Unreachable".

Here's a ping from kali to our Windows Server post-install:
![Kali Ping](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ts3vyclcvgvlwz6cto37.jpg)

It's easy enough to configure Windows Server to [enable ICMP pings](https://kb.iu.edu/d/aopy), but I always thought it was counter-intuitive (although probably a sensible default for security reasons) that it was blocked by default.  

Nmap still seems to have issues running a ping against our windows host though, a default scan returns "Host Seems Down", but adding the `-Pn` flag does show that our Windows AD Server is up and running, here's the results of a standard `nmap -sC -sV -Pn` scan from Kali.

```zsh
┌──(kali㉿kali)-[~]
└─$ nmap -sC -sV 192.168.56.2 -Pn
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-03 16:39 EST
Nmap scan report for 192.168.56.2
Host is up (0.00074s latency).
Not shown: 989 filtered tcp ports (no-response)
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2022-03-03 21:40:22Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: adamdomain.com0., Site: Default-First-Site-Name)
445/tcp  open  microsoft-ds?
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  tcpwrapped
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: adamdomain.com0., Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
Service Info: Host: ADAMDC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_nbstat: NetBIOS name: ADAMDC, NetBIOS user: <unknown>, NetBIOS MAC: 08:00:27:a9:d5:db (Oracle VirtualBox virtual NIC)
| smb2-security-mode: 
|   3.1.1: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2022-03-03T21:40:23
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 64.26 seconds
                                                               
```