1、Web安全测试定义
Web安全就是要让软件面对敌意和恶意输入时,仍然可以充分知足需求。
Web安全性测试是有关验证Web应用的安全服务和识别潜在安全性缺陷的过程。
WEB应用程序的基本安全原则:(全部用户输入均不可信!)
2、Web安全测试流程
一般状况下,Web安全测试开展于功能测试后,性能测试前。
3、绕过客户端漏洞
客户端控件通常可攻击的包括如下几个方面:
• HTML验证
HTML 验证不该该被认为是一种安全的方法验证参数,这种验证方式只能帮那些不知道所需输入的用户缩短服务器处理时间,攻击者能够用各类方法轻易的绕过这种机制。任何客户端验证都应该复制到服务器端,这将大大减小不安全的参数在应用程序中使用的可能性。
• 隐藏表单字段
隐藏的HTML 表单是一种看上去没法修改,经过客户端传送数据的经常使用机制。若是一个表单字段标记为hidden 或者readonly 那么它就没法编辑,若是是彻底隐藏则不会在屏幕上显示,可是提交时保存在表单中的字段名称和值仍然被送交给应用程序。
• Http cookie
与隐藏表单相似,http cookie 并不显示在用户屏幕上,也不可直接修改。而有些网站对于不一样的会员等级会有不一样的折扣,判断是否享用折扣就用cookie 来传达。若有些电商最先对金牌会员的折扣就是用 cookie 传达,相似在用户登陆后返回一个响应
这样咱们经过拦截发现了该cookie 值并可在购买时对其进行修改从而拿到了更低廉的折扣。
• URL参数
应用程序有可能会使用预先设定好的URL 参数经过客户端传递数据,
固然这个url 不必定直接显示在浏览器地址栏中,也可能经过包含参数的url 加载框架内容或用弹窗等其余方法隐藏地址栏,这时仍能够用拦截代理服务器去捕获任何一个不规范的url 参数,方法与以上相似,直接修改价格而后提交请求。
• 模糊数据
有时候经过客户端传送的数据是通过加密或某种形式的模糊处理,并不以明文显示。
4、攻击验证机制
验证机制常见的漏洞有如下几种。
一、密码保密性不强(弱口令)
很是短或空白密码
以经常使用字典词汇为密码(password、123456)
密码与用户名彻底相同
长时间使用默认密码html
二、暴力攻击登陆
登陆功能的公开性会诱使攻击者试图猜想用户名和密码,从而得到访问应用程序的权力。若是应用程序容许攻击者用不一样的密码暴力尝试,直到他找到正确的密码,这个程序就很是容易遭受攻击。
三、双因子认证
双因子认证的核心是综合what you know(我的密码)和what you have(手机)来达到双重认证效果。目前不少电商、银行都采用了该认证方式。
该方式最大的缺点就是构建双因子认证须要成本较大,服务器压力也较大,成本较高。sql
四、详细的失败信息
经典的登陆表单会要求用户输入两组信息:用户名和密码。若是登陆尝试失败,咱们能够得出结论,至少有一组信息出错。
若是应用程序明确告诉攻击者哪组数据无效,就能够利用此消息来暴力攻击用户名或密码。
五、修改密码功能
密码修改功能是否拥有隐藏的后台接口:如不经过登陆直接经过url访问;或在应用程序中不存在功能连接但实际能够发现等;
是否可使用不符合标准的密码
用户名是否随修改密码同时提交,由此修改用户
六、忘记密码功能
•质询
经过回答相关密保问题来重设密码,若是质询问题比较简单,能够经过暴力攻击来攻破答案。浏览器
若是只知道其中一个问题答案,经过修改质询问题来输入本身知道的答案。
•邮件
重置别人的密码,修改接收者邮箱为本身的邮箱,访问便可重设密码
•手机
截获验证码发送请求,修改成本身的手机号,从而给你的手机发送一个验证码,页面上输入验证码能够跳转重设安全
七、用户假装功能
假装功能经过隐藏功能形式执行,即在应用程序任何地方都没法跳转到该功能,也不受常规访问控制。也就是说,在应用下有一个特殊的url能够连接到一个不须要核对用户身份的页面执行各类操做。
八、多阶段登陆
应用程序可能会认为访问第三阶段的用户已经完成第1、二阶段的验证。所以攻击者可能被容许直接由第一阶段进入第三阶段并经过验证。
应用程序可能会认为每一个阶段的用户身份不会发生变化,所以,并无在每一个阶段都明确确认用户身份。若是攻击者在两个阶段都提供有效数据,可是是属于两个不一样的用户,那么应用程序可能容许用户经过验证。
应用程序可能会提出一个随机选择的问题,可是问题的细节并无保存在服务器上,而是保存在隐藏的HTML表单字段中。这时候攻击者就能够经过修改隐藏字段选择已经截获或已经遍历到答案的问题,进行验证登录。
网络安全学习资源分享:
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享🎁
同时每个成长路线对应的板块都有配套的视频提供:
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享🎁
因篇幅有限,仅展示部分资料,需要点击上方链接即可获取
5、攻击会话管理
一、令牌生成
一些会话令牌经过用户的用户名或电子邮件地址转换而来,或者使用与其相关的其余信息建立。这些信息能够某种方式进行编码或模糊处理,也可与其余数据结合在一块儿。
由此攻击者能够枚举大量用户名来生成可能有效令牌,实施攻击。服务器
二、会话令牌加密
(1)消息和加密:
(2)鉴别、完整性和抗抵赖
除了提供机密性外,密码学一般还有其它的做用。
鉴别。消息的接收者应该可以确认消息的来源,入侵者不可能假装成他人。
完整性。消息的接收者应该可以验证在传送过程当中消息没有被修改,入侵者不可能用假消息代替合法消息。
抗抵赖。发送者过后不可能虚假地否定他发送的消息。
6、SQL注入
一、验证存在SQL注入三步法
页面返回异常
页面返回正常,和id=1数据一致
页面出现异常或加载为空
若上面三步所有知足,则必定存在Sql注入漏洞。
二、猜解表名
若是页面与id=1彻底相同,说明附加条件成立,即表名称user存在,反之不存在。可采用暴力攻击等手段继续尝试,直到猜到表名。
三、猜解字段名
原理和猜解表名同样,只是把count(*)换成count(字段名)。能够先尝试从输入表单字段名称查找,通常状况下,为了方便起见,字段名会和表单名称取相同的名字。
四、猜解字段值长度(已经获得表名称和字段名前提下)
http://www.xiaoxitest.com/test.jsp?id=1 and (select length(username) from user limit 1)>5;
判断该第一条字段值长度是否大于5,若是大于5,则继续判断是否大于十、1五、20等。最终找到该字段的长度。
五、猜解字段值(已经获得表名称和字段名前提下)
http://www.xiaoxitest.com/test.jsp?id=1 and (select ascii(substr(username,1,1)) from user id=1)>60;
判断id=1的username字段值的第一个字符ASCII编码是多少,从而找出在ASCII编码中对应的字符。可用折半法加速破解,ASCII码在0到127之间。找到第一个后接着找第二、三、4个,直到所有找出。
六、避开过滤
有时开发会过滤关键字防止攻击者,如:select and drop 单引号等
能够尝试使用ASCII码动态构建:如使用char(39)代替单引号
URL hex编码:select 使用%73%65%6C%65%63%74来代替
变换大小写:如Select And oR 等。
1七、ASCII码表
7、应用程序逻辑攻击jsp
一、欺骗密码修改功能
应用程序为用户提供密码修改功能:要求填写用户名、现有密码、新密码和确认密码等字段。
应用程序还为管理员提供密码修改功能:容许修改任何用户的密码,而不用提交现有密码。
假设代码经过判断是否包含提交现有密码参数来肯定是否为管理员修改密码,普通用户经过提交不包含现有密码参数的请求,来假装成功管理员,从而修改密码。
二、绕过支付
假设一个电商网站的购物流程为:一、添加购物车二、肯定订单并输入支付信息三、填写收货地址四、商家发货
开发者认为用户总会按照预约的顺序执行每个步骤,所以,开发者认为任何完成填写收货地址的用户必定已经提交了使人满意的支付信息。
开发者的设计缺陷,用户控制着向程序提出的每个请求,能够按任何顺序访问订购过程的每个阶段。若是从第1步直接跳到第3步,攻击者就能够生成一个已填写收货地址但实际上并未支付的订单。
三、越权操做
攻击者经过修改数据包中用户ID,来访问他人敏感信息或冒充他人发布或删除信息。
四、避开交易限制
如一个积分兑换商城,攻击者经过修改商品数量或修改商品总价为0或负数,从而实现购买或增长积分。
五、审核缺陷
一个发布网站,为了防止垃圾信息,须要经过人工审核才能显示,而且程序还容许用户对已经过的信息进行编辑。
此处存在一个逻辑漏洞:审核经过的信息,若是被用户从新编辑了,不会再次进行审核,致使可利用这个漏洞发布垃圾信息。