常见WEB安全漏洞
1、暴力破解、弱密码攻击
通过字典工具进行暴力破解
防御方法
设置高强度密码、采用安全验证码、判断和限制登录行为、双因素认证
2、SQL注入
web应用程序对用户输入的数据没有进行过滤,或者过滤不严,就把 sql语句带进数据库中进行查询;
两个条件:
①参数用户可控:前端传给后端的参数内容是用户可以控制的
②参数代入数据库查询:传入的参数拼接到sql语句,且带入数据库查询
危害:
数据信息泄露、网页篡改、网站挂马、篡改数据库、控制服务器、破 环硬盘
修复建议:
①攻击特征的匹配过滤,采用正则表达式匹配union、sleep、load_file等关键字,如果匹配到,则退出程序。但是会增加程序复杂度,可能会影响业务正常查询
②特殊字符转义、严格数据类型长度、数据库访问权限
防御方法:
使用参数化查询、输入验证和过滤、使用存储过程、最小权限原则、使用ORM框架、使用准备语句、使用安全的数据库连接、避免动态拼接SQL语句、使用防火墙和入侵检测系统、定期更新和维护数据库软件
3、文件上传
由于对上传文件未作过滤或过滤机制不严(文件后缀或类型),导致恶意用户可以上传脚本文件,通过上传文件可达到控制网站权限的目的
思路:
扫描获取上传、会员中心头像上传、后台系统上传、cms类、编辑类(ckeditor、fckeditor、kindeditor)
黑名单:大小写绕过,00阶段,特殊文件名绕过,.htaccess文件攻击
白名单:解析漏洞绕过,配合文件包含漏洞绕过
防御方法:文件上传的目录设置为不可执行、白名单、重命名使用随机数改写文件名文件路径、
4、XSS跨站脚本攻击
服务器对用户提交的数据过滤不严,导致浏览器把用户的输入当成了JS代码并直接返回给客户端执行,从而实现对客户端的攻击目的。
XSS分为:DOM型、反射型、存储型(长久型,危害最大)
危害:窃取用户Cookie、后台增删改文章、XSS钓鱼攻击、利用XSS漏洞进行传播和修改网页代码、XSS蠕虫攻击、网站重定向、获取键盘记录、获取用户信息等
防御方法:对输入和URL参数进行过滤(白名单、黑名单)对特殊字 符进行过滤;HTML(实体编码)字符串js编码转换成实体 html编码的方法;对输出内容进行编码/在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。
5、CSRF跨站请求伪造攻击
CSRF攻击可以利用用户已经登陆或已经授权的状态,伪造合法用户发出请求给受信任的网点,从而实现在未授权的情况下执行一些特权操作。
CSRF与XSS听起来很像,但攻击方式完全不同。XSS攻击是利用受信任的站点攻击客户端用户,而CSRF是伪装成受信任的用户攻击受信任的站点。
用户成功登陆了网站系统,能执行授权的功能,目标用户访问了攻击者构造的恶意URL
- GET型:
如果一个网站某个地方的功能,比如用户修改邮箱是通过GET请求进行修改的。如:/user.php?id=1&email=123@163.com ,这个链接的意思是用户id=1将邮箱修改为123@163.com。当我们把这个链接修改为 /user.php?id=1&email=abc@163.com ,然后通过各种手段发送给被攻击者,诱使被攻击者点击我们的链接,当用户刚好在访问这个网站,他同时又点击了这个链接,那么悲剧发生了。这个用户的邮箱被修改为 abc@163.com 了
2.POST型:
在普通用户的眼中,点击网页->打开试看视频->购买视频是一个很正常的一个流程。可是在攻击者的眼中可以算正常,但又不正常的,当然不正常的情况下,是在开发者安全意识不足所造成的。攻击者在购买处抓到购买时候网站处理购买(扣除)用户余额的地址。比如:/coures/user/handler/25332/buy.php 。通过提交表单,buy.php处理购买的信息,这里的25532为视频ID。那么攻击者现在构造一个链接,链接中包含以下内容
危害:以受害者的名义发送邮件、发消息、盗取受害者的账号,甚至 购买商品、虚拟货币转账、修改受害者的网络配置(比如修改路由器 DNS、重置路由器密码)等等操作。造成的问题包括:个人隐私的泄 露、机密资料的泄露、用户甚至企业的财产安全;一句话概括CSRF的 危害:盗用受害者的身份,受害者能做什么,攻击者就能以受害者的 身份做什么。
利用思路:寻找有权限进行增删改查操作的功能点:比如修改密码、修改个人信息等等,通过burp构造HTML,修改HTML表单中某些参数,使用浏览器打开该HTML,点击提交表单后查看响应结果,看该操作是否成功执行
判断:抓取一个正常请求的数据包,如果没有Referer字段和token,那么极有可能存在CSRF漏洞
如果有Referer字段,但是去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
利用工具进行CSRF检测
防御方法:验证HTTP Referer字段、在请求地址中添加token并验证、在HTTP头中自定义属性并验证、在服务端区严格区分好POST与GET的数据请求、同源策略、使用验证码/密码确认方式进行
同源策略,它是由Netscape提出的一个著名的安全策略。 当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面 当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的, 即检查是否同源,只有和百度同源的脚本才会被执行。 如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。同源策略是浏览器的行为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收。
6、文件包含漏洞
和SQL注入等攻击方式一样,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程叫做包含。
有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。
原理:其实原理就是由于在代码开发的过程中,有时候会遇到相同的代码,不想重复输入,就将代码单独写在一个文件里面,当遇到的时候就直接调用该文件进行运行,而这种方式就会导致客户端可以调用其他的恶意文件,通过恶意文件造成文件包含漏洞。但是前提也是当文件包含的代码文件被当作一个变量来使用,并且能够被用户传入参数,如果没有对该变量做相应的安全防护,就可能会引发出文件包含漏洞。
分类:本地文件包含(Loacl File Inclusion,LFI)和远程文件包含(Remote File Inclusion,RFI)两种。攻击者通过文件包含漏洞可以读取系统中的敏感文件,还有可能导致任意代码执行漏洞。
常见文件包含函数:include()、include_once()、require()、require_once()、 highlight_file()、show_source()、readfile()、file_get_contents()、 fopen()
防御方法:固定后缀、固定文件、waf产品
7、文件下载和文件读取
任意文件读取/下载漏洞(Arbitrary File Read/Download Vulnerability),是指攻击者可以通过某些漏洞,绕过应用程序的限制,直接读取或下载应用程序之外的文件。
这种漏洞通常是由于应用程序没有对用户输入进行充分的验证和过滤而导致的。攻击者可以通过构造恶意的请求来利用该漏洞,从而读取或下载他们本来无权访问的文件,如密码、私钥、证书等,会提供攻击者更多可用信息,提高被入侵的风险。
#利用
数据库配置文件下载或读取后续
接口密匙信息文件下载或读取后续
#文件名,参数值,目录符号
read.xxx?filename=
down.xxx?filename=
readfile.xxx?file=
downfile.xxx?file=
…/ …\ .\ ./等
%00 ? %23 %20 .等
&readpath=、&filepath=、&path=、&inputfile=、&url=、&data=、&readfile=、&menu=、META-INF= 、
WEB-INF
1.文件被解析,则是文件包含漏洞
2.显示源代码,则是文件读取漏洞
3.提示文件下载,则是文件下载漏洞
8、逻辑越权
水平越权、垂直越权、未授权访问
登录:暴力破解、本地加密传输、cookie脆弱、session劫持、密文对比认证 验证:暴力破解、绕过测试、知道识别
接口:调用遍历、参数篡改、未授权访问、webservice测试
水平越权:这种类型的越权就是越权其他用户,比如说你要查看一篇邮件,但是有越权漏洞,却可以查看其他人的邮件。水平越权导致任意用户敏感信息泄露或者用户信息被恶意修改
垂直越权:这种类型的越权就是可以在不同身份之间越权,比如你是普通用户,但是可以越权到管理员,甚至超级管理员。管理员和超级管理员能使用的功能就多了。
上下文越权:上下文越权就是说在某个程序需要执行n个步骤,而你却可以跳过其中某个步骤,直接到最后的步骤。