标题: 大家看看 ">>> 会出现什么 [打印本页]
作者: neorobin 时间: 2012-4-13 15:23 标题: 大家看看 ">>> 会出现什么
闲来无事, 在命令行瞎敲了些东西- ">
- ">>
- ">>>
- ">>>>
- ">>>>>
- ">>>>>>
- ">>>>>>>
- ">>>>>>>>
- ">>>>>>>>>
- ">>>>>>>>>>
复制代码
我的机器上, ">> 打开了 C:\Program Files\Borland\Delphi7\Bin 目录下的 oh.exe
">>> 打开了 D:\My Documents\neo 下的 123.bat
">>>>> 打开了 C:\Program Files\Borland\Delphi7\Bin 下的 brc32.exe
这些被打开的可执行文件所在的目录都包含在 %path% 里.
初步猜测, 这里 > 被用成了通配符, 就象 ? 一样, 通配一个字符, 在 %path% 所包含的那些目录路径中, 如果能搜索到一个文件名字符数量(不算 . 号及扩展名, 取字节还是字符不确定)上可以与 > 的数量相匹配的可执行文件(.exe, .bat, .cmd 等), 就会打开那个文件, 而匹配的优先级, 猜测是以字符串次序, 当然这些都只是猜测, 各位若有兴趣, 望请劳烦弄清因由.
作者: cjiabing 时间: 2012-4-13 15:50
- C:\Documents and Settings\甲兵>">
- '">' 不是内部或外部命令,也不是可运行的程序
- 或批处理文件。
-
- C:\Documents and Settings\甲兵>">>
- 列表是空的。
-
- C:\Documents and Settings\甲兵>">>>
- '">>>' 不是内部或外部命令,也不是可运行的程序
- 或批处理文件。
-
- C:\Documents and Settings\甲兵>">>>>
- '">>>>' 不是内部或外部命令,也不是可运行的程序
- 或批处理文件。
复制代码
作者: neorobin 时间: 2012-4-13 20:22
回复 1# neorobin
下面的形式都 可能 打开 记事本 或者 画图, 而 ">>>>>>> 却可能什么也打不开
这些形式只是部分列举而已, 并不限于 7 个字符的情形, 比如 "m>c 有可能打开 mmc, "fr>>>ell 可能打开 空当接龙, ">>>>arts 可能打开 红心 游戏, 等...- ">otepad
- ">>tepad
- ">>>epad
- ">>>>pad
- ">>>>>ad
- ">>>>>>d
-
- ">spaint
- ">spain>
- ">spa>>>
- ">spa>>>
- ">spa>>t
- ">>>>>>t
- "m>>>>>t
- "m>p>>>t
- ">>pai>t
复制代码
作者: applba 时间: 2012-4-13 20:41
回复 3# neorobin
单引号实际上是双引号的略写。
<或>都可以用来代替一个字符。- "mspai>>"
- "mspai<<"
- "mspai<>"
复制代码
作者: fatcat 时间: 2012-4-13 20:54
本帖最后由 fatcat 于 2012-4-13 21:01 编辑
回复 4# applba
这些也可能打开 记事本- "not>>><"
- "not>>><
- "not>><<
- "not><<<
- "not<<<<
- "no<<<<<
- "no<<<ad
- "no<<<a<
复制代码
作者: applba 时间: 2012-4-13 20:57
回复 5# fatcat
notepad或notepad.exe
作者: fatcat 时间: 2012-4-13 21:00
回复 6# applba
惭愧, 确实打错了字母, 更正了
作者: zjw767676 时间: 2012-4-13 21:17
- Microsoft Windows [版本 6.1.7601]
- 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
-
- D:\Users\zjw>">>
- 拒绝访问。
-
- D:\Users\zjw>">>>
-
- D:\Users\zjw>">>>>
- '">>>>' 不是内部或外部命令,也不是可运行的程序
- 或批处理文件。
-
- D:\Users\zjw>">>>>>
-
- D:\Users\zjw>">>>>>>
- '">>>>>>' 不是内部或外部命令,也不是可运行的程序
- 或批处理文件。
-
- D:\Users\zjw>">>>>>>>
- '">>>>>>>' 不是内部或外部命令,也不是可运行的程序
- 或批处理文件。
复制代码
作者: CrLf 时间: 2012-4-13 21:37
真是奇怪的现象,试了下似乎只有<>这俩字符有此效果,而其他几个保留字符中,: \ / ? 这四个符号可以解释为它们可能属于路径信息的一部分,而 * 和 | 两个字符却说不通为何会区别于 < 和 >
作者: fatcat 时间: 2012-4-13 23:01
简单测试后, 认为是按 字符 而非 字节 匹配的, 另外搜索路径不止于 %path% 包含的, 也包括当前工作目录, 另外可匹配的文件也包括不可执行的文件, 但扩展名部分不省略:
如: 中文file.txt 用下面的方式都可匹配:复制代码
作者: gawk 时间: 2012-4-13 23:15
回复 10# fatcat
而且,当前目录的优先级高于%path%,是这样吧。
作者: CrLf 时间: 2012-4-15 19:03
顶起等待 qzw 分析
作者: ivor 时间: 2012-4-15 19:51
复制代码
作者: rat 时间: 2012-4-17 10:31
cmd调用了函数FindFirstFile,这个API导致了楼主发现的问题!
查MSDN,也没有发现FindFirstFile对“<”和“>”如何处理的具体描述。
参考链接:
http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx
http://msdn.microsoft.com/en-us/ ... (v=vs.85).aspx?id=3
作者: qzwqzw 时间: 2012-4-21 23:32
回复 14# rat
如你所言
问题很可能出在FindFirstFile()上
在双字节字符集环境下它实际上就是FindFirstFileW()
在cmd层级只将? * 视作文件通配符
但FindFirstFile也将 < > 视作文件通配符
>会匹配相当于0个或1个任意字符,相当于?
<会匹配相当于0个或多个任意字符,相当于*
在做可执行程序调用时
cmd会检查 ? * 的存在并给出错误提示
但对< >会不做任何处理
因为一般情况下
< >会在解析文件名之前
就被当作重定向符号而被脱去
但如果< >被^或者"转义
则在文件查询请求交给FindFirstFile时
< > 仍然会作为文件名的一部分存在
导致FindFirstFile发生通配现象
值得注意的是
FindFirstFile()在很多种情况下被直接或间接调用
比如for命令的文件集
它们也存在类似的现象或者称之为问题
FindFirstFile的宿主程序Kernel32.dll历经多次升级
不太可能留下如此明显的bug
因此我猜测这个现象更像是一个undocumnetd后门
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |