Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=543057&src=alt&showlite=l
Дата изменения: Unknown
Дата индексирования: Tue Feb 26 21:02:51 2013
Кодировка: Windows-1251
linux local root exploits - Public forum of MSU united student networks
Alt >> Hard&Soft.Linux

Страницы: 0 | 20 | (30) | показать все
maratrus : Re: linux local root exploits  [re:Leo]   16.02.2008 01:20    | Reply | Edit |
-1
Еще не читал, так что пока СПАСИБО заранее.

P.S. Так как еще не читал, можешь пояснить значение параметра nr_regs (под рукой Винда, поэтому не помню как он в man'е называется) в сисколе vmsplice ?

Leo   [re:maratrus]   16.02.2008 10:43    | Reply | Edit |
1
code:
VMSPLICE(2) Linux Programmer's Manual VMSPLICE(2) NAME vmsplice - splice user pages into a pipe SYNOPSIS #define _GNU_SOURCE #include <fcntl.h> #include <sys/uio.h> long vmsplice(int fd, const struct iovec *iov, unsigned long nr_segs, unsigned int flags); DESCRIPTION The vmsplice() system call maps nr_segs ranges of user memory described by iov into a pipe. The file descriptor fd must refer to a pipe. The pointer iov points to an array of iovec structures as defined in <sys/uio.h>: struct iovec { void *iov_base; /* Starting address */ size_t iov_len; /* Number of bytes */ }; The flags argument is a bit mask that is composed by ORing together zero or more of the following values: SPLICE_F_MOVE Unused for vmsplice(); see splice(2). SPLICE_F_NONBLOCK Do not block on I/O; see splice(2) for further details. SPLICE_F_MORE Currently has no effect for vmsplice(), but may be implemented in the future; see splice(2). SPLICE_F_GIFT The user pages are a gift to the kernel. The appli- cation may not modify this memory ever, or page cache and on-disk data may differ. Gifting pages to the kernel means that a subsequent splice(2) SPLICE_F_MOVE can successfully move the pages; if this flag is not specified, then a subsequent splice(2) SPLICE_F_MOVE must copy the pages. Data must also be properly page aligned, both in memory and length. RETURN VALUE Upon successful completion, vmsplice() returns the number of bytes transferred to the pipe. On error, vmsplice() returns -1 and errno is set to indicate the error. ERRORS EBADF fd either not valid, or doesn't refer to a pipe. EINVAL nr_segs is 0 or greater than IOV_MAX; or memory not aligned if SPLICE_F_GIFT set. ENOMEM Out of memory. VERSIONS The vmsplice(2) system call first appeared in Linux 2.6.17. CONFORMING TO This system call is Linux specific. NOTES vmsplice() follows the other vectorized read/write type functions when it comes to limitations on number of segments being passed in. This limit is IOV_MAX as defined in <limits.h>. At the time of this writ- ing, that limit is 1024. SEE ALSO splice(2), tee(2), feature_test_macros(7) Linux 2006-04-28 VMSPLICE(2)


Noord   [re:Leo]   16.02.2008 10:57    | Reply | Edit |
0
Quote:


ботай. http://lwn.net/SubscriberLink/268783/6928eb6921800e25/



[LWN subscriber-only content]

maratrus   [re:Leo]   16.02.2008 13:55    | Reply | Edit |
0
Это я уже сто раз читал.
Правильно ли я понимаю, что nr_segs число элементов в массиве iov?


Idle   [re:maratrus]   16.02.2008 14:29    | Reply | Edit |
2
ага
code:
static inline size_t iov_length(const struct iovec *iov, unsigned long nr_segs) { unsigned long seg; size_t ret = 0; for (seg = 0; seg < nr_segs; seg++) ret += iov[seg].iov_len; return ret; }


maratrus   [re:Idle]   16.02.2008 15:25    | Reply | Edit |
0
Leo + Idle - большое спасибо!

Не знаю, как поставить плюсы

maratrus   [re:Leo]   18.02.2008 20:52    | Reply | Edit |
0
OK, я прочел
http://lwn.net/SubscriberLink/268783/6928eb6921800e25/
http://lwn.net/Articles/269532/
Я понял, почему происходит overflow. Далее, как я понял, "кранты нам приходят" в функции
splice_to_pipe (), а именно когда в ней мы вызываем page_cache_release(). Но я никак не могу понять как мы подсовываем нужный код в ядро?!
Правильно ли я понимаю, что get_user_pages() в функции get_iovec_page_array() позволяет нам переполнить массив pages[], при этом все элементы этого массива соответсвуют только последнему map в userspace'ном exploit'е? Зачем мы тогда маппим в exploit'е несколько раз (плюс выставляем флаги на страницу 1 << PG_compound)?
Буду очень признателен за любую помощь!

maratrus   [re:maratrus]   19.02.2008 00:32    | Reply | Edit |
0
up

Leo   [re:maratrus]   19.02.2008 00:33    | Reply | Edit |
-1
анакуя тебе это все?

maratrus   [re:Leo]   19.02.2008 00:37    | Reply | Edit |
0
Я просто решил разобраться в этом вопросе до конца.
Хочется немного улучшить свои знания по kernel Linux.
Наверное, глубокого смысла в этом нет.
Очень понравился хак с overflow в этом случае.

Мне б хотя бы намекнуть, я попробую дальше сам.

Top