声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。 |
---|
0x01 前言
这篇文章我将分享下我在实战中利用Windows内核溢出漏洞提权时的基本步骤和注意事项,当然这也只是根据我个人习惯来写的,毕竟每个人的习惯都不一样,所以仅供参考,如有不对之处还请批评指正!!!
0x02 提权信息搜集
我们在拿到Webshell权限后一般都会先对这台主机进行简单信息搜集,如:当前权限、安装补丁/系统版本与架构、可读写目录和支持脚本等,这几个必看的,后期利用内核溢出漏洞提权时需要参考。
(1) 当前权限
whoami命令可查看当前用户、组、特权等信息,确定我们拿到的这个Webshell是Users/Admins/System权限?是否开启UAC用户账户控制?Users/IIS就需要提权,PC的Admins可能还要绕下UAC。
(2) 安装补丁
systeminfo命令可查看当前操作系统上已安装的补丁,同时也能获取系统版本/架构/网卡/启动时间,是否为虚拟机等等信息?这些信息主要用于后期做补丁对比和查找对应可利用的提权POC/EXP。
(3) 系统版本和架构
可以通过IIS的404报错和ProgramFiles(x86)目录或环境变量判断系统版本/架构,或者用以下工具和插件来识别IIS版本,IIS6(03)、7(08)、8(12)、10(10/16),大部分≤03为x86,≥08为x64。
代码语言:javascript复制wmic cpu get addresswidth|more 1 | find /i "32"
wmic cpu get addresswidth|more 1 | find /i "64"
工具和插件:Nmap、Shodan、Whatweb、Wappalyzer、Server Details...
(4) 可读写目录/文件
如果遇到某虚拟主机,磁盘权限设置较为严格,cmd.exe被降权执行不了命令,常见的可读写目录也无法读取,这时就需要用到扫描可读写的脚本来查找可读写目录,用于上传cmd.exe和提权EXP等。
(5) 探测可支持脚本
当ASP脚本不能执行命令时可以去测试下是否支持PHP、ASPX,只需在一个可写Web目录下新建对应脚本文件,内容随便填写,看下是否能够正常解析,可以则说明支持该脚本。
如果中间件为IIS时建议用ASPX脚本去执行命令。之前看有很多师傅说ASPX的权限要比ASP、PHP高,其实并不是的,权限都是一样的,只是各脚本调用执行命令的方式不一样而已。
ASP主要是用Wscript.shell、Shell.Application组件执行的命令,而ASPX最常用的是Process.StartInfo类。
0x03 安全补丁对比
接着我们可以通过执行以下命令来获取目标主机上已安装的安全补丁KB编号,获取方式有很多,但基本上都是利用Win32_QuickFixEngineering这个类来进行查询的,360不会拦截。
代码语言:javascript复制systeminfo | findstr KB
wmic qfe list full | findstr HotFix
powershell Get-HotFix
powershell Get-WmiObject -Class Win32_QuickFixEngineering
wmic qfe get Caption,CSname,Description,HotFixID,InstalledBy,InstalledOn
wmic path win32_quickfixengineering get Caption,CSname,Description,HotFixID,InstalledBy,InstalledOn
https://docs.microsoft.com/zh-cn/windows/desktop/CIMWin32Prov/win32-quickfixengineering
https://docs.microsoft.com/zh-cn/powershell/module/Microsoft.PowerShell.Management/Get-HotFix?view=powershell-5.1
得到安全补丁KB编号后就可以利用以下在线提权辅助平台或相关项目来进行对比,Windows-Exploit-Suggester早已过时停止更新,推荐用WES-NG,还一直有更新,但也会有误报。
代码语言:javascript复制https://patchchecker.com/
https://i.hacking8.com/tiquan/
https://github.com/bitsadmin/wesng
https://github.com/GDSSecurity/Windows-Exploit-Suggester
Windows-Exploit-Suggester是根据Microsoft安全公告数据进行对比,而WES-NG则是根据Microsoft安全公告、MSRC API以及NVD漏洞等多个数据进行对比,详情可去对应项目中查看。
同时我们也可以使用Metasploit下的local_exploit_suggester模块来直接查找可利用的提权模块,通过找到的这些模块就可以直接进行提权了,但也并不是每一个都能成功的。
代码语言:javascript复制run post/windows/gather/enum_patches
run post/multi/recon/local_exploit_suggester
0x04 获取POC/EXP
得知某个漏洞MS/CVE编号后可以去Baidu、Google、Twitter、Facebook、Github、Exploit-db等网站去查找漏洞详情及POC/EXP,或者通过地下黑市购买,也可以多关注下ze0r、zcgonvh、k8gege、Ascotbe几个师傅的Github,他们会不定期发一些编译好的提权EXP。
安全漏洞库:
代码语言:javascript复制https://nvd.nist.gov
http://cve.scap.org.cn
https://www.seebug.org
https://www.cnvd.org.cn
http://www.cnnvd.org.cn
https://www.securityfocus.com
http://www.nsfocus.net/vulndb
https://msrc.microsoft.com/update-guide
KB、POC、EXP查找:
代码语言:javascript复制https://0day.today
https://www.exploit-db.com
http://kernelhub.ascotbe.com
https://github.com/Ascotbe/Kernelhub
https://github.com/qazbnm456/awesome-cve-poc
https://github.com/SecWiki/windows-kernel-exploits
https://www.catalog.update.microsoft.com/home.aspx
个人比较推荐@Ascotbe师傅整理的这个项目,覆盖了大部分Windows提权漏洞,而且作者均已进行复现测试并记录了受影响的各个系统版本。
或者也可以参考下我之前整理分享的一个Windows提权相关漏洞的测试表格,包含了我所有测试过的提权EXP和MSF下的提权、BypassUAC模块。
找到影响该系统的漏洞提权EXP后就可以将其上传至目标的可读写目录中进行提权操作,但我个人建议最好是能先在本地测试环境中测试,确定没问题以后再去实战环境中应用。
注:新出一个特权提升漏洞时先去了解受影响版本,然后找到可利用的提权EXP并在本地各版本操作系统上进行测试,确定没问题后再去实战中应用,而不是无脑一顿EXP乱怼...
0x05 一些注意事项
(1) 如果不能执行命令就没法进行下一步操作,所以说这也是至关重要的一步,在拿到Webshell后先确定下是否能够执行命令?不能执行命令的原因是什么?然后再根据找到的原因去做针对性的绕过测试,可参考我之前写的这篇文章:Webshell不能执行命令常见原因
(2) Window提权EXP的执行方式并不是唯一的,而是取决于作者的源码是如何编写的,如我之前测试过的CVE-2018-0824、CVE-2018-8639等。在利用别人已经编译好的提权EXP时还需要自己多测试分析,可参考我之前写的这篇文章:Windows提权EXP多种执行方式
(3) 我们经常能在一些可读写目录看到各式各样的提权EXP,这是因为大部分人提权时都不会先去看下当前用户权限,主机系统03/08/12/16/19和架构x86/x64,也不管这个提权EXP有没有影响该系统,上去就是一顿EXP乱怼,这样真不好,成功率不说,也可能出现蓝屏。
(4) 提权时不能完全依赖于Windows Exploit Suggester这类辅助工具,因为基本都是与安全补丁的KB编号进行比对,而微软的每一个安全漏洞受影响的产品和版本都不一样,所以他们会根据不同的产品、版本来发布多个安全补丁,KB编号自然就不一样,有时一次大的系统更新也会包含老漏洞的补丁,那么原来安装的补丁也就会被替换,所以我们在利用提权EXP前最好先去微软官方查看下这个漏洞对应的补丁编号,没有老漏洞的补丁编号并不能代表这个漏洞是没有被修复的。