天天看點

滲透測試筆記:Windows權限提升

我站在學校恢弘氣派的圖書館前,好奇地看着匆匆的人群,又怯怯地望望入口處刷卡的機器。是的,我沒有身份卡,如何才能進去看一看呢?

......

我站在光滑的大理石鋪砌的地闆上,甚為自己的機智感到自豪。按動了前往8樓的電梯按鈕,不一會兒電梯門開了,一位一臉嚴肅的西裝男站在門口:“請出示您的身份卡。” 我慌慌張張地退入電梯間,不停地按動着1樓的按鈕和關門鍵。在門閉合的那一瞬間,我看到西裝男拿着筆在紙上記錄着:”2016.9.21,不速之客擅闖,本層管理者阻止。”

......

現在我坐在10樓金館長華麗的辦公桌後面,漫不經心地轉着手中的筆,突然響起了敲門聲。“進來。”我得意地應到,剛剛8樓那位呆闆的西裝男站在我面前。“删掉今天的門禁記錄。” “好,請問還有别的事嗎?” “幫我從資料庫取點東西。”

.......

省略号部分請各位腦補~

好了,我今天的滲透故事就依照這個故事講起吧。

之前在給校園網内某站作測試時發現一個小小頁面檔案上傳類型檢測不足,于是上傳檔案getsHell,建立連接配接。

滲透測試筆記:Windows權限提升

進入了圖書館,就要四處浏覽一下了。

首先打開一個模拟cmd,鍵入whoami,這個指令根據字面意思很容易了解,看下自己是誰~

然後就是試下net指令是否存在了,net.exe是專門用來遠端或本地管理windows系統的指令,包含網絡、環境、使用者、服務等方方面面。

net user : 顯示目前系統中注冊的使用者,回車後指令執行成功。

滲透測試筆記:Windows權限提升

看到一個Guest使用者,一個admin使用者,以及一個test使用者。whoami顯示自己是admin使用者,看來管理者是用admin這個使用者來運作伺服器的。

這是不是意味着我們已經擁有了很高的權限了呢?執行幾個敏感度高一點的指令就知道了!

執行 net user Username Passwd /add 指令,在系統裡增加一個使用者會怎麼樣呢?

滲透測試筆記:Windows權限提升

敲下回車後大概等了30秒鐘,毫無反應。。可沒反應并不等于遠端執行指令失敗,于是我滿懷希望的再次執行net user ,看看系統有沒有多加使用者進來,結果還是如前圖所示。

于是我開始揣測,admin賬戶的權限其實并不高,也許連administrators使用者組成員都不是,是以才無法添加使用者到系統中去的。我們知道,windows要添加一個使用者到系統中至少也要是普通管理者級别。于是再利用net指令,将admin賬戶添加進administrators組!

滲透測試筆記:Windows權限提升

這條指令傳回的居然是: 使用者admin已經在administrators組裡面了。奇怪,身為管理者竟然不能夠給系統增加一個

使用者,這管理者難道被降級了?

嘗試去通路了幾個可能存在admin使用者密碼hash的檔案位置,所得到的結果一律是:Permission Denied.

甚至C:\Windows檔案夾也無法通路。我慢慢發覺,這個所謂的admin賬戶僅僅是被賦予了比guest賬戶高一點的權限而已,除了能通路jsp伺服器範圍内的一些檔案,其他系統級的事物根本做不了。

可事實真的如此嗎?

既然隻靠一個内部cmd我無法擴大哪怕一點點自己的權限,那就來它個裡應外合!

我啟動nmap,掃描目标ip位址:

滲透測試筆記:Windows權限提升

這裡給網站運維人員點個贊。。封閉盡量多的端口,降低web伺服器的運作權限都是在給機器的安全上一道道保險。隻是苦了我這測試人員。。

手裡隻有一個admin賬戶,還屬于系統管理者,雖然自身權限不大,但是如果能打開多幾個端口總是有用的。

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f      
以上指令表示在系統資料庫對應鍵值位置插入值,通過系統資料庫直接開啟3389端口。(3389即windows遠端桌面端口)      

這次指令被順利執行了,看到值被順利寫入系統資料庫,我打開nmap重新掃描伺服器端口。

結果仍然隻有80端口是開啟的。

難道指令又沒被執行?不,冷靜下來分析了一下, 作為一台伺服器,不可能隻有80端口開放,作為資料庫連接配接的1433,3306等端口至少應該是開放的,他們應該是被防火牆屏蔽了。

那就關閉防火牆。

滲透測試筆記:Windows權限提升

執行了經典的netsh firewall指令,希望防火牆不要是别的什麼防火牆。。指令響應了大約10秒鐘,傳回執行成功!

再次動用nmap掃描,結果如下:

滲透測試筆記:Windows權限提升

可以看到許多服務都已經處于對外開啟狀态。(這樣容易将系統服務暴露在不安全環境中,測試完後應重新開機防火牆。)

那麼再回到net指令,注意到剛剛是無法添加使用者了,可是根據權限高者操作權限低者不需要低權限者向高權限索要認證的理論,我應該可以随意修改和我平級或權限低于我的使用者的密碼。我把注意力放在了guest(來賓賬戶)上,執行:

net user guest newpasswd 

果不其然,指令成功執行。我迫不及待地啟動rdesktop程式連接配接目标伺服器的3389端口,鍵入了guest賬戶的使用者名和密碼。

滲透測試筆記:Windows權限提升

暈,guest賬戶沒有權限執行遠端登入,又是權限!!

好吧,耐着性子,我再一次使用net 執行 net localgroup administrators guest /add

希望admin的權限能夠将guest使用者添加進使用者組。

和建立新使用者的指令一樣,這個指令也失敗了。

我緊接着嘗試了類似的 net localgroup desktop-users guest /add , 同樣無功而返。

接着我又嘗試 net start telnet,希望借此能開啟telnet服務進而使用guest使用者登入,失敗。

在自己的電腦上嘗試了類似環境下的net指令都是成功後,完全無法明白為什麼添加使用者這樣的權限内操作會失敗。

現在我隻有一個admin使用者的shell,所做的事情非常有限,但如果能添加一個使用者,那麼我将知道這個使用者的密碼,進而完成更多的操作。

問了問度娘,某些防毒軟體會阻止某些net指令的執行過程,急忙傳回webshell,執行tasklist看了一下。

滲透測試筆記:Windows權限提升

基本可以斷定是360攔截了建立使用者的指令,并且很有可能把這條申請寫在了入侵日志中。

抱着不見長江心不死的心态,我執行 

taskkill /im ZhuDongFangYu.exe /f  意圖強制終結360的主動防禦程序,這樣應該就能安心地添加使用者了。

主動防禦程序隻是默默地彈出了一條:拒絕通路。

于是一切又回到了原點,我費了很大力氣打開的端口,關閉了防火牆,修改了來賓賬戶密碼,這一切都被360的主動防禦終結了。不得不感歎,360是很厲害的。

既然回到了原點,那不妨嘗試别的路走走看。

我把注意力集中到我所能通路的目标伺服器上的檔案上來。雖然我能夠通路的目錄隻有區區幾個自己所屬的目錄和各個盤的根目錄,但是web伺服器一定有它自己的配置檔案,那裡面可能包含了資料庫通路密碼,甚至是admin賬戶的登入密碼。

通路檔案目錄:

滲透測試筆記:Windows權限提升

我耐心地一點一點把字尾名為.jsp或.xml以及.ini之類的涉及伺服器後端腳本的檔案全部Download下來,放在了一個檔案夾中。

然後寫了一個遞歸周遊這個目錄下所有檔案的程式,這個程式改自當時我模仿流行勒索軟體的遞歸加密目錄下所有檔案的子產品。

我把它傳到了Github上:點選打開連結

我把搜尋關鍵詞設定為:admin,password,passwd,jdbc,auth,login等等一共10個關鍵詞。

設定并啟動這個腳本大概10秒後,我看到了我想要的: 在一個xml檔案中,存儲着資料庫sa賬戶密碼。 (sa是sqlserver資料庫的超級管理者)

滲透測試筆記:Windows權限提升

我立刻登入一台windows2008伺服器,打開sqlserver manager, 鍵入了sa賬号、密碼,登入成功。

功夫不負有心人,看來之前關閉防火牆是很關鍵的一步。

滲透測試筆記:Windows權限提升

與資料庫建立連接配接後,我無暇顧及有沒有什麼關鍵資料在庫裡面,因為我的目标是提升自己在目标伺服器中的權限,要完成一件事,總要專一點不是麼?

果斷建立查詢,輸入

exec xp_cmdshell 'net localgroup administrators guest /add'

看到了嗎,我就是對讓來賓賬戶變管理者這件事念念不忘啊。

點選執行,卡了2-3秒後,傳回了紅色的字,no。。

createProcess失敗,錯誤代碼5.

通過這句話我首先可以判定,xp_cmdshell這個允許sqlserver調用cmd的存儲過程是存在的,其次,在調用過程中一定是遇到了什麼問題導緻無法建立net程序。那麼是什麼問題呢,不出意外的話,又是權限了。打開資料庫角色管理器看一下:

滲透測試筆記:Windows權限提升

sa使用者并不是以windows身份驗證登入資料庫系統的,而是sqlserver自己的驗證系統,這意味着雖然sa賬号的密碼很複雜, 但是其權限更是低于admin使用者的,想想看,即便是admin使用者來了都不能填加使用者進入管理組,一個更低權限的使用者更是沒有辦法。

真是絕望。我無奈地假設管理者會不經意地将sa與admin賬戶設定為同一份密碼使用,簡單猜解了一下admin使用者的密碼,失敗。

于是祭出第一個殺手锏:

EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\currentversion\run','shell','REG_SZ','C:\windows\system32\cmd.exe /c net localgroup administrators guest /add'

之前admin不是能寫系統資料庫麼,調用master庫的xp_regwrite的存儲過程,通過系統資料庫再調用一個shell執行我的指令。 這次直接傳回了成功查詢! Nice啊,就在我以為一切順利,已經登頂成功的時候,我打開3389視窗,鍵入了guest來賓賬戶的資訊。 又是和之前相同的提示,該使用者未授權使用遠端桌面! 任我多次嘗試,總是傳回查詢成功,可實際上的确沒有任何效果。

