$ gcc linux-2.6.10-root-elflbl_v108.c
linux-2.6.10-root-elflbl_v108.c: In function `scan_mm_start':
linux-2.6.10-root-elflbl_v108.c:425: error: storage size of 'l' isn't known
linux-2.6.10-root-elflbl_v108.c:425: error: storage size of `l' isn't known
linux-2.6.10-root-elflbl_v108.c: In function `check_vma_flags':
linux-2.6.10-root-elflbl_v108.c:545: error: label at end of compound statement
Видимо что экплойт скоро заработает, просто патчи в ядро ещё не приняли. :)
А у меня оно не компиляется, говорит:
elflbl.c: In function `scan_mm_start':
elflbl.c:425: error: storage size of `l' isn't known
elflbl.c:425: error: storage size of `l' isn't known
elflbl.c: In function `check_vma_flags':
elflbl.c:545: warning: deprecated use of label at end of compound statement
вообщем там название структуры надо поменять на ту, что прописана в ldt.h, точно посмотреть щас не могу, так как моя линуховая машина после этого эксплоита подвисла перегружать надо
bot@zs:~$ gcc -O2 -fomit-frame-pointer linuxkern24.c -o linuxkern
linuxkern24.c: In function `check_vma_flags':
linuxkern24.c:545: warning: deprecated use of label at end of compound statement
bot@zs:~$ ./linuxkern
[+] SLAB cleanup
child 1 VMAs 1320
[+] moved stack bfffe000, task_size=0xc0000000, map_base=0xbf800000
[+] vmalloc area 0xdfc00000 - 0xff441000
[-] FAILED: open lib (/dev/shm/_elf_lib not writable?) (Permission denied)
Killed
bot@zs:~$
bash-2.05b$ gcc -O2 -fomit-frame-pointer elflbl.c -o elflbl elflbl.c: In function `check_vma_flags': elflbl.c:546: warning: deprecated use of label at end of compound statement bash-2.05b$ ./elflbl
[+] SLAB cleanup child 1 VMAs 253 [+] moved stack 7fffe000, task_size=0x80000000, map_base=0x7f800000 [+] vmalloc area 0x8fc00000 - 0x9f597000 Wait... | [-] FAILED: uselib (Cannot allocate memory) Killed bash-2.05b$ uname -a Linux localhost 2.4.26-gentoo-r13 #2 Птн Дек 10 23:19:31 MSK 2004 i686 AMD Athlon(tm) XP 1900+ AuthenticAMD GNU/Linux bash-2.05b$ Никакого эффекта:)
1. gcc = 2.96 (на 3.3 у меня не работает) 2. /dev/shm is writeable ( chmod 1777 ) 3. с первого раза обычно не срабатывает - его нужно 3-4 раза подряд пускать
> на 3.3 у меня не работает
Чтобы собрать на 3.3 (под FC2), нужен этот патч:
----
--- uselib.c.old 2005-01-08 02:45:34.055824232 +0300
+++ uselib.c 2005-01-08 02:31:14.937430080 +0300
@@ -33,6 +33,7 @@
Slackware 10.0 со стандартным ядром не срабатывает:
marat@bgp:~$ uname -a
Linux bgp 2.4.26 #2 Вск Дек 5 22:30:39 UZT 2004 i686 unknown unknown GNU/Linux
marat@bgp:~$ cat /etc/slackware-version
Slackware 10.0.0
marat@bgp:~$ gcc -O2 -fomit-frame-pointer kernel.c -o kernel
kernel.c: In function `check_vma_flags':
kernel.c:545: warning: deprecated use of label at end of compound statement
marat@bgp:~$ ./kernel
[+] SLAB cleanup
child 1 VMAs 114
[+] moved stack bfffe000, task_size=0xc0000000, map_base=0xbf800000
[+] vmalloc area 0xc7c00000 - 0xcf78e000
[-] FAILED: open lib (/dev/shm/_elf_lib not writable?) (Permission denied)
Killed
Всё равно не срабатывает, хотя во время выполнения эксплоита машина тормозит конкретно, даже чуть не повисла.
gcc правда 3-й, патчей никаких не применял:
marat@bgp:~$ gcc --version
gcc (GCC) 3.3.4
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[andrey@eclipse q]$ gcc elflbl.c elflbl.c: In function `check_vma_flags': elflbl.c:530: warning: deprecated use of label at end of compound statement [andrey@eclipse q]$ ./a.out
2.6.10 - некомпилит:
bash-3.00$ gcc -O2 -fomit-frame-pointer elflbl.c -o elflbl
In file included from elflbl.c:35:
/usr/include/linux/linkage.h:5:25: asm/linkage.h: No such file or directory
elflbl.c: In function `check_vma_flags':
elflbl.c:545: warning: deprecated use of label at end of compound statement
elflbl.c:905:2: warning: no newline at end of file
плохо :)
tmpfs , это fs спенцово придуманная для хранения данных, которые не протребуются после перезагрузки. Она прозрачно для приложений растет из оперативки на диск. То, что эксплойт ее использует, не значит, что она дырява.
> как раз таки на Альтлинуксе эксплоит удачно прошел, после
> пары манипуляций, а вот на Slackware 10.0 -- нифига
А ты внимательно прочти сообщение, на которое отвечаешь. Я тут в VMware поигрался, похоже ALT Linux - единственный дистрибутив, на котором СРАБОТАЛ этот эксплойт. Не сработал ни на RedHat, ни на Debian, ни на слакваре, ни на дженту, ни на ASP, ни на Mandrake, ни на SUSE.
> Я чего-то не пойму. А для чего вообще эта tmpfs?
Через неё, в частности, реализован механизм Posix SHM
в glibc. По этому монтировать обязательно! Если не
смонтировать, не будет работать shm_open() (man 3 shm_open),
и, соответственно, все проги, его использующие, работать
не будут тоже. Хотя большинство таких прог имеют обходной
вариант (fall-back) на случай отсутствия /dev/shm. Вот
сейчас исходники dosemu глянул (исходники dosemu - это
просто кладезь "нестандартных решений":) - у него аж
два фолл-бэка: если shm_open() не срабатывает, он что-то
мутит с mmap(), а если и это не работает, тогда он создаёт
гигантский файл в /tmp, и в комментариях написано, что
это будет сильно тормозить. Так что /dev/shm лучше всегда
монтировать. Памяти он зря отъедать не будет всё равно,
так что потерь никаких.
У меня сложилось впечатление что срабатывание зависит то количества памяти на машине. На тачке с 256M сработало, на тачке с 1G не сработало с криком что не может выделить память :)
Это не нужно. При монтировании tmpfs права устанавливаются автоматом в 1777.
> root@bgp:~# mount -t tmpfs tmpfs /dev/shm
А это по идее должно быть на каждой машине прописано в fstab. Меня
крайне удивило, что очень у многих здесь tmpfs не смонтирована...
Она ведь и для СУБД разных нужна, и апач shm активно использует.
> крайне удивило, что очень у многих здесь tmpfs не смонтирована...
> Она ведь и для СУБД разных нужна, и апач shm активно использует.
tmpfs используется для только Posix SHM, а это всё же не очень
часто применяется почему-то (имхо самый простой и правельный
механизм использования shm).
Апач, похоже, использует anonymous SHM. Вот отрывок из
cat /proc/<pid>/maps апача:
Это SHM, о чём свидетельствует буква s в "rw-s". Но не в
/dev/shm, а в /dev/zero. SHM в /dev/zero открывается с помощью
mmap() с флагами MAP_SHARED|MAP_ANONYMOUS. Я когда это первый
раз увидел (в исходниках dosemu опять же), просто офигел. Не
думал, что на /dev/zero можно делать shared mapping. SysV SHM
тоже /dev/shm не требует, хотя наверное её перепишут на
использование tmpfs со временем. Пока же такая величайшая вещь
как tmpfs и правда довольно часто оказывается невостребованной.
Ну незнаю! И апач у меня отлично работает без /dev/shm, и не встречал ни одной проги, которая не могла бы без этого обойтись. Хотя использую на домашней машине tmpfs для /tmp и /var/tmp - по-моему единственное преимущество от этого то, что нет необходимости чистить /tmp. Никаких изменений в производительности я не заметил. Кстати, какой дистр монтирует /dev/shm по умолчанию? Альты, аспы - невсчёт!