软件安全性测试(连载3)

简介: 软件安全性测试(连载3)

2 软件安全测试


2.1 XSS注入

XSSCross SiteScripting),由于与层叠样式表(CascadingStyle SheetsCSS)的缩写混淆。因此一般缩写为XSSXSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。攻击代码,在XSS中称作PayLoad


1. XSS原理

比如有以下一段HTML代码。

<input type='text'value='$var' name='username' />
其中value的参数$var是由用户输入,通过以下jsp代码获得的。
<%
Stringname=request.getPrarmeter("username");
%>
<%=name%>


假设用户输入的$var参数为“<script>alert(/XSS/)</script>”,前端HTML代码为。

<input type='text'value='<script>alert(/XSS/)</script>' name='username' />


后端显示变为。

<script>alert(/XSS/)</script>


这样JavaScript程序被运行。虽然这段JavaScript注入代码(学名为PayLoad)非常简单,但是可以变为一段非常可怕的侵入代码,获取客户端包括操作系统内的所有信息。


2. XSS注入分类

XSS注入可以分为三类,“反射型XSS”“存储型XSS”和“DOM XSS”。


1)反射型XSSNon-Persistent XSS

反射型只是简单地把用户输入的数据反射给浏览器,黑客需要诱使用户点击链接。也叫“非持久型XSS上一节中的注入就属于反射型XSS


2)存储型XSSPersistent XSS

存储型XSS把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。比如博客产品将博文标题与内容存储在MySQL数据库中,然后通过jsp程序将其显示在网页上。

<%
String title = rs.getTitle();
String content =rs.getContent();
%>
<P>
文章标题:<%= title %><br/>
文章内容:<%= content %><br/>
</P>


如果title或者content包含XSS PayLoad,这样页面就存在威胁了。


3DOM XSS

在讲解DOM XSS前先简单介绍一下什么是DOM树。对于任何一个HTML网页都可以看作是从<html>标签到文本节点的一颗“树”,这颗“树”叫做DOM树。如8下面这段HTML代码的DOM树。

<html>
<head>
<title>文档标题</title>
</head>
<body>
<a href="#">我的链接</a>
<h1>我的标题</h1>
</body>
</html>

image.png

8 DOM


DOM XSS注入在原有的HTML对应的DOM树中插入一个节点,然后在这个节点上注入XSSPayLoad。请看如下代码。

<script>
function test(){
    var str=document.getElementById("text").value;
   document.getElementById("t").innerHTML ="<ahref='"+str+"'>testlink</a>"
}
<body>
<divid="t"></div>
<input type="text"id="text" value="" />
<inputtype="button" id="s" value="write"onclick="test()"/><br>
<textareaname="input" rows="10"cols="40">'onclick=alert(/XSS/) //
或者输入:  ' ><imgsrc=# onerror=alert(/XSS/) /><'
</textarea>  
</form>
</body>


JavaScript代码在id="t"的位置插入一个标签为<a>DOM节点,标签<a>节点的href属性来源于id="text"< input >属性的值。如果用户输入“'onclick=alert(/XSS/) //”,标签变为。

<a href=''onclick=alert(/XSS/)//'>testlink</a>


当点击testlink这个超链接,XSS PayLoad就被触发。或者如果用户输入“<ahref=''><img src=# onerror=alert(/XSS/) /><''>testlink</a>”,标签变为。

<a href=''><img src=#onerror=alert(/XSS/) /><''>testlink</a>


这个时候,不用点击testlink这个超链接,XSS PayLoad就被触发。


3. XSS会话挟持

如果将上面XSS PayLoadalert(/XSS/)改为alert(document.cookie),看看会发现什么情形。代码如下。

<%
response.addHeader("Set-Cookie","username=jerry;Expires=Thu,01-Jan-203000:00:01 GMT;path=/");
response.addHeader("Set-Cookie","password=123456;Expires=Thu,01-Jan-203000:00:01 GMT;path=/");
%>
window.onload=function load(){
    window.location.href="login11.jsp"}


login11.jsp有如下代码。

<inputtype="button" value="显示Cookies"onclick="javascript:alert(document.cookie)">


      当点击【显示Cookies】的后就会把“username=jerrypassword=123456”给显示出来。程序通常会在Cookie中设置一些用户隐私信息,这些信息一旦泄露,是否有一定威胁的。那么有什么办法可以不让用户获得Cookie信息呢?这个时候“HTTPOnly”这个武器就出场了。HttpOnly cookie最初是由Microsoft Internet Explorer开发人员于2002年在Internet Explorer 6 SP1的版本中实现。HttpOnlySet-Cookie HTTP响应头中包含的附加标志。生成cookie时使用HttpOnly标志有助于降低客户端脚本访问受保护cookie的风险(如果浏览器支持它)。把上面代码修改一下。

