滲透測試小技巧一:尋找EXP
簡單總結一下滲透過程中尋找 EXP 的一些方法,還順便為 windows 下未打的漏洞補丁的尋找寫了一個小工具,希望師傅們多多支援!
0X01 Windows 下尋找可用的 exp
1.簡單的科普:
拿到一臺 windows 主機,能執行命令了,那麼如果想提權的話最好的方式就是利用現有的 exp 直接打,肯定是要使用 systeminfo 這個命令檢視系統已打補丁,但是尋找可能存在的特權提升漏洞是一個比較麻煩的過程,我們首先需要知道當前的特權提升洞的 KB 列表,然後再與系統systeminfo 中的 KB 列表進行對比( KB是微軟對補丁的命名方式,是Knowledge Base(知識庫)的簡稱,其指的是某個補丁對應微軟知識庫中哪一篇文章。例如KB888111,就是對應知識庫中888111號文章 )。
可以參考的網站如下:這裡面列出了比較新的安全公告
https://docs.microsoft.com/zh-cn/security-updates/
如下圖所示:
MS17-023 對應的補丁就是 KB4014329 ,說明這個來源於 Microsoft 知識庫文章 4014329。
當然這樣似乎還是不是很方便查詢,於是我又找到了一個檔案
這個檔案整理的比較全了,可以說是網頁版的集合
如下圖:
但是這個檔案的冗餘還是非常大的,因為特權提升漏洞相對來講並不是很多,這裡面列出的很多程式碼執行的洞實際上我們並不需要,所以到這一步其實有兩種思路,一種就是按照上面的方法寫指令碼或者怎麼樣找到補丁列表中有但是系統沒有的特權提升補丁,還有一種就是反向思維,找到系統需要更新的補丁,然後反推哪些漏洞存在。
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)
https://github.com/K0rz3n/PatchesTester
執行效果圖:
結果如下:
因為這個工具是按照嚴重等級從高到底排序的,所以還是比較方便的!
0X02 Linux 下尋找可用的 exp
相比於 Windows, Linux 的漏洞資訊相對簡單一些,但是還是要推薦這個專案
https://github.com/SecWiki/linux-kernel-exploits
還有下面這個工具
https://github.com/jondonas/linux-exploit-suggester-2
預設執行即可
root@K0rz3n:~# ./linux-exploit-suggester-2.pl ############################# Linux Exploit Suggester 2 ############################# Local Kernel: 4.15.0 Searching among 73 exploits... Possible Exploits:
另外補充其他的兩個專案:
0X03 總結
作為滲透測試技巧的第一篇,內容還是比較簡單的,日後有空會慢慢更新該系列的更多的文章。