-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 1f1b2d4
Showing
41 changed files
with
988 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
*.pdf filter=lfs diff=lfs merge=lfs -text |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
.hugo_build.lock | ||
public/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
+++ | ||
title = '{{ replace .File.ContentBaseName "-" " " | title }}' | ||
date = {{ .Date }} | ||
draft = true | ||
+++ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
+++ | ||
title = "Introduzione" | ||
+++ | ||
|
||
Benvenuto nella wiki del laboratorio Ulisse! | ||
|
||
- Sito web del Team CTF: <https://ctf.ulis.se> | ||
- Sito web del laboratorio: <https://ulis.se> | ||
|
||
## Licenza | ||
|
||
Il contenuto della wiki, dove non diversamente specificato, è soggetto alla licenza [Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale](http://creativecommons.org/licenses/by-sa/4.0/). | ||
|
||
## Contatti | ||
|
||
Per segnalare imprecisioni o miglioramenti contattare | ||
|
||
- Eyad: [[matrix]](https://matrix.to/#/@vaiton:matrix.org), [Telegram](https://eyaddo.t.me/) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
+++ | ||
title = "Corsi@Ulisse" | ||
weight = 2 | ||
+++ | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
+++ | ||
title = "pwncollege" | ||
+++ | ||
|
||
## Siti web | ||
|
||
- <https://pwnable.kr/> | ||
|
||
## Moduli | ||
|
||
- [Mod1 - Program misuse](/corsi/pwncollege/mod1) | ||
- [mod2 - Program Interaction](/corsi/pwncollege/mod2) | ||
- [Mod3 - Assembly Crash Course](/corsi/pwncollege/mod3) | ||
- [Mod4 - Shellcode Injection](/corsi/pwncollege/mod4) | ||
- [Mod5 - Sandboxing](/corsi/pwncollege/mod5) |
Binary file added
BIN
+131 Bytes
content/corsi/pwncollege/mod1/files/program_misuse_1_privilege_escalation.pdf
Binary file not shown.
Binary file added
BIN
+131 Bytes
content/corsi/pwncollege/mod1/files/program_misuse_2_mitigations.pdf
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
+++ | ||
title = "Mod 1: Program Misuse" | ||
+++ | ||
|
||
{{% attachments /%}} | ||
|
||
### Privilege escalation | ||
|
||
bho, roba su suid :D | ||
**!!!!SE QUALCUNO HA VOGLIA DI FARE GLI APPUNTI PER BENE FACCIA PURE!!!!** | ||
|
||
## Materiale aggiuntivo | ||
|
||
**OBBLIGATORIO:** nessuna persona sulla faccia della terra può identificarsi come sistemista UNIX senza aver visto [questo video](https://youtu.be/tc4ROCJYbm0). | ||
|
||
Per chiunque non conosca abbastanza bene l'ambiente UNIX, consiglio di partire capendo il funzionamento della shell, cosa come e quando manipola l'input. | ||
|
||
- [SLIDES](https://tkanon.ninja/Uni/OLD/LAUREA_INGEGNERIA_INFORMATICA/3/LABORATORIO_DI_AMMINISTRAZIONE_DI_SISTEMI_T/virtuale/shell_scripting-print.pdf) | ||
- [LEZIONI](https://tkanon.ninja/roboEdu/registrazioni/IngegneriaInformatica%203/LABORATORIO_DI_AMMINISTRAZIONE_DI_SISTEMI_T/roboEdu/) | ||
|
||
*(imho di fondamentale importanza è la seconda parte della lezione del 16/03/21, ma anche le altre su BASH non si buttano)* | ||
|
||
- [Cyberchef](https://gchq.github.io/CyberChef/) è un tool per manipolare facilmente dati offuscati. Imparatelo ad usare che torna utile in fretta. | ||
|
||
- Vim è utile. | ||
Lo troverete ovunque ed è in generale comodo per manipolare file di testo velocemente. | ||
Guardatevi [questo talk](https://youtu.be/wlR5gYd6um0) che spiega il concetto fondamentale, ovvero come vim sia un linguaggio [turing completo](https://buttondown.email/hillelwayne/archive/vim-is-turing-complete/), e non un semplice editor di testo con una serie di scorciatoie come tutti gli altri. | ||
|
||
## Challenges | ||
|
||
### Opinioni generali | ||
|
||
Imho queste challenge hanno poco senso, data una conoscenza abbastanza approfondita dei tool standard UNIX e della shell. | ||
Alcuni sono simpatici rompicapo, altri troppo facili per valerne la pena. | ||
Consiglio di farne un campione tra quelle che non sembrano ovvie, giusto per entrare nell'ottica giusta. | ||
|
||
### babysuid 1-9 | ||
|
||
Presente il bit SUID settato (con owner root) per i seguenti binari (che in un modo o nell'altro stampano su stdout il contenuto di un file) | ||
I binari utilizzati sono i seguenti: | ||
|
||
- `cat` | ||
- `more` | ||
- `less` | ||
- `tail` | ||
- `head` | ||
- `sort` | ||
- `vim` | ||
- `emacs` | ||
- `nano` | ||
|
||
### babysuid 10-16 | ||
|
||
Qui verrà stampata la flag in stdout da tool che ne modificano il formato, sempre usando il sed SUID su binari con owner root. | ||
La difficoltà aggiuntiva consiste nel ricavare il plaintext dai formati mostrari. | ||
I binari utilizzati sono i seguenti: | ||
|
||
- `rev` | ||
- `od` (stampa in ottali) | ||
- `hd` (hexdump) | ||
- `xxd` | ||
- `base32` | ||
- `base64` | ||
- `split` (da man: "split a file into pieces") | ||
|
||
### babysuid 17-23 | ||
|
||
Stessa roba, a sto giro vengono utilizzati binari per creare/estrarre archivi. | ||
I binari utilizzati sono i seguenti: | ||
|
||
- `gzip` | ||
- `bzip2` | ||
- `zip` | ||
- `tar` | ||
- `ar` | ||
- `cpio` | ||
- `genisoimage` | ||
|
||
### babysuid 24-32 | ||
|
||
Qui inizi ad utilizzare binari (sempre con SUID root) non esplicitamente creati per leggere file. | ||
I binari utilizzati sono i seguenti: | ||
|
||
- `env` | ||
- `find` | ||
- `make` | ||
- `nice` | ||
- `timeout` | ||
- `stdbuf` | ||
- `setarch` | ||
- `watch` | ||
- `socat` | ||
|
||
### babysuid 33-36 | ||
|
||
Queste dicono di richiede un po' di programmazione, si tratta sempre di tool standard unix che riescono a leggere file da disco. | ||
I binari utilizzati sono i seguenti: | ||
|
||
- `whiptail` | ||
- `awk` | ||
- `sed` | ||
- `ed` - **THE STANDARD UNIX EDITOR** | ||
|
||
### babysuid 37-40 | ||
|
||
Qui iniziamo ad utilizzare SUID per modificare i permessi del fs, invece di leggere direttamente la flag. | ||
I binari utilizzati sono i seguenti: | ||
|
||
- `chown` | ||
- `chmod` | ||
- `cp` | ||
- `mv` | ||
|
||
### babysuid 41-44 | ||
|
||
SUID su interpreti di lang general purpose. | ||
I binari utilizzati sono i seguenti: | ||
|
||
- `perl` | ||
- `python` | ||
- `ruby` | ||
- `bash` | ||
|
||
### babysuid 45-50 | ||
|
||
Queste riguardano binari non banalmente esploitabili per leggere il contenuto della flag. Richiedono un po' di fantasia. | ||
I binari utilizzati sono i seguenti: | ||
|
||
- `date` | ||
- `dmesg` | ||
- `wc` | ||
- `gcc` | ||
- `as` (portable gnu assembler) | ||
- `wget` | ||
- `ssh-keygen` |
Binary file added
BIN
+132 Bytes
content/corsi/pwncollege/mod2/files/program_interaction_1_linux_command_line.pdf
Binary file not shown.
Binary file added
BIN
+131 Bytes
content/corsi/pwncollege/mod2/files/program_interaction_2_binary_files.pdf
Binary file not shown.
Binary file added
BIN
+131 Bytes
content/corsi/pwncollege/mod2/files/program_interaction_3_linux_process_loading.pdf
Binary file not shown.
Binary file added
BIN
+131 Bytes
content/corsi/pwncollege/mod2/files/program_interaction_4_linux_processes_execution.pdf
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
+++ | ||
title="Mod 2: Program Interaction" | ||
+++ | ||
|
||
## Appunti lezioni | ||
|
||
{{% attachments /%}} | ||
|
||
### Linux command line | ||
|
||
__TODO:__ | ||
|
||
### Binary Files | ||
|
||
Executable and Linkable Format: definisce la forma che deve avere un binario per poter essere eseguito su linux. | ||
[Bel blogpost](https://www.intezer.com/blog/research/executable-linkable-format-101-part1-sections-segments/) | ||
|
||
Un file ELF è divisibile in __segmenti__. questi definiscono dove le varie parti del binario verranno caricate in memoria. | ||
|
||
Ortogonalmente alla divisione in segmenti, è possibile anche dividere il binario in __sezioni__, queste definiscono la semantica delle parti del binario. | ||
A noi interesseranno le seguenti sezioni: | ||
|
||
* `.text`: sezione eseguibile del binario | ||
* `.plt`, `.got`: sezione in cui verranno caricate le librerie dinamiche utilizzate dal binario | ||
* `.data`: variabili dichiarate a compile time | ||
* `.rodata`: costanti a compile time (tipo le stringhe) | ||
* `.bss`: variabili dichiarate a compile time ma non inizializzate | ||
|
||
Per interagire con l'ELF, possiamo utilizzare i seguenti tools: | ||
|
||
* `gcc` to make your ELF. | ||
* `readelf` to parse the ELF header. | ||
* `objdump` to parse the ELF header and disassemble the source code. | ||
* `nm` to view your ELF's symbols. | ||
* `patchelf` to change some ELF properties. | ||
* `objcopy` to swap out ELF sections. | ||
* `strip` to remove otherwise-helpful information (such as symbols). | ||
* [`kaitai struct`](https://ide.kaitai.io/) to look through your ELF interactively. | ||
|
||
### Linux Process Loading | ||
|
||
__TODO:__ | ||
|
||
### Linux Process Execution | ||
|
||
__TODO:__ | ||
|
||
## Materiale aggiuntivo | ||
|
||
[pwntools](https://github.com/Gallopsled/pwntools): libreria molto utile per semplificare l'interazione con i processi a runtime. | ||
__QUESTO VA IMPARATO BENE__, leggere almeno una volta line by line il [tutorial](https://github.com/Gallopsled/pwntools-tutorial#readme) | ||
|
||
## Challenges | ||
|
||
### Opinioni generali | ||
|
||
__TODO:__ scrivere opinioni una volta finite le challenges | ||
|
||
### embryoio 1-28 | ||
|
||
flag gratis, ti chiede di fare cose su: | ||
|
||
* stdin/stdout | ||
* argomenti | ||
* variabili di ambiente | ||
* `env -i` per azzerare l'ambiente | ||
* dalla manpage di `bash`, sezione `exec`: <br> `The -c option causes command to be executed with an empty environment.` | ||
* redirezione | ||
* lanciare script bash/python | ||
|
||
### embryoio 29-85,88-97,102-105,107,110,115-123 | ||
|
||
qui inizia a chiederti di generare nuovi processi (fork), gestire redirezione con pipe e fifo, argv, env e segnali inizi a dover scrivere qualche riga di C. | ||
Le challenge sono speculari in C, bash e python. | ||
|
||
* La chall 66 chiede di utilizzare `find`, questa è interessante (anche se molto facile) | ||
* La chall 73, 79, 85 chiede roba sulla CWD (working dir) tra padre e figlio: __TODO:__ check | ||
* La chall 94 chiedere di avere come input il file descriptor 283. Questo e\` facile da fare in bash (__TODO:__ provare a rifarla in sh posix): | ||
|
||
``` | ||
exec 283< tmp | ||
/challenge/embryoio_level94 <&283 | ||
``` | ||
|
||
Questa soluzione funziona sono in bash, non is shell posix. La motivazione la troviamo [qui](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07): | ||
> Open files are represented by decimal numbers starting with zero. | ||
> The largest possible value is implementation-defined; however, all implementations shall support at least 0 to 9, inclusive, for use by the application. | ||
> These numbers are called "file descriptors". | ||
Quindi, il file descriptor 283 e\` accettato dallo standard ma non implementato in diverse shell posix (tipo dash). | ||
|
||
#### Ecco le informazioni utili per svolgere questi esecizi | ||
|
||
* un processo figlio eredita dal padre i file descriptor | ||
* i due processi condividono anche la posizione nel file (fseek).<br> __TODO:__ cercare docs su sta cosa | ||
* il figlio passa a zombie (aka orfani, con padre init) se il padre vero muore | ||
* i figli ereditano l'environment dal padre | ||
* ricorda che il programma per mandare un segnale ad un processo e\` `kill` | ||
|
||
### embryoio 86,87,99,100,106,112,113,126-142 | ||
|
||
qui bisogna comunicare con il processo che sta girando. | ||
Per comunicare, ti chiede di utilizzare vari medodi, quali: | ||
|
||
* stdin/stdout | ||
* fifo | ||
* tcp | ||
* (forse altro) | ||
In pratica sono date dal sw di checking delle operazioni matematiche da completare, e lo scopo e\` quello di risolverle programmaticamente. | ||
Un'altra sottocategoria, sempre simile, consiste nel dover programmaticamente mandare n segnali, scelti dinamicamente dalla challenge al processo figlio. | ||
Anche questi sono divisi tra bash *, C e python*, la soluzione per comunicare interattivamente e\`: | ||
* bash: __TODO:__ capire come si fa (maybe <http://tiswww.case.edu/php/chet/bash/bashref.html#Coprocesses>) | ||
* C: semplice ciclo consumer con pipe. `man pipe` contiene un esempio | ||
* python: pwntools e\` fatto apposta |
Binary file added
BIN
+131 Bytes
content/corsi/pwncollege/mod3/files/2021_assembly_refresher_2_x86_64.pdf
Binary file not shown.
Binary file added
BIN
+131 Bytes
content/corsi/pwncollege/mod3/files/assembly_crash_course_1_computer_architecture.pdf
Binary file not shown.
Oops, something went wrong.