CVE-2020-1048、CVE-2020-1337漏洞原理及利用

2021-02-08 看雪學院

本文為看雪論壇優秀文章

看雪論壇作者ID:Cc28256




今年5月,微軟發布安全補丁以修補Windows 印表機後臺處理程序高危本地提權升級漏洞,編號CVE-2020-1048。它可以獲取系統管理員權限,甚至部署持久化後門,影響範圍自1996年以來發布(Windows NT 4)的所有Windows版本。


這個漏洞的核心原理在於Windows添加印表機時,對port name的檢查函數可以被繞過,設置為任意文件,因此我們可以把任意內容輸出到port name對應的系統文件(如某個dll)中,實現權限提升。經過補丁後,緊隨其後的CVE-2020-1337又有姿勢可以繞檢查。




Printers, Drivers, Ports

 

印表機至少有兩個要素:


1. 印表機埠


你可以認為它是現在的USB埠,甚至是TCP/IP埠(和地址),印表機可以列印到一個文件(在Windows 8及以上)。


2.印表機驅動程序        


這曾經是一個內核模式組件,但是有了新的"v4"模型,這些都是在用戶模式下完成的,到現在已經超過十年。

 

由於以Spooler實施的服務Spoolsv.exe具有SYSTEM特權,並且可以通過網絡訪問,因此這兩個要素吸引了人們執行各種有趣的攻擊。


為了使標準用戶帳戶更容易使用,並且由於這些帳戶現在以用戶模式運行,只要驅動程序是一個  預先存在的,內置驅動程序,不需要任何特權就可以安裝一個列印驅動程序。


Add-PrinterDriver -Name "Generic / Text Only"



添加一個印表機埠:


Add-PrinterPort -Name "C:\windows\tracing\myport.txt"

Get-PrinterPort | ft Name 可以查看到或者查看註冊表這個位置:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports


在peocessmointer監控中可以看到這個動作(發現測試幾次截圖時搞混了沒有原來的圖了,下面截圖中的C:\windows\test\test.txt實際上是C:\windows\tracing\myport.txt)



系統中添加一臺新印表機:


Add-Printer -Name "PrintDemon" -DriverName "Generic / Text Only" -PortName "c:\windows\tracing\myport.txt"


輸出到文件:


"Hello,Printer!" | Out-Printer -Name "PrintDemon"

列印到內容在c:\Windows\tracing\myport.txt,我們找到這個文件查看一下:



hiew打開文檔會發現內容實際比我們輸入的要多,PowerShell認為這是實際的印表機。因此會按照文檔格式的邊距,為頂部邊距添加了幾行新內容。 


讓我們重新創建新的文件C:\Windows\System32\Ualapi.dll,這個位置因為需要特特殊的權限所以會被阻攔 這個函數會使Windows print spooler服務對埠的合法性校驗,當前用戶無法將其設置為一個自己不具有訪問權限的路徑創建文件時,會檢查Token權限進行驗證,同時IDA中也能找到這段代碼:


但是只有當用戶選擇了「列印到文件」選擇框,在列印對話框中可以看到。
Client Side Port Check Vulnerability 
(CVE-2020-1048)PowerShell使用add-printer命令在底層則是直接調用XcvData函數,這個函數可以將port name設置為任意文件而不被檢查。就是這麼簡單,UI對話框具有檢查功能,而PowerShell的WMI列印提供程序模塊則沒有。
只需Add-PrinterPort -Name c:\Windows\system32\ualapi.dll在PowerShell窗口中執行即可。


經過補丁後,緊隨其後的CVE-2020-1337又有姿勢可以繞檢查。https://github.com/math1as/cve-2020-1337-exploit
powershell -ep bypass -F C:\CVE-2020-1337-exploit-master\exploit.ps1

在查看了公布的腳本文件可以發現它的命令也是非常的簡單,在執行上述過程中添加了一條命令創建一個系統目錄軟聯接:
cmd /c mklink /J c:\users\test\mytarg5 C:\Windows\system32

無論是AddPort還是修復後的XcvData函數進行檢查時,都是判斷當前用戶是否具有對目標路徑的訪問權限的。
將port name指向c:\users\test\myfolder\xxx.dll,通過檢查後,再將mytarg5作為一個軟連結重定向到目標的系統路徑中,即可完成對補丁的繞過。
創建一個軟連接,將文件列印位置改為c:\users\test\mytarg5,便會在C:\Windows\system32下成功創建ualapi.dll。
首先能夠將這位置釋放文件所以我們就要想盡辦法利用上,顯然容易受到dll劫持嘗試攻擊的服務第一個突破口。

運行Process Monitor,啟動所有服務進行嘗試,不過我們要在做的時候需要一些限制,我們現在想提高特權。因此,我們需要尚未啟動的服務或者尋找一個可以被標準用戶停止的服務。

啟動服務通常需要管理權限,這不是我們想要的,通過accesschk工具我們可以很方便的獲取所有服務的權限:
accesschk.exe -c * -L > servsddl.txt
 [0] ACCESS_ALLOWED_ACE_TYPE: Everyone SERVICE_QUERY_STATUS SERVICE_START

