Sherlock是一个在Windows下用于本地提权的PowerShell脚本。
目前包含了以下漏洞:
Import-Module Sherlock.ps1
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1')
Appears Vulnerable就是存在漏洞
可以发现提权成功,注意Sherlock只是验证,并不能帮助你直接进行利用。
除了上述的基本功能外,脚本里面还隐藏了一些作者没有介绍到的小功能
Sherlock还可以让我们来获取软件的版本号,我们只需要运行Get-FileVersionInfo
命令即可。
演示:
运行Get-Architecture
命令,我们就可以知道CPU的架构是32位还是64位的。
演示:
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啦。
测试看看:
整个框架总体思路就是这样咯,接下来就看小伙伴们来查找存在漏洞的文件版本了,目前我还没好的思路可以快速去寻找存在漏洞的文件版本,不知道大家有没有好的思路求分享啊。
项目地址:https://github.com/rasta-mouse/Sherlock