安全是一个条件语句

来源:http://hi.baidu.com/yuange1975/item/6f05f83c876c5cc21b96964e

02年左右给别人讲课时写的资料,不过完全听明白的可能没有,不知道有几个人听懂一点?思想应该是00年左右研究IIS形成的。其实这里面就有windows文件系统的漏洞,可是微软至今不承认或者没有意识到这是他们文件系统的漏洞。

一、安全编程模型

安全方面的编程基本上可以建立这么一个简单的模型,

modle(a)
{
if(security_check(a)==true)
{
do(a);
}
}

我们来考虑这种模型的一些安全上应该注意的问题。

1、如果do(a)变成了do(b);
就是程序流程成了:
modle(a)
{
if(security_check(a)==true)
{
do(b);
}
}

实际上这个do(b)处理过程应该是:

modle(b)
{
if(security_check(b)==true)
{
do(b);
}
}

显然对照得到这时安全检测security_check(a)、security_check(b)应该一致,而
在处理do的模块有时很难知道security_check到底是做些什么检测,所以安全编程应该
要求任何处理模块,按照接口意思实现,如果不能实现直接返回错误。

2、如果有do(a)=do(b);
同上面这么对照一样有security_check(a)、security_check(b)应该一致。这
就要求安全检测的时候应该注意考虑全集。比如文 件类型检测,检测一个文件是什么
类型的文件名,不能简单的依照文件的扩展名为依据,必须要识别一种文件的所有文件
名。这种方式就是要匹配才对,不匹配就认为是非是错误的。比如文件后缀是”.asp”匹
配成”.asp”文件是对的,而后缀不匹配” .asp”就认为不是”.asp”文件就是错误的,比
如 “.asp::$data”其实还是”.asp”文件。

二、IIS在处理文件名上就有很大的问题。所以作了一个程序,测试一个文件名到
底有些什么表示方式。注意这个测试的结果也只是只能得到部分结果。

windows打开文件有两种方式,一种就是普通的我们常用的方式,这种支持../;另
一种是在文件名前加”\\?\”,这种方式是要求文件名完全匹配,不能目录”../”抵消
等,当然还是不区分大小写。

“\\?\”的测试结果:

F:\work\filetest\Debug>filetest test2

