Halaman

Jumat, 30 Oktober 2020

CATATAN EXPLOIT

 BUFFER OVERFLOW EXPLOIT

Buffer overflow biasa dimanfaatkan untuk mengexploitasi kerentanan suatu program. Sesuai dengan namanya, buffer overflow berarti meload buffer dengan data yang lebih besar dari daya tampungnya. Variable lokal disimpan di stack memori. Apabila buffer variable lokal ini di overflow, maka data kelebihannya akan tersimpan di stack juga. Stack merupakan bagian penting yang menyimpan data parameter fungsi, variable lokal dan alamat instruksi pointer. Mengubah alamat instruksi pointer di stack akan menyebabkan perubahan alur eksekusi program. Menurut saya ada kemiripan dengan codecave, yaitu sama-sama mengubah alur eksekusi program yang sudah dicompile. Berikut ini skenario pembelokan eksekusi program :

#========================

.section .data

.section .text

.globl _start

jmp dummy

_start:   

    pop    esi    #menyimpan alamat string command shell ke register eax

    #lakukan sesuatu dengan alamat tersebut, terserah mungkin mau di print atau

    #ekseskusi command shell (biasanya dengan syscall 11 execve)

dummy:

    call _start    #call ini bertujuan agar alamat instruksi dibawah disimpan di stack

    .string "simple string"

#========================


Ilustrasi dalam bahasa C :

void main(int argc, char **argv)

{

    char *name[2]; 

    name[0] = "/bin/sh";

    name[1] = NULL;

    //selanjutnya, int execve(char *file, char *argv[], char *env[])

    execve(name[0], name, NULL);

    exit(0);

}

Register yang digunakan :

1. EAX : 0xb - nomor syscall

2. EBX : alamat dari nama program

3. ECX : alamat null-terminated argument-vector, argv (alamat dari nama)

4. EDX : alamat null-terminated environment-vector, env/enp (NULL)







Sumber :

1. https://www.tenouk.com/Bufferoverflowc/Bufferoverflow5.html

2. https://insecure.org/stf/smashstack.html



Kamis, 29 Oktober 2020

CATATAN C/C++

ASSEMBLY C/C++

BASIC ASM

Basic Asm bisa berada diluar fungsi.

Format basic assembly GNU GCC :

asm asm-qualifiers( AssemblerInstructions)

asm-qualifiers bisa :

    volatile. Ini optional. Semua basic asm sudah secara implicit volatile. Volatile maksudnya manipulasi input untuk mengubah output.

    inline. Ini dioptimalkan untuk menghasilkan ukuran statement asm sekecil mungkin.

untuk satu baris :


void main()
{
    __asm__("movl %ecx %eax");
}

kalau banyak baris tambahkan \n\t di akhir baris. Hal ini karena gcc mengirim tiap instruksi sebagai sebuah string ke GNU assembler (GAS). Dengan menggunakan newline/tab kita mengirim format yang sesuai untuk assembler. 
Contoh (bisa pakai __asm__ atau asm saja) :

void main()
{
    __asm__("movl %ecx %eax \n\t"
                       "movl %eax %ebx \n\t"
             "movl %ebx %edx"
                        );
}


EXTENDED ASSEMBLY - DENGAN C EXPRESSION OPERANDS

Extended Asm harus berada dalam fungsi.

Format extended assembly GNU GCC :

asm asm-qualifiers( AssemblerTemplate
    : OutputOperands
    : Input Operands
    : Clobbers);

asm asm-qualifiers( AssemblerTemplate
    : 
    : Input Operands
    : Clobbers
    : GotoLabels);

asm-qualifiers bisa volatile, inline atau goto.

    volatile. Volatile maksudnya manipulsi input untuk mengubah output.

    inline. Ini dioptimalkan untuk menghasilkan ukuran statement asm sekecil mungkin.

    goto. Ini menginformasikan pada compiler bahwa statement asm mungkin akan melakukan jump ke label yang ada di daftar GotoLabels.

contoh copy src ke dst + 1

int src = 1;
int dst;

asm("mov %1, %0\n\t"
    "add $1, %0"
    : "=r" (dst)
    : "r" (src));

printf("%d\n", dst);






Dasar

TUTORIAL 1 : DASAR BAHASA ASSEMBLY WINDOWS 32bit MASM32 CONSOLE UNTUK PEMULA

Alhamdulillahirabbilalamin, pada saat ini kita semua masih diberi kesempatan untuk terus belajar, kita niatkan mudah-mudahan apa yang kita l...

Postingan Populer