Skip to content

Commit

Permalink
Converted old wiki
Browse files Browse the repository at this point in the history
  • Loading branch information
VaiTon committed Jan 28, 2024
0 parents commit 1f1b2d4
Show file tree
Hide file tree
Showing 41 changed files with 988 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.pdf filter=lfs diff=lfs merge=lfs -text
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.hugo_build.lock
public/
5 changes: 5 additions & 0 deletions archetypes/default.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
+++
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
date = {{ .Date }}
draft = true
+++
18 changes: 18 additions & 0 deletions content/_index.md
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/)
6 changes: 6 additions & 0 deletions content/corsi/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
+++
title = "Corsi@Ulisse"
weight = 2
+++


15 changes: 15 additions & 0 deletions content/corsi/pwncollege/_index.md
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 not shown.
Binary file not shown.
135 changes: 135 additions & 0 deletions content/corsi/pwncollege/mod1/index.md
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 not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
114 changes: 114 additions & 0 deletions content/corsi/pwncollege/mod2/index.md
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 not shown.
Binary file not shown.
Loading

0 comments on commit 1f1b2d4

Please sign in to comment.