我有一个只读脚本,第一行关闭回显。例如script.bat
与内容:如何忽略回显并获取命令执行日志
@echo off
REM bunch of logic goes here
@echo on
是否有可能以某种方式欺骗,并得到呼应/印刷反正所有的命令? 我可以在脚本调用之前/之后调用任何东西,只是不能更改脚本代码本身。我想这将是这样的:
REM what can I do here?
call script.bat
REM execution log printed?
我有一个只读脚本,第一行关闭回显。例如script.bat
与内容:如何忽略回显并获取命令执行日志
@echo off
REM bunch of logic goes here
@echo on
是否有可能以某种方式欺骗,并得到呼应/印刷反正所有的命令? 我可以在脚本调用之前/之后调用任何东西,只是不能更改脚本代码本身。我想这将是这样的:
REM what can I do here?
call script.bat
REM execution log printed?
做的更简单的方法,是批处理文件设置为只读是复制文件,删除@echo off
和运行复制的文件。
如果这是不可能的,你可以试试Jeb发现的buffer overflow。创建一个具有以下内容
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(有点超过256个左括号),一个批处理文件,打开一个cmd
实例并执行它。然后,从相同的cmd
实例中,调用script.bat
。 也许如果缓冲区溢出不会干扰,您可以看到执行的命令。
在这一刻我不记得另一种方式。
注:就完成,你问什么是技术上是可行的,但不能直接解决的。前一段时间,为了解决关于批处理文件调用的问题,goto
命令和标签我修补了一个cmd.exe
进程的副本,以避免何时输出正在执行的命令的任何检查,但此过程取决于可执行文件的确切版本。
美丽!缓冲区溢出就像一个魅力。我做了以下操作:一个脚本有256个左括号,主脚本调用cmd-overflow.bat,然后调用script-to-debug.bat,打印所有的细节。 – Andrey
这漫长的命令读取sample.bat
行由行,每行没有明确说@echo off
,它执行它,有效地跳过@echo off
。
@for /F "tokens=*" %a in (sample.bat) do @if NOT "%a" == "@echo off" %a
它可能不是非常适合有关闭命令呼应的偷偷摸摸的方式复杂BAT文件,但它应该在最基本的情况下工作:
'@echo off'只是禁用呼应的命令是执行,而不是命令的输出。无论是否有@echo off,'bla bla'都可以看到。 –
@MCND对不起,这个例子过于简单。编辑问题以反映实际意图。 – Andrey