知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > 批处理

dos中特殊符号命令的应用

发布时间:2014-09-27 17:21:36作者:知识屋

0×01缘由
0x02dos中双引号含义
0×03双引号的用法
0x04DOS中其他特殊符号
0×05附录
 
0×01缘由
 
昨天看见一贴记一次无聊的过程
有几个机油回帖询问文件幻数检测和双引号包含的问题,晴天大牛未予以解释。
这里就简单介绍下~~
 
0x02dos中双引号含义
 
DOS中双引号”"是字符串界定符,这在批处理中常用到。但是dos中属于特殊命令字符。
双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
 
cd “program files” 
cd progra~1 
cd pro* 
 
 
以上三种方法都可以进入program files这个目录
下面是其他的用法:
在表示带有空格的路径时常要用”"符号;
来将路径括起来,在一些命令里面也需要” “符号;
在for/f中将表示它们包含的内容当作字符串分析;
在for/f “usebackq”表示它们包含的内容当作文件路径并分析其文件的内容;
在其它情况下表示其中的内容是一个完整的字符串,其中的>、>>、<、&、|、空格等不再转义。
 
0×03双引号的用法
 
可以这样执行cmd命令但是执行提权exp时依然会访问拒绝。
 
一是、直接上传自动提权加帐号的exp(免参数exp),设置终端路径为exp路径。
在执行命令那儿随意敲个字母,执行。就可以顺利执行exp。
 
二是、利用双引号包含突破监控软件
 
“”"c:/php/tmp/p.txt” “ver”"” 
 
 
下面介绍同学们常常遇到空格路径无法执行的情况。
现在知道双引号包含就很简单,直接
 
“”"C:/Documents and Settings/All Users/Application Data/Microsoft/p.txt” “ver”"” 
 
 
当然我常用的突破方法(为了是执行多个exp的方便)是:
执行exp时(C:/Documents and Settings/All Users/Application Data/Microsoft/)
会出现这样的情况:
 
‘C:/Documents’ 不是内部或外部命令,也不是可运行的程序或批处理文件。 
 
 
解决办法是利用菜刀的交互shell切换到exp路径,如:
 
Cd C:/Documents and Settings/All Users/Application Data/Microsoft 
 
 
当然如果无法跳转的话,利用双引号包含。
 
Cd “C:/Documents and Settings/All Users/Application Data/Microsoft” 
 
 
然后再执行exp或者cmd,就不会存在上面的情况了,aspshell一般是无法跳转目录的~~
看图:
这个在【科普】windows虚拟主机提权手册中有所介绍。
 
0x04DOS中其他特殊符号
这些特殊符号想必机油们或多或少都遇到过,渗透中会起到强大的作用。
DOS中其他特殊符号(批处理常用):
 
@
//隐藏命令的回显。
 
~
//在for中表示使用增强的变量扩展;
在set中表示使用扩展环境变量指定位置的字符串;
在set/a中表示按位取反。
 
%
//使用两个%包含一个字符串表示引用环境变量。比如一个%time%可以扩展到当前的系统时间;
单个%紧跟0-9的一个数字表示引用命令行参数;
用于for中表示引用循环变量;
连续的两个%表示执行时脱为一个%。
 
^
//取消转义字符,即将所有转义字符的转义作用关闭。
比如要在屏幕显示一些特殊的字符,比如> >> | ^等时,
就可以在其前面加一个^符号来显示这个^后面的字符了,^^就是显示一个^,^|就是显示一个|字符了;
在set/a中是按位异;
在findstr/r的[]中表示不匹配指定的字符集。
 
&
//命令连接字符。比如我要在一行文本上同时执行两个命令,就可以用&命令连接这两个命令;
在set/a中是按位与。
 
*
//代表任意个任意字符,就是我们通常所说的”通配符”;
比如想在c盘的根目录查找c盘根目录里所有的文本文件(.txt),那么就可以输入命令”dir c:/*.txt”;
在set/a中是乘法。比如”set/a x=4*2″,得到的结果是8;
在findstr/r中表示将前一个字符多次匹配。
 
()
//命令包含或者是具有优先权的界定符吧,比如for命令要用到这个(),我们还可以在if,echo等命令中见到它的身影;
 
-
//范围表示符,比如日期的查找,for命令里的tokens操作中就可以用到这个字符;
在findstr/r中连接两个字符表示匹配范围;
-跟在某些命令的/后表示取反向的开关。
 
+
//主要是在copy命令里面会用到它,表示将很多个文件合并为一个文件,就要用到这个+字符了;
在set/a中是加法。
 
|
//管道符。就是将上一个命令的输出,作为下一个命令的输入.”dir /a/b | more”就可以逐屏的显示dir命令所输出的信息;
在set/a中是按位或;
在帮助文档中表示其前后两个开关、选项或参数是二选一的。
 
:
//标签定位符,可以接受goto命令所指向的标签。比如在批处理文件里面定义了一个”:begin”标签,用”goto begin”命令就可以转到”:begin”变迁后面来执行批处理命令了。
 
/
//表示其后的字符(串)是命令的功能开关(选项)。比如”dir /s/b/a-d”表示”dir”命令指定的不同的参数;
在set/a中表示除法。
 
>
//命令重定向符,将其前面的命令的输出结果重新定向到其后面的设备中去,后面的设备中的内容被覆盖。
比如可以用”dir > lxmxn.txt”将”dir”命令的结果输出到”lxmxn.txt”这个文本文件中去;
在findstr/r中表示匹配单词的右边界,需要配合转义字符/使用。
 
>>
//命令重定向符。将其前面的命令的输出结果重新定向到其后面的设备中去,后面设备中的内容没有被覆盖。
 
<
//将其后面的文件的内容作为其前面命令的输入。
在findstr/r中表示匹配单词的左边界,需要配合转义字符/使用。
 
=
//赋值符号,用于变量的赋值。比如”set a=windows”的意思意思是将”windows”这个字符串赋给变量”a”;
在set/a中表示算术运算,比如”set /a x=5-6*5″。
 
/
//这个”/”符号在有的情况下,代表的是当前路径的根目录.比如当前目录在c:/windows/system32下,那么你”dir /”的话,就相当与”dir c:/”
在findstr/r中表示正则转义字符。
 
在for/f中表示将它们包含的内容当作命令行执行并分析其输出;
在for/f “usebackq”中表示将它们包含的字符串当作字符串分析。
 
.
//
在路径的/后紧跟或者单独出现时:
一个.表示当前目录;
两个.表示上一级目录;
在路径中的文件名中出现时:
最后的一个.表示主文件名与扩展文件名的分隔。
 
&&
//连接两个命令,当&&前的命令成功时,才执行&&后的命令;
 
||
//连接两个命令,当||前的命令失败时,才执行||后的命令。
 
$
//在findstr命令里面表示一行的结束。
 
在for/f中表示它们所包含的内容当作命令行执行并分析它的输出。
 
[]
在帮助文档表示其中的开关、选项或参数是可选的;
在findstr/r中表示按其中指定的字符集匹配。
 
?
//在findstr/r中表示在此位置匹配一个任意字符;
?在路径中表示在此位置通配任意一个字符;
紧跟在/后表示获取命令的帮助文档。
 
!
//当启用变量延迟时,使用!!将变量名扩起来表示对变量值的引用;
在set /a中表示逻辑非。比如set /a a=!0,这时a就表示逻辑1。
 
0×05附录
 
其实除了这些特殊符号,还有很多命令都值得掌握,比如for命令。
很多人都认为for命令只能在低权限下查看文件目录下的文件夹。
 
for /d %i in (d:/www/web/*) do @echo %i 
 
 
其实它还有很多用法。如果运用起来效果极佳。
 
for /r d:/wwwroot/web/ %i in (*.asp) do @echo %i >>c:/windows/temp/1.txt 
——这个是把 d:/wwwroot/web/目录所有asp文件 列出来 ,然后保存在c:/windows/temp/下的1.txt 
for /d %i in (d:/wwwroot/web/*) do @echo %i 
——这句是显示d:/wwwroot/web 下所有文件,包括文件夹。 
for /r d:/wwwroot/web/ %i in (*.*) do @echo %i >>d:/wwwroot/web1/1.txt 
——*.* DOS下是所有的意思 也就是说显示d:/wwwroot/web1/所有文件,然后保存在d:/wwwroot/web1/1.txt 
*.*为任意后缀名,如果改成(*.exe)会把目录与下面的子目录的全部EXE文件列出 
for /f %c in (d:/wwwroot/web/coon.asp) do @echo %c 
——查看coon.ASP文件内容 
for /d %i in (???) do @echo %i 
——把当前路径下文件夹的名字只有1-3个字母的打出来 
type F:/VIP/qq1369/database/#Collection.resx echo >>c:/windows/temp/1.mdb 
——通过for或者type读取对方的数据库配置文件,但数据库修改了后缀名,例如为.resx 
使我们不能下载,这时用type命令把数据库复制到c:/windows/temp/下面,然后下载! 
/c  for /r F:/VIP/qq1369 %i in (*) do @echo %i    列出所有F:/VIP/qq1369文件 
 
 
甚至在系统权限下:
 
For /F “tokens=2,3*” %i in (‘tasklist /nh ^| find “lsass.exe”‘) do ntsd -c q -p %iFor /F “tokens=2,3*” %i in (‘tasklist /nh ^| find “lsass.exe”‘) do ntsd -c q -p %i 
普通级别强杀“lsass.exe”进程。 
For /f “tokens=1,2″ %%i in (‘tasklist’) do (echo %%i | findstr /i “stormliv.exe” 1>nul 2>nul && (ntsd -c q -p %%j & set qq=%%i)) 
驱动级强行杀死所有名为“stormliv.exe”的进程(可以干掉网维等产品)。 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