Windows Api CreateFileA test.
Copy by yuange. 2002.4.22.
Usage filetest [test1|test2]
Test “\\?\”
str=0x81 str=”?”
str=0x82 str=”?”
str=0x83 str=”?”
str=0x84 str=”?”
str=0x85 str=”?”
str=0x86 str=”?”
str=0x87 str=”?”
str=0x88 str=”?”
str=0x89 str=”?”
str=0x8a str=”?”
str=0x8b str=”?”
str=0x8c str=”?”
str=0x8d str=”?”
str=0x8e str=”?”
str=0x8f str=”?”
str=0x90 str=”?”
str=0x91 str=”?”
str=0x92 str=”?”
str=0x93 str=”?”
str=0x94 str=”?”
str=0x95 str=”?”
str=0x96 str=”?”
str=0x97 str=”?”
str=0x98 str=”?”
str=0x99 str=”?”
str=0x9a str=”?”
str=0x9b str=”?”
str=0x9c str=”?”
str=0x9d str=”?”
str=0x9e str=”?”
str=0x9f str=”?”
str=0xa0 str=”?”
str=0xa1 str=”?”
str=0xa2 str=”?”
str=0xa3 str=”?”
str=0xa4 str=”?”
str=0xa5 str=”?”
str=0xa6 str=”?”
str=0xa7 str=”?”
str=0xa8 str=”?”
str=0xa9 str=”?”
str=0xaa str=”?”
str=0xab str=”?”
str=0xac str=”?”
str=0xad str=”?”
str=0xae str=”?”
str=0xaf str=”?”
str=0xb0 str=”?”
str=0xb1 str=”?”
str=0xb2 str=”?”
str=0xb3 str=”?”
str=0xb4 str=”?”
str=0xb5 str=”?”
str=0xb6 str=”?”
str=0xb7 str=”?”
str=0xb8 str=”?”
str=0xb9 str=”?”
str=0xba str=”?”
str=0xbb str=”?”
str=0xbc str=”?”
str=0xbd str=”?”
str=0xbe str=”?”
str=0xbf str=”?”
str=0xc0 str=”?”
str=0xc1 str=”?”
str=0xc2 str=”?”
str=0xc3 str=”?”
str=0xc4 str=”?”
str=0xc5 str=”?”
str=0xc6 str=”?”
str=0xc7 str=”?”
str=0xc8 str=”?”
str=0xc9 str=”?”
str=0xca str=”?”
str=0xcb str=”?”
str=0xcc str=”?”
str=0xcd str=”?”
str=0xce str=”?”
str=0xcf str=”?”
str=0xd0 str=”?”
str=0xd1 str=”?”
str=0xd2 str=”?”
str=0xd3 str=”?”
str=0xd4 str=”?”
str=0xd5 str=”?”
str=0xd6 str=”?”
str=0xd7 str=”?”
str=0xd8 str=”?”
str=0xd9 str=”?”
str=0xda str=”?”
str=0xdb str=”?”
str=0xdc str=”?”
str=0xdd str=”?”
str=0xde str=”?”
str=0xdf str=”?”
str=0xe0 str=”?”
str=0xe1 str=”?”
str=0xe2 str=”?”
str=0xe3 str=”?”
str=0xe4 str=”?”
str=0xe5 str=”?”
str=0xe6 str=”?”
str=0xe7 str=”?”
str=0xe8 str=”?”
str=0xe9 str=”?”
str=0xea str=”?”
str=0xeb str=”?”
str=0xec str=”?”
str=0xed str=”?”
str=0xee str=”?”
str=0xef str=”?”
str=0xf0 str=”?”
str=0xf1 str=”?”
str=0xf2 str=”?”
str=0xf3 str=”?”
str=0xf4 str=”?”
str=0xf5 str=”?”
str=0xf6 str=”?”
str=0xf7 str=”?”
str=0xf8 str=”?”
str=0xf9 str=”?”
str=0xfa str=”?”
str=0xfb str=”?”
str=0xfc str=”?”
str=0xfd str=”?”
str=0xfe str=”?”
i=0x2
i=0x3
i=0x4

显然还是有半个汉字的问题,不过要测试到流”::$data”不知道要什么时候。还是测试
字符多了太慢。

常见的方式的测试结果:

