Linux-提权
都是先用 root 来模拟配置不当.
利用 SUID 二进制文件进行提权
SUID 为 Set UID, 就是设置用户权限.
当你具有 SUID 权限二进制文件的可执行权限时,执行时会获得属主的权限.
SUID 只能添加给二进制文件,且只有在运行时才会获得属主权限.
比如, 你给 rm
命令添加了 SUID 权限,假设 test
文件是 root 用户创建的文件,此时, 你是普通用户,具有 rm
的执行权限, 那么:
1 |
|
将直接删除这个文件.
常见利用方式:
cp
出/etc/passwd
, 利用openssl
生成符合 passwd 格式的密码find
的exec
参数, 指定一个命令对搜索的结果进行处理vim
- 脚本, 给普通脚本添加 suid
如:
1 |
|
查看具有 SUID 权限的文件:
1 |
|
当 vim 被赋予 suid 权限后,意味着任何用户都可以使用 vim 来编辑那些只能由 root 编辑的文件.
如,修改 /etc/sudoers
文件,给你当前用户添加执行 sudo
的权限,也就是获得了 root 权限.
可以用 sudo -l
查看当前用户的 sudo
权限.
利用 sudo 进行提权
sudo
和 su
的区别:
sudo
全称是 super user do, 是用 root 权限执行命令su
全称是 substitute user, 是切换账号
/etc/sudoers
文件中,对用户进行配置的格式, 如:
1 |
|
不可用 sudo
执行的命令可以写成如:
1 |
|
各命令用逗号 ,
分隔:
1 |
|
当 sudo 允许执行 git 命令时,可利用 git 进行提权
1 |
|
或:
1 |
|
上述命令可以进入 git
的帮助页面,然后在此页面下执行终端命令:
其他命令
用 find 命令
如利用 find
命令的 exec
参数来切换到 root 权限.
find
使用 exec
参数时,需要以分号结尾,但由于分号在命令行中是特殊字符,要用 \
进行转义, 如:
1 |
|
用 perl
1 |
|
用 python
调用 pty 库,这是一个伪终端库,它的 spawn 会调用指定的程序:
1 |
|
用 less
命令
输入 sudo less filename
浏览文件内容时,到底部输入 !bash
后回车,会获得一个 root
权限的 shell.
用 awk
命令
通过调用 linux 的 system 函数来打开 bash:
1 |
|
用 man
命令
通过 sudo man man
命令来打开 man
的手册,输入 !bash
, 获得一个具有 root
权限的 shell.
用 vi
命令
在 normal 模式下输入 !bash
一些脚本文件
文件内容如:
shell 脚本:
1 |
|
perl 脚本:
1 |
|
应用程序
如 env, ftp, socat, scp.
通过 env 环境变量来获取 root 权限
1 |
|
通过 ftp 来进入 bash 获取 root 权限
1 |
|
通过 socat 客户端连接攻击机,攻击机可获得 rootshell
socat 是 Socket Cat 和 Netcat 类似.
先执行服务端,后执行客户端
客户端执行:
1 |
|
攻击机执行:
1 |
|
scp, 用来复制一些系统的敏感文件
1 |
|
利用爆破软件破解,如 john
命令.
黑名单情况
绕过 sudoers 的黑名单,将命令复制到其他路径下.
NFS 配置不当导致
NFS 是 Network File System (网络文件系统) 的缩写. 用来挂载某个目录或文件进行共享,默认是 2049 端口.
首先需要安装 nfs 的服务端.
使用 PATH 变量进行 Linux 提权
root 给一个可执行文件赋予了 suid, 而此文件又调用了另一个脚本,这个脚本的执行时也会获得 root 权限.
也是配合 suid.
利用 Cron 进行 Linux 提权
cronjobs 是定时任务,在特定的日期和时间执行计划任务.
在其配置文件 /etc/crontab
下配置.
定义格式如下:
如,添加一个任务为:
1 |
|
这个定时脚本具有 root 权限。(脚本需要有可执行权限:)
可以让脚本文件修改 sudoers
文件,把当前用户添加进去,获得 sudo
所有权,从而进行提权.
配合 tar
命令的 --checkpoint[=N]
参数和 --checkpoint-action=ACTION
参数. 为,每压缩多少个文件,执行一次 --checkpoint-action
后的命令.
让 tar
将文件名当作参数执行, 两个文件名为分别为: --checkpoint=1
和 --checkpoint-action=sh hack.pl
, 那么, tar
打包这两个文件的命令就成了:
1 |
|
和
1 |
|
利用 Docker 进行 Linux 提权
条件是,普通用户被添加到了 docker 用户组中.
利用方式如:
1 |
|
相当于有了 root 权限.
还有将 /etc/passwd
, /etc/sudoers
等文件挂载进 docker 容器, 然后修改.
rbash 绕过总结
rbash 是 Restricted bash 的缩写。
管理员可通过指定普通用户的 bash 为 rbash, 来限制相关操作. 在 rbash 中,很多行为和命令都会被受到限制 。
这里实际为绕过 rbash 的限制,绕过之后依旧是当前的普通用户,因此不算提权.
将用户默认终端设置为 rbash:
1 |
|
通过 vi 绕过
在 vi 的 normal 模式下输入 :!/bin/bash
, 返回一个终端.
用 ed 绕过
ed 也是一个编辑器,和 vi 类似,也可输入命令.
1 |
|
可以在 rbash 中执行 sh, bash, dash 等
1 |
|
使用 python, perl 绕过
如果可以运行 python 或 perl 的话:
1 |
|
使用 awk 绕过
1 |
|
使用 more, less, man 等绕过
随便读取一个文件.
如:
1 |
|
ssh 登录绕过
用 ssh 登录时给自己分配 bash:
如:
1 |
|
利用工具查找漏洞提权
安全脚本如: