
Container do workshop sobre buffer overflow em mainframe da DEFCON 30

Os scripts aqui são usados para construir o mainframe virtual MVS 3.8j para o workshop do DEFCON 30.
Obrigado por dar uma olhada no workshop de Buffer Overflow de Mainframe do DEFCON 30.
Este contêiner docker tem tudo o que você precisa para aprender a fazer buffer overflows em MVS!
Para iniciar a aula, execute o contêiner e acesse http://localhost:8080
Para executar o contêiner, use os comandos abaixo e certifique-se de alterar $(pwd)/docker para uma pasta do seu sistema.
O $(pwd) coloca os volumes do docker na sua pasta de trabalho atual.
Use este comando se você quiser apenas executá-lo de forma autocontida. ⚠️ Se você remover e relançar o contêiner, perderá todas e quaisquer alterações feitas no ambiente do 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
Explicação das portas:
Os scripts Python mencionados podem ser encontrados aqui: https://github.com/mainframed/DC30_Workshop/tree/main/extra
Este expõe mais portas e permite que você tenha volumes com persistência. Dá acesso aos consoles Hercules e MVS, aos leitores/gravadores de cartões, 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
Portas
Volumes
⚠️ Com a configuração atual, o número máximo de usuários simultâneos é 24. Se um 25º usuário fizer logon, você
receberá a seguinte mensagem de erro 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: GETSPLOIT/hello.c programa C vulnerável de https://github.com/jake-mainframe/GETSPLOITARBAUTH de https://github.com/jake-mainframe/ARBAUTHoverflows/LGBT400, overflows/LOC400, overflows/WTO400Dockerfile usado para construir a imagem dockerMACLFTPD.jcl: arquivo JCL para instalar MACLIBS e o servidor FTPD usando MVPlogon_screen.ans/jcl/logon_screen.jcl: ANSI/JCL para substituir a tela de logon NETSOLupload.py gera o JCL usado para provisionar datasets, copiar arquivos e deixar o sistema prontojcl/terminals.jcl adiciona 32 novas interfaces de terminal e atualiza a configuração da VTAM| Porta | Descrição |
|---|
| 2323 | Porta do servidor TN3270 criptografada com TLS |
| 3270 | Porta do servidor TN3270 não criptografada |
| 3221 | Servidor FTPD criptografado |
| 2121 | Porta do servidor FTP não criptografada |
| 8443 | Cliente 3270 baseado na web que se conecta automaticamente ao mainframe do laboratório https://localhost:8443 |
| 8080 | A wiki da aula https://localhost:8080 |
| 8888 | Servidor web/MVS Console do Hercules. Usuário/senha = docker |
| 3505 | Leitor de cartões perfurados. Converte ASCII para EBCDIC. |
| 3506 | Leitor de cartões perfurados. Aceita apenas arquivos EBCDIC. |
| 31337-32337 | Faixa de portas passivas do servidor FTP |
| Pasta | Descrição |
|---|
| /config | Contém os arquivos de configuração do Hercules e do web3270 |
| /printers | Contém a saída das impressoras em CLASS=A |
| /punchcards | Contém a saída do gravador de cartões perfurados em CLASS=B |
| /logs | Contém os logs do Hercules |
| /dasd | Contém as imagens de disco do MVS/CE |
| /certs | Contém os certificados usados para criptografia TLS |
| Usuário | Senha | Descrição |
|---|
| IBMUSER | SYS1 | Usuário administrativo com acesso a tudo |
| MVSCE01 | CUL8TR | Usuário administrativo com acesso a tudo |
| MVSCE02 | PASS4U | Usuário genérico |
| DC0 | DC0 | Usuário do Workshop DEFCON |
| DC1 | DC1 | Usuário do Workshop DEFCON |
| DC2 | DC2 | Usuário do Workshop DEFCON |
| DC3 | DC3 | Usuário do Workshop DEFCON |
| DC4 | DC4 | Usuário do Workshop DEFCON |
| DC5 | DC5 | Usuário do Workshop DEFCON |
| DC6 | DC6 | Usuário do Workshop DEFCON |
| DC7 | DC7 | Usuário do Workshop DEFCON |
| DC8 | DC8 | Usuário do Workshop DEFCON |
| DC9 | DC9 | Usuário do Workshop DEFCON |
| DC10 | DC10 | Usuário do Workshop DEFCON |
| DC11 | DC11 | Usuário do Workshop DEFCON |
| DC12 | DC12 | Usuário do Workshop DEFCON |
| DC13 | DC13 | Usuário do Workshop DEFCON |
| DC14 | DC14 | Usuário do Workshop DEFCON |
| DC15 | DC15 | Usuário do Workshop DEFCON |
| DC16 | DC16 | Usuário do Workshop DEFCON |
| DC17 | DC17 | Usuário do Workshop DEFCON |
| DC18 | DC18 | Usuário do Workshop DEFCON |
| DC19 | DC19 | Usuário do Workshop DEFCON |
| DC20 | DC20 | Usuário do Workshop DEFCON |
| DC21 | DC21 | Usuário do Workshop DEFCON |
| DC22 | DC22 | Usuário do Workshop DEFCON |
| DC23 | DC23 | Usuário do Workshop DEFCON |
cat upload.jcl|ncat --send-only -w1 127.0.0.1 3505https://github.com/mvslovers/rdrprep na sua máquina Linuxhttps://github.com/mvslovers/jcc para esta pastasudo 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 para ./GETSPLOIT: cp hello.load GETSPLOIT./usersjcl.pyrdrprep e submeta-os um a um:
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 para confirmar que cada job foi concluídoweb3270.ini conforme apropriadopython3 -u ./server.py --config /path/to/config --certs /path/to/certsusersjcl.py cria de DC00.jcl a DC23.jcl na pasta ./usersautomation.py um script python de automação MVS usado para implantar no dockermatrix.txt Siga o coelho brancorexx/DEBRUIJN.rex: script REXX para gerar padrão de Bruijnrexx/decodei.rex: decodifica instruções hexadecimais do MVS para formato legívelmotd.txt o CLIST executado no logon do TSOmvs.sh o script de execução do contêiner para iniciar web3270, hercules