
Conteneur de l'atelier DEFCON 30 sur le buffer overflow mainframe

Les scripts présents ici servent à construire le mainframe virtuel MVS 3.8j pour l'atelier DEF CON 30.
Merci de jeter un œil à l'atelier DEF CON 30 sur les dépassements de tampon (buffer overflows) sur mainframe.
Ce conteneur Docker contient tout ce dont vous avez besoin pour apprendre à réaliser des dépassements de tampon MVS !
Pour démarrer la classe, lancez le conteneur et rendez-vous sur http://localhost:8080
Pour exécuter le conteneur, utilisez les commandes ci-dessous et assurez-vous de remplacer $(pwd)/docker par un dossier de votre système.
$(pwd) place les volumes Docker dans votre dossier de travail courant.
Utilisez cette commande si vous souhaitez simplement l'exécuter de manière autonome. ⚠️ Si vous supprimez puis relancez le conteneur, vous perdrez toutes les modifications apportées à l'environnement mainframe.
docker run -d \
--name=defcon30 \
-e HUSER=defcon \
-e HPASS=defcon \
-p 2323:3223 \
-p 8888:8888 \
-p 2121-2141:2121-2141 \
-p 8443:8443 \
-p 8080:8080 \
-p 31337-31347:31337-31347 \
-v ~/dumps:/printers \
--restart unless-stopped \
mainframed767/defcon30:latest
Explication des ports :
Les scripts Python mentionnés se trouvent ici : https://github.com/mainframed/DC30_Workshop/tree/main/extra
Celui-ci expose plus de ports et vous permet de disposer de volumes persistants. Il donne accès aux consoles Hercules et MVS, aux lecteurs/perforateurs de cartes, etc.
docker run -d \
--name=defcon30 \
-e HUSER=docker \
-e HPASS=docker \
-p 3221:3221 \
-p 2323:3223 \
-p 3270:3270 \
-p 3505:3505 \
-p 3506:3506 \
-p 8888:8888 \
-p 2121:2121 \
-p 8443:8443 \
-p 8080:8080 \
-p 31337-31347:31337-31347 \
-v $(pwd)/docker/config:/config \
-v $(pwd)/docker/printers:/printers \
-v $(pwd)/docker/punchcards:/punchcards \
-v $(pwd)/docker/logs:/logs \
-v $(pwd)/docker/dasd:/dasd \
-v $(pwd)/docker/certs:/certs \
--restart unless-stopped \
mainframed767/defcon30:latest
Ports
| Port | Description |
|---|---|
| 2323 | Port serveur TN3270 chiffré par TLS |
| 3270 | Port serveur TN3270 non chiffré |
| 3221 | Serveur FTPD chiffré |
| 2121 | Port serveur FTP non chiffré |
| 8443 | Client 3270 basé sur le web qui se connecte automatiquement au mainframe du lab https://localhost:8443 |
| 8080 | Le wiki de la classe https://localhost:8080 |
| 8888 | Serveur web Hercules / console MVS. Utilisateur/mot de passe = docker |
| 3505 | Lecteur de cartes perforées. Convertit l'ASCII en EBCDIC. |
| 3506 | Lecteur de cartes perforées. N'accepte que les fichiers EBCDIC. |
| 31337-32337 | Plage de ports passifs du serveur FTP |
Volumes
| Folder | Description |
|---|---|
| /config | Contient les fichiers de configuration Hercules et web3270 |
| /printers | Contient la sortie des imprimantes sur CLASS=A |
| /punchcards | Contient la sortie de la perforatrice de cartes sur CLASS=B |
| /logs | Contient les journaux Hercules |
| /dasd | Contient les images disque MVS/CE |
| /certs | Contient les certificats utilisés pour le chiffrement TLS |
| Username | Password | Description |
|---|---|---|
| IBMUSER | SYS1 | Utilisateur administratif avec accès à tout |
| MVSCE01 | CUL8TR | Utilisateur administratif avec accès à tout |
| MVSCE02 | PASS4U | Utilisateur générique |
| DC0 | DC0 | Utilisateur de l'atelier DEFCON |
| DC1 | DC1 | Utilisateur de l'atelier DEFCON |
| DC2 | DC2 | Utilisateur de l'atelier DEFCON |
| DC3 | DC3 | Utilisateur de l'atelier DEFCON |
| DC4 | DC4 | Utilisateur de l'atelier DEFCON |
| DC5 | DC5 | Utilisateur de l'atelier DEFCON |
| DC6 | DC6 | Utilisateur de l'atelier DEFCON |
| DC7 | DC7 | Utilisateur de l'atelier DEFCON |
| DC8 | DC8 | Utilisateur de l'atelier DEFCON |
| DC9 | DC9 | Utilisateur de l'atelier DEFCON |
| DC10 | DC10 | Utilisateur de l'atelier DEFCON |
| DC11 | DC11 | Utilisateur de l'atelier DEFCON |
| DC12 | DC12 | Utilisateur de l'atelier DEFCON |
| DC13 | DC13 | Utilisateur de l'atelier DEFCON |
| DC14 | DC14 | Utilisateur de l'atelier DEFCON |
| DC15 | DC15 | Utilisateur de l'atelier DEFCON |
| DC16 | DC16 | Utilisateur de l'atelier DEFCON |
| DC17 | DC17 | Utilisateur de l'atelier DEFCON |
| DC18 | DC18 | Utilisateur de l'atelier DEFCON |
| DC19 | DC19 | Utilisateur de l'atelier DEFCON |
| DC20 | DC20 | Utilisateur de l'atelier DEFCON |
| DC21 | DC21 | Utilisateur de l'atelier DEFCON |
| DC22 | DC22 | Utilisateur de l'atelier DEFCON |
| DC23 | DC23 | Utilisateur de l'atelier DEFCON |
⚠️ Avec la configuration actuelle, le nombre maximal d'utilisateurs simultanés est de 24. Si un 25e utilisateur se connecte, vous obtenez le message d'erreur suivant IKT00203I ADDRESS SPACE CREATION FAILED.
cp extra/FTPD.MVP MVSCE/MVP/packagesMACLFTPF.jcl : cat jcl/MACLFTPF.jcl|ncat --send-only -w1 127.0.0.1 3505logon_screen.jcl : cat jcl/logon_screen.jcl|ncat --send-only -w1 127.0.0.1 3505terminal.jcl : cat terminal.jcl|ncat --send-only -w1 127.0.0.1 3505git clone https://github.com/jake-mainframe/ARBAUTHupload.py : ./upload.py motd.txtupload.jcl : cat upload.jcl|ncat --send-only -w1 127.0.0.1 3505https://github.com/mvslovers/rdrprep sur votre machine Linuxhttps://github.com/mvslovers/jcc dans ce dossiersudo apt install wine wine32GETSPLOIT/hello.c :
wine ./jcc/jcc.exe -I./jcc/include -o ./GETSPLOIT/hello.c./jcc/prelink -s ./jcc/objs hello.load hello.objhello.load vers ./GETSPLOIT : cp hello.load GETSPLOIT./usersjcl.pyrdrprep et soumettez-les un par un :
for i in *.jcl; do echo $i;rdrprep $i;cat reader.jcl|ncat --send-only -w1 172.17.0.3 3506; read; doneprinters/prt00e.txt pour voir chaque job terminéweb3270.ini selon vos besoinspython3 -u ./server.py --config /path/to/config --certs /path/to/certsGETSPLOIT/hello.c programme C vulnérable provenant de https://github.com/jake-mainframe/GETSPLOITARBAUTH depuis https://github.com/jake-mainframe/ARBAUTHoverflows/LGBT400, overflows/LOC400, overflows/WTO400Dockerfile utilisé pour construire l'image DockerMACLFTPD.jcl : fichier JCL pour installer MACLIBS et le serveur FTPD via MVPlogon_screen.ans/jcl/logon_screen.jcl : ANSI/JCL pour remplacer l'écran de connexion NETSOLupload.py génère du JCL utilisé pour provisionner les datasets, copier les fichiers et préparer le systèmejcl/terminals.jcl ajoute 32 nouvelles interfaces terminal et met à jour la configuration VTAMusersjcl.py crée DC00.jcl jusqu'à DC23.jcl dans le dossier ./usersautomation.py un script Python d'automatisation MVS utilisé pour le déploiement vers Dockermatrix.txt Suivez le lapin blancrexx/DEBRUIJN.rex : script REXX pour générer un motif de Bruijnrexx/decodei.rex : décode les instructions hexadécimales MVS en texte lisiblemotd.txt le CLIST exécuté à la connexion à TSOmvs.sh le script de démarrage du conteneur pour lancer web3270, hercules