Web开发

注册

 

发新话题 回复该主题

常见web安全漏洞 [复制链接]

1#
一、暴力破解1、概述

“暴力破解”是一攻击手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。

  理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。12、基于表单的暴力破解

条件:用户没有任何安全验证,可直接抓包进行暴力破解。

3、验证码绕过

验证码绕过(onserver):验证码校验在服务端完成,但是验证码存在时效性,这个时候我们可以在这个时效内进行抓包实现短时间内的验证码绕过。

验证码绕过(onclient):在前端进行验证码的校验,这个时候驶入正确的验证码提交,进行抓包后,我们通过修改密码和账号发现我们不需要再对验证码进行修改,从而绕过了验证码,实现暴力破解。

4、token防爆破?

由于token值输出在了前端的源码中,容易被获取,因此也就失去了防爆破的意义。我们可以在每次暴力破解的过程中获取到前端页面生成的token的值,从而实现暴力破解。

5、安全策略

1.是否要求用户设置复杂的密码;

2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机app;

3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);

4.是否采用了双因素认证;

二、XSS1、基本概念和原理介绍

跨站点脚本攻击,指攻击者通过篡改网页,嵌入恶意脚本程序,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。

Cross-SiteScripting简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:

1.反射性XSS

交互的数据一般不会被存在在数据库里面,一次性,所见即所得,一般出现在查询

2.存储型XSS

交互的数据会被存在在数据库里面,永久性存储,一般出现在留言板,注册等页面。

3.DOM型XSS

不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型。

形成原因

形成xss漏洞的主要原因是程序对输入输出的控制不够严格,导致“精心设计”的脚本输入后,在输出到前端时被浏览器当作有效代码执行从而产生危害。

2、跨站脚本漏洞测试流程

(1)在目标站点上找到输入点,比如查询接口,留言板等。

(2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理。

(3)通过搜索定位唯一字符,结合唯一字符前后语法确认是否可以执行js的条件(构造闭合)。

(4)提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在现在xss漏洞;

TIPS:

(1)一般查询接口容易出现反射型xss,留言板容易出现存储型xss;

(2)由于后台可能存在过滤措施,构成的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器)。

(3)通过变化不同的script,尝试绕过后台过滤机制。

3、安全策略

(1)输入时:严格过滤单引号,双引号,尖括号。

记住一点:不要相信任何输入的内容。例如用户名只能以字母和数字组合,手机号码只能有11位且全部为数字,否则即为非法。这些格式检查类似于白名单效果,限制输入允许的字符,让一下特殊字符的攻击失效。

(2)输出时:对单引号,双引号,尖括号等转化为HTML实体。

三、csrf1、原理

CSRF(Cross-SiteRequestForgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。

2、如何确认一个web系统存在CRSF漏洞

(1)对目标网站增删查改的地方进行标记,并观察其逻辑,判断是否可以被伪造

–比如修改管理员账号时,并不需要验证旧密码,导致请求容易被伪造;

–比如对于敏感信息的修改并没有使用安全的token验证,导致请求容易被伪造;

(2)确认凭证的有效日期(这个问题会提高CRSF被利用的概率)

–虽然退出并关闭了浏览器,但cookie仍然有效,或者session并没有及时过期,导致CRSF攻击变的简单。

3、防御措施

(1)验证HTTPReferer字段

(2)在请求地址中添加token并验证,后端生成token发送到前端,前端提交到后端在进行验证。

(3)在HTTP头中自定义属性并验证

(4)在服务端区严格区分好POST与GET的数据请求(建议不要使用GET请求进行持久性操作)

(5)使用验证码或者密码确认方式进行

四、SQL注入1、概述2、形成原因

什么是SQL注入攻击

攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。

用户登录,输入用户名lianggzone,密码‘or‘1’=’1,如果此时使用参数构造的方式,就会出现

select*fromuserwherename=‘lianggzone’andpassword=‘’or‘1’=‘1’

不管用户名和密码是什么内容,使查询出来的用户列表不为空。如何防范SQL注入攻击使用预编译的PrepareStatement是必须的,但是一般我们会从两个方面同时入手。

Web端

1)有效性检验。

2)限制字符串输入的长度。

服务端

1)不用拼接SQL字符串。

2)使用预编译的PrepareStatement。

3)有效性检验。(为什么服务端还要做有效性检验?第一准则,外部都是不可信的,防止攻击者绕过Web端请求)

4)过滤SQL需要的参数中的特殊字符。比如单引号、双引号。

五、RCE1、RCE(remote
分享 转发
TOP
发新话题 回复该主题