Windows Api CreateFileA test.
Copy by yuange. 2002.4.22.
Usage filetest [test1|test2]
str=0x20 str=” ”
str=0x2e str=”. ”
str=0x81 str=”?”
str=0x82 str=”?”
str=0x83 str=”?”
str=0x84 str=”?”
str=0x85 str=”?”
str=0x86 str=”?”
str=0x87 str=”?”
str=0x88 str=”?”
str=0x89 str=”?”
str=0x8a str=”?”
str=0x8b str=”?”
str=0x8c str=”?”
str=0x8d str=”?”
str=0x8e str=”?”
str=0x8f str=”?”
str=0x90 str=”?”
str=0x91 str=”?”
str=0x92 str=”?”
str=0x93 str=”?”
str=0x94 str=”?”
str=0x95 str=”?”
str=0x96 str=”?”
str=0x97 str=”?”
str=0x98 str=”?”
str=0x99 str=”?”
str=0x9a str=”?”
str=0x9b str=”?”
str=0x9c str=”?”
str=0x9d str=”?”
str=0x9e str=”?”
str=0x9f str=”?”
str=0xa0 str=”?”
str=0xa1 str=”?”
str=0xa2 str=”?”
str=0xa3 str=”?”
str=0xa4 str=”?”
str=0xa5 str=”?”
str=0xa6 str=”?”
str=0xa7 str=”?”
str=0xa8 str=”?”
str=0xa9 str=”?”
str=0xaa str=”?”
str=0xab str=”?”
str=0xac str=”?”
str=0xad str=”?”
str=0xae str=”?”
str=0xaf str=”?”
str=0xb0 str=”?”
str=0xb1 str=”?”
str=0xb2 str=”?”
str=0xb3 str=”?”
str=0xb4 str=”?”
str=0xb5 str=”?”
str=0xb6 str=”?”
str=0xb7 str=”?”
str=0xb8 str=”?”
str=0xb9 str=”?”
str=0xba str=”?”
str=0xbb str=”?”
str=0xbc str=”?”
str=0xbd str=”?”
str=0xbe str=”?”
str=0xbf str=”?”
str=0xc0 str=”?”
str=0xc1 str=”?”
str=0xc2 str=”?”
str=0xc3 str=”?”
str=0xc4 str=”?”
str=0xc5 str=”?”
str=0xc6 str=”?”
str=0xc7 str=”?”
str=0xc8 str=”?”
str=0xc9 str=”?”
str=0xca str=”?”
str=0xcb str=”?”
str=0xcc str=”?”
str=0xcd str=”?”
str=0xce str=”?”
str=0xcf str=”?”
str=0xd0 str=”?”
str=0xd1 str=”?”
str=0xd2 str=”?”
str=0xd3 str=”?”
str=0xd4 str=”?”
str=0xd5 str=”?”
str=0xd6 str=”?”
str=0xd7 str=”?”
str=0xd8 str=”?”
str=0xd9 str=”?”
str=0xda str=”?”
str=0xdb str=”?”
str=0xdc str=”?”
str=0xdd str=”?”
str=0xde str=”?”
str=0xdf str=”?”
str=0xe0 str=”?”
str=0xe1 str=”?”
str=0xe2 str=”?”
str=0xe3 str=”?”
str=0xe4 str=”?”
str=0xe5 str=”?”
str=0xe6 str=”?”
str=0xe7 str=”?”
str=0xe8 str=”?”
str=0xe9 str=”?”
str=0xea str=”?”
str=0xeb str=”?”
str=0xec str=”?”
str=0xed str=”?”
str=0xee str=”?”
str=0xef str=”?”
str=0xf0 str=”?”
str=0xf1 str=”?”
str=0xf2 str=”?”
str=0xf3 str=”?”
str=0xf4 str=”?”
str=0xf5 str=”?”
str=0xf6 str=”?”
str=0xf7 str=”?”
str=0xf8 str=”?”
str=0xf9 str=”?”
str=0xfa str=”?”
str=0xfb str=”?”
str=0xfc str=”?”
str=0xfd str=”?”
str=0xfe str=”?”
i=0x2
str=0x2020 str=” ”
str=0x2e20 str=”. ”
str=0x202e str=” . ”
str=0x2e2e str=”.. ”
str=0x2f2e str=”/. ”
str=0x5c2e str=”\. ”
str=0x2081 str=” ?”
str=0x2e81 str=”.?”
str=0x2082 str=” ?”
str=0x2e82 str=”.?”
str=0x2083 str=” ?”
str=0x2e83 str=”.?”
str=0x2084 str=” ?”
str=0x2e84 str=”.?”
str=0x2085 str=” ?”
str=0x2e85 str=”.?”
str=0x2086 str=” ?”
str=0x2e86 str=”.?”
str=0x2087 str=” ?”
str=0x2e87 str=”.?”
str=0x2088 str=” ?”
str=0x2e88 str=”.?”
str=0x2089 str=” ?”
str=0x2e89 str=”.?”
str=0x208a str=” ?”
str=0x2e8a str=”.?”
str=0x208b str=” ?”
str=0x2e8b str=”.?”
str=0x208c str=” ?”
str=0x2e8c str=”.?”
str=0x208d str=” ?”
str=0x2e8d str=”.?”
str=0x208e str=” ?”
str=0x2e8e str=”.?”
str=0x208f str=” ?”
str=0x2e8f str=”.?”
str=0x2090 str=” ?”
str=0x2e90 str=”.?”
str=0x2091 str=” ?”
str=0x2e91 str=”.?”
str=0x2092 str=” ?”
str=0x2e92 str=”.?”
str=0x2093 str=” ?”
str=0x2e93 str=”.?”
str=0x2094 str=” ?”
str=0x2e94 str=”.?”
str=0x2095 str=” ?”
str=0x2e95 str=”.?”
str=0x2096 str=” ?”
str=0x2e96 str=”.?”
str=0x2097 str=” ?”
str=0x2e97 str=”.?”
str=0x2098 str=” ?”
str=0x2e98 str=”.?”
str=0x2099 str=” ?”
str=0x2e99 str=”.?”
str=0x209a str=” ?”
str=0x2e9a str=”.?”
str=0x209b str=” ?”
str=0x2e9b str=”.?”
str=0x209c str=” ?”
str=0x2e9c str=”.?”
str=0x209d str=” ?”
str=0x2e9d str=”.?”
str=0x209e str=” ?”
str=0x2e9e str=”.?”
str=0x209f str=” ?”
str=0x2e9f str=”.?”
str=0x20a0 str=” ?”
str=0x2ea0 str=”.?”
str=0x20a1 str=” ?”
str=0x2ea1 str=”.?”
str=0x20a2 str=” ?”
str=0x2ea2 str=”.?”
str=0x20a3 str=” ?”
str=0x2ea3 str=”.?”
str=0x20a4 str=” ?”
str=0x2ea4 str=”.?”
str=0x20a5 str=” ?”
str=0x2ea5 str=”.?”
str=0x20a6 str=” ?”
str=0x2ea6 str=”.?”
str=0x20a7 str=” ?”
str=0x2ea7 str=”.?”
str=0x20a8 str=” ?”
str=0x2ea8 str=”.?”
str=0x20a9 str=” ?”
str=0x2ea9 str=”.?”
str=0x20aa str=” ?”
str=0x2eaa str=”.?”
str=0x20ab str=” ?”
str=0x2eab str=”.?”
str=0x20ac str=” ?”
str=0x2eac str=”.?”
str=0x20ad str=” ?”
str=0x2ead str=”.?”
str=0x20ae str=” ?”
str=0x2eae str=”.?”
str=0x20af str=” ?”
str=0x2eaf str=”.?”
str=0x20b0 str=” ?”
str=0x2eb0 str=”.?”
str=0x20b1 str=” ?”
str=0x2eb1 str=”.?”
str=0x20b2 str=” ?”
str=0x2eb2 str=”.?”
str=0x20b3 str=” ?”
str=0x2eb3 str=”.?”
str=0x20b4 str=” ?”
str=0x2eb4 str=”.?”
str=0x20b5 str=” ?”
str=0x2eb5 str=”.?”
str=0x20b6 str=” ?”
str=0x2eb6 str=”.?”
str=0x20b7 str=” ?”
str=0x2eb7 str=”.?”
str=0x20b8 str=” ?”
str=0x2eb8 str=”.?”
str=0x20b9 str=” ?”
str=0x2eb9 str=”.?”
str=0x20ba str=” ?”
str=0x2eba str=”.?”
str=0x20bb str=” ?”
str=0x2ebb str=”.?”
str=0x20bc str=” ?”
str=0x2ebc str=”.?”
str=0x20bd str=” ?”
str=0x2ebd str=”.?”
str=0x20be str=” ?”
str=0x2ebe str=”.?”
str=0x20bf str=” ?”
str=0x2ebf str=”.?”
str=0x20c0 str=” ?”
str=0x2ec0 str=”.?”
str=0x20c1 str=” ?”
str=0x2ec1 str=”.?”
str=0x20c2 str=” ?”
str=0x2ec2 str=”.?”
str=0x20c3 str=” ?”
str=0x2ec3 str=”.?”
str=0x20c4 str=” ?”
str=0x2ec4 str=”.?”
str=0x20c5 str=” ?”
str=0x2ec5 str=”.?”
str=0x20c6 str=” ?”
str=0x2ec6 str=”.?”
str=0x20c7 str=” ?”
str=0x2ec7 str=”.?”
str=0x20c8 str=” ?”
str=0x2ec8 str=”.?”
str=0x20c9 str=” ?”
str=0x2ec9 str=”.?”
str=0x20ca str=” ?”
str=0x2eca str=”.?”
str=0x20cb str=” ?”
str=0x2ecb str=”.?”
str=0x20cc str=” ?”
str=0x2ecc str=”.?”
str=0x20cd str=” ?”
str=0x2ecd str=”.?”
str=0x20ce str=” ?”
str=0x2ece str=”.?”
str=0x20cf str=” ?”
str=0x2ecf str=”.?”
str=0x20d0 str=” ?”
str=0x2ed0 str=”.?”
str=0x20d1 str=” ?”
str=0x2ed1 str=”.?”
str=0x20d2 str=” ?”
str=0x2ed2 str=”.?”
str=0x20d3 str=” ?”
str=0x2ed3 str=”.?”
str=0x20d4 str=” ?”
str=0x2ed4 str=”.?”
str=0x20d5 str=” ?”
str=0x2ed5 str=”.?”
str=0x20d6 str=” ?”
str=0x2ed6 str=”.?”
str=0x20d7 str=” ?”
str=0x2ed7 str=”.?”
str=0x20d8 str=” ?”
str=0x2ed8 str=”.?”
str=0x20d9 str=” ?”
str=0x2ed9 str=”.?”
str=0x20da str=” ?”
str=0x2eda str=”.?”
str=0x20db str=” ?”
str=0x2edb str=”.?”
str=0x20dc str=” ?”
str=0x2edc str=”.?”
str=0x20dd str=” ?”
str=0x2edd str=”.?”
str=0x20de str=” ?”
str=0x2ede str=”.?”
str=0x20df str=” ?”
str=0x2edf str=”.?”
str=0x20e0 str=” ?”
str=0x2ee0 str=”.?”
str=0x20e1 str=” ?”
str=0x2ee1 str=”.?”
str=0x20e2 str=” ?”
str=0x2ee2 str=”.?”
str=0x20e3 str=” ?”
str=0x2ee3 str=”.?”
str=0x20e4 str=” ?”
str=0x2ee4 str=”.?”
str=0x20e5 str=” ?”
str=0x2ee5 str=”.?”
str=0x20e6 str=” ?”
str=0x2ee6 str=”.?”
str=0x20e7 str=” ?”
str=0x2ee7 str=”.?”
str=0x20e8 str=” ?”
str=0x2ee8 str=”.?”
str=0x20e9 str=” ?”
str=0x2ee9 str=”.?”
str=0x20ea str=” ?”
str=0x2eea str=”.?”
str=0x20eb str=” ?”
str=0x2eeb str=”.?”
str=0x20ec str=” ?”
str=0x2eec str=”.?”
str=0x20ed str=” ?”
str=0x2eed str=”.?”
str=0x20ee str=” ?”
。。。。。。

