文章出处:黑色海岸线
使用过2000系统的朋友,一定不会对2000的CMD程序陌生吧?是的,CMD就是2000的命令提示符。有点象DOS一样的东西。但你知道关于CMD的“特权”吗?不知道?那就一起来看看吧。
1、CMD可超越文件权限ACL限制
实验:
1、先在NTFS分区上建立一个目录,叫temp,在temp目录下建立一个文本文件,叫test.txt吧。随便写入一些数据。保存。
2、设置目录temp的权限,使得任何人都不能访问,或某个特定用户不能访问。
3、用上面指定不能访问的用户登录系统,打开CMD。
4、用CD命令试图进入目录temp。结果是什么?
结果是系统提示:访问拒绝,看起来权限起作用了。
5、恢复temp目录的权限为可访问。
6、设置文件test.txt的权限为指定用户不可访问。
7、仍以指定用户登录系统。
8、在资源管理器中,试图打开或删除文件test.txt,系统会给出错误提示。
9、进入CMD。
10、试着在CMD中删除指定文件test.txt,看看结果…………
怪了,文件被删除了!!!
可见CMD的运行权限并不是当前用户权限,而是一个特殊的权限,它对文件的权限可以轻易的超越。这点大家可要注意了哦。
2、奇怪的执行文件
实验:
1、找到一个有效的执行文件aaa.exe。
2、在CMD下执行:aaa,就可以执行该程序了。
3、在资源管理器中,也可以直接执行该程序。
一切正常!!
4、我们将文件改名为aaa.001。
5、在资源管理器中执行aaa.001,系统打开了打开方式选择窗口。因为系统不认识该文件类型,也找不到相关的关联程序启动文件。正常!!!
6、回到CMD中,执行aaa.001,什么结果?
不能执行?哈哈,,你错了,执行成功!!
7、把文件改为其他的有效文件类型,如jpg。
8、在CMD中运行,一样可以!!
有点意思吧……继续……
9、把一个图形文件bbb.jpg改为bbb.exe。
10、在CMD下执行bbb.exe。
11、哈哈,,奇怪了,系统提示程序太大,不能装入内存。
看来系统把文件当坐执行文件处理了,但由于没有执行代码,因此LOAD失败。
结论:
1、CMD中,系统首先判断文件的类型是否是执行文件,判断方法不是文件扩展名,而是文件头的PE段。
2、如是执行文件,则执行它。如不是,再根据相应的关联启动相应程序。
3、如没有输入扩展名,则系统将默认扩展名为BAT,EXE,COM。依次判断。
后记:
一个简单的CMD程序中,就有这么多有趣的东西,以上的过程只以实验方式说明了问题,并没有从原理上加以说明,事实上,如要准确的说明这一原理,必须阅读CMD的代码。