Skip to content

thesp0nge/HackInBoSafeEdition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

x86 shellcoding cakestar

Introduzione

Quando facciamo un penetration test, il più delle volte utilizziamo exploit già pronti o usiamo strumenti come msvfenom per creare un payload con qualche opzione particolare.

Esistono situazioni dove hai bisogno di essere più creativo: devi evitare l'antivirus, devi nasconderti dall'IDS o semplicemente vuoi divertirti un po' ed avere il pieno controllo del codice che sarà eseguito sulla macchina.

Ecco, in questo talk vedremo come fare evolvere uno shellcode in ambiente Linux x86 aggiungendo riscrittura nel nostro codice e creando un encoder custom.

Il bypass dell'antivirus forse non sarà garantito, ma il divertimento... quello sì.

Slide

Le slide sono disponibili qui

A chi è rivolto?

  • Penetration tester
  • Analisti SOC
  • Sviluppatori

Livello di difficoltà

BASSO

Skill richieste

  • Conoscenze base di assembler x86
  • Sapere cos'è una system call
  • Un pizzico di python o ruby o il linguaggio che più vi piace a cui accodare il nostro shellcode.

Cosa mi serve

Preparo la vittima

Ho bisogno di compilare il programma vittima per iniziare le esercitazioni.

$ cd victim
$ ./compile.sh pwnme.c
$ sudo "chown root:root pwnme"
$ sudo "chmod +s pwnme"

L'inizio della nostra storia

Da una analisi precedente sappiamo che il software pwnme è vulnerabile a buffer overflow. Il contenuto del file pwnme.txt, necessario al funzionamento del nostro tool, vieme copiato in una variabile, purtroppo senza fare un controllo sulla lunghezza dei dati letti da file.

Nel caso il file di testo sia costituito da troppi caratteri, dopo 84 byte avremmo la sovrascittura del registro EIP e di fatto, l'inizio della nostra storia.

Il PoC del nostro exploit sarà questo:

#!/usr/bin/env python3

import os;

eip="BBBB"
shellcode = "A"*84+eip+"C"*200
f = open("pwnme.txt","w")
f.write(shellcode)
f.close()

Abbiamo provato con metasploit a generare un payload con il comando:

$ msfvenom -p linux/x86/exec CMD=/bin/sh -f elf -o a.out

Purtroppo veniamo individuati da alcuni antivirus, quindi dobbiamo trovare un altro modo per scrivere il nostro shellcode.

Il payload di msfvenom su VirusTotal

Disclaimer

Questo talk non è su come trovare un buffer overflow ma su come customizzare il nostro shellcode. Il programma vulnerabile quindi è stato scritto introducendo la vulnerabilità in maniera forzata, in particolare:

  • è stato aggiunto dell'inline assembler per mettere a disposizione l'istruzione JMP ESP
  • avendo disattivato la randomizzazione dello stack, ho il nuovo valore del registro EIP sempre fisso

Queste tecniche possono ingannare strumenti basati su signature. Strumenti evoluti che provano ad eseguire il codice in sandbox potrebbero comunque riconoscere i nostri payload. Un security engineer che troverà il payload e ne farà il reverse sarà comunque in grado di riconoscerne il contenuto malevolo.

Shellcode

Andremo ad analizzare lo shellcode che esegue "/bin/sh" e queste saranno le tappe del nostro viaggio: