软件测试中web威胁类型学习笔记
安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。例如,①想方设法截取或破译口令;②专门定做软件破坏系统的保护机制;③故意导致系统失败,企图趁恢复之机非法进入;④试图通过浏览非保密数据,推导所需信息,等等。理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。
安全测试用来验证集成在系统内的保护机制是否能够在实际中保护系统不受到非法的侵入。俗话说: “ 系统的安全当然必须能够经受住正面的攻击 —但是它也必须能够经受住侧面的和背后的攻击。 ”
在安全测试过程中,测试者扮演着一个试图攻击系统的个人角色。测试者可以尝试去通过外部的手段来获取系统的密码,可以使用可以瓦解任何防守的客户软件来攻击系统;可以把系统“制服”,使得别人无法访问;可以有目的地引发系统错误,期望在系统恢复过程中侵入系统;可以通过浏览非保密的数据,从中找到进入系统的钥匙等等。
只要有足够的时间和资源,好的安全测试就一定能够最终侵入一个系统。系统设计者的任务就是要把系统设计为想要攻破系统而付出的代价大于攻破系统之后得到的信息的价值。
做安全测试,首先要了解所测的那些漏洞的形成原理,学习并笔记之。
1.孤立资源泄漏
孤立资源——在整个web应用中没有一个链接直接指向该资源,但却在该应用范围内存在,通过某URL请求可以直接访问到。如下图例子,很显然暴露了站点的数据库结构!
web应用在良好的编码风格和雷同架构下,会出现很多相似的地方。见名知义给了开发者们便利,也一样给了攻击者便利。谁都知道test可能是一个测试页面,logs目录下可能是一些日志文件,于是攻击者也知道这个规律,穷尽所有猜测就可以形成字典,即使这个字典不够完整,可以利用模式匹配。
2.参数操纵
Web应用程序总是需要用户交互,需要用户提供一些数据。攻击者则总是会提供一些超出期望的数据,让web应用程序抛异常。虽然大多web站点都不会出现将包含了内部信息的错误报告到浏览器。但这并没有解决根本的问题,Web应用仍然存在安全威胁。
如SQL盲注。如果/xxx.jsp?id=1与/xxx.jsp?id=1 and 1=1的返回结果没有差别,而/xxx.jsp?id=1 and 1=2则返回报错,那么这里很有可能存在SQL Injection漏洞,进一步,使用(以mysql数据库为例)/xxx.jsp?id=1 and (select SUBSTRING((select user from mysql.user limit 1),1,1))=’a',可以破解出一个数据库用户名。
XPath注入,如同针对数据库的SQL注入,XPath就是针对XML文档的注入,只是XML中只有字符串。如上面的例子,如果请求访问的是XML文档,则尝试/xxx.jsp?id=1′ and ‘1′=’1′。
文件提取,核心的思路是利用了操作系统的父路径——“..”,通过一级级访问上级目录从而访问到web范围以外服务器操作系统中的其他文件。
XSS,有Reflected XSS,一般表现为攻击者构造包含XSS的URL,再利用一些社会工程学手段骗得受害者点击。有Stored XSS,如果包含XSS的代码被存入了网站数据库中,而且,页面查询显示这笔数据时没有做过额外的处理,那么只要浏览这张页面,就会遭到攻击。有DOM-based XSS,类似Reflect XSS,不同的是由应用程序客户端已有的脚本来实现,比如url为/xxx.jsp?name=yyy的请求,在回转的页面中,直接用JavaS
会话劫持,是指攻击者以某种形式获得他人的session id,并以他人身份访问资源。
3.其他
CSRF,简单来说,正常登录的用户访问A站点,访问到某个链接,而这个链接所指向的页面,先构造好A站点某个表单的请求,接着提交请求,最后locate到A站点或其他地方,在正常用户看来,只是做了一个页面跳转,而在期间,他不自知的提交了某个表单的请求,比如发了一条垃圾评论(很可能包含了攻击者的那个特别链接)。之所以称为跨站,是因为伪造的请求在另一个完全不搭界的站点上完成。
Phishing,说白了就是网站伪造欺诈,从而简单的获得用户的个人信息。
DoS,一句话,恶意请求的数量过多,导致正常请求不能处理而被拒绝。
为了更好的解决问题,首先要了解问题的本质。到目前,有些问题已经比较明晰,有些问题还有待深入研究,我将继续fighting!
文中例子或山寨描述,都属自己的理解,如有错误,请批评指正!谢谢^_^