渗透测试小技巧一:寻找EXP
0X00 前言:
简单总结一下渗透过程中寻找 EXP 的一些方法,还顺便为 windows 下未打的漏洞补丁的寻找写了一个小工具,希望师傅们多多支持!
0X01 Windows 下寻找可用的 exp
1.简单的科普:
拿到一台 windows 主机,能执行命令了,那么如果想提权的话最好的方式就是利用现有的 exp 直接打,肯定是要使用 systeminfo 这个命令查看系统已打补丁,但是寻找可能存在的特权提升漏洞是一个比较麻烦的过程,我们首先需要知道当前的特权提升洞的 KB 列表,然后再与系统systeminfo 中的 KB 列表进行对比(KB是微软对补丁的命名方式,是Knowledge Base(知识库)的简称,其指的是某个补丁对应微软知识库中哪一篇文章。例如KB888111,就是对应知识库中888111号文章)。
可以参考的网站如下:这里面列出了比较新的安全公告
如下图所示:
MS17-023 对应的补丁就是 KB4014329 ,说明这个来源于 Microsoft 知识库文章 4014329。
当然这样似乎还是不是很方便查找,于是我又找到了一个文件
链接如下:
https://www.microsoft.com/en-us/download/details.aspx?id=36982
这个文件整理的比较全了,可以说是网页版的集合
如下图:
但是这个文件的冗余还是非常大的,因为特权提升漏洞相对来讲并不是很多,这里面列出的很多代码执行的洞实际上我们并不需要,所以到这一步其实有两种思路,一种就是按照上面的方法写脚本或者怎么样找到补丁列表中有但是系统没有的特权提升补丁,还有一种就是反向思维,找到系统需要更新的补丁,然后反推哪些漏洞存在。
2.进入正题
先说思路一:
这里不得不提到几个非常好的项目:
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/WindowsExploits/Exploits
https://github.com/AusJock/Privilege-Escalation
方法一:
重点关注第一个吧,这里面有一个比较好的工具 win-exp-suggester 这也是我一直想写的,但是发现人家也已经写了就直接拿来用了,原理就是我上面说的第一种方法,根据上面的那个 xslx 文件中的信息与 systeminfo 进行比较。
1)首先更新一下数据库
$ python windows-exploit-suggester.py --update
[*] initiating winsploit version 3.3...
[+] writing to file 2019-01-22-mssb.xls
[*] done
2)安装必要的依赖
pip install xlrd --upgrade
Collecting xlrd
Downloading https://files.pythonhosted.org/packages/b0/16/63576a1a001752e34bf8ea62e367997530dc553b689356b9879339cf45a4/xlrd-1.2.0-py2.py3-none-any.whl (103kB)
100% |████████████████████████████████| 112kB 84kB/s
Installing collected packages: xlrd
Successfully installed xlrd-1.2.0
3)将 sysinfo.txt 作为参数传给脚本
$ python windows-exploit-suggester.py --database 2019-01-22-mssb.xls --systeminfo sysinfo.txt
[*] initiating winsploit version 3.3...
[*] database file detected as xls or xlsx based on extension
[*] attempting to read from the systeminfo input file
[+] systeminfo input file read successfully (GB2312)
[*] querying database file for potential vulnerabilities
[*] comparing the 3 hotfix(es) against the 160 potential bulletins(s) with a database of 137 known exploits
[*] there are now 160 remaining vulns
[+] [E] exploitdb PoC, [M] Metasploit module, [*] missing bulletin
[+] windows version identified as 'Windows 10 64-bit'
[*]
[E] MS16-135: Security Update for Windows Kernel-Mode Drivers (3199135) - Important
[*] https://www.exploit-db.com/exploits/40745/ -- Microsoft Windows Kernel - win32k Denial of Service (MS16-135)
[*] https://www.exploit-db.com/exploits/41015/ -- Microsoft Windows Kernel - 'win32k.sys' 'NtSetWindowLongPtr' Privilege Escalation (MS16-135) (2)
[*] https://github.com/tinysec/public/tree/master/CVE-2016-7255
当然这里面有些实际上是不准确的,因为有些补丁在系统一开始就已经被修复了,于是在 systeminfo 里面不会显示打过这个补丁,但是漏洞实际上并不存在。
方法二:
那么除了这个方法以外,我后来还发现了一个网站也能起到类似的作用 传送门
方法三:
我们可以直接利用 bat 脚本,在收集过可能存在的 KBxxxx 以后使用下面的脚本(收集 KBxxx 其实还是在第一个项目里) ,然后可以使用类似下面的脚本
systeminfo > sysinfo.txt&(for %i in ( KB977165 KB2160329 KB2503665 KB2592799
KB2707511 KB2829361 KB2850851 KB3000061 KB3045171 KB3077657 KB3079904
KB3134228 KB3143141 KB3141780 ) do @type sysinfo.txt|@find /i "%i"|| @echo
%i you can fuck)&del /f /q /a sysinfo.txt
这个脚本实际上就是查看 sysinfo 中有没有列出来的这些 KB (当然脚本使用条件就是在可写目录运行)
再来看思路二:
思路二的方法实际上相当于我们使用系统的检查更新的功能,只不过是我么需要在命令行运行罢了,这里要用到 WUA API (Windows Update Agent API) ,官网对应的地址在 这里 ,网上看到有大佬用 C++ 结合 windows 的 COM 组件的方法写的一个 demo ,我觉得简单的优化完善一下就能成为一个比较方便快捷的工具,不仅仅可以用来 hack ,作为正常的检查系统更新情况来讲也是非常不错的。
我修改完善后的项目放在了我的 github 上,地址如下(欢迎师傅们提 issue 和 star)
运行效果图:
结果如下:
因为这个工具是按照严重等级从高到底排序的,所以还是比较方便的!
0X02 Linux 下寻找可用的 exp
相比于 Windows, Linux 的漏洞信息相对简单一些,但是还是要推荐这个项目
还有下面这个工具
默认运行即可
root@K0rz3n:~# ./linux-exploit-suggester-2.pl
#############################
Linux Exploit Suggester 2
#############################
Local Kernel: 4.15.0
Searching among 73 exploits...
Possible Exploits:
另外补充其他的两个项目:
https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack/
https://github.com/xairy/kernel-exploits
0X03 总结
作为渗透测试技巧的第一篇,内容还是比较简单的,日后有空会慢慢更新该系列的更多的文章。