<%
response.addHeader("Set-Cookie","username=jerry;Expires=Thu,01-Jan-203000:00:01 GMT;path=/;HttpOnly");
response.addHeader("Set-Cookie","password=123456;Expires=Thu,01-Jan-203000:00:01 GMT;path=/;HttpOnly");
%>
window.onload=function load(){
    window.location.href="login11.jsp"}
<inputtype="button" value="显示Cookies"onclick="javascript:alert(document.cookie)">


login11.jsp代码不变。这个时候当点击【显示Cookies】的后,usernamepasswordcookie信息都不将被显示。HttpOnlyJavaScriptPHPASPJSP脚本以及JBOSSTomcatApatchWEB Service中均可以设置。比如在TomCattom中的/conf/ 目录下context.xml修改<Context useHttpOnly="true">即可将所有的Cookies设置HttpOnly


4. XSS蠕虫

XSS蠕虫是一种危害最大的XSS注入PayLoad,通过AJAX技术使成千上万的网民中招,曾经在百度等各大网站上都发生过。如9所示。


9 XSS蠕虫效应

下面来简单介绍一下XSS蠕虫。微博系统的URL如下:http://www.mydomain.com。其中。


第一步:发表一个正常微博文章,记录文章的articleID, 假设为23

第二步:通过http://www.mydomain.com?userinfo.php获取所有userid,存在一个数组中。

第三步:在博文中添加下面代码。

<script>
function GetUserId(){
    …//通过AJAX获得UserId
    returnUserId;
}
function GetForWardUrl(){
    foreach user{
          var UserId = GetUserId();
          var ForWardUrl ="http://www.mydomain.com/forward.php?userid="+ UserId+"&articleid=23"
}}
function ListenUser(){
    varlistenUrl = "http://www.mydomain.com/Listen.php;
    …//通过AJAX或者其他方式查看
}
function ForWard(){
    varforWardUrl = GetForWardUrl();
    …//通过AJAX或者其他方式访问此URL转发微博
}
function attack(){
    ForWard();   //把本文章转发给用户
    ListenUser();        //查看自己的微博
}
attack();  //蠕虫发作
</script>


第四步:通过ListenUser()方法查看这篇博文,蠕虫发作。这五个函数调用图如10所示。

image.png

10 XSS蠕虫代码函数调用图


攻击函数attack()先调用ForWard()GetForWardUrl()遍历通过第二步存储的用户ID,产生一个把本微博发给每一个粉丝的超链接,并且让每一位粉丝访问这篇微博。然后调用方法ListenUser()查看自己微博,从而触发整个蠕虫病毒的发作。


星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net


顾翔凡言:


图是软件项目三角形。

image.png

 软件项目三角形


      下面做如下假设。

l 假设质量(Q)与范围(S)不变,时间(T)减少的情形下,必须雇佣高水平的人员或者先进的技术,即增大产品的成本(C)。同理,质量(Q)与范围不变,时间(T)增加的情形下,可以减少成本(C)。

l 假设质量(Q)与时间(T)不变,范围(S)增加的情形下,也必须增大成本(C)。同理,质量(Q)与时间(T)不变,范围(S)减少的情形下,可以减少成本(C)。

l 假设质量(Q)与成本(C)不变,时间(T)减少的情形下,范围(S)必须减少。同理,质量(Q)与成本(C)不变,时间(T)增加的情形下,可以加大范围(S)。


于是可以得到如下公式:

Q = TC/S

 也就是说质量消耗单位模块的时间和金钱的乘积。从这里可以看出,完成一个功能,需要达到一定的质量,必须消耗有效的时间或者增加产品的成本投入,由此可以看出为了赶进度,盲目加班赶工是不可取的。

目录
相关文章
|
安全 Java PHP
软件安全性测试(连载15)
软件安全性测试(连载15)
128 0
软件安全性测试(连载15)
|
开发框架 安全 前端开发
软件安全性测试(连载14)
软件安全性测试(连载14)
91 0
软件安全性测试(连载14)
|
前端开发 JavaScript
软件安全性测试(连载4)
软件安全性测试(连载4)
61 0
|
前端开发 JavaScript 安全
软件安全性测试(连载13)
软件安全性测试(连载13)
155 0
软件安全性测试(连载13)
|
SQL 存储 安全
软件安全性测试(连载21)
软件安全性测试(连载21)
148 0
软件安全性测试(连载21)
|
JSON 监控 安全
软件安全性测试(连载2)
软件安全性测试(连载2)
127 0
软件安全性测试(连载2)
|
SQL 安全 前端开发
软件安全性测试(连载9)
软件安全性测试(连载9)
116 0
软件安全性测试(连载9)
|
安全 前端开发
软件安全性测试(连载7)
软件安全性测试(连载7)
119 0
软件安全性测试(连载7)
|
XML SQL 安全
软件安全性测试(连载10)
软件安全性测试(连载10)
127 0
软件安全性测试(连载10)
|
缓存 安全 Java
软件安全性测试(连载22)
软件安全性测试(连载22)
118 0
软件安全性测试(连载22)
下一篇
无影云桌面