测试代码:

#include
#include
#include

int main(int argc, char **argv)
{

char buff1[0x200];
char buff2[0x400];
char test2[]=”\\\\?\\e:\\test1.txt”;
char test1[]=”e:\\test2.txt”;
int fpt,j,k;
unsigned int i;
unsigned char temp;

printf(“\n Windows Api CreateFileA test.”);
printf(“\n Copy by yuange. 2002.4.22.”);
printf(“\n Usage %s [test1|test2]”,argv[0]);
memset(buff1,0,0×200);
memset(buff2,0,0×400);
// k=strcmp(“test2″,”test1”);

if(argc>=2&&strcmp(“test2”,argv[1])==0)
{
strcpy(buff1,test2);
printf(“\n Test \”\\\\?\\\””);
}
else strcpy(buff1,test1);

j=strlen(buff1);
// k=MultiByteToWideChar(0x3a8,0,buff1,j,buff2,2*j);

fpt=CreateFileA(buff1,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_
WRITE,NULL,CREATE_ALWAYS,0,NULL);
if(fpt<0) { printf("\n Create test file error!"); exit(1); } close(fpt); i=1; for(;;) { // i=0;i<0xffffffff;++i){ // k=i%0x100; // if(k==0) ++i; // *(int *)(buff1+j)=i; // k=MultiByteToWideChar(0x3a8,0,buff1,j+4,buff2,2*j+8); // k=wcslen(buff2); // k=0; for(k=0,temp=0x01;k0){
printf(“\n str=0x”);
for(k=0;k

评论关闭。