Web常见漏洞库-v1.0
有任何问题可留言评论,另有Excel版提供
XSS
存储型XSS跨站脚本攻击
漏洞级别
高
漏洞描述
跨站脚本攻击是指应用程序没有对用户的输入,以及页面的输出进行严格地过滤,从而使恶意攻击者能往Web页面里插入恶意代码,当用户浏览该页面时,嵌入其中Web里面的恶意代码会被执行,从而达到恶意攻击者的特殊目的。
漏洞危害
恶意攻击者利用漏洞来窃取用户会话、账号,控制应用系统数据、网站挂马、控制受害者机器向其它网站发起攻击等等。
修复建议
1、检查所有用户可输入数据的地方是否有进行过滤或转义处理。包括但不限于这些字符:Javascript script src img onerror { } ( ) < > = , . ; : “ ‘ # ! / * \。
2、根据页面的输出背景环境,对输出进行编码或使用一个统一的规则和库做输出编码,使用安全框架进行安全编码。
3、对于富文本框,使用白名单控制输入,而不是黑名单。
4、在Cookie 上设置HTTPOnly标志,从而禁止客户端脚本访问Cookie。
反射型XSS跨站脚本攻击
漏洞级别
低
漏洞描述
跨站脚本攻击是指应用程序没有对用户的输入,以及页面的输出进行严格地过滤,从而使恶意攻击者能往Web页面里插入恶意代码,当用户浏览该页面时,嵌入其中Web里面的恶意代码会被执行,从而达到恶意攻击者的特殊目的。
漏洞危害
恶意攻击者利用此漏洞可进行钓鱼,窃取用户登录会话等危害。
修复建议
1、检查所有用户可输入数据的地方是否有进行过滤或转义处理。包括但不限于这些字符:Javascript script src img onerror { } ( ) < > = , . ; : “ ‘ # ! / * \。
2、根据页面的输出背景环境,对输出进行编码或使用一个统一的规则和库做输出编码,使用安全框架进行安全编码。
3、对于富文本框,使用白名单控制输入,而不是黑名单。
4、在Cookie 上设置HTTPOnly标志,从而禁止客户端脚本访问Cookie。
注入
SQL注入
漏洞级别
高
漏洞描述
SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。
漏洞危害
恶意攻击者可能会利用SQL注入漏洞获取、篡改数据库数据,执行系统命令,甚至获取系统控制权限。
修复建议
1、使用全局过滤器,过滤特殊字符,正确处理数据类型。包括但不限于以下字符及字符串:select and or like regxpfrom where update exec order by having drop delete ( ) [ ] < > , . ; : ‘“ # % + - _ = / * @。
2、预编译SQL语句,而不要动态组装SQL语句,否则必须确保在使用输入的数据组装成SQL语句之前,对特殊字符进行预处理。
3、以最小权限执行SQL语句,限制远程连接数据库的IP地址范围。
4、屏蔽错误回显,必要时,限制长度。
XML外部实体注入(XXE)
漏洞级别
高
漏洞描述
外部实体攻击,利用。XML文件的解析依赖libxml库,而libxml2.9以前的版本默认支持并开启了外部实体的引用,服务端解析用户提交的XML文件时,未对XML文件引用的外部实体(含外部普通实体和外部参数实体)做合适的处理,并且实体的URL支持file://和ftp://等协议。
漏洞危害
攻击者可以在XML文件中声明URI指向服务器本地的实体造成攻击。实体攻击可导致信息泄露、任意文件读取、代码执行等问题。
修复建议
1、检查所有用户可输入数据的地方是否有进行过滤或转义处理。包括但不限于这些字符:< > & ‘ “ 。
2、检查使用的底层XML解析库,使用JAVA语言提供的禁用外部实体的方法。
权限控制缺失
越权访问
漏洞级别
高
漏洞描述
网站的页面权限控制不当,用户可访问不属于自己的页面并可修改数据。
漏洞危害
权限控制不当,会造成网站数据非法篡改等危害。
修复建议
1、验证一切来自客户端的参数,重点是和权限相关的参数,比如用户ID或者角色权限ID等。
2、Session ID 和认证的Token做绑定,放在服务器的会话里,不发送给客户端。
3、对于用户登录后涉及用户唯一信息的请求,每次都要验证检查所有权,敏感信息页面加随机数的参数,防止浏览器缓存内容。
未授权访问
漏洞级别
高/中
漏洞描述
网站的权限控制不当,需要登录的系统在未登录的情况下也可访问其相关页面,造成敏感信息泄露,严重可导致数据被恶意篡改等。
漏洞危害
造成敏感信息泄露,严重可导致数据被非法篡改。
修复建议
做好权限控制,需登录后访问的页面其权限不可包含空用户。
业务逻辑
任意账号密码重置
漏洞级别
高
漏洞描述
用户修改密码时不需要去校验旧密码,又未对用户身份做校验,容易导致随便一个用户可修改任意用户的密码,或其它修改密码流程中出现了问题。
漏洞危害
攻击者可修改任意账号的密码,从而冒用其身份登录系统。
修复建议
根据具体情况给出具体建议。
任意用户名注册
漏洞级别
中
漏洞描述
注册流程若没有严格校验,容易出现安全问题,如短信验证码可被爆破得出,就可以使用任意手机号码注册账号。
漏洞危害
攻击者可注册任意用户名的账号,从而使用其身份登录系统。
修复建议
根据具体情况给出具体建议。
支付逻辑漏洞
漏洞级别
高
漏洞描述
在交易流程环节,需要对业务数据的完整性和一致性进行保护,特别是确保在用户客户端与服务、业务系统接口之间的数据传输的一致性,通常在订购类交易流程中,容易出现服务器端未对用户提交的业务数据进行强制校验,过度信赖客户端提交的业务数据而导致的商品金额篡改漏洞。
漏洞危害
攻击者可以超低价格或低于商品原价完成交易。
修复建议
1、商品信息(金额、折扣、数量、运费等)原始数据的校验应来自于服务器端,不应该完全相信客户端传递过来的值。
2、服务器端对客户端提交的交易数据(如商品ID、商品数量、商品价格、运费等)的取值范围进行校验,将商品ID和商品价格与数据库中的数据对比校验,商品数量为大于零的整型数。
3、服务器端在生成支付订单时,对支付订单中影响支付金额的所有因素(比如商品ID、商品数量、运费、商品价格、订单编号等)进行签名,对客户端提交的支付订单进行校验。
4、金额超过指定值,进行人工审核。
短信验证码绕过
漏洞级别
中
漏洞描述
验证码一般容易出现绕过的问题,如可重复使用一个验证码值、删除请求包中的验证码参数等,甚至根本不进行校验。
漏洞危害
绕过验证码校验,进行下一步攻击。
修复建议
在服务器端实时刷新与校验验证码,确保验证码不能被重复使用、参数不能为空、不能被暴力破解等。
图形验证码绕过
漏洞级别
低
漏洞描述
验证码一般容易出现绕过的问题,如可重复使用一个验证码值、删除请求包中的验证码参数等,甚至根本不进行校验。
漏洞危害
绕过验证码校验,进行下一步攻击。
修复建议
在服务器端实时刷新与校验验证码,确保验证码不能被重复使用及参数不能为空。
短信轰炸
漏洞级别
中
漏洞描述
攻击者可以对指定手机号码短时间内重复发送很多条短信信息。
漏洞危害
对用户造成短信骚扰,同时消耗服务器资源。
修复建议
1、在服务器端限制发送短信的时间间隔至少为60秒以上。
2、发送短信之前添加图形验证码校验。
3、限制24小时内,针对同一手机号码发送短信的总次数。
4、限制单个IP地址24小时内请求发送短信的次数。
URL跳转
任意URL跳转
漏洞级别
低
漏洞描述
服务端未对传入的跳转url变量进行检查和控制,可能导致可恶意构造任意一个恶意地址,诱导用户跳转到恶意网站。由于是从可信的站点跳转出去的,用户会比较信任,所以跳转漏洞一般用于钓鱼攻击,通过转到恶意网站欺骗用户输入用户名和密码盗取用户信息,或欺骗用户进行金钱交易。
漏洞危害
容易进行钓鱼攻击。
修复建议
1、若跳转的URL事先是可以确定的,包括url和参数的值,则可以在后台先配置好,url参数只需传对应url的索引即可,通过索引找到对应具体url再进行跳转;
2、若跳转的URL事先不确定,但其输入是由后台生成的(不是用户通过参数传人),则可以先生成好跳转链接然后进行签名,而跳转首先需要进行验证签名通过才能进行跳转;
3、若1和2都不满足,url事先无法确定,只能通过前端参数传入,则必须在跳转的时候对url进行按规则校验:即控制url是否是你们公司授权的白名单或者是符合你们公司规则的URL。
弱口令
弱口令漏洞
漏洞级别
高
漏洞描述
应用存在默认口令或口令较简单易被猜到。
漏洞危害
攻击者可以通过暴力破解等方法得到正确的账号,从而冒用他人身份进入系统。
修复建议
1、统一错误回显,如提示用户名或密码错误。
2、使用安全有效的验证码校验机制。
3、配置账号锁定策略,如错误登录3次以上锁定该账号10分钟。
暴力破解
登录凭证可猜解
漏洞级别
低
漏洞描述
检测到登录凭证可使用手工猜解或者工具暴力破解,攻击者能够凭借猜解到的登录凭证登录系统,进行系统管理和进一步的入侵。
漏洞危害
攻击者容易猜解登录凭证,登录系统。
修复建议
1、统一错误回显,如提示用户名或密码错误。
2、使用安全有效的验证码校验机制。
3、配置账号锁定策略,如错误登录3次以上锁定该账号10分钟。
用户名枚举
漏洞级别
低
漏洞描述
通常在登录页面、找回密码页面、修改密码页面,如果提交错误的请求会有很多错误提示,通过这些错误提示可判断哪种情况下用户名是对的。
漏洞危害
攻击者可得出正确的用户名,为爆破正确的账号做准备。
修复建议
1、统一错误回显,并增加安全有效的图形验证码。
2、使用安全有效的加密算法对关键字段进行加密保护,防解密和防篡改。
敏感信息泄露
敏感信息泄露
漏洞级别
高/中/低
漏洞描述
检测到网站敏感信息泄露,这些信息包括配置文件、备份文件、SVN文件、网站源码包、用户名、密码、数据库相关信息、物理路径、内网IP、注释中的敏感信息等等,攻击者可能收集这些敏感信息,为下一步的入侵做好准备。
漏洞危害
攻击者可收集有关信息系统的敏感信息,如配置文件、备份文件、SVN文件、网站源码包、用户名、密码、数据库相关信息、物理路径、内网IP、注释中的敏感信息等等,为下一步入侵做准备。
修复建议
1、优化代码从而避免程序报错。
2、屏蔽默认报错页面中的敏感信息,可自定义一个程序报错的页面,当程序报错时统一显示自定义的报错页面。
3、删除或屏蔽相关敏感信息。
文件上传
任意文件上传
漏洞级别
高/中
漏洞描述
现在大多数网站都有文件上传功能,用于上传文档、图片等操作。但是未对上传的文件进行严格的验证和过滤,就有可能导致攻击者上传恶意脚本文件。
漏洞危害
攻击者可上传恶意脚本,获取信息、控制网站,甚至控制服务器。
修复建议
1、在服务器上使用白名单对上传的文件进行严格的验证,只允许上传特定的文件类型。验证包括文件扩展名校验、文件类型(Content-Type)校验、MIME类型校验、检测上传元信息等等。
2、文件上传的存储目录禁用执行权限。
3、使用随机数改写文件名和文件路径,让用户不能轻易访问自己上传的文件。
目录遍历
任意文件下载/读取(目录遍历)
漏洞级别
高
漏洞描述
许多Web服务器都不会验证或清理虚拟Web服务器根目录之外的路径请求。这个问题可让远程用户利用相对路径来转义Web服务器的根目录。
漏洞危害
攻击者可查看服务器上的任何文件(例如,数据库、用户信息或配置文件)的内容。
修复建议
1、在需要读取、下载特定文件的操作中使用白名单进行验证,建议使用正则表达式对用户的输入进行合法性判断。
2、如果无法使用白名单验证,则使用黑名单进行过滤,过滤点号(.)、斜杠(/)、反斜杠(\)、百分号(%)等恶意字符。
3、限定文件访问范围。
文件包含
文件包含漏洞
漏洞级别
高
漏洞描述
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。通过函数包含文件时,由于没有对包含的文件名进行有效的过滤处理,被攻击者利用从而导致了包含了Web根目录以外的文件进来,就会导致文件信息的泄露甚至注入了恶意代码。
漏洞危害
攻击者可执行任意脚本代码控制网站控制服务器。
修复建议
1、严格检查变量是否已经初始化。
2、严格判断包含中的参数是否外部可控。
3、基于白名单的包含文件验证,验证被包含的文件是否在白名单中。
4、尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include(“func.php”)。
5、对所有输入提交可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现../之类的目录跳转符。
6、可以通过调用str_replace()函数实现相关敏感字符的过滤,一定程度上防御了远程文件包含。
配置不当
Cookie伪造
漏洞级别
高
漏洞描述
Cookie伪造攻击指攻击者通过修改cookie(系统为了辨别用户身份而储存在用户本地终端上的数据,通常经过了加密处理),获得用户未授权信息,进而盗用身份的过程。
漏洞危害
可冒用他人账号的身份登入系统。
修复建议
对Cookie字段进行加密处理。
安装文件未删除
漏洞级别
高/中/低
漏洞描述
检测到网站安装文件未删除。在安装完网站后,应将相关的安装文件删除,以避免攻击者利用安装文件中的可能存在的漏洞获取网站敏感信息,甚至重新安装网站。
漏洞危害
可能利用安装文件可能存在的漏洞进行入侵。
修复建议
删除相关安装文件。
重放攻击
漏洞级别
高/低
漏洞描述
关键业务操作未作token或者唯一标识码,导致攻击者可以重复多次进行请求,导致恶意操作。如重复提交订单等问题。
漏洞危害
攻击者恶意或欺诈性地重复发送一个有效的数据包,如果服务器未检查此类重复提交的请求数据的有效性,那么转账充值等敏感操作将有可能会被重复执行。
修复建议
服务端应用程序应检查客户端提交的数据的唯一性,如使用流水号、时间戳、token等,并将流水号、时间戳等进行签名。
SSRF
服务器端请求伪造(SSRF)
漏洞级别
高
漏洞描述
很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。
漏洞危害
攻击者可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息,对内网web应用进行指纹识别以及利用file协议读取本地文件等。
修复建议
1、过滤内网服务器对公网服务器请求的响应。如果Web应用是获取某一类型的文件,在把返回结果展示给用户之前应先验证返回的信息是否符合文件类型标准,比如返回信息应为图片,如果返回信息是HTML,则停止将返回信息返回客户端。
2、统一错误提示信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3、在内网服务器的防火墙上限制公网服务器的请求端口为HTTP等协议常用端口,如:80、443、8080、8090。
4、若公网服务器的内网IP与内网无业务通信,建议将公网服务器对应的内网IP列入黑名单,避免应用被用来获取内网数据。
5、内网服务器禁用不必要的协议,仅允许HTTP和HTTPS请求,防止类似于file:///、gopher://、ftp:// 等协议引起的安全问题。
CORS
CORS跨域资源共享漏洞
漏洞级别
中
漏洞描述
CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。当配置存在缺陷时,如请求时Origin字段的值没有做限制,默认为,就会接受任意域名的请求。
漏洞危害
可造成敏感数据泄露。
修复建议
1、不要配置”Access-Control-Allow-Origin”为通配符”“ ,而且更为重要的是,要严格效验来自请求数据包中的”Origin”的值。当收到跨域请求的时候,要检查”Origin” 的值是否是一个可信的源,还要检查是否为null。
2、避免使用”Access-Control-Allow-Credentials: true” (请求中带cookie)。
3、减少”Access-Control-Allow-Methods”所允许的方法。
CSRF
CSRF跨站请求伪造攻击
漏洞级别
中/低
漏洞描述
攻击者就可诱导客户机向该Web服务器误发请求,而该请求将视为真实请求。这可通过URL、图像装入XMLHttpRequest等来完成,并可导致数据暴露或意外的代码执行。如果用户当前已登录到受害者站点,请求将自动使用用户的凭证(包括会话cookie、IP地址和其他浏览器认证方法)。
漏洞危害
CSRF跨站请求伪造攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在用户不知情的情况下执行在权限保护之下的操作。
修复建议
1、使用One-Time Tokens,不同的表单包不同的伪随机值。
2、使用Cookie Hashing,所有表单都包含同一伪随机数。
3、在表单中使用验证码,每次提交请求都要输入验证码。
4、验证Referer字段。
远程代码执行
struts2远程命令执行
漏洞级别
高
漏洞描述
Struts 2在2.3.15.1 之前的版本,对“action:”, “redirect:” 和 “redirectAction:” 后面的数据过滤不严格,由于其后面的数据会被作为OGNL表达式进行处理,从而攻击者可以构造恶意的数据,来达到执行远程命令的目的。
漏洞危害
攻击者可执行任意系统命令。
修复建议
升级struts至最新版本。
原文作者: à ō é
原文链接: https://laoel.github.io/2020/01/09/Web常见漏洞库-v1-0/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)