隻能祭出第二道殺手锏:

exec master..xp_regwrite HKEY_LOCAL_MACHINE,SOFTWAREMicrosoftJet4.0Engines,SandBoxMode,REG_DWORD,1

調用regwrite使jet引擎進入沙盒模式,

select * from openrowset(microsoft.jet.oledb.4.0,;database=c:\windows\system32\ias\ias.mdb,select shell("cmd.exe /c net localgroup administrators guest /add"))

利用jet執行cmd指令。

這個方法寄希望于c:\windows\system32\ias\ias.mdb這個檔案的存在。幸運的是這個檔案的确存在于目标伺服器上,不幸的是傳回了紅字。。jet引擎在目前模式下不支援分布式查詢,意味着隻能在localhost域上執行。 于是我理所當然地傳回了webshell,執行osql指令。沒想到這個時候cmd卻讓我輸入admin使用者的密碼了! 根本沒有機會登入sa賬号。

于是繞了一大圈之後,再次回到原點。一切都沒改變,我擁有的僅僅是admin賬戶的一個cmd通路權限以及一個來賓賬戶。

盡管嘗試了這麼多種提權組合,資料庫的存儲過程都用盡了,還是沒能提升權限,不免使我感覺非常沮喪。

就這麼算了吧。

即使我通過cmd上傳了一段木馬程式并執行,這也很難躲過伺服器上360的那雙眼,還有什麼辦法呢?還有什麼辦法? 對,問題就在360. 如果沒有360,那麼通過admin賬戶就可以直接提權了。可是360程序又無法殺死。 但是如果360程序是由admin賬戶開啟的,那麼我直接登出admin賬戶,你360還會存在麼?不,不會了,360會停止服務!

晚上20:59分。

大腦裡電光火石般閃過上述理論,雖然未經實驗,但感覺是一個辦法!于是我直截了當地在Webshell裡敲入簡單的一行指令:

logoff.

回車後,webshell居然自動退出了。我試圖重新啟動虛拟終端,卻得到提示:connection refused! 對,伺服器程式也是由admin使用者啟動的,随着admin使用者程序的結束,他所啟動的使用者空間程序都退出了! 可與此同時,我也失掉了webshell的通路權限,沒有權限,就沒辦法執行指令,怎麼辦??

同時我也吃驚地發現,網站首頁已然處于無法通路狀态:      
天哪,這已不僅僅是提權了,這是要玩大了的節奏。我必須想辦法提權不說,還要重新啟動網站web伺服器程序才行。      
否則網站管理者很快就會發現異常,而我所有的行為都被忠實地記錄在伺服器的日志檔案中。      
還好,我沒有慌張,因為剛剛腦子已經很清晰地分析清楚了,現在既然360已經退出,那麼sa賬戶是有可能執行成功指令的吧!
 
 
  對,再試一下好了。
 
 
  于是我再打開一個查詢框,鍵入了 exec xp_cmdshell 'net localgroup administrators guest /add'
 
 
  點選回車的一瞬間,執行成功。
 
 
  于是抓緊時間,登入3389端口,鍵入guest賬戶後,一個嶄新的伺服器桌面出現在我眼前。看來這個來賓賬戶沒有人使用過。我心想。
 
 
  既然擁有了管理者權限,又沒有了360礙事,剩下的就看我動作快不快了。我必須進入到已經停擺的admin賬戶中,恢複tomcat程式才行。于是我打開系統資料庫編輯器,找到LOCAL_MACHINE中的SAM項,修改通路權限,得到如圖:
 
 
  
        
滲透測試筆記:Windows權限提升
從Names裡面找到我的guest賬号和admin賬号的系統資料庫資訊,導出admin賬号所對應的系統資料庫資訊,将guest賬号的資訊覆寫為admin賬号的資訊,我迅速的完成了這個替換賬号的過程,然後開一個cmd執行: net user guest /del 删除 随後輕按兩下導入系統資料庫。 關閉遠端桌面再用guest賬戶連接配接之後,桌面上多了好多檔案與程式,我知道我已經成為了admin賬戶的主人了。接下來,趕緊找到tomcat的啟動批處理并執行之,再通路網站首頁時,一切都恢複了正常。 呼出cmd,清理了我留下的大量日志,退出sa賬号,建立隐藏超級管理者。 對我這種菜的一筆的測試員來說,這種幾乎不借助任何工具的權限提升真的是非常大的挑戰。在期間遇到的諸多問題除了經驗和大膽的想象以外基本無所憑借,故記錄下整個過程,以便大家能從中汲取些有幫助的思路以及增強反提權的一些措施。 最後再說一句,網站的管理者還是不錯的!抛開漏洞不說,反制提權方面已經做得非常不錯,如果360不是以admin賬戶啟動的,我基本不再有機會。

exec master..xp_regwrite HKEY_LOCAL_MACHINE,SOFTWAREMicrosoftJet4.0Engines,SandBoxMode,REG_DWORD,1