一年前进行的一次测验中有一个问题。我试图解决这个问题并陷入困境。所有其他的都与编程相关,但这个是与 Unix 文件权限相关的东西。以下是场景。
您将获得 SSH 服务器的登录名和密码。ssh your-username@server-addr
您的任务是查找名为 的文件/home/abc/chekme
并检索内容。
当登录到 ssh 远程服务器时,执行ls -l
显示 0 个文件,这表明给定的登录没有权限,但ls -l
对上述文件执行操作时,可以看到读取权限已授予 root 用户、组和名称该组的成员是chekme
。
我无法读取该文件,因为我没有权限并且不是该组的成员。在浏览该/etc/group
文件时,我发现有一个名为的组chekme
,并且只有一个用户添加到该组中。用户名是guest
从这里开始,我尝试将我的 guid 更改为该组的 guid,将自己添加到该组中,以su
用户身份执行 a guest
,但这些都不起作用,因为前两个需要root
访问权限,而su
guest 则需要该用户的密码。
我现在该怎么办?
登录凭据的实际问题:
文件:/home/hacker-weekly/abacus
因此,您必须读取文件“/home/hacker-weekly/abacus”并在此处提交文件内容。
如果您还没有获得登录凭据,请单击下面的“获取登录凭据”按钮来获取。然后您可以通过运行以下命令登录机器:
ssh“您的用户名”@“服务器地址”
提示:全面考虑基于 UNIX 的系统中的文件权限。
登录凭据 服务器:ec2-175-41-164-254.ap-southeast-1.compute.amazonaws.com 用户名:ashwinscongo 密码:ab12d6H
组名为 abacus,该组中的用户为 guest。尝试了 /etc/passwrd,但无法弄清楚任何内容。
答案1
方法:
$ ls -l /home/hacker-weekly/abacus
-r--r----- 1 root abacus 373 Nov 12 2012 /home/hacker-weekly/abacus
$ id
uid=1554(gilles) gid=1555(gilles) groups=1555(gilles)
所以我们需要要么获得root权限,要么获得abacus
组权限。但如何呢?
提示(步骤 1):如何提升权限?
完整解决方案(步骤 1):
查找不应存在的 setuid 或 setgid 可执行文件:
find / -xdev -perm /4000 -ls 2>/dev/null
有两个可能的候选者: /usr/local/abacus 和 /usr/bin/hacker-weekly -算盘。运行后者会打印出 SSH 私钥。
提示(步骤 2):使用此文件的明显方法是登录其他帐户。哪个账户?
完整解决方案(步骤 2):
查看 /etc/passwd 并查看存在哪些帐户(系统帐户和参与者除外)。查看 /etc/passwd 和 /etc/group 以查找 abacus 组的成员。刚好有客人。
因此将私钥复制到~/.ssh/id_rsa,正确设置权限,然后ssh guest@localhost。答对了。
<广告>
如果你喜欢这类东西,我们就参与夺旗比赛作为sec.se(安全堆栈交换)CTF 团队(有关组织详细信息,请参阅元帖子)。不过,与 UNIX 相比,涉及的网络、逆向工程和加密技术更多。
答案2
原来的问题陈述在这里,http://www.hackerearth.com/problem/algorithm/hack-unix/。
在考虑这个问题时,我不认为有任何方法可以通过权限访问该文件。登录后:
$ cd /home/hacker-weekly/
$ ls -la
total 28
drwxr-xr-x 2 hacker-weekly hacker-weekly 4096 Nov 12 2012 .
drwxr-xr-x 556 root root 20480 Sep 20 19:30 ..
-r--r----- 1 root abacus 373 Nov 12 2012 abacus
根据我对权限(Unix)和文件系统的了解,由于这些权限,没有直接的方法来访问该文件。这些权限告诉我们,您要么 (1) 必须获得 root 的访问权限,要么 (2) 获得对有权访问该组的帐户的访问权限abacus
。
探索群体角度
在查看该组时,我注意到/etc/passwd
和/etc/group
文件中存在以下内容:
/etc/密码
$ grep -E "ashwinscongo|guest|abacus" /etc/passwd
guest:x:1001:1001::/home/guest:/bin/sh
.guest:x:1436:1437::/home/.guest:/bin/bash
ashwinscongo:x:1544:1545::/home/ashwinscongo:/bin/bash
/etc/组
$ grep -E "ashwinscongo|guest|abacus" /etc/group
guest:x:1001:
abacus:x:1004:guest
.guest:x:1437:
ashwinscongo:x:1545:
所以看来我们需要获得该guest
帐户的访问权限。
须藤?
我们没有 sudo 权限。
$ sudo -l
[sudo] password for ashwinscongo:
Sorry, user ashwinscongo may not run sudo on ip-10-144-3-172
登录访客
我现在只能设想正面攻击,所以我尝试了2012 年最热门的 25 个密码, 随着:
- 客人
- 算盘
- ab12d6H
- 策格
- 算盘
这些都不起作用。
其他角度?
- 找到一个具有其权限的可执行文件,以便它 (1) 作为 root 执行或 (2) 作为 guest 执行(setuid/setgid 文件)!
- 获得访客访问权
- 利用 ssh 的某种信任关系? (ssh guest@localhost) 角度?
实际解决方案
花了一点时间,但我想通了。我的用户名是 slmingol。显然吉尔斯也明白了!
如果您在盒子上四处寻找可执行文件,您会找到您需要的一切。现在我知道该怎么做了,最好是你自己弄清楚。
有关权限的提示仅在您需要获得特权的意义上才有意义。如果你用谷歌搜索,你会发现的另一个线索也很适合通过 ssh 登录来宾帐户。我鼓励您坚持下去,不要通过查看@Gilles 线索/答案来作弊。
如果你真的被困住了,我可以给你一些额外的提示,但不会破坏它!