Do All in Cmd Shell (一切尽在命令行)
假定我要将密码长度最小值设置为6,并启用"密码必须切合复杂性要求",那么先写这么一个模板:
[version]
signature="$CHICAGO$"
[System Access]
MinimumPasswordLength = 6
PasswordComplexity = 1
生存为gp.inf,然后导入:
secedit /configure /db gp.sdb /cfg gp.inf /quiet
这个命令实行完成后,将在以后目录产生一个gp.sdb,它是"中间产品",你可以删除它。
/quiet参数表示"平静模式",不产生日志。但根据我的实验,在2000sp4下该参数似乎不起作用,XP下正常。日志总是生存在%windir%\security\logs\scesrv.log。你也可以本身指定日志以便随后删除它。好比:
secedit /configure /db gp.sdb /cfg gp.inf /log gp.log
del gp.*
别的,在导入模板前,还可以先阐发语法是否精确:
secedit /validate gp.inf
那么,怎样知道详细的语法呢?当然到MSDN里找啦。也有偷懒的办法,由于系统自带了一些安全模板,在%windir%\security\templates目录下。翻开这些模板,基本上包含了常用的安全设置语法,一看就懂。
再举个例子——关闭全部的"审核计谋"。(它所审核的变乱将记录在变乱查看器的"安全性"里)。
echo版:
echo [version] >1.inf
echo signature="$CHICAGO$" >>1.inf
echo [Event Audit] >>1.inf
echo AuditSystemEvents=0 >>1.inf
echo AuditObjectAccess=0 >>1.inf
echo AuditPrivilegeUse=0 >>1.inf
echo AuditPolicyChange=0 >>1.inf
echo AuditAccountManage=0 >>1.inf
echo AuditProcessTracking=0 >>1.inf
echo AuditDSAccess=0 >>1.inf
echo AuditAccountLogon=0 >>1.inf
echo AuditLogonEvents=0 >>1.inf
secedit /configure /db 1.sdb /cfg 1.inf /log 1.log /quiet
del 1.*
也许有人会说:组计谋不是生存在注册表中吗,为什么不间接修正注册表?由于不是全部的组计谋都生存在注册表中。好比"审核计谋"就不是。你可以用regsnap比力修正该计谋前后注册表的变化。我测试的结果是什么都没有转变。只有"办理模板"这一部分是完全基于注册表的。而且,知道了详细地位,用哪个方法都不复杂。
好比,XP和2003的"本地计谋"-》"安全选项"增长了一个"本地帐户的共享和安全模式"计谋。XP下默认的设置是"仅来宾"。这就是为什么用办理员帐号连接XP的ipc$仍旧只有Guest权限的缘故原由。可以经过导入reg文件修正它为"经典":
echo Windows Registry Editor Version 5.00 >1.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] >>1.reg
echo "forceguest"=dword:00000000 >>1.reg
regedit /s 1.reg
del 1.reg
而相应的用inf,应该是:
echo [version] >1.inf
echo signature="$CHICAGO$" >>1.inf
echo [Registry Values] >>1.inf
echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,0 >>1.inf
secedit /configure /db 1.sdb /cfg 1.inf /log 1.log
del 1.*
关于命令行下读取组计谋的题目。
系统默认的安全数据库位于%windir%\security\database\secedit.sdb,将它导出至inf文件:
secedit /export /cfg gp.inf /log 1.log
没有效/db参数指定命据库就是接纳默认的。然后查看gp.inf。
不外,如许失掉的只是组计谋的一部分(即"Windows设置")。而且,某个计谋如果未设置装备摆设,是不会被导出的。好比"重定名系统办理员帐户",只有被定义了才会在inf文件中呈现NewAdministratorName="xxx"。对付无法导出的其他的组计谋只有经过拜访注册表来失掉了。
此办法在XP和2003下有效——可以导出但内容基本是空的。缘故原由不明。根据官方的资料,XP和2003表现组计谋用RSoP(组计谋结果集)。相应的命令行工具是gpresult。但是,它失掉的是在系统启动时被附加(来自域)的组计谋,单机测试结果照旧"空"。所以,如果想知道某些组计谋是否被设置,只有先写一个inf,再用secedit /analyze,然后查看日志了。
网络设置装备摆设
Windows自带的关于网络的命令行工具很多,好比大家熟悉的ping,tracert,ipconfig,telnet,ftp,tftp,netstat,还有不太熟悉的nbtstat,pathping,nslookup,finger,route,netsh……
这些命令又可分成三类:网络检测(如ping)、网络连接(如telnet)和网络设置装备摆设(如netsh)。前面两种相对简略,本文只先容两个网络设置装备摆设工具。
netsh
在远程shell中使用netsh首先要办理一个交互方式的题目。前面说过,很多shell不能再次重定向输出输出,所以不能在这种环境下交互地使用ftp等命令行工具。办理的办法是,一样平常交互式的工具都容许使用剧本(大概叫应对文件)。好比ftp -s:filename。netsh也是如许:netsh -f filename。
netsh命令的功能非常多,可以设置装备摆设IAS、DHCP、RAS、WINS、NAT服务器,TCP/IP协议,IPX协议,路由等。我们不是办理员,一样平常没需要相识这么多,只需用netsh来相识目标主机的网络设置装备摆设信息。
1,TCP/IP设置装备摆设
echo interface ip >s
echo show config >>s
netsh -f s
del s
由此你可以相识该主机有多个网卡和IP,是否是动态分配IP(DHCP),内网IP是几多(如果有的话)。
这个命令和ipconfig /all差不多。
注意,以下命令必要目标主机启动remoteaccess服务。如果它被禁用,请先经过导入注册表解禁,然后
net start remoteaccess
2,ARP
echo interface ip >s
echo show ipnet >>s
netsh -f s
del s
这个比arp -a命令多一点信息。
3,TCP/UDP连接
echo interface ip >s
echo show tcpconn >>s
echo show udpconn >>s
netsh -f s
del s
这组命令和netstat -an一样。
4,网卡信息
如果netsh命令都有其他命令可取代,那它还有什么存在的需要呢?下面这个就找不到取代的了。
echo interface ip >s
echo show interface >>s
netsh -f s
del s
netsh的其他功能,好比修正IP,一样平常没有需要使用(万一改了IP后连不上,就"叫天不该叫地不灵"了),所以全部略过。
IPSec
首先必要指出的是,IPSec和TCP/IP筛选是差别的工具,大家不要殽杂了。TCP/IP筛选的功能非常无限,远不如IPSec机动和强大。下面就说说如安在命令行下控制IPSec。
XP系统用ipseccmd,2000下用ipsecpol。遗憾的是,它们都不是系统自带的。ipseccmd在xp系统安置盘的SUPPORT\TOOLS\SUPPORT.CAB中,ipsecpol在2000 Resource Kit里。而且,要使用ipsecpol还必须带上别的两个文件:ipsecutil.dll和text2pol.dll。三个文件一共119KB。
IPSec可以经过组计谋来控制,但我找遍MSDN,也没有找到相应的安全模板的语法。已经设置装备摆设好的IPSec计谋也不能被导出为模板。所以,组计谋这条路走欠亨。IPSec的设置生存在注册表中(HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\IPSec\Policy\Local),实际上可以经过修正注册表来设置装备摆设IPSec。但很多信息以二进制情势寄存,读取和修正都很困难。相比之下,上传命令行工具更方便。
关于ipsecpol和ipseccmd的资料,网上可以找到很多,因此本文就不细说了,只是枚举一些适用的例子。
在设置IPSec计谋方面,ipseccmd命令的语法和ipsecpol险些完全一样,所以只以ipsecpol为例:
1,防御rpc-dcom打击
ipsecpol -p myfirewall -r rpc-dcom -f *+0:135:tcp *+0:135:udp *+0:137:udp *+0:138:udp *+0:139:tcp *+0:445:tcp *+0:445:udp -n BLOCK -w reg -x
这条命令关闭了本田主机的TCP135,139,445和udp135,137,138,445端口。
详细含义如下:
-p myfirewall 指定计谋名为myfirewall
-r rpc-dcom 指定规则名为rpc-dcom
-f …… 创建7个筛选器。*表示任何地址(源);0表示本机地址(目标);+表示镜像(双向)筛选。详细语法见ipsecpol -?
-n BLOCK 指定筛选操作是"壅闭"。注意,BLOCK必须是大写。
-w reg 将设置装备摆设写入注册表,重启后仍有效。
-x 立刻激该死计谋。
2,防备被ping
ipsecpol -p myfirewall -r antiping -f *+0::icmp -n BLOCK -w reg -x
如果名为myfirewall的计谋已存在,则antiping规则将添加至其中。
注意,该规则同时也制止了该主机ping别人。
3,对后门进行IP限定
假定你在某主机上安置了DameWare Mini Remote Control。为了保护它不被别人暴破密码或溢出,应该限定对其服务端口6129的拜访。
ipsecpol -p myfw -r dwmrc_block_all -f *+0:6129:tcp -n BLOCK -w reg
ipsecpol -p myfw -r dwmrc_pass_me -f 123.45.67.89+0:6129:tcp -n PASS -w reg -x
如许就只有123.45.67.89可以拜访该主机的6129端口了。
如果你是动态IP,应该根据IP分配的范畴设置规则。好比:
ipsecpol -p myfw -r dwmrc_block_all -f *+0:6129:tcp -n BLOCK -w reg
ipsecpol -p myfw -r dwmrc_pass_me -f 123.45.67.*+0:6129:tcp -n PASS -w reg -x
如许就容许123.45.67.1至123.45.67.254的IP拜访6129端口。
在写规则的时候,应该特别警惕,不要把本身也壅闭了。如果你不确定某个规则的效果是否和料想的一样,可以先用筹划任务"留下后路"。比方:
c:\>net start schedule
Task Scheduler 服务正在启动 ..
Task Scheduler 服务已经启动成功。
c:\>time /t
12:34
c:\>at 12:39 ipsecpol -p myfw -y -w reg
新加了一项作业,其作业 ID = 1
然后,你有5分钟工夫设置一个myfw计谋并测试它。5分钟后筹划任务将停止该计谋。
如果测试结果不抱负,就删除该计谋。
c:\>ipsecpol -p myfw -o -w reg
注意,删除计谋前必须先确保它已停止。不绝止它的话,纵然删除也会在一段工夫内继续见效。连续工夫取决于计谋的刷新工夫,默认是180分钟。
如果测试经过,那么就启用它。
c:\>ipsecpol -p myfw -x -w reg
末了说一下查看IPSec计谋的办法。
对付XP很简略,一条命令搞定——ipseccmd show filters
而ipsecpol没有盘问的功能。必要再用一个命令行工具netdiag。它位于2000系统安置盘的SUPPORT\TOOLS\SUPPORT.CAB中。(已经上传了三个文件,也就不在乎多一个了。^_^)
netdiag必要RemoteRegistry服务的支持。所以先启动该服务:
net start remoteregistry
不启动RemoteRegistry就会失掉一个错误:
[FATAL] Failed to get system information of this machine.
netdiag这个工具功能非常强大,与网络有关的信息都可以获取!不外,输出的信息有时过于详细,凌驾命令行控制台cmd.exe的输出缓存,而不是每个远程cmd shell都可以用more命令来分页的。
查看ipsec计谋的命令是:
netdiag /debug /test:ipsec
然后是一长串输出信息。IPSec计谋位于末了。
软件安置
一个软件/工具的安置过程,一样平常来说只是做两件事:拷贝文件到特定目录和修正注册表。只需搞清楚详细的内容,那么就可以本身在命令行下完成了。(不思量安置后必要注册激活等情况)
WinPcap是个很常用的工具,但必须在窗口界面下安置。在网上也可以找到不消GUI的版本(但照旧有版权页),其实我们完全可以本身做一个。
以WinPcap 3.0a 为例。经过比力安置前后的文件系统和注册表快照,很容易相识整个安置过程。
撤除反安置的部分,关键的文件有三个:wpcap.dll,packet.dll和npf.sys。前面两个文件位于system32目录下,第三个在system32\drivers下。而注册表的变化是增长了一个系统服务NPF。注意,是系统服务(即驱动)不是Win32服务。
作为系统服务,不但要在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下增长主键,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root下也增长主键。而后者默认只有SYSTEM身份才可以修正。荣幸的是,并不必要手动添加它,winpcap被调用时会主动搞定。乃至完全不消手动修正注册表,全部的事winpcap都会本身完成,只必要将三个文件复制到符合的地位就行了。
作为典范,照旧演示一下怎样修正注册表:利用前面说过的inf文件来完成。
[Version]
Signature="$WINDOWS NT$"
[DefaultInstall.Services]
AddService=NPF,,winpcap_svr
[winpcap_svr]
DisplayName=Netgroup Packet Filter
ServiceType=0x1
StartType=3
ErrorControl=1
ServiceBinary=%12%\npf.sys
将上面这些内容生存为_wpcap_.inf文件。
再写一个批处置惩罚_wpcap_.bat:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 %CD%\_wpcap_.inf
del _wpcap_.inf
if /i %CD%==%SYSTEMROOT%\system32 goto COPYDRV
copy packet.dll %SYSTEMROOT%\system32\
copy wpcap.dll %SYSTEMROOT%\system32\
del packet.dll
del wpcap.dll
:COPYDRV
if /i %CD%==%SYSTEMROOT%\system32\drivers goto END
copy npf.sys %SYSTEMROOT%\system32\drivers\
del npf.sys
:END
del %0
然后用winrar将全部文件(5个)打包为自解压的exe,并将『初级自解压选项』->『解压后运转』设置为_wpcap_.bat,命令行的winpcap安置包就制造完成了。
注意,批处置惩罚末了一行没有回车符。否则会由于正在运转而无法删除本身。
全部的软件安置,基本上可以套用这个思路。但也有破例的,那就是系统补丁的安置。
由于系统补丁有大概要替换正在被实行或拜访的文件,所以用copy命令是不可的。
幸亏,Windows补丁包支持命令行安置。
好比:
KB824146.exe -n -z -q
-n 不保存备份
-z 不重起
-q 平静模式
如果有一堆补丁要打,那么用RAR打包成自解压文件,外加一个批处置惩罚。
for %%f in (KB??????.exe) do %%f -n -z -q
for %%f in (KB??????.exe) do del %%f
del %0
Windows剧本
很多事用脚原来做是很简洁的。下面给出几个常用剧本的echo版。
1,表现系统版本
@echo for each ps in getobject _ >ps.vbs
@echo ("winmgmts:\.\root\cimv2:win32_operatingsystem").instances_ >>ps.vbs
@echo wscript.echo ps.caption^&" "^&ps.version:next >>ps.vbs
cscript //nologo ps.vbs & del ps.vbs
2,枚举进程
@echo for each ps in getobject _ >ps.vbs
@echo ("winmgmts:\.\root\cimv2:win32_process").instances_ >>ps.vbs
@echo wscript.echo ps.handle^&vbtab^&ps.name^&vbtab^&ps.executablepath:next >>ps.vbs
cscript //nologo ps.vbs & del ps.vbs
3,停止进程
@echo for each ps in getobject _ >pk.vbs
@echo ("winmgmts:\.\root\cimv2:win32_process").instances_ >>pk.vbs
@echo if ps.handle=wscript.arguments(0) then wscript.echo ps.terminate:end if:next >>pk.vbs
要停止PID为123的进程,使用如下语法:
cscript pk.vbs 123
如果表现一个0,表示停止成功。
然后:
del pk.vbs
4,重启系统
@echo for each os in getobject _ >rb.vbs
@echo ("winmgmts:!\.\root\cimv2:win32_operatingsystem").instances_ >>rb.vbs
@echo os.win32shutdown(2):next >>rb.vbs & cscript //nologo rb.vbs & del rb.vbs
5,枚举自启动的服务
@echo for each sc in getobject("winmgmts:\.\root\cimv2:win32_service").instances_ >sc.vbs
@echo if sc.startmode="Auto" then wscript.echo sc.name^&" - "^&sc.pathname >>sc.vbs
@echo next >>sc.vbs & cscript //nologo sc.vbs & del sc.vbs
6,枚举正在运转的服务
@echo for each sc in getobject("winmgmts:\.\root\cimv2:win32_service").instances_ >sc.vbs
@echo if sc.state="Running" then wscript.echo sc.name^&" - "^&sc.pathname >>sc.vbs
@echo next >>sc.vbs & cscript //nologo sc.vbs & del sc.vbs
7,表现系统末了一次启动的工夫
@echo for each os in getobject _ >bt.vbs
@echo ("winmgmts:\.\root\cimv2:win32_operatingsystem").instances_ >>bt.vbs
@echo wscript.echo os.lastbootuptime:next >>bt.vbs & cscript //nologo bt.vbs & del bt.vbs
表现结果的格式是:
yyyymmddHHMMSSxxxxxxZZZZ
_年_月日时分秒_微秒_时区
8,表现系统运转工夫
@echo for each os in getobject _ >rt.vbs
@echo ("winmgmts:\.\root\cimv2:win32_perfrawdata_perfos_system").instances_ >>rt.vbs
@echo s=os.timestamp_sys100ns:l=len(s):s=left(s,l-7):for i=1 to l-7 >>rt.vbs
@echo t=t^&mid(s,i,1):d=t400:r=r^&d:t=t mod 86400:next >>rt.vbs
@echo wscript.echo cint(r)^&"d "^&t00^&"h "^&t mod 60^&"m "^&t mod 60^&"s":next >>rt.vbs
cscript //nologo rt.vbs & del rt.vbs
这个运转工夫是从性能计数器中失掉的64位整型数,不会出如今49.7天后溢出的情况。
附言
cmd shell胸无点墨,本文挂一漏万讲了一些常用技巧,希望对列位有所资助。
也许你早知道了这些方法,也许你有更好的方法,希望你能写出来和大家分享。
末了,感谢你耐烦看完本文。本人水平无限,错误之处恳请指正。
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|