---
# System prepended metadata

title: TATT - 1
tags: [TATT, ' moemoea.fierin']

---

---
title: TATT - 1
tags: TATT, moemoea.fierin
---

[TOC]

cours: https://tatt.abcdefgh.xyz/srs/tatt.pdf

# Mise en garde
C'est cher et chiant d'utiliser ca sur d'autre machine que la sienne (niveau legalité)

Code penal:
- 323.1
- 323.3
- ...

# Plan du cours
- bases
- reverse eng
- exploit logi
- buffer overflow 
- autre exploit logi
- automatisation

# Notation
Exercices à rendre a la fin de certains TP
Point precis de notation

# Bases 
## Pré-requis Linux

### Noyau
**Notes:** gestion de mem, proc, matos, etc...
Le noyau Linux est responsable de la gestion de la mémoire, des processus, du matériel, etc

**Notes:**
- appel systeme (open, read, write, nmap, ...)
- appel sys privilegiés 
Les droits qui font que c'est privil sont découpés en "capabilities".

Certains appels système sont privilégiés : ils ne peuvent être appelés que par des processus ayant suffisamment de privilèges (capability). Un processus tournant en **root** dispose par défaut de tous les privilèges. 
Les appels système privilégiés permettent par exemple de modifier la configuration
des interfaces réseau, de gérer les identifiants des utilisateurs, de créer des fichiers représentant les périphériques ou d’effectuer des actions sensibles sur le système.

La liste des appels système et leur numéro est présente dans le fichier unistd_32.h


**Exercice Numéros d’appels système**
> :small_red_triangle_down: Déterminer l’emplacement du fichier unistd_32.h (/usr/include/i386-linux-gnu/asm)
> :small_red_triangle_down:  le numéro des appels système execve, read, dup2 et socketcall. (voir fichier unistd_32.h)
:small_red_triangle_down: Quel appel système permet de lire le contenu d’un répertoire ?


### Programme vs process
**vs**
program un fichier exec
processus fichier instancier

**Format**
Le format des fichiers exécutables sous Linux s'appelle PE
Le format des fichiers exécutables sous UNIX s’appelle ELF (executable and linkable format). 
Ce format définit plusieurs types de sections, notamment :
— .bss : données non initialisées (uniquement une taille)
— .data : données initialisées
— .rodata : données en lecture seule
— .got : table de pointeurs
— .plt : table des fonctions des bibliothèques dynamiques
— .symtab : table des symboles
— .init : instructions à exécuter à l’initialisation du processus
— .text : instructions du processus
— .fini : instructions appelées après la fin d’un processus

Le format ELF décrit également les segments qui devront être créés en mémoire, ainsi que les droits d’accès associés (exécution, écriture, etc.).

**Exercice**
> Exercice Format ELF
:small_red_triangle_down: Avec le programme readelf, affichez la liste des sections du programme /bin/bash, 
:small_red_triangle_down: ainsi que la table des symboles.

Un progrmme qui n'a pas de symbole
### Bibliothèques dynamiques
fichier exec .so (format ELF)
chargement ds l'espace d'addressage
wrappers de la IBS: write => write @GLIB_2
editeur de lien ld.so (nom du symbole)

**Exercice**
>Quelles fonctions sont importées par le programme /bin/bash?
nm /bin/bash (aucun symb)
readelf -r /bin/bash


### Memoire
coredump pour recup la mem

**Exercice**
> cat /proc/$$/maps
pk plusieurs fois le meme fichier en mem? Par ce qu'il y'a plusieurs segments par fichiers.
A quelle addr commence la pile sur le shell ? BF.. qqchose
dump memoire shell courant


Pour dumper la mémoire d’un processus, la commande gcore du programme gdb peut être utilisée.

#### Page mem
Bien que les pages mémoire allouées pour la pile soient demandées avec les droits rw-p, donc sans le droit d’exécution, les processeurs 32 bits sans le flag NX (ou XD selon le fabriquant) ne permettent pas d’empêcher l’exécution des pages dont la lecture est autorisée. Il est donc possible de placer du code exécutable dans la pile et de le faire exécuter par le processeur (compilation Just In
Time de l’environnement Java par exemple).


## Gestion des utilisateurs
### Authentification
auth n'existe que dans lesp utilisateur car le noyau ne voit que les UID il n'a aucune notion d'utilisateur
pas d'assos UIS/utilisateur dans le noyau

biblio qui s'aucupe de verifier l'authent des utilisateurs: PAM

### Privilèges des processus
Un utilisateur est associé à un identifiant personnel (UID) et à un identifiant de groupe (GID). Dans le contexte d’un processus, il faut distinguer les identifiants réels (RUID/RGID) des identifiants effectifs
(EUID/EGID). Ces derniers sont utilisés pour tester le contrôle d’accès aux ressources par le noyau.
Le noyau stocke les informations liées aux autorisations dans des structures cred de la structure task_struct des tâches.