Exécuter une commande du système
Programme 1 : Commande ls sans arguments
Le but ici est d'afficher le résultat de la commande système 'ls', SANS ARGUMENT
Le contenu du répertoire courant doit s'afficher
section .data
command db '/bin/ls', 0 ; Commande à exécuter avec un caractère nul à la fin
argv dq command, 0 ; Tableau d'arguments pour ls (seulement le nom du programme)
envp dq 0 ; Tableau d'environnement vide
section .text
global _start
_start:
; Exécuter '/usr/bin/ls' pour lister le contenu du répertoire courant
mov rax, 59 ; Le numéro de système pour sys_execve sur FreeBSD
lea rdi, [command] ; Le premier argument de sys_execve, le chemin du programme
lea rsi, [argv] ; Le deuxième argument, le tableau d'arguments
lea rdx, [envp] ; Le troisième argument, le tableau d'environnement
syscall ; Appeler le système
; Terminer le programme proprement si jamais sys_execve échoue
mov rax, 1 ; Le numéro de système pour sys_exit sur FreeBSD
xor rdi, rdi ; Code de sortie 0
syscall ; Appeler le système
Assembler
nasm -f elf64 ls.asm -o ls.o
Linker
ld ls.o -o ls
Lancer le programme
./ls
Programme 2 : Commande echo avec redirection
A présent, nous allons exécuter une autre commande, AVEC ARGUMENTS cette fois.
Le but ici est d'exécuter une commande avec redirection : echo 'coucou' > /tmp/test.txt
section .data
command db '/bin/sh', 0 ; Utiliser le shell pour exécuter la commande
arg1 db '-c', 0 ; Argument pour exécuter une commande
arg2 db 'echo ''coucou'' > /tmp/test', 0 ; Commande à exécuter
argv dq command, arg1, arg2, 0 ; Tableau d'arguments pour execve
envp dq 0 ; Tableau d'environnement vide
section .text
global _start
_start:
; Exécuter 'echo 'coucou' > /tmp/test' via /bin/sh
mov rax, 59 ; Numéro de l'appel système pour sys_execve sous FreeBSD
lea rdi, [command] ; Premier argument pour sys_execve, le chemin du programme
lea rsi, [argv] ; Deuxième argument, le tableau d'arguments
lea rdx, [envp] ; Troisième argument, le tableau d'environnement
syscall ; Appeler le système
; Terminer le programme avec grâce si sys_execve échoue
mov rax, 1 ; Numéro de l'appel système pour sys_exit sous FreeBSD
xor rdi, rdi ; Code de sortie 0
syscall ; Appeler le système
Assembler
nasm -f elf64 echo.asm -o echo.o
Linker
ld echo.o -o echo
Lancer le programme
./echo
Programme 3 : Test de connexion internet avec fetch
A présent, nous allons exécuter une autre commande, AVEC ARGUMENTS cette fois.
Le but est de tester la connexion internet en utilisant la commande système fetch.
Le programme doit exécuter la commande 'fetch -q https://www.freebsd.org'
section .data
command db '/usr/bin/fetch', 0 ; Command to be executed
arg1 db '-q', 0 ; First argument
arg2 db 'https://www.freebsd.org', 0 ; Second argument
argv dq command, arg1, arg2, 0 ; Argument array for fetch
envp dq 0 ; Empty environment array
section .text
global _start
_start:
; Execute 'fetch -q https://www.freebsd.org'
mov rax, 59 ; System call number for sys_execve on FreeBSD
lea rdi, [command] ; First argument for sys_execve, the program path
lea rsi, [argv] ; Second argument, the argument array
lea rdx, [envp] ; Third argument, the environment array
syscall ; Call the system
; Terminate the program gracefully if sys_execve fails
mov rax, 1 ; System call number for sys_exit on FreeBSD
xor rdi, rdi ; Exit code 0
syscall ; Call the system
Assembler
nasm -f elf64 fetch.asm -o fetch.o
Linker
ld fetch.o -o fetch
Lancer le programme
./fetch
Programme 4 : Changement de mot de passe utilisateur
A présent, nous allons changer le mot de passe de l'utilisateur marcel3.
Ce n'est évidemment pas une bonne pratique !! C'est juste pour l'exemple de l'utilisation de commandes système.
section .data
command db '/bin/sh', 0
arg1 db '-c', 0
; Construire la commande complète ici
arg2 db 'echo ''motdepasse'' | pw usermod marcel3 -h 0', 0
argv dq command, arg1, arg2, 0
envp dq 0
section .text
global _start
_start:
; Exécuter la commande via /bin/sh
mov rax, 59 ; Numéro de l'appel système pour sys_execve sous FreeBSD
lea rdi, [command] ; Premier argument pour sys_execve, le chemin du programme
lea rsi, [argv] ; Deuxième argument, le tableau d'arguments
lea rdx, [envp] ; Troisième argument, le tableau d'environnement
syscall ; Appeler le système
; Terminer le programme avec grâce si sys_execve échoue
mov rax, 1 ; Numéro de l'appel système pour sys_exit sous FreeBSD
xor rdi, rdi ; Code de sortie 0
syscall ; Appeler le système
Assembler
nasm -f elf64 pass.asm -o pass.o
Linker
ld pass.o -o pass
Lancer le programme
./pass
↑ Haut de page