Board logo

标题: [其他] 【已解决】调用mshta的输出带空格的字符串出错的问题 [打印本页]

作者: zhanglei1371    时间: 2014-7-8 21:47     标题: 【已解决】调用mshta的输出带空格的字符串出错的问题

本帖最后由 pcl_test 于 2017-6-19 13:39 编辑

问题如下:
第一个:
  1. set s="hello world ABC"
  2. mshta "javascript:alert(%s%)"
复制代码
当变量s有空格时,就会出问题,当然可以用\x20来表示【感谢CRLF大师的提示】,但是如果s中有很多空格,如何在mshta中直接加个东西来避免空格的影响?
第二个,表示回车的方法:
我对下面的方法有些不理解,因为在启用变量延迟的情况下,只要不在循环内,%%和!!的结果基本相同,但是下面这个:
  1. set "hc=&echo."
  2. echo abc%hc%def
  3. echo abc!hc!def
复制代码
第一种情况能显示两行:abc,def
但是第二种!!方法的结果只有一行:abc&echo.def
这时为何二者不同?如何用!!号显示出同样的结果?
作者: wankoilz    时间: 2014-7-8 22:31

本帖最后由 pcl_test 于 2017-6-19 13:36 编辑

试试下面的方法:
1.
  1. mshta "javascript:alert('a b c')"
复制代码
2.将换行符保存到变量:
  1. @echo off&setlocal enabledelayedexpansion
  2. set Lf=^
  3. echo !Lf!end
  4. pause
复制代码

作者: CrLf    时间: 2014-7-8 23:32

本帖最后由 CrLf 于 2014-7-10 17:41 编辑

1、
可以这样:
  1. mshta javascript:alert('a#b#c'.replace(/#/g,'%%20'));close()
复制代码
也可以这样(方法借鉴自 terse):
  1. dir|mshta javascript:alert(new%20ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0).ReadAll());close()
复制代码
2、
变量延迟与普通变量的区别就在于是否影响语法解释
  1. echo abc%hc%def
复制代码
是先把 %hc% 解释为 &echo.,再理解成两个 echo 命令,而
  1. echo abc!hc!def
复制代码
是先理解为一个 echo 命令,再将 !hc! 解释为 &echo.
作者: zhanglei1371    时间: 2014-7-8 23:39

回复 2# wankoilz


   谢谢,单引号是个不错的方法
如果事先把 a b c赋予变量s:
set "s=a b c"
这时,alert(’%s%‘),加单引号就不行了,也就是说,对于变量的情况,有没好的解决方法?
作者: zhanglei1371    时间: 2014-7-8 23:42

回复 3# CrLf


    感谢大师解答。第一种应该就是先把空格替换为#,然后在js中再进行replace回来;
第二个问题解答的很到位!
作者: terse    时间: 2014-7-9 12:55

第一个问题 单引号可以不
  1. @echo off
  2. set "s=hello world ABC"
  3. mshta "javascript:alert('%s%');close()"
复制代码
第二个问题 换行回车
  1. @echo off&setlocal enabledelayedexpansion
  2. set "s=hello world ABC"
  3. for /f "delims=b" %%i in ('cmd /u /c echo;戍') do set s=!s: =%%i^
  4. !
  5. echo s=!s!
  6. pause
复制代码

作者: yu2n    时间: 2014-7-10 08:21

回复 3# CrLf
  1. 也可以这样(方法借鉴自 terse):
  2. dir|mshta javascript:alert(new%20ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0).ReadAll())(close)
复制代码
我這裡執行時,提示(close)沒有對象,改為(window.close())就不報錯了。
作者: zhanglei1371    时间: 2014-7-10 10:31

本帖最后由 zhanglei1371 于 2014-7-10 10:42 编辑

回复 6# terse


    第一个问题,单引号不可以;
第二个可以。
此外,mshta运行后进程中会出现许多mshta.exe的进程,甚至多达十几个,该怎么高效解决,总不能测试一次就手动删除一次吧?
作者: CrLf    时间: 2014-7-10 16:05

本帖最后由 CrLf 于 2014-7-10 17:42 编辑

回复 7# yu2n


    是的,写 mshta vbscript: 习惯了,忘了 js 要加括号...已修正
    其实用 close() 就可以了,window 作为顶级对象可以省掉,大概类似于
  1. with(window){
  2.    //script
  3. }
复制代码

作者: terse    时间: 2014-7-10 17:23

回复 8# zhanglei1371
处理空格的话 单引号可以的吧  貌似引号有问题
变通一下 行不
我走了系统 win7 通过 (引号成单出现会报错)
  1. @echo off
  2. set "s=hello'  "world"  ' 'ABC"
  3. setlocal enabledelayedexpansion
  4. set "s=!s:'=\'!"
  5. mshta "javascript:alert('!s:"=\"!');close()"
复制代码
空格换行的话 直接替换
  1. mshta "javascript:alert('!s:'=\'!'.replace(/ +/g,"\r\n"));close()"
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2