Wargames与bash知识11

Wargames与bash知识11

bandit19

关卡提示:

要获得对下一级别的访问权限,您应该使用家目录中的setuid二进制文件。在不带参数的情况下执行它,以了解如何使用。在使用setuid二进制文件后,可以在通常的位置(/etc/bandit_pass)找到密码。

查看/etc/bandit_pass/ bandit20权限,此文件仅bandit20用户可读

bash 复制代码
bandit19@bandit:~$ cd /etc/bandit_pass/
bandit19@bandit:/etc/bandit_pass$ ls -l bandit20
-r-------- 1 bandit20 bandit20 33 Oct  5 06:19 bandit20

查看系统变量:PATH

bash 复制代码
bandit19@bandit:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

先查看bandit20-do权限,果然设置setuid的权限(第四位s)

bash 复制代码
bandit19@bandit:~$ ls -Al
total 28
-rwsr-x--- 1 bandit20 bandit19 14876 Oct  5 06:19 bandit20-do
-rw-r--r-- 1 root     root       220 Jan  6  2022 .bash_logout
-rw-r--r-- 1 root     root      3771 Jan  6  2022 .bashrc
-rw-r--r-- 1 root     root       807 Jan  6  2022 .profile
 

使用bandit20-do文件验证使用方法,注意使用./ bandit20-do运行命令

bash 复制代码
bandit19@bandit:~$ ./bandit20-do
Run a command as another user.   #用另一个用户运行命令
  Example: ./bandit20-do id
bandit19@bandit:~$ ./bandit20-do id
uid=11019(bandit19) gid=11019(bandit19) euid=11020(bandit20) groups=11019(bandit19)
bandit19@bandit:~$ ./bandit20-do whoami
bandit20
bandit19@bandit:~$ ./bandit20-do cat /etc/bandit_pass/bandit20
VxCazJaVykI6W36BkBU0mJTCM8rR95XT
bandit19@bandit:~$

相关知识介绍

内核为每个进程维护的三个UID值。这三个UID分别是RUID(Real UID,实际用户ID)、EUID(Effective UID,有效用户ID)、SUID(Saved Set-user-ID,保存的设置用户ID)。

UID:真实的用户ID 进程的UID就是其创建者的用户

RUID, 用于在系统中标识一个用户是谁,当用户使用用户名和密码成功登录后一个UNIX系统后就唯一确定了他的RUID.

EUID, 用于系统决定用户对系统资源的访问权限,通常情况下等于RUID。

SUID,用于对外权限的开放。跟RUID及EUID是用一个用户绑定不同,它是跟文件而不是跟用户绑定。

只有进程的创建者和root用户才有权利对该进程进行操作。于是,记录一个进程的创建者(也就是属主)就显得非常必要。

EUID,用来确定进程对某些资源和文件的访问权限。在大多数情况下,进程的UID和EUID是一样的 ------ 除了著名的setuid程序。

setuid 例如:passwd命令,这个命令允许用户修改自己的登录口令。但是密码保存在/etc/shadow文件中,这个文件对普通用户是不可读的,那么用户怎么能够通过修改shadow文件来修改自己的口令呢?这就是setuid的妙处了。通过ls -l passwd 可从passwd的属性看到,权限位中有个s,这就是suid。去掉s可用chmod u-s /usr/bin/passwd

setuid通过使passwd在执行阶段具有文件所有者(也就是root)的权限,让用户临时有了修改shadow文件的能力(当然这种能力是受到限制的)。因此,passwd就是一个经典的setuid程序,其UID是当前执行这个命令的用户ID,而EUID则是root用户的ID(也就是0)。当非root用户调用passwd修改密码时,此时的euid将会变为passwd的拥有者用户,即root用户,这样就可以修改密码了。

Linux id命令

用于显示用户的ID,以及所属群组的ID。id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。

参数说明:

-g或--group  显示用户所属群组的ID。-G或--groups  显示用户所属附加群组的ID。-n或--name  显示用户,所属群组或附加群组的名称。-r或--real  显示实际ID。-u或--user  显示用户ID。-help  显示帮助。-version  显示版本信息。

相关推荐
Fairy_sevenseven9 分钟前
【二十八】【QT开发应用】模拟WPS Tab
开发语言·qt·wps
蜡笔小新星17 分钟前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习
凯子坚持 c17 分钟前
C语言复习概要(三)
c语言·开发语言
无限大.29 分钟前
c语言200例 067
java·c语言·开发语言
余炜yw31 分钟前
【Java序列化器】Java 中常用序列化器的探索与实践
java·开发语言
篝火悟者32 分钟前
问题-python-运行报错-SyntaxError: Non-UTF-8 code starting with ‘\xd5‘ in file 汉字编码问题
开发语言·python
Death20034 分钟前
Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
c语言·开发语言·c++·qt·c#
六点半88836 分钟前
【C++】速通涉及 “vector” 的经典OJ编程题
开发语言·c++·算法·青少年编程·推荐算法
惜.己36 分钟前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
niu_sama39 分钟前
基于muduo库函数实现protobuf协议的通信
开发语言·qt