系统安全性测试的十个重要问题

1:没有被验证的输入

测试方法:

数据类型(字符串,整型,实数,等)

允许的字符集

最小和最大的长度

是否允许空输入

参数是否是必须的

重复是否允许

数值范围

特定的值(枚举型)

特定的模式(正则表达式)

 

 

2:有问题的访问控制

测试方法:

主要用于需要验证用户身份以及权限的页面,复制该页面的url地址,关闭该页面以后,查看是否可以直接进入该复制好的地址;

例:从一个页面链到另一个页面的间隙可以看到URL地址,直接输入该地址,可以看到自己没有权限的页面信息; 

3:错误的认证和会话管理

分析:帐号列表:系统不应该允许用户浏览到网站所有的帐号,如果必须要一个用户列表,推荐使用某种形式的假名(屏幕名)来指向实际的帐号。 

浏览器缓存:认证和会话数据作为GET的一部分来发送

认证和会话数据不应该作为GET的一部分来发送,应该使用POST

例:对GridLabelTree view类的输入框未作验证,输入的内容会按照html语法解析出来;

4:跨站脚本(XSS[ XSS又叫CSS (Cross Site script) ,跨站脚 本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户 的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。而本文主要讲的是利用XSS得到目标服务器的shell]

分析:攻击者使用跨站脚本[基本简介

  脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。 

   脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编 辑),脚本程序在执行时,是由系统的一个解释器,将其一条 条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比 二进制程序执行效率要稍低一些。 

  脚本通常可以由应用程序临时调用并执行。各类脚本被广泛地应用于网页设计中,因为脚本不仅可以减小网页的规模和提高网页浏览速度,而且可以丰富网页的表现,如动画、声音等。举个最常见的例子,当点击网页上的Email地址时能自动调用Outlook ExpressFoxmail这类邮箱软件,就是通过脚本功能来实现的。也正因为脚本的这些特点,往往被一些别有用心的人所利用。例如在脚本中加入一些破坏计算机系统的命令,这样当用户浏览网页时,一旦调用

 

这类脚本,便会使用户的系统受到攻击。所以用户应根据对所访问网页的信任程度选择安全等级,特别是对于那些本身内容就非法的网页,更不要轻易允许使用脚本。通过“安全设置”对话框,选择“脚本”选项下的各种设置就可以轻松实现对脚本的禁用和启用。

[编辑本段]

相关语言

  脚本语言是 比较多的,一般的脚本语言的执行只同具体的解释执行器有关,所以只要系统上有相应语言的解释程序就可以做到跨平台。脚本(script),就是含有 bindalias等命令的集合,你可以把这个集合存为一个独立的文件然后在需要的时候执行,这样就可以方便你在CS中的使用。脚本可以存为后缀名 为.cfg的文件放在cstrike文件夹下,执行时在控制台输入:exec(脚本文件名).cfg 即可。比如将一个脚本存为 buys.cfg文件,则在控制台中输入:execbuys.cfg则可以实现我们所需要的功能。要实现一个命令只要把这一过程定义(alias)好,并 且分配一个键位给这个命令,以后只要按分配好的键位,就可以实现这一过程。所有的脚本都是通过这一方法实现的。 

  常见的脚本语言:ScalaJavascriptVBscriptActionscriptMAX scriptASPJSPPHPSQLPerlShellpythonRubyJavaFXLuaAutoIt等。

[编辑本段]

主要特性

  语法和结构通常比较简单 

  学习和使用通常比较简单 

  通常以容易修改程序的“解释”作为运行方式,而不需要“编译” 

  程序的开发产能优于运行效能

]来发送恶意代码给没有发觉的用户,窃取他机器上的任意资料;

测试方法:

HTML标签:<></

•转义字符:&(&)<(<)>(>) (空格

•脚本语言:

<scrīpt language=javascrīpt>

Alert(‘’)

</scrīpt>

•特殊字符:‘  ’ <  >  /

•最小和最大的长度

•是否允许空输入

 例:对GridLabelTree view类的输入框未作验证,输入的内容会按照html语法解析出来

 

5:缓冲区溢出

没有加密关键数据

分析:用户使用缓冲区溢出来破坏web应用程序的栈,通过发送特别编写的代码到web程序中,攻击者可以让web应用程序来执行任意代码。

例:viewsourcehttp地址可以查看源代码

在页面输入密码,页面显示的是 *****,  右键,查看源文件就可以看见刚才输入的密码; 

6:注入式漏洞

分析:用户登录处、不用登录可以查看到的数据库中的数据列表尤为重要。

例:一个验证用户登陆的页面,如果使用的sql语句为:

Select *  from  table A where  username=’’ + username+’’ and pass word .

Sql 输入

‘ or 1――

就可以不输入任何password进行攻击;

7:不恰当的异常处理

分析:程序在抛出异常的时候给出了比较详细的内部错误信息,暴露了不应该显示的执行细节,网站存在潜在漏洞;

8:不安全的存储

没有加密关键数据

分析:帐号列表:系统不应该允许用户浏览到网站所有的帐号,如果必须要一个用户列表,推荐使用某种形式的假名(屏幕名)来指向实际的帐号。

浏览器缓存:认证和会话数据不应该作为GET的一部分来发送,应该使用POST; 

 

例:viewsourcehttp地址可以查看源代码

   

在页面输入密码,页面不显示 “*****”; 

在页面输入密码,页面显示的是 *****,

数据库中存的密码没有经过加密;

地址栏中可以看到刚才填写的密码;

右键查看源文件就可以看见刚才输入的密码;   

9:拒绝服务

分析:Config中的链接字符串以及用户信息,邮件,数据存储信息都需要加以保护。攻击者可以从一个主机产生足够多的流量来耗尽狠多应用程序,最终使程序陷入瘫痪。需要做负载均衡来对付。

10:不安全的配置管理

分析:Config中的链接字符串以及用户信息,邮件,数据存储信息都需要加以保护

程序员应该作的:配置所有的安全机制,关掉所有不使用的服务,设置角色权限帐号,使用日志和警报。 

例:数据库的帐号是不是默认为“sa”,密码(还有端口号)是不是直接写在配置文件里而没有进行加密。


相关标签:


评论: