设为主页 | 加入收藏 | 繁體中文

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:
评论加载中...
内容:
评论者: 验证码: