Rundll32.exe javascript

dav*_*vid 7 javascript mshtml rundll32

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

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication"
Run Code Online (Sandbox Code Playgroud)

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

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

The*_*rty 14

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

总结一下使用相同的例子:

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