現在讓我們啟動FAX服務,並通過ProcessMonitor監控他:


在啟動列印這個服務時,他會嘗試尋找ualapi.dll。
所以我門將這個dll放置到這個位置,然後驚喜的發現,啟動spoolsv時會發現也會尋找這個dll:經過對比他們都有相同的尋找ualapi.dll的代碼,在下面的IDA中可以看到,該服務使用GetProcAddress查找ualapi.dll一些導出:
既然能夠加載我們先前釋放的動態庫,dllmain中就可以執行我們想要執行的代碼,從github上拿到的示例運行(運行在windows10系統上),他釋放了一個PE在system32下,代碼也非常簡單的運行whoami查看權限。執行後權限是system,這就代表你能做很多事情。正當我想著如何利用dll被加載起來後,驚喜的在後面的代碼中發現,在spoolsv.exe中也有調用導出函數,這只需要我們稍微構造一下,就能製造一個永久後門,即使補丁修正後它依然存在。


如果你不幸被該漏洞利用了,由於即使補丁修正後它依然存在,所以你需要在PowerShell中掃描所有基於文件的埠,查看HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports其中包含文件路徑的任何埠,尤其是以.DLL或擴展名結尾的埠。這是一個非常容易利用的漏洞,你完全可以將一份後門代碼構造出現在spoolsv.exe的調用中。


https://github.com/math1as/cve-2020-1337-exploit
https://github.com/ionescu007/faxhell
https://mp.weixin.qq.com/s/LLzIlKrrfpJuk6CGBRZMvw
https://windows-internals.com/faxing-your-way-to-system/
https://windows-internals.com/printdemon-cve-2020-1048/



看雪ID:Cc28256

https://bbs.pediy.com/user-845934.htm

  *本文由看雪論壇 Cc28256 原創,轉載請註明來自看雪社區。





