Come posso capire questo estratto, riguardante l'overflow dell'heap di base?

3

Sfortunatamente, non mi sembra di capire un concetto minore nel libro "Art of Exploitation", riguardante l'overflow dell'heap: una nuova shell di root viene aggiunta al file passwd. Da pagina 168 :

However, the nature of this particular heap overflow exploit won’t allow that exact line to be written to /etc/passwd, because the string must end with /etc/passwd. However, if that filename is merely appended to the end of the entry, the passwd file entry would be incorrect. This can be compensated for with the clever use of a symbolic file link, so the entry can both end with /etc/passwd and still be a valid line in the password file. Here’s how it works:

reader@hacking:~/booksrc $ mkdir /tmp/etc
reader@hacking:~/booksrc $ ln -s /bin/bash /tmp/etc/passwd
reader@hacking:~/booksrc $ ls -l /tmp/etc/passwd
lrwxrwxrwx 19 2007-09-09 16:25 /tmp/etc/passwd -> /bin/bash

Now /tmp/etc/passwd points to the login shell /bin/bash. This means that a valid login shell for the password file is also /tmp/etc/passwd, making the following a valid password file line:

myroot:XXq2wKiyI43A2:0:0:me:/root:/tmp/etc/passwd

The values of this line just need to be slightly modified so that the portion before /etc/passwd is exactly 104 bytes long:

  1. Comprendo la parte quando l'autore afferma che /tmp/etc/passwd può essere usato per creare un link a /bin/bash , ma non capisco come funzioni realmente (non c'è spiegazione di mkdir , ln -s ecc.

  2. Inoltre, questo è probabilmente molto semplice, ma perché l'autore afferma che: "i valori di questa linea devono essere leggermente modificati in modo che la parte prima che /etc/passwd sia esattamente lungo 104 byte "? Perche ' /tmp è stato omesso nella riga precedente (es. perché non è specificato:" la parte prima di /tmp/etc/passwd è esattamente 104 byte lungo "? Nella pagina successiva, il nuovo account root è scritto in /etc/passwd , ma perché no in /tmp/etc/passwd ? Ho controllato, e ci sono 2 diverse cartelle etc sul sistema, perché è così?

posta Ruslan Mushkaev 29.05.2016 - 16:52
fonte

1 risposta

2

C'è una spiegazione nel libro reale (forse questo sito "leaksource" non è affidabile; -).

  1. Si digitano i comandi: mkdir /tmp/etc ; %codice%
  2. (A) L'heap contiene due buffer e 104 byte è la distanza massima tra il primo buffer e il buffer di allocazione del file di dati. (B) ln -s /bin/bash /tmp/etc/passwd non è stato omesso, /tmp verrà aggiunto alla fine della stringa in grassetto. L'ultima parte di quella stringa mostrata in grassetto legge /etc/passwd . Quindi, una volta completato con quanto sopra, scriverà ... :/root:/tmp nel primo buffer e :/root:/tmp/etc/passwd verrà sovraccaricato nel file di dati del buffer @ 0x804a070 come mostrato nella pagina successiva. (C & D) Non scriverà a /etc/passwd perché questo è solo un collegamento simbolico a / bin / bash.

L'idea generale è di aggiungere il file /tmp/etc/passwd che ha un ID utente di 0 in modo da poter ricevere privilegi di root. Il modo in cui viene eseguito questo exploit: "l'overflow che deve essere il file di destinazione" / etc / passwd "non ci consente di aggiungere il file usando /etc/passwd (se lo usassimo come parte dell'overflow che scriverebbe a myroot:XXq2wKiyI43A2:0:0:me:/root:/bin/bash ). Stai creando /bin/bash per due motivi:

  1. per avere un overflow nel buffer di allocazione del file di dati di /tmp/etc/ (cioè il file in cui si desidera scrivere).
  2. per avere una shell di login valida per l'inserimento nel file delle password SENZA rovinare il sistema di destinazione e amp; in realtà incasinare tutto il tuo file di password.

Un post del blog che potrebbe aiutarti. Se non hai familiarità con i comandi di linux come mkdir e ln, lasciatemi consigliare Corso della riga di comando di CodeAcademy o una riga di comando tutorial su molti potresti google.

    
risposta data 29.05.2016 - 20:34
fonte

Leggi altre domande sui tag