1. 程式人生 > 其它 >針對提權小神器Sherlock的分析與利用

針對提權小神器Sherlock的分析與利用

01 Sherlock簡介

Sherlock是一個在Windows下用於本地提權的PowerShell指令碼。

目前包含了以下漏洞:

  • MS10-015 : User Mode to Ring (KiTrap0D)
  • MS10-092 : Task Scheduler
  • MS13-053 : NTUserMessageCall Win32k Kernel Pool Overflow
  • MS13-081 : TrackPopupMenuEx Win32k NULL Page
  • MS14-058 : TrackPopupMenu Win32k Null Pointer Dereference
  • MS15-051 : ClientCopyImage Win32k
  • MS15-078 : Font Driver Buffer Overflow
  • MS16-016 : ‘mrxdav.sys’ WebDAV
  • MS16-032 : Secondary Logon Handle

02 初步使用

本地載入指令碼

Import-Module Sherlock.ps1

遠端載入指令碼

IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1')

發現漏洞:

Appears Vulnerable就是存在漏洞

驗證:

可以發現提權成功,注意Sherlock只是驗證,並不能幫助你直接進行利用。

03 隱藏的小技巧

除了上述的基本功能外,腳本里面還隱藏了一些作者沒有介紹到的小功能

獲取軟體版本

Sherlock還可以讓我們來獲取軟體的版本號,我們只需要執行Get-FileVersionInfo命令即可。

演示:

獲取CPU架構

執行Get-Architecture命令,我們就可以知道CPU的架構是32位還是64位的。

演示:

04 Sherlock漏洞驗證原理分析

Sherlock除了作者已經加入的那些漏洞,我們還可以自己來加入感興趣的漏洞。再新增漏洞之前,我們先來分析一下Sherlock漏洞驗證的原理。

在Sherlock中,每一個漏洞驗證模組都是一個function,具體形式如下:

function Find-MS16032 { }

然後使用Get-Architecture來獲取系統版本,判斷系統版本是否存在提權漏洞。符合再進行下一步判斷。

if ( $Architecture[1] -eq "AMD64" -or $Architecture[0] -eq "32-bit" )

然後通過Get-FileVersionInfo獲取存在漏洞的檔案的版本資訊,主要提取後面兩段數字。

然後就簡單了,用一個switch+if對比版本就行了:

然後我們自己新增漏洞就簡單了,在function New-ExploitTable中加入漏洞資訊。

測試一下,我們先來建立一個function Find-MS16135:

然後在function Find-AllVulns中加入Find-MS16135就OK啦。

測試看看:

05 總結

整個框架總體思路就是這樣咯,接下來就看小夥伴們來查詢存在漏洞的檔案版本了,目前我還沒好的思路可以快速去尋找存在漏洞的檔案版本,不知道大家有沒有好的思路求分享啊。

專案地址:https://github.com/rasta-mouse/Sherlock