一、漏洞级别
高级别漏洞:大部分远程和本地管理员权限漏洞
中级别漏洞:大部分普通用户权限、权限提升、读懂受限文件、远程和本杜漏洞、拒绝服务漏洞
低级别漏洞:大部分远程非授权文件存取、口令恢复、欺骗、信息泄露漏洞
二、漏洞扫描的原理
是通过扫描目标系统的网络端口和服务,然后尝试利用已知的漏洞来获取对目标系统的未授权访问或执行恶意操作。
三、漏扫和渗透的区别
漏洞扫描:主要目的是识别目标系统中存在的已知漏洞,并提供有关这些漏洞的信息。
渗透测试:旨在模拟真实攻击场景,评估目标系统的安全性,并尝试利用已知和未知漏洞来获取对系统的未授权访问。
配置核查:是指对系统、网络或应用程序的配置进行检查和评估,以确保其符合安全要求和最佳实践。配置核查的目的是识别和纠正可能导致潜在风险和漏洞的不安全设置。
四、常见漏洞修复建议
(1)SQL注入
漏洞描述: Web程序中对于用户提交的参数未做过滤直接拼接到SQL语句中执行,导致参数中的特殊字符破坏了SQL语句原有逻辑,攻击者可以利用该漏洞执行任意SQL语句,如查询数据、下载数据、写入webshell、执行系统命令以及绕过登录限制等。
修复建议:
代码层最佳防御sql漏洞方案:使用预编译sql语句查询和绑定变量。
- 使用预编译语句,使用PDO需要注意不要将变量直接拼接到PDO语句中。所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
- 确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。
- 数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。
- 网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
- 严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
- 避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
- 过滤危险字符,例如:采用正则表达式匹配union、sleep、and、select、load_file等关键字,如果匹配到则终止运行。
(2)XSS 漏洞描述:
(1)反射型XSS:
Web程序代码中对用户提交的参数未做过滤或过滤不严,导致参数中的特殊字符破坏了HTML页面的原有逻辑,攻击者可以利用该漏洞执行恶意HTML/JS代码、构造蠕虫、篡改页面实施钓鱼攻击、以及诱导用户再次登录,然后获取其登录凭证等。
(2)存储型XSS:
XSS攻击对Web服务器本身虽无直接危害,但是它借助网站进行传播,对网站用户进行攻击,窃取网站用户账号身份信息等,从而也会对网站产生较严重的威胁。
修复建议:
XSS漏洞本质上是一种html注入,也就是将html代码注入到网页中。那么其防御的根本就是在将用户提交的代码显示到页面上时做好一系列的过滤与转义。
- 过滤输入的数据,对例如:“ ‘ ”,“ “ ”,” < “,” > “,” on* “,script、iframe等危险字符进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
- 不仅验证数据的类型,还要验证其格式、长度、范围和内容。
- 不仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
- 对输出到页面的数据进行相应的编码转换,如HTML实体编码、JS编码等。对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行检查。
(3)CSRF 漏洞描述:
CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。通常由于服务端没有对请求头做严格过滤引起的。CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。绝大多数网站是通过 cookie 等方式辨识用户身份,再予以授权的。
修复建议:
- 验证请求的Referer是否来自本网站,但可被绕过。
- 在请求中加入不可伪造的token,并在服务端验证token是否一致或正确,不正确则丢弃拒绝服务。
(4)SSRF
漏洞描述: SSRF(Server-Side Request Forgery,服务器端请求伪造):通俗的来说就是我们可以伪造服务器端发起的请求,从而获取客户端所不能得到的数据。SSRF漏洞形成的原因主要是服务器端所提供的接口中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进行过滤,可造成以下危害:
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
2.攻击运行在内网或本地的应用程序(比如溢出);
3.对内网Web应用进行指纹识别,通过访问默认文件实现;
4.攻击内外网的Web应用,主要是使用Get参数就可以实现的攻击(比如Struts2漏洞利用,SQL注入等);
5.利用File协议读取本地文件
修复建议:
- 禁用不需要的协议,只允许HTTP和HTTPS请求,可以防止类似于file://, gopher://, ftp:// 等引起的问题。
- 白名单的方式限制访问的目标地址,禁止对内网发起请求
- 过滤或屏蔽请求返回的详细信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
- 验证请求的文件格式
- 禁止跳转
- 限制请求的端口为http常用的端口,比如 80、443、8080、8000等
- 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态
(5)URL 跳转
漏洞描述: 有的Web 应用程序中使用URL参数中的地址作为跳转链接的功能 ,攻击者可实施钓鱼、恶意网站跳转等攻击。
修复建议:
- 在进行页面跳转前校验传入的URL是否为可信域名。
- 白名单规定跳转链接。
(6)未授权访问
漏洞描述: 由于没有对网站敏感页面进行登录状态、访问权限的检查,导致攻击者可未授权访问,获取敏感信息及进行未授权操作。
修复建议:
- 页面进行严格的访问权限的控制以及对访问角色进行权限检查。
- 可以使用session对用户的身份进行判断和控制。
(7)文件上传
漏洞描述:
文件上传漏洞通常由于代码中对文件上传功能所上传的文件过滤不严或web服务器相关解析漏洞未修复而造成的,如果文件上传功能代码没有严格限制和验证用户上传的文件后缀、类型等,攻击者可通过文件上传点上传任意文件,包括网站后门文件(webshell)控制整个网站。
修复建议:
- 对上传文件类型进行验证,除在前端验证外在后端依然要做验证,后端可以进行扩展名检测,重命名文件,MIME类型检测以及限制上传文件的大小等限制来防御,或是将上传的文件其他文件存储服务器中。
- 严格限制和校验上传的文件,禁止上传恶意代码的文件。同时限制相关上传文件目录的执行权限,防止木马执行。
- 对上传文件格式进行严格校验,防止上传恶意脚本文件。
- 严格限制上传的文件路径。
- 文件扩展名在服务端白名单校验。
- 文件内容服务端校验。
- 上传文件重命名。
- 隐藏上传文件路径。
(8)目录穿越/目录遍历
漏洞描述: 文件下载或获取文件显示内容页面由于未对传入的文件名进行过滤,利用路径回溯符../跳出程序本身的限制目录,来下载或显示任意文件。
修复建议:
- 对传入的文件名参数进行过滤,并且判断是否是允许获取的文件类型,过滤回溯符../
(9)文件包含
漏洞描述: 本地文件包含是指程序在处理包含文件的时候没有严格控制。利用这个漏洞,攻击者可以先把上传的文件、网站日志文件等作为代码执行或直接显示出来,或者包含远程服务器上的恶意文件,进而获取到服务器权限。
修复建议:
- 严格检查变量是否已经初始化。
- 对所有输入提交可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现./和../等目录跳转符。
- 严格检查文件包含函数中的参数是否外界可控。
(10)越权访问
漏洞描述: 由于没有对用户访问角色的权限进行严格的检查及限制,导致当前账号可对其他账号进行相关操作,如查看、修改等。对低权限对高权限账户的操作为纵向越权,相同权限账户之间的操作成为横向越权也称水平越权。
修复建议:
- 对用户访问角色的权限进行严格的检查及限制。
- 在一些操作时可以使用session对用户的身份进行判断和控制。
(11)敏感信息泄露
漏洞描述: 在页面中或者返回的响应包中泄露了敏感信息,通过这些信息,给攻击者渗透提供了非常多的有用信息。
修复建议:
- 如果是探针或测试页面等无用的程序建议删除,或者修改成难以猜解的名字。
- 不影响业务或功能的情况下删除或禁止访问泄露敏感信息页面。
- 在服务器端对相关敏感信息进行模糊化处理。
- 对服务器端返回的数据进行严格的检查,满足查询数据与页面显示数据一致。
(12)明文传输
漏洞描述: 用户登录过程中使用明文传输用户登录信息,若用户遭受中间人攻击时,攻击者可直接获取该用户登录账户,从而进行进一步渗透。
修复建议:
- 用户登录信息使用加密传输,如密码在传输前使用安全的算法加密后传输,可采用的算法包括:不可逆hash算法加盐(4位及以上随机数,由服务器端产生);安全对称加密算法,如AES(128、192、256位),且必须保证客户端密钥安全,不可被破解或读出;非对称加密算法,如RSA(不低于1024位)、SM2等。
- 使用https来保证传输的安全。
(13)命令执行
漏洞描述: 命令或代码执行漏洞是指代码未对用户可控参数做过滤,导致直接带入执行命令和代码,通过漏洞执行恶意构造的语句,执行任意命令或代码。攻击者可在服务器上执行任意命令,读写文件操作等,危害巨大。
修复建议:
- 严格过滤用户输入的数据,禁止执行非预期系统命令。
- 减少或不使用代码或命令执行函数。
- 客户端提交的变量在放入函数前进行检测。
- 减少或不使用危险函数。
(14)暴力破解
漏洞描述: 由于没有对登录页面进行相关的人机验证机制,如无验证码、有验证码但可重复利用以及无登录错误次数限制等,导致攻击者可通过暴力破解获取用户登录账号和密码。
修复建议:
- 如果用户登录次数超过设置的阈值,则锁定帐号(有恶意登录锁定帐号的风险)。
- 如果某个 IP登录次数超过设置的阈值,则锁定IP。
- 增加人机验证机制。
- 验证码必须在服务器端进行校验,客户端的一切校验都是不安全的。
(15)弱口令
漏洞描述: 由于网站用户帐号存在弱口令,导致攻击者通过弱口令可轻松登录到网站中,从而进行下一步的攻击,如上传webshell,获取敏感数据。另外攻击者利用弱口令登录网站管理后台,可执行任意管理员的操作。
修复建议:
- 强制用户首次登录时修改默认口令,或是使用用户自定义初始密码的策略。
- 完善密码策略,信息安全最佳实践的密码策略为8位(包括)以上字符,包含数字、大小写字母、特殊字符中的至少3种。增加人机验证机制。
- 增加人机验证机制,限制IP访问次数。
(16)短信/邮件轰炸
漏洞描述: 由于没有对短信或者邮件发送次数进行限制,导致可无限次发送短信或邮件给用户,从而造成短信轰炸,进而可能被大量用户投诉,从而影响公司声誉。
修复建议:
- 在服务器限制发送短信或邮件的频率,如同一账号1分钟只能发送1次短信或邮件,一天只能发送3次。