HALT CATCH AND FIRE

  1. BUFFER OVERFLOW - HCF

    Tags
    asmbz
    By HCF il 27 April 2024
     
    0 Comments   17 Views
    .
    Au8tLPx%202-17020512346063-17055769137546-170620970004802-17142284470659-17146523182384

    global main
    extern scanf
    global vulnerable_function

    section .data
    format:db "%s",0

    section .text

    main:
    push rbp
    mov rbp, rsp
    call vulnerable_function
    mov rax,0
    leave
    ret

    vulnerable_function:
    push rbp
    mov rbp, rsp
    sub rsp,16
    mov rdi, format
    lea rsi, [rbp-10]
    xor rax, rax
    call scanf
    leave
    ret

    Buffer di dimensioni fisse: La funzione vulnerable_function dichiara un buffer di dimensioni fisse char buffer[10];. Questo significa che può contenere al massimo 9 caratteri più il terminatore nullo.

    Utilizzo di scanf senza limiti: La funzione scanf("%s", buffer); viene utilizzata per leggere una stringa dall'input utente e memorizzarla nel buffer. Tuttavia, scanf senza limiti di dimensione %s può scrivere più di 9 caratteri nel buffer se l'utente inserisce una stringa più lunga.

    Buffer overflow: Se l'utente inserisce una stringa di 10 o più caratteri, scanf scriverà oltre i limiti del buffer di 10 byte, causando un buffer overflow. Questo può sovrascrivere dati importanti nello stack o causare comportamenti imprevisti e potenzialmente pericolosi nel programma.

    Per rendere il codice più sicuro, è consigliabile utilizzare scanf in modo sicuro, limitando la lunghezza massima della stringa da leggere. Ad esempio, puoi utilizzare %9s nella stringa di formato per leggere al massimo 9 caratteri più il terminatore nullo.

    scanf("%9s", buffer);

    Questo assicura che scanf legga al massimo 9 caratteri, evitando così un buffer overflow nel buffer di dimensioni fisse. Inoltre, è sempre consigliabile fare ulteriori controlli e validazioni sui dati di input per garantire la sicurezza e l'integrità del programma.

    #include <stdio.h>
    #include <stdlib.h>

    void vulnerable_function()
    {
    char buffer[10];
    scanf("%s", buffer);

    int main(int argc, char *argv[]){
    vulnerable_function();
    }


    Edited by HCF - 2/5/2024, 14:19
      Share  
     
    .