针对提权小神器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

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-04-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的碎碎念

JS动态加载以及JavaScript void(0)的爬虫解决方案

对于使用JS动态加载, 或者将下一页地址隐藏为JavaScript void(0)的网站, 如何爬取我们要的信息呢?

1666
来自专栏分布式系统进阶

Kafka中的消息操作的层级调用关系Kafka源码分析-汇总

1652
来自专栏大内老A

[WCF REST] 通过ASP.NET Output Caching实现声明式缓存

ASP.NET的输出缓存(Output Caching)机制允许我们针对整个Web页面或者页面的某个部分(主要针对用户控件)最终呈现的HTML进行缓存。对于后续...

1916
来自专栏Android 研究

OKHttp源码解析(三)--中阶之线程池和消息队列

android的异步任务一般都是用Thread+Handler或者AsyncTask来实现,其中笔者当初经历过各种各样坑,特别是内存泄漏,当初笔者可是相当的欲死...

2894
来自专栏坚毅的PHP

jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www

tcpflow以流为单位分析请求内容,非常适合服务器端接口类服务查问题 这次遇到的问题跟支付宝支付后的回调post结果有关 淘宝的代码例子: publi...

6095
来自专栏郭少华

Spring boot Mybatis-XML方式使用Druid连接池(四)

3904
来自专栏移动端开发

iOS 从实际出发理解多线程

前言 ----       多线程很多开发者多多少少相信也都有了解,以前有些东西理解的不是很透,慢慢的积累之后,这方面的东西也需要自己好好的总结一下。多线程从我...

2177
来自专栏iOS Developer

Bison眼中的iOS开发多线程是这样的(三)

1293
来自专栏刘望舒

Android系统启动流程(四)Launcher启动过程与系统启动流程

前言 此前的文章我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:L...

2498
来自专栏圣杰的专栏

事件总线知多少(2)

源码路径:Github-EventBus 事件总线知多少(1) 事件总线知多少(2) 1.引言 之前的一篇文章事件总线知多少(1),介绍了什么是事件总线...

2367

扫码关注云+社区

领取腾讯云代金券