WEB安全漏洞介绍及防范方案
2021-08-31 19:59:29 11 举报
AI智能生成
登录查看完整内容
详细介绍web安全漏洞以及防范方案
作者其他创作
大纲/内容
中间件配置缺陷
中间件已知漏洞验证
中间件默认策略安全检测
中间件弱口令
中间件默认密码
中间件安全
验证码不过期,没有及时销毁会话导致同一验证码反复可用。攻击者可以在Cookie中带固定的sessionID和固定的验证码字符串
说明
验证码只能使用一次,验证通过后销毁
防范措施
验证码重复利用
验证码验证与业务接口同一个接口,处理业务前,进行验证码校验
短信验证码接口验证通过后,生成一次性token令牌,调用业务接口时上送token;处理业务前,验证短信token是否有效
验证码绕过
登录密码错误之后,session中的值没有更新,验证码不变。无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行暴力猜解。验证码图片过于简洁,容易被OCR识别扫描。验证码过于简单,容易被攻击者使用字典进行爆破。
验证不通过要重新生成
图片验证码需要加入干扰项,防止OCR直接识别扫描
验证码复杂程度高,或可参考12306
验证码爆破
借用Java反序列化和Apache Commons Collections这一基础类库实现远程命令执行。这个漏洞横扫WebLogic、WebSphere、JBoss、Jenkins、OpenNMS等中间件Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库,实现了一个TransformedMap类,该类是对Java标准数据结构Map接口的一个扩展。该类可以在一个元素被加入到集合内时,自动对该元素进行特定的修饰变换,具体的变换逻辑由Transformer类定义,Transformer在TransformedMap实例化时作为参数传入。如果某个可序列化的类重写了readObject()方法,并且在readObject()中对Map类型的变量进行了键值修改操作,并且这个Map变量是可控的,就可以实现我们的攻击目标了。
不要反序列化不可信的数据
给反序列数据加密签名,并确保解密在反序列之前
给反序列化接口添加认证授权
反序列化服务只允许监听在本地或者开启相应防火墙
反序列化命令执行
存在于系统登录页面,利用登陆时输入系统存在的用户名错误密码和不存在的用户名错误密码,返回不同的出错信息可枚举出系统中存在的账号信息。
建议对网站登录页面的判断回显信息修改为一致:用户名或密码错误
用户名枚举
存在于系统登录页面,利用登陆时输入系统存在的用户名错误密码和不存在的用户名错误密码,返回不同的出错信息可枚举出系统中存在的账号信息。当枚举出系统存在的账号时,使用字典进行批量爆破
限制同一IP/用户账号重复登录频率
用户密码枚举
弱口令指的是仅包含简单数字和字母的口令,例如”123”、”abc”等,因为这样的口令很容易被别人破解。通过爆破工具就可以很容易破解用户的弱口令。
所有的密码必须具有足够的长度和复杂度。 ——密码要求8位以上,包含大小写字母、数字、特殊符号等类型中至少两种。
所有密码之间不能有任何关联,如不能由邮箱的密码推测出OA的密码。
所有密码不得采用单一的英文单词、拼音或其他有意义的词语和符号,如员工的姓名拼音、生日等。
不同安全等级、不同用途的帐号应设置不同密码,禁止使用同一密码。
用户弱口令
1、攻击者Attacker能正常访问该应用网站;2、应用网站服务器返回一个会话ID给他;3、攻击者Attacker用该会话ID构造一个该网站链接发给受害者Victim;4-5、受害者Victim点击该链接,携带攻击者的会话ID和用户名密码正常登录了该网站,会话成功建立;6、攻击者Attacker用该会话ID成功冒充并劫持了受害者Victim的会话。攻击的整个过程,会话ID是没变过的,所以导致此漏洞。
每次登录后都重置会话ID,并生成一个新的会话ID,这样攻击者就无法用自己的会话ID来劫持会话
禁用客户端访问Cookie
会话标志固定攻击(Session fixation attack)
1. 返回前端的用户编号应无序无规律
2.对请求数据进行加密加签
平行越权访问
垂直越权是一种“基于URL的访问控制”设计缺陷引起的漏洞,又叫做权限提升攻击。由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
后台应用在调用功能前验证用户是否有权限
垂直越权访问
未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。常见的未授权访问漏洞1.MongoDB 未授权访问漏洞2.Redis 未授权访问漏洞3.Memcached 未授权访问漏洞CVE-2013-72394.JBOSS 未授权访问漏洞5.VNC 未授权访问漏洞6.Docker 未授权访问漏洞7.ZooKeeper 未授权访问漏洞8.Rsync 未授权访问漏洞
设置访问认证密码
未授权访问
支付逻辑漏洞是指系统的支付流程中存在逻辑层面的漏洞。支付流程通常为选择商品和数量-选择支付及配置方式-生成订单-订单支付-完成订单最常见的支付逻辑漏洞通常是由于服务端没有对客户端请求数据中的金额、数量等敏感信息作校验导致一般在电子商务网站上容易出现此类漏洞
敏感数据加密
检查交易金额、数量不允许负数,且必须以后台数据库为准
请求报文加密加签
支付模块业务逻辑漏洞
短信轰炸指短信接口无安全防范,允许输入手机号码即可发送短信,被恶意利用该接口,对目标手机批量发送短信进行轰炸
尽量不允许页面输入手机号码
设置发送短信间隔、短信次数
检查距离上次发送短信验证码时效,有效期内不再发送短信
短信轰炸
常见情况
爆破用户名,当输入的用户名不存在时,会显示请输入正确用户名,或者用户名不存在
已知某个用户名,比如admin进行字典爆破(暴力爆破 -- 弱口令)
使用一个常用密码,比如123456对大量用户进行爆破
暴力破解
撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网址,这就可以理解为撞库攻击。
1、用户所有网站使用同一组账号密码2、网站不允许存储不加盐的明文(1.不能是明文,2.不能是未加盐的md5/sha1等,加盐算法不能公开)
撞库
1、身份认证安全
邮箱更改
订单ID更改
商品编号更改
用户ID更改
手机号篡改
支付金额篡改
商品数量篡改
2、数据篡改
业务逻辑漏洞
业务逻辑安全
就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
攻击方式
页面检查不允许输入特殊字符
使用预编码语句,如 mybatis #{},切记不可直接拼接SQL
SQL注入
跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
盗取用户Cookie
修改网页内容
网站挂马
利用网站重定向
XSS蠕虫
输入与输出转义
将重要的cookie标记为httponly
跨站脚本攻击(XSS)
XML外部实体注入漏洞,即XXE(XML External Entity),此漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。
DOM解析防护,限制外部实体的解析
XML外部实体注入(XXE)
是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
涉及敏感操作的请求改为POST请求
用户操作限制——验证码机制
额外验证机制——token的使用
跨站请求伪造攻击(CSRF)
1、限制请求端口只能为web端口,只允许访问HTTP和HTTPS的请求;
2、过滤返回的信息;
3、禁止不常使用的端口;
4、限制不能访问内网的IP,防止对内网进行攻击;
5、对于DNS重绑定,使用DNS缓存或者Host白名单。
SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求,一般情况下,SSRF攻击的目标是外网无法访问的内部系统。
服务器端请求伪造攻击(SSRF)
1)对文件格式限制,只允许某些格式上传
2)对文件格式进行校验,前端跟服务器都要进行校验(前端校验扩展名,服务器校验扩展名、Content_Type等)
3)将上传目录防止到项目工程目录之外,当做静态资源文件路径,并且对文件的权限进行设定,禁止文件下的执行权限。
任意文件上传
文件路径保存至数据库,让用户提交文件对应ID下载文件。
过滤../等敏感字符,使用户在url中不能回溯上级目录
任意文件下载或读取
IIS中关闭目录浏览功能:在IIS的网站属性中,勾去“目录浏览”选项,重启IIS。
Apache中关闭目录浏览功能:打开Apache配置文件httpd.conf,查找“Options Indexes FollowSymLinks”,修改为“ Options -Indexes”(减号表示取消,保存退出,重启Apache)。
Nginx 中默认不会开启目录浏览功能,若您发现当前已开启该功能,可以编辑nginx.conf文件,删除如下两行:autoindex on;autoindex_exact_size on,然后重启Nginx。
任意目录遍历
SVN、Git等管理工具隐藏文件被发布出去
注意删除隐藏文件再发布
管理工具信息泄漏
.DS_Store文件泄露
WEB-INF泄露
备份文件泄露
location /files { alias /home/;}
保证location和alias的值都有后缀/或都没有这个后缀
nginx目录穿越漏洞
配置错误导致的泄露
信息泄漏
CRLF是CR和LF两个字符的拼接,它们分别代表”回车+换行”(\\)“,全称为Carriage Return/Line Feed”,十六进制编码分别为0x0d和0x0a,URL编码为%0D和%0A。CR和LF组合在一起即CRLF命令,它表示键盘上的\"Enter\"键,许多应用程序和网络协议使用这些命令作为分隔符。 而在HTTP协议中,HTTP header之间是由一个CRLF字符序列分隔开的,HTTP Header与Body是用两个CRLF分隔的,浏览器根据这两个CRLF来取出HTTP内容并显示出来。 所以如果用户的输入在HTTP返回包的Header处回显,便可以通过CRLF来提前结束响应头,在响应内容处注入攻击脚本。因此CRLF Injection又叫HTTP响应拆分/截断(HTTP Response Splitting)简称HRS。
1. 对用户的数据进行合法性校验,对特殊的字符进行编码,如、’、”、CR、LF等,限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出,以防止注入自定义HTTP头。
2. 创建安全字符白名单,只接受白名单中的字符出现在HTTP响应头文件中。
3. 在将数据传送到http响应头之前,删除所有的换行符。
CRLF注入
命令执行漏洞是指可以随意执行系统命令,属于高危漏洞之一,也属于代码执行范围内
尽量减少能命令执行的函数的使用,允许的话可直接在php的配置文件php.ini中禁用
在使用命令执行的函数之前,首先对用户输入参数进行过滤
参数的值尽量使用引号包裹,并在拼接之前调用addslashes进行转义
命令执行注入
定时更新
第三方组件安全
应用程序在调用一些能够将字符串转换为代码的函数(例如php中的eval中),没有考虑用户是否控制这个字符串,将造成代码执行漏洞
任意代码执行
Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。
Struts 2.3.5 – Struts 2.3.31 Struts 2.5 – Struts 2.5.10
Struts2远程命令执行
Spring框架3.0.6以下版本,在一定的条件下,可以被攻击者利用,执行任意的java代码,从而威胁系统的安全性
Spring远程命令执行
点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
网页可能被别人用iframe框架使用
在apache配置文件中添加一行信息即可:Header always append X-Frame-Options SAMEORIGIN
配置 nginx 发送 X-Frame-Options 响应头:add_header X-Frame-Options SAMEORIGIN;
修复方案
缺少“X-Frame-Option”头
PHP、Python等脚本语言
正则严格判断用户输入参数的格式检查使用者输入的文件名是否有“…”的目录阶层字符
任意文件删除
会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。
向所有会话cookie中添加“HttpOnly”属性。Java示例:HttpServletResponse response2 = (HttpServletResponse)response;//response2.setHeader( \"Set-Cookie\
方案
未设置HTTPONLY
伪造来源攻击,在Web应用开发中,经常会需要获取客户端IP地址。一个典型的例子就是投票系统,为了防止刷票,需要限制每个IP地址只能投票一次。
nginx配置:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
nginx配置:proxy_set_header X-Forwarded-For $remote_addr;
X-Forwarded-For伪造
不安全的HTTP方法一般包括:TRACE、PUT、DELETE、COPY 等。其中最常见的为TRACE方法可以回显服务器收到的请求,主要用于测试或诊断,恶意攻击者可以利用该方法进行跨站跟踪攻击(即XST攻击),从而进行网站钓鱼、盗取管理员cookie等
nginx:if ($request_method ~ ^(PUT|DELETE)$) { return 403; }
在中间件nginx、Tomcat或项目代码中拦截禁用危险方法
不安全的http methods
暴力猜解简单来说就是将密码进行逐个推算,直到找出真正的密码为止。
密码的复杂性
验证码措施
登陆日志(限制登录次数)
暴力猜解
大多数金融行业信息系统业务场景中,对于交易的安全,采用安全认证的方式保护,认证的因子包括静态密码、短信验证码、UsbKEY,OTP令牌等,一旦业务流程和业务逻辑设计不当,这种认证机制被绕过,可带来严重后果,比如:无需密码即可进行交易、无需短信验证码即可重置密码等。
典型场景就是验证校验流程
优化业务逻辑,将认证和操作放在同一个客户端请求中,在服务器端按照业务流程进行分步执行操作。
如果采用客户端与服务端分步业务流程执行,认证通过后,服务端记录认证标识,最后操作时,验证其认证标识,认证标识应与用户绑定防止越权使用,且使用一次后应立即失效。
认证绕过
一般来说,越权放问就好比你是非系统管理员用户,却偷偷的跑进了系统管理菜单,僭越权利访问里面的信息甚至修改其中的数据(不同级别的越权又称垂直越权访问)
越权访问
加密
加签
交互安全
重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。
时间戳
双方必须事先协商一个初始序列号,并协商递增方法
序号
加盐
随机数
重放攻击
web安全
常见安全漏洞及防范方案
0 条评论
回复 删除
下一页