标题: [其他] 【已解决】调用mshta的输出带空格的字符串出错的问题 [打印本页]
作者: zhanglei1371 时间: 2014-7-8 21:47 标题: 【已解决】调用mshta的输出带空格的字符串出错的问题
本帖最后由 pcl_test 于 2017-6-19 13:39 编辑
问题如下:
第一个:- set s="hello world ABC"
- mshta "javascript:alert(%s%)"
复制代码
当变量s有空格时,就会出问题,当然可以用\x20来表示【感谢CRLF大师的提示】,但是如果s中有很多空格,如何在mshta中直接加个东西来避免空格的影响?
第二个,表示回车的方法:
我对下面的方法有些不理解,因为在启用变量延迟的情况下,只要不在循环内,%%和!!的结果基本相同,但是下面这个:- set "hc=&echo."
- echo abc%hc%def
- echo abc!hc!def
复制代码
第一种情况能显示两行:abc,def
但是第二种!!方法的结果只有一行:abc&echo.def
这时为何二者不同?如何用!!号显示出同样的结果?
作者: wankoilz 时间: 2014-7-8 22:31
本帖最后由 pcl_test 于 2017-6-19 13:36 编辑
试试下面的方法:
1.- mshta "javascript:alert('a b c')"
复制代码
2.将换行符保存到变量:- @echo off&setlocal enabledelayedexpansion
- set Lf=^
-
-
- echo !Lf!end
- pause
复制代码
作者: CrLf 时间: 2014-7-8 23:32
本帖最后由 CrLf 于 2014-7-10 17:41 编辑
1、
可以这样:- mshta javascript:alert('a#b#c'.replace(/#/g,'%%20'));close()
复制代码
也可以这样(方法借鉴自 terse):- dir|mshta javascript:alert(new%20ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0).ReadAll());close()
复制代码
2、
变量延迟与普通变量的区别就在于是否影响语法解释复制代码
是先把 %hc% 解释为 &echo.,再理解成两个 echo 命令,而复制代码
是先理解为一个 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
第一个问题 单引号可以不- @echo off
- set "s=hello world ABC"
- mshta "javascript:alert('%s%');close()"
复制代码
第二个问题 换行回车- @echo off&setlocal enabledelayedexpansion
- set "s=hello world ABC"
- for /f "delims=b" %%i in ('cmd /u /c echo;戍') do set s=!s: =%%i^
-
- !
- echo s=!s!
- pause
复制代码
作者: yu2n 时间: 2014-7-10 08:21
回复 3# CrLf - 也可以这样(方法借鉴自 terse):
- 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 作为顶级对象可以省掉,大概类似于复制代码
作者: terse 时间: 2014-7-10 17:23
回复 8# zhanglei1371
处理空格的话 单引号可以的吧 貌似引号有问题
变通一下 行不
我走了系统 win7 通过 (引号成单出现会报错)- @echo off
- set "s=hello' "world" ' 'ABC"
- setlocal enabledelayedexpansion
- set "s=!s:'=\'!"
- mshta "javascript:alert('!s:"=\"!');close()"
复制代码
空格换行的话 直接替换- mshta "javascript:alert('!s:'=\'!'.replace(/ +/g,"\r\n"));close()"
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |