Format Strings - Arbitrary Read Example
Impara e pratica l'Hacking su AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking su GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Inizio Lettura Binaria
Codice
Compilalo con:
Sfruttare
L'offset è 11 perché impostando diverse A e forzando con un ciclo gli offset da 0 a 50, si è scoperto che all'offset 11 e con 5 caratteri extra (pipe
|
nel nostro caso), è possibile controllare un intero indirizzo.Ho usato
%11$p
con padding fino a quando ho visto che l'indirizzo era tutto 0x4141414141414141Il payload della stringa di formato è PRIMA dell'indirizzo perché il printf smette di leggere a un byte nullo, quindi se inviamo prima l'indirizzo e poi la stringa di formato, il printf non raggiungerà mai la stringa di formato poiché troverà prima un byte nullo
L'indirizzo selezionato è 0x00400000 perché è dove inizia il binario (senza PIE)
Leggere le password
Compilalo con:
Leggi dalla pila
La variabile locale stack_password
sarà memorizzata nella pila perché è una variabile locale, quindi basta abusare di printf per mostrare il contenuto della pila. Questo è un exploit per BF le prime 100 posizioni per ottenere in modo non autorizzato le password dalla pila:
Nell'immagine è possibile vedere che possiamo ottenere in modo non autorizzato la password dalla stack nella 10a
posizione:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F197708944-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FE5VfhVAq0qYsgU9deMR8%252Fuploads%252Fgit-blob-545fcdfaf85cd96714bae462c037fc088c6f8bb4%252Fimage%2520%281234%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=1bf4acba&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F197708944-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FE5VfhVAq0qYsgU9deMR8%252Fuploads%252Fgit-blob-49c6c459edceb803ac56d89f84335da98d3f277f%252Fimage%2520%281233%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4c090c8&sv=1)
Lettura dei dati
Eseguendo lo stesso exploit ma con %p
invece di %s
è possibile ottenere in modo non autorizzato un indirizzo di heap dalla stack in %25$p
. Inoltre, confrontando l'indirizzo ottenuto (0xaaaab7030894
) con la posizione della password in memoria in quel processo possiamo ottenere la differenza tra gli indirizzi:
Ora è il momento di trovare come controllare un indirizzo nella stack per accedervi dalla seconda vulnerabilità della stringa di formato:
E' possibile vedere che nel tentativo 14 con il passaggio utilizzato possiamo controllare un indirizzo:
Sfruttare
Impara e pratica l'hacking su AWS: HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'hacking su GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated