Tag: cmd

cmd.exeparsing错误导致其他利用?

在我继续之前,请注意,这是一个相当长的关于Windows命令提示符的infosec通知,因为我发现了一个可能被使用简单的batch file利用的bug。 这个bug在2000以后的所有Windows版本中都很普遍,在64位和32位机器上都能正常运行,而且这是一个batch fileparsing错误,它不需要额外的软件来安装( cmd.exe是Windows的缺省部分)并且可以由任何具有任何级别的特权的用户启动(假设他们可以运行cmd.exe并因此parsingbatch file)。 在这个总结中包含了错误发生的地方(用代码stream来分析原因)。 这不是一个RCE级的bug(不是我已经能够find的),只是一个DoStypes,并且需要用户运行它(或者把它作为启动项),但是考虑到它的简单性和Windows系统无处不在,我觉得值得再看一下。 请注意,如果您运行任何这些启用batch file的bug并导致系统崩溃(任务pipe理器并在运行失控脚本的情况下终止PID),则我不承担任何责任。 tldr :只有这行^ nul<^的batch file会导致大量的内存泄漏,而只有这一行的batch file会导致命令提示符因“无限recursion”而崩溃。 这些行为可能导致在任何Windows系统(Win2k +)上发生有趣的批量“黑客攻击”,原因是cmd.exebatch file处理中存在逻辑错误(请参阅下面的汇编和伪C代码以获取更多信息)。 背景 在回答关于超级用户( 链接 )的问题时,我遇到了一个有趣的exception情况:命令解释器如何parsingbatch file。 如果脱字符( ^ )是该文件的最后一个字符,则可能会发生内存泄漏/ cmd.exe崩溃。 脱字符必须是文件的最后一个字符,不能跟着\n (换行字符),尽pipe\r (回车符)是正确的,因为在脱字符被parsing之前它已被删除; 没有任何东西可以跟踪它,因为它会导致parsing器正常进行(因为^\r\t会变成“ ^\t因此\t被“忽略”)。 关于回车字符的最后一个注意事项,这个错误仍然发生,这实际上使它更有趣一些,因为它在大多数文本编辑器中“伪造”了一个换行符,而在记事本中,你可能会被愚弄到认为最后有一个换行符'技术上'这是一个回车或'旧的Mac'新线)。 在做了一些快速的调查之后,我发现文件末尾的^可能会导致内存泄漏或者可能导致命令提示符崩溃(更具体地说是command.com或cmd.exe程序),我还发现特定的batch file及其序列)可以导致一些非常有趣的行为。 进一步的调查使我向其他人提出类似的问题。 一个Stack Overflow问题,用户在ss64.com上发现了一个内存泄漏和一个留言板话题,这个话题logging了EOF插入符其他有趣的行为 。 堆栈溢出问题有助于确认暂停,这是一个无限循环types的情况,但没有试图潜水比这更深。 ss64.org主题大多讨论了各种使命令提示符崩溃的方法,但未能解释它是什么样的崩溃或原因。 这当然会让我质疑发生了什么,为什么(可以被利用)。 答案是混合的,修复很简单(至less从我正在检查的程序集看起来是“简单的”)。 我发现可以产生内存泄漏的batch file技巧的几种组合,多快或多慢取决于batch file中的内容(而不是多less插入符号,但pipe道顺序和有趣的行长度[稍后])并且无论崩溃或内存泄漏,parsing器代码在单个线程中处于紧密的循环中,因此CPU使用率显着增加(单核CPU或推送到单个关联,平均产生98%以上的CPU使用率)。 崩溃 要使命令提示符崩溃非常简单,没有换行符的batch file只包含以下字符^&^ (或^|^ ),将导致批处理命令提示符崩溃,错误代码为0xC00000FD ,这是由于无限recursion导致的堆栈/帧溢出。 这证实了'无限循环'的情况,但没有完全解释内存泄漏(或为什么因为无限的recursion而崩溃)。 在这个意义上,我开始研究一些最简单的产生内存泄漏的方法。 事实certificate,一个2字节的batch […]

Windows XP或更高版本Windows:如何在后台运行batch file而不显示窗口?

我知道我已经回答了一个类似的问题( 在Windows启动时在后台运行batch file ),但这次我需要启动批处理: 从另一批次, 没有显示任何控制台窗口, 将所有参数传递给不可见的批处理。 第一批在控制台窗口中执行。 不过,我不希望第二批(以asynchronous方式第一批启动)也显示一个控制台窗口。 我已经想出了一个VBScript脚本,并将脚本作为其他人参考的答案 ,但如果您有其他想法/解决scheme,请随时投稿。 注意:Windows命令处理器的控制台窗口被很多人命名为不正确的DOS窗口。 谢谢大家的答案。 从我的理解,如果我需要asynchronous调用一个脚本运行在一个不可见的模式: 从控制台窗口中的第二个脚本start /b就足够了。 从Windows, 没有触发第二个窗口 ,我的解决scheme仍然有效。

在Windows上使用一个命令更改文件夹中的所有文件扩展名

如何使用Windows命令行将数千个文件的扩展名更改为*****.jpg ?

为什么Windows cmd.exe限制为80个字符?

我喜欢在unix上伸展我的terminal。 windows lame命令行的历史或原因是什么?

为什么git在Windows下不能记住我的密码

我刚刚开始使用混帐,我无法得到它记住我的密码我使用cmd.exe提升,我的git主机是github,我已经创build了一个ssh密钥,就像github上的指南 但我仍然得到 *\subnus.mvc>git push origin master Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':

检查远程主机上一个端口的状态

我需要一个可以检查远程主机端口状态的命令行。 我尝试了ping xxx.xxx.xxx.xxx:161但它不能识别“主机”。 我认为这是一个“好”的答案,直到我对一个我知道该端口打开的主机执行相同的命令。 这是针对Windows上的一个batch file,它将检查远程端口的状态,然后运行使用该远程端口获取信息的命令,然后再次执行远程端口检查命令,然后使用下一个服务器上该端口的命令获取信息, 等等。 我已经到处寻找,并认为ping可能会做到这一点,但必须有各种版本的ping,我认为作为服务器,我这样做并没有显示该选项。 只是笑,我试图从网站的基于Web的远程端口检查器 – 结果是正确的“问题”服务器和正确的服务器。 但是,我不能在批处理中使用500多个服务器IP。 有什么我能做的很简单吗? 我的Perl技能非常生疏(使用它或丢失它),不知道除批处理以外的任何其他基于Windows的语言。 Unix是我的技能,但这必须从Widows Server 2003执行。

如何从命令提示符下以“以pipe理员身份运行”运行应用程序?

我有一个名为test.bat的batch file。 我在test.bat文件中调用下面的指令: start /min powershell.exe %sysdrive%\testScripts\testscript1.ps1 当我通过命令提示符运行时,我的testscript运行成功。 我想以pipe理员身份运行它(就像我创build了桌面快捷方式并以pipe理员身份运行一样,不应提示input任何用户名或密码)。 我曾尝试在上面的test.bat添加/elevate和/NOUAC参数,但没有运气。 我该如何解决这个问题? 我知道如何手动,但我希望这是从命令提示符执行。 (通过Marnix Klooster ):…没有使用任何额外的工具,如超级用户问题的答案中所build议的那样如何使用提升的权限从命令行运行程序 。

如何从cmd永久更新PATHvariables? 视窗

如果我从cmd执行set PATH=%PATH%;C:\\Something\\bin ,然后执行echo %PATH%我看到这个string添加在path中。 如果我closures并打开cmd,那么新的string不在PATH中。 我如何从cmd永久更新所有进程的PATH,而不仅仅是当前进程? 我不想通过进入系统属性 – >高级 – >环境variables并在那里更新PATH来做到这一点。 这个命令必须从Java应用程序执行(我的另一个问题 )。

如何使用命令行解压文件?

我可以通过命令行解压缩文件吗? 最好使用开源/免费工具。

从Windows cmd脚本执行多个命令

我试图编写一个Windows cmd脚本来执行几个系列任务。 但是,在脚本中的第一个命令之后它总是停止。 它停止后的命令是一个maven构build(不知道这是相关的)。 我该如何让它继续进行并依次运行每个任务? 安装任何软件或configurationregistry等是完全没有问题的 – 它必须工作在香草Windows XP安装恐怕。 理想情况下,如果有任何命令失败,我希望脚本中止,但是这是一个“很好有”,不是必需的。 谢谢。