I am keeping this page for archival purposes in the hope that the material will be useful to others, but my teaching pages are not actively maintained and external links may break. I do not teach at the Villetaneuse IUT or at Université Sorbonne Paris Nord any longer; please see the home page for my current situation.

Luca Saiu : Techniques d'attaques

Injection de code : énoncé

Connectez-vous en ssh à mon ordinateur portable.

Il ne sera accessible que pendant la séance, à l'adresse
  ageinghacker.net , port 22222 .

(Je vais activer un tunnel ssh temporaire entre
ageinghacker.net et mon ordinateur local, qui
n'a pas d'adresse IP publique.)

Je vais vous communiquer les mots de passe par IRC.



Tâche A
=======

Le compte « vulnerable » a le script
script-vulnerable.py en tant que shell ;
donc vous ne devriez pas avoir, en théorie, la possibilité d'exécuter des
commandes arbitraires avec ce compte.  Mais le script a été mal conçu, et
il est vulnérable à une injection shell.

ssh -p 22222 vulnerable@ageinghacker.net

Trouvez une façon d'exécuter une commande Bash arbitraire avec le compte
vulnerable.

Créez un fichier nommé après vous dans le répertoire personnel de
l'utilisateur.


Tâche B
=======

Le compte « vulnerable2 », encore sans accent  a
le script script-vulnerable2.py en tant que
shell.  script-vulnerable2.py est (à peine) plus difficile à casser par rapport
à script-vulnerable.py.

Exactement comme la tâche A, créez un fichier nommé après vous dans le
répertoire personnel de l'utilisateur.


Tâche C
=======

J'ai une installation de PostgreSQL sur mon ordinateur, accessible uniquement
en local.

Le répertoire personnel de l'utilisateur « etudiant »

contient un petit programme Python script-vulnerable-sql-python-3.py
exécutant une query SQL, qui devrait donner accès aux données en seule lecture.
Mais ce script est aussi vulnérable à une injection — dans ce cas, une injection
SQL.

ssh -p 22222 etudiant@ageinghacker.net

Vous avez le droit de lire et d'exécuter le script,
mais pas de le modifier.  Votre tâche consiste à utiliser le script fourni pour
ajouter une ligne à la table Livre, en n'utilisant que le script Python fourni
— bien sûr, avec une entrée appropriée.

Quelques informations sur la table Livre :

-- À la création :
CREATE TABLE Livre (id_livre       SMALLINT      PRIMARY KEY,
                    titre          VARCHAR (30)  NOT NULL,
                    date_creation  SMALLINT);

lucadb=> SELECT * FROM Livre;
 id_livre |           titre            | date_creation 
----------+----------------------------+---------------
        1 | Idées noires               |          1931
        2 | Le grand tsar blanc        |          1912
        3 | Lear / La mer              |          1953
        4 | Le pion blanc des présages |          1895
        5 | Métro pour l'enfer         |          1964
        6 | La reine des sortilèges    |          1845
        7 | Alexandre Nevsky           |          1820
        8 | L'homme qui rit            |          2001
        9 | Les travailleurs de la mer |          1842
       10 | Hernani                    |          1830
       11 | Le reseau                  |          1974
       12 | Le reseau                  |          1982

Le répertoire personnel de l'utilisateur etudiant contient aussi un script
affiche-table-sql-python-3.py que vous pouvez examiner pour comprendre
comment on utilise SQL à partir de Python.
affiche-table-sql-python-3.py n'est pas vulnérable.


[hacker emblem]
Luca Saiu
Mis à jour en février 2022