相關焦點

  • 【智庫觀點】CVE-2020-0601漏洞原理、檢測和利用
    漏洞檢測如果看見「Hello World!」
  • CVE-2020-XXXX,大分享(一)!
    ) CVE-2020-1048- [zveriu/CVE-2009-0229-PoC](https://github.com/zveriu/CVE-2009-0229-PoC)- [shubham0d/CVE-2020-1048](https://github.com/shubham0d/CVE-2020-1048)CVE-2020
  • ZeroLogon(CVE-2020-1472) 分析與狩獵
    2020年9月11日,安全公司Secura發布了公告,披露了Microsoft在2020年8月修補的漏洞細節(CVE-2020-1472
  • 關於CVE-2020-1048 | PrintDemon本地提權漏洞的預警通報
    (CVE-2020-1048),可以用來劫持Printer Spooler機制,該漏洞影響自1996年以來發布(Windows NT 4)的所有Windows版本。 0x00 漏洞概述0x01 漏洞詳情 2020年5月12日安全研究人員Alex Ionescu和Yarden Shafir發布漏洞報告,在Windows列印服務中發現了一個安全漏洞(CVE-2020-1048),可以用來劫持Printer
  • IE jscript9.dll UAF漏洞利用復現(CVE-2020-1380)
    這是今年8月被披露的一個IE在野漏洞,本文將在重點探討這個漏洞的利用部分(側重於x86平臺),希望本文可以給後續分析此類漏洞的分析人員帶來幫助。本文重點來看一下這個漏洞的利用過程,卡巴斯基的blog和@iamelli0t在看雪峰會上的演講都提到了這個漏洞利用的思路,但沒有給出完整的利用代碼(本文也不會給出完整的利用代碼),筆者藉助這些提示對該漏洞利用進行了復現,接下來分享一些在利用編寫過程中遇到的關鍵點。
  • Apache-Tomcat-Ajp漏洞(CVE-2020-1938)漏洞復現
    此漏洞為文件包含漏洞,攻擊者可利用該漏洞讀取或包含 Tomcat 上所有 webapp 目錄下的任意文件,如:webapp 配置文件、原始碼等。二、漏洞編號:cnvd-2020-10487cve-2020-1938三、受影響版本:apache tomcat 6apache tomcat 7 < 7.0.100apache tomcat 8 < 8.5.51apache tomcat 9 < 9.0.31已修復版本
  • CVE-2020-2883漏洞復現
    簡介在Oracle官方發布的2020年4月關鍵補丁更新公告CPU(Critical Patch
  • Oracle cve 2020-14644 分析利用以及回顯思路(附工具下載)
    最終變量值為null0x01 cve-2020-14644 漏洞分析簡單來講,該漏洞在反序列化時通過defineClass直接加載類。definition.getBytes(); definition.dumpClass(DUMP_REMOTABLE); return this.defineClass(sClassName, abClass, 0, abClass.length); }在這裡我們只需要通過iiop協議,直接將RemoteConstructor對象發送給weblogic服務即可0x02
  • TeamViewer 遠程代碼執行漏洞通告 (CVE-2020-13699)
    2020年8月6日,TeamViewer官方發布了TeamViewer URL處理的風險通告。TeamViewer存在未引用的搜索路徑或元素的安全缺陷,由於應用程式沒有正確引用它的自定義URI處理程序,當安裝了TeamViewer的易受攻擊版本的用戶訪問惡意創建的網站時,可能會被黑客利用。深信服安全研究團隊依據漏洞重要性和影響力進行評估,作出漏洞通告。
  • CVE-2020-8554:Kubernetes的中間人漏洞
    漏洞概述2020年12月4日,Kubernetes產品安全委員會披露了一個新的Kubernetes漏洞,即CVE-2020-8554
  • GRUB2 BootHole漏洞 (CVE-2020-10713) 通告
    「BootHole」(CVE-2020-10713),即使啟用了Secure Boot,也可在啟動進程中執行任意代碼。攻擊者可利用該漏洞安裝持久且隱秘的bootkit或惡意引導程序來控制設備。該漏洞影響使用Secure Boot的系統,即使它們不使用GRUB2。所有籤名的GRUB2均受影響,這意味著幾乎所有的Linux 發行版均受影響。此外GRUB2還支持其它作業系統、內核和管理程序如Xen。
  • Exchange漏洞系列分析(一) 【CVE-2021-26855、CVE-2021-27065】
    安全研究員Orange Tsai於2020年底發現該系列漏洞並命名。ProxyLogon是Exchange歷史上最具影響力的漏洞之一,有上千臺Exchange伺服器被植入了webshell後門。0x01 漏洞描述CVE-2021-26855是一個SSRF漏洞,利用該漏洞可以繞過Exchange的身份驗證,CVE-2021-27065是一個文件寫入漏洞。二者結合可以在未登錄的狀態下寫入webshell。
  • CVE-2020-13699: TeamViewer 用戶密碼破解漏洞通告
    報告編號:B6-2020-081002報告來源:360CERT報告作者:360CERT更新日期:2020-08-100x01 漏洞簡述2020年08月10日,360CERT監測發現TeamViewer官方發布了TeamViewerURL處理的風險通告,該漏洞編號為CVE-2020-13699,漏洞等級:高危,漏洞評分:8.8分。
  • 嚴重漏洞|Android系統藍牙MAC地址發起RCE攻擊漏洞(CVE-2020-0022,BlueFrag)
    更新修復了Android系統中的一個嚴重漏洞,該漏洞會影響藍牙子系統,並且無需用戶幹預即可被遠程利用,漏洞編號為CVE-2020-0022,又被稱為「BlueFrag」。利用此類漏洞的風險在於可以將其用於實施在移動惡意軟體中蠕蟲攻擊,該攻擊可能會使惡意軟體迅速從一個受感染的設備通過藍牙傳播到附近的另一臺設備。僅當攻擊者知道目標的藍牙MAC地址時,該漏洞才能被利用,但藍牙MAC地址是很容易檢索到的。
  • NetLogon 域內提權漏洞(CVE-2020-1472)復現過程
    大家好,這裡是 滲透攻擊紅隊 的第 46 篇文章,本公眾號會記錄一些紅隊攻擊的筆記(由淺到深),不定時更新CVE-2020-1472是一個windows域控中嚴重的遠程權限提升漏洞,攻擊者通過NetLogon,建立與域控間易受攻擊的安全通道時
  • CVE-Flow:CVE EXP監控和預測
    漏洞的兩大要素:危害程度和被利用的難易程度。前者和後者共同決定了漏洞的威力,一定程度上,後者相當於給前者加了個權,更具有實際價值,應更受關注。高危的難利用漏洞和中危的易利用漏洞,考慮ROI,攻擊者更可能利用易利用的中危漏洞。
  • 關於這些年來Windows遠程代碼執行漏洞CVE
    >永恆之藍MS17-010  通過445和139埠來利用SMBv1和NBT中的遠程代碼執行漏洞溢出,惡意代碼會掃描開放445文件共享埠的windows。CVE-2019-0708  CVE-2019-0708漏洞是通過檢查用戶的身份認證,導致可以繞過認證,不用任何的交互,直接通過rdp協議進行連接發送惡意代碼執行命令到伺服器中去。如果被攻擊者利用,會導致伺服器入侵,中病毒,像WannaCry 永恆之藍漏洞一樣大規模的感染。
  • CVE-2020-1034:Windows內核特權提升漏洞分析
    在2020年9月的Windows補丁日,修復了幾個漏洞,這些漏洞允許實現內核特權提升。到目前為止,還沒有關於這些漏洞的細節或分析文章。在這篇文章中,我將介紹我對於CVE-2020-1034漏洞的研究。0x01 補丁差異分析受影響的模塊是ntoskrnl.exe。
  • 2020.8.17-8.23一周知識動態
    •Breaking the D-Link DIR3060 Firmware Encryption - Recon - Part 1https://0x434b.dev/breaking-the-d-link-dir3060-firmware-encryption-recon-part-1/D-Link DIR3060固件加密解析漏洞利用相關
  • weblogic CVE-2020-14750漏洞對應補丁分析
    針對新發布的weblogic的 CVE-2020-14750 漏洞,oracle發布最新的小補丁,並且此小補丁是需要2020