web安全测试之二
web系统安全性文性是个比较宽泛的概念,常见的测试关注点以目录设置、口令验证、授权登录、日志文件、Session与Cookie安全、异常操作、SQL注入、跨站脚本攻击XSS、跨站请求伪造CSRF等为主。
1:目录设置
目录设置对系统的安全性而言非常关键,一般认为在一些系统中通过某些小手段总能看到本不该展示的数据信息。例如:通过某些小手段总能看到本不该完成展现的数据信息。例如通过图片的属性查看上一级目录路径为image,并在浏览器直接键入对应的地址,如“http://www.cdtest.cn/oss/image”,可以访问所有图片信息列表。
对于后台常见的管理员后台入口名称在设置目录时同样需要注意,不应将入口名称或路径做普通文件设置,应加以保护,如变换入口目录路径或重命名关键文件。例如,在管理员入口地址“http://www.cdtest.cn/oss/admin/index.jsp”可改成http://cdtest.cn/oss/ossadmin/index.jsp.以免用户轻易猜出入口地址。
2:口令验证
慕青大多数的web系统都设置了登录功能,只有验证通过后,才能访问相关的数据信息。在测试此类功能时,必须测试有效和无效的用户名及口令,同时考虑大小写,错误次数的限制,代码注入等。
3:授权验证
典型的业务系统基本由用户,用户组,权限及基本功能构成,权限管理在整个业务系统中起着至关重要的作用,即使通过口令验证,不同用户,不同较色仍可能具有不同权限,因此在测试的过程中需要测试授权问题,如未登录是否可以浏览信息,未授权是否可以使用功能,授权重登时能否正确分配等。
4:日志文件
日志的功能时追踪,任何可能危害系统安全的操作都应该被记录,测试时需确认是否以安全的方式记录了应该记录的信息。
5:Session与Cookie安全
伪造Session或者恶意读取Cookie,从而窃取用户的信息都是非常严重的安全事故。因此在测试时需要关注Session的失效机制及失效时间,Cookie记录与读取的权限。
6:异常操作
测试工程师不能奢望用户按照系统设计的意愿去使用,因此在测试任何功能,业务过程中需要模拟任何异常的操作,验证系统能否经得起考验,如输入过长的数据,输入特殊符号,上传恶意代码文件,非法下载禁止下载的文件等。
7:SQL注入
SQL注入是web系统安全攻击的常用手段,攻击者通过构建特殊的输入或非法的SQL命令插入表单或页面请求的字符串后提交,从而达到利用服务器执行恶意SQL语句的目的。SQL注入成功后,可直接屏蔽服务器验证,获取访问权限,甚至获取服务器的最高权限,执行篡改记录等恶意行为。
容易实施sql注入的主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统。
sql注入根据注入技术原理不同,一般分为数据库平台注入和程序代码注入。数据库平台注入由web系统使用的数据平台配置不安全或平台本身存在漏洞引发;程序代码注入则主要是由于开发人员在设计时,未能考虑细致及编码是错误实现,从而导致攻击者轻易利用此缺陷,执行非法数据查询。
sql注入的产生原因通常有几个:
a:不恰当的数据类型处理;
b:不安全的数据库配置
c:不合理的查询集处理
d:不当的错误处理
e:不适合的转义字符处理
f:不恰当的请求处理
SQL注入的方法一般有猜测法攻击及屏蔽法攻击,猜测法主要是通过测试数据库可能存在的表或列,根据组合的SQL语句获取表信息。屏蔽法主要是利用SQL输入值不严谨错误进行逻辑验证,从而使得SQL验证结果始终为真,达到绕开验证的目的。
1猜测法
在web系统测试过程中经常接触如下的URL语句。(http://www.test.com?empid=23)
?后面跟的参数empid=23是提交到数据库中,此时可在URL地址嵌入SQL恶意攻击语句。
http://www.test.com?empid=23'or'1'='1
http://www.test.com?empid=23'or 1=(select count(*) from emp)--
如果不存在该表,则可能会报错,说明emp对象名无效,并可告知是哪种数据库类型,然后根据不同的数据库类型,使用对应的系统表名称进行查询攻击。
2屏蔽法
屏蔽法一般利用SQL语句and和or运算符进行攻击,以登录功能为例,通常的sql验证语句如下:
select * from users where username='$username' and password='$password'
在实际攻击过程中,将用户名username和密码password输入为:a'or 1=1 这样sql语句变成:
select * from users where username='a' or 1=1 and password='a' or 1=1
and的优先级高于or,因此先执行1=1 and password=‘a ’,执行结果为假,username=‘a’也为假,但1=1为真,因此整个语句为真。
8:跨站脚本攻击XSS
跨站脚本攻击又称为css,通常是指利用网站漏洞从用户那里恶意盗取信息。当用户访问注入了恶意HTML代码时,可能会触发对应的获取用户敏感信息操作。