日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CVE-2014-4113_Win32k提权漏洞学习笔记

發布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CVE-2014-4113_Win32k提权漏洞学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.前言

1.漏洞描述

該漏洞發生的位置是在驅動文件Win32k.sys中的xxxHandleMenuMessage函數,產生的原因是沒有對該函數中調用的xxxMNFindWindowFromPoint函數的返回值進行合法性驗證,直接將其作為參數傳遞給后面的xxxSendMessage函數調用,從而造成了提權漏洞。

2.實驗環境

  • 操作系統: Win7 x86 sp1 專業版
  • 編譯器: Visual Studio 2017
  • 調試器: IDA Pro,WinDbg

二.漏洞分析

1.靜態分析

通過IDA直接查看xxxHandleMenuMessage函數,可以在其中看到,在該函數中,會首先調用xxxMNFindWindowFromPoint函數,然后將該函數的返回值作為第一個參數被下面的xxxSendMessage函數調用,該函數會發送一個0xED的消息。

xxxSendMessage函數是通過調用xxxSendMessageTimeout函數來實現的,而在xxxSendMessageTimeout中會有如下的代碼:

此時esi保存的就是xxxSendMessage第一個參數的值,也就是說此時esi=iRet。因此,如果xxxMNFindWindowFromPoint函數的返回值為-5的話,那么,此時call dword ptr [esi + 0x60]就會是call dword ptr [-5 + 0x60],就等于call dword ptr [0x5B]。此時,可以通過在0x5B處保存要執行的ShellCode的地址,那么此處的call dword ptr [esi+0x60]就會執行指定的ShellCode。

而在xxxMNFindWindowFromPoint函數中,會調用xxxSendMessage來發送一個0x1EB的消息。如果xxxSendMessage函數的返回值非0的話(比如-5),那么該返回值就會作為xxxMNFindWindowFromPoint函數的返回值返回回去。

這里IDA反編譯的結果出了問題,在反匯編的代碼中是可以看到,此處的xxxSendMessage函數發送的消息是0x1EB的消息:

2.動態分析

運行exp,在xxxMNFindWindowFromPoint函數發送消息的地址下斷點

\

中斷以后,調用函數發送消息,然后查看返回值可以看到此時的返回值就是-5

繼續運行到xxxMNFindWindowFromPoint函數返回前,可以看到此時的返回值為-5

繼續向下運行到xxxSendMessageTimeout調用函數處的call dword ptr [esi + 60h],可以看到此時的esi等于-5,而0x5B保存了要執行的ShellCode的地址

繼續運行,就會運行ShellCode的代碼完成提權

三.漏洞利用

【→所有資源關注我,私信回復“資料”獲取←】
1、網絡安全學習路線
2、電子書籍(白帽子)
3、安全大廠內部視頻
4、100份src文檔
5、常見安全面試題
6、ctf大賽經典題目解析
7、全套工具包
8、應急響應筆記

想要成功觸發該漏洞,需要使用TrackPopupMenu函數,該函數定義如下:

其中第一個參數hMenu是一個pop-up菜單,第六個參數hWnd則是擁有該菜單的窗口句柄,因此在exp中要創建好這些窗口,然后調用函數觸發漏洞:

同時,在主窗口的處理函數中,也需要進行判斷。如果窗口處于空閑狀態,需要通過PostMessage函數來模擬鼠標和鍵盤的操作,這樣才能成功發送0x1EB的消息來達到漏洞點:

為了讓xxxSendMessage函數返回-5觸發漏洞,還需要通過SetWindowHook來加入鉤子函數,

在鉤子函數中,攔截0x1EB的消息,通過SetWindowLongA函數來修改菜單窗口的屬性。這里的第二個參數傳入的是GWL_WNDPROC,意味著修改的是窗口的處理函數

在窗口處理函數中,如果接收的消息是0x1EB的消息,則調用EndMenu函數銷毀窗口且返回-5來觸發漏洞

最后,由于在xxxSendMessageTimeout中還有如下的驗證:

此時的p就是傳遞的-5,所以在0地址申請內存成功以后,除了將0x5B地址的內容修改為ShellCode的地址外,還需要將0x3和0x11處的數據修改為如下數據:

四.運行結果

最后在系統上運行結果如下,可以看到提權成功。

總結

以上是生活随笔為你收集整理的CVE-2014-4113_Win32k提权漏洞学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。