9

我刚刚(2014 年 8 月)看到了一个使用命令行的程序的报告

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication"

这是如何运作的?我认为第一个参数应该是 DLL (mshtml) 的名称,但是 rundll32 是如何解析该命令行的呢?

rundll 参考: http: //support.microsoft.com/kb/164787

4

1 回答 1

17

这里有一个很好的解释:http: //thisissecurity.net/2014/08/20/poweliks-command-line-confusion/

总结使用相同的示例:

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";alert('foo');
  1. 运行DLL32
    1. 解析命令并确定预期的 DLL 是:javascript:"\..\mshtml
    2. 无法将其加载为绝对路径。
    3. 在工作目录或路径中找不到匹配项。
    4. 找不到javascript:"\..\mshtml.manifest模块的清单。
    5. 调用LoadLibrary
  2. 加载库
    1. 添加扩展并尝试加载javascript:"\..\mshtml.dll
    2. 将其视为相对的,因此它从假javascript:"\目录中上升。
    3. 搜索mshtml.dll它在系统目录中找到的内容。
    4. 使用RunHTMLApplication作为入口点加载 DLL 。
  3. 运行HTML应用程序
    1. 尝试执行命令";alert('foo');
    2. 由于这是无效的 Javascript,它调用GetCommandLine来获取返回的原始命令javascript:"\..\mshtml,RunHTMLApplication ";alert('foo');
    3. 尝试打开此 URI 以询问系统如何处理javascript协议,该协议通常在注册表中设置为Microsoft HTML Javascript Pluggable Protocol 。
    4. 然后执行Javascript:"..\mshtml,RunHTMLApplication ";alert('foo');
  4. Javascript
    1. 第一条语句创建一个字符串,并且不对其进行任何操作,这足够有效而不会导致错误。
    2. 继续执行脚本的其余部分。
于 2014-08-21T13:16:32.980 回答