[ 网络安全基础篇 ]常见 Web 漏洞的描述及其修复建议(相对全面)
Posted _PowerShell
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ 网络安全基础篇 ]常见 Web 漏洞的描述及其修复建议(相对全面)相关的知识,希望对你有一定的参考价值。
🍬 博主介绍
- 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
- ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
- 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
- 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
- 🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
36. Apache Struts2 远程代码执行漏洞(S2-019)
37. Apache Struts2 远程代码执行漏洞(S2-037)
38. Apache Struts2 DevMode 远程代码执行漏洞
39. Apache Struts2 远程代码执行漏洞(S2-045)
40. Apache Struts2 远程代码执行漏洞(S2-033)
写在前面
常见web漏洞的描述及其修复方式是每个安全工作者所必须了解的甚至掌握的,在渗透测试报告中,对于漏洞的描述和修复方式是必不可少的。这里参考了很多的文章,总结了几十个关于常见web漏洞的描述及修复方式,仅供参考。
其实这两个方面的重要性不仅仅是在报告中体现,在面试准备中也是必不可少的,每一场关于安全的面试中都会有很多关于漏洞的描述和修复方式相关的问题。更重要的是,描述及其修复方式有利于我们更好的理解漏洞本身。
这样的总结不仅仅是对所学知识的总结,更是一种升华,希望自己不要由于生活及工作的忙碌而停下总结的脚步。
1. 用户名枚举漏洞
漏洞描述
由于错误配置或设计缺陷,当向系统提交有效账户和无效账户时,服务器会有不同的响应。利用响应的不同,攻击者可以获取到系统已经存在的账户,可用于暴力破解,进一步获取账户的登录密码。
修复建议
统一身份验证失败时的响应,如:用户名或密码错误。
2. 弱口令
漏洞描述
由于网站用户帐号存在弱口令,导致攻击者通过弱口令可轻松登录到网站中,从而进行下一步的攻击,如上传webshell,获取敏感数据。
另外攻击者利用弱口令登录网站管理后台,可执行任意管理员的操作。
修复建议
1、强制用户首次登录时修改默认口令,或是使用用户自定义初始密码的策略;
2、完善密码策略,信息安全最佳实践的密码策略为8位(包括)以上字符,包含数字、大小写字母、特殊字符中的至少3种。
3、增加人机验证机制,限制ip访问次数。
3. 暴力破解
漏洞描述
由于没有对登录页面进行相关的人机验证机制,如无验证码、有验证码但可重复利用以及无登录错误次数限制等,导致攻击者可通过暴力破解获取用户登录账号和密码。
修复建议
1、如果用户登录次数超过设置的阈值,则锁定帐号(有恶意登录锁定帐号的风险)
2、如果某个 IP登录次数超过设置的阈值,则锁定IP
3、增加人机验证机制
4、验证码必须在服务器端进行校验,客户端的一切校验都是不安全的。
4. 备份文件泄露
漏洞描述
网站备份文件或、敏感信息文件存放在某个网站目录下,攻击者可通过文件扫描等方法发现并下载该备份文件,导致网站敏感信息泄露。
修复建议
1、不在网站目录下存放网站备份文件或敏感信息的文件。
2、如需存放该类文件,请将文件名命名为难以猜解的无规则字符串。
5. 敏感信息泄露
漏洞描述
在页面中或者返回的响应包中泄露了敏感信息,通过这些信息,给攻击者渗透提供了非常多的有用信息。
修复建议
1、如果是探针或测试页面等无用的程序建议删除,或者修改成难以猜解的名字。
2、不影响业务或功能的情况下删除或禁止访问泄露敏感信息页面。
3、在服务器端对相关敏感信息进行模糊化处理。
4、对服务器端返回的数据进行严格的检查,满足查询数据与页面显示数据一致。
5. phpinfo信息泄漏
漏洞描述
Web站点的某些测试页面可能会使用到php的phpinfo()函数,会输出服务器的关键信息,造成服务器信息泄露,为攻击提供有利的信息。
修复建议
1、删除phpinfo 函数。
2、若文件无用可直接删除。
7. IIS短文件名泄露漏洞
漏洞描述
Internet Information Services(IIS,互联网信息服务)是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件。危害:攻击者可以利用“~”字符猜解或遍历服务器中的文件名,或对IIS服务器中的.Net Framework进行拒绝服务攻击。
攻击者可通过该漏洞尝试获取网站服务器文件的文件名,达到获取更多信息来入侵服务器的目的。
修复建议
修改Windows配置,关闭短文件名功能。
1.关闭NTFS 8.3文件格式的支持。该功能默认是开启的,对于大多数用户来说无需开启。
2.如果是虚拟主机空间用户,可采用以下修复方案:
1)修改注册列表HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem\\NtfsDisable8dot3NameCreation的值为1(此修改只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除)。
2)如果你的web环境不需要asp.net的支持你可以进入Internet 信息服务(IIS)管理器 --- Web 服务扩展 - ASP.NET 选择禁止此功能。
3)升级net framework 至4.0以上版本。
3.将web文件夹的内容拷贝到另一个位置,比如D:\\www到D:\\www.back,然后删除原文件夹D:\\www,再重命名D:\\www.back到D:\\www。如果不重新复制,已经存在的短文件名则是不会消失的。
8. 应用程序错误信息泄露
漏洞描述
攻击者可通过特殊的攻击向量,使web服务器出现500、403等相关错误,导致信息泄漏如绝对路径、webserver版本、源代码、sql语句等敏感信息,恶意攻击者很有可能利用这些信息实施进一步的攻击。
修复建议
自定义错误页面或使用统一的错误页面提示。
9. 短信/邮件轰炸
漏洞描述
由于没有对短信或者邮件发送次数进行限制,导致可无限次发送短信或邮件给用户,从而造成短信轰炸,进而可能被大量用户投诉,从而影响公司声誉。
修复建议
在服务器限制发送短信或邮件的频率,如同一账号1分钟只能发送1次短信或邮件,一天只能发送3次。
10. SQL注入
漏洞描述
Web程序中对于用户提交的参数未做过滤直接拼接到SQL语句中执行,导致参数中的特殊字符破坏了SQL语句原有逻辑,攻击者可以利用该漏洞执行任意SQL语句,如查询数据、下载数据、写入webshell、执行系统命令以及绕过登录限制等。
修复建议
代码层最佳防御sql漏洞方案:使用预编译sql语句查询和绑定变量。
1. 使用预编译语句,使用PDO需要注意不要将变量直接拼接到PDO语句中。所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
2. 对进入数据库的特殊字符(’”<>&*;等)进行转义处理,或编码转换。
3. 确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。
4. 数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。
5. 网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
6. 严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
7. 避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
8. 过滤危险字符,例如:采用正则表达式匹配union、sleep、and、select、load_file等关键字,如果匹配到则终止运行。
11. CRLF注入
漏洞描述
CRLF 是“回车 +换行”(\\r\\n)的简称。在 HTTP 协议中,HTTPHeader 与 HTTP Body 是用两个 CRLF 符号进行分隔的,浏览器根据这两个 CRLF 符号来获取 HTTP 内容并显示。因此,一旦攻击者能够控制 HTTP 消息头中的字符,注入一些恶意的换行,就能注入一些会话 Cookie 或者 html 代码。
修复建议
过滤 \\r 、\\n 及其各种编码的换行符,避免输入的数据污染到其他 HTTP 消息头。
12. LDAP注入
漏洞描述
由于Web 应用程序没有对用户发送的数据进行适当过滤和检查,攻击者可修改LDAP 语句的结构,并且以数据库服务器、Web 服务器等的权限执行任意命令,许可权可能会允许查询、修改或除去 LDAP 树状构造内任何数据。
修复建议
对用户的输入内容进行严格的过滤。
13. OS命令注入
漏洞描述
操作系OS命令注入统命令注入(也称为shell注入)是一个Web安全漏洞,它使攻击者可以在运行应用程序的服务器上执行任意操作系统(OS)命令,并且通常会完全破坏该应用程序及其所有数据。攻击者通常可以利用OS命令注入漏洞来破坏托管基础结构的其他部分,利用信任关系将攻击转移到组织内的其他系统。
修复建议
1. 不仅要在客户端过滤,也要在服务器端过滤。
2. 要用最小权限去运行程序,不要给予程序多余的权限,最好只允许在特定的路径下运行,可以通过使用明确运行命令。
3. 在程序执行出错时,不要显示与内部实现相关的细节。
4. 如果只允许运行有限的命令、使用白名单方式过滤。
5. 对于需要运行命令的请求,尽可能减小需要从外部输入的数据。比如:传参数的地方不要传命令行。
6. 有下载文件,给文件分配一个ID号来访问文件,拒绝文件名访问。如果需要用文件名,严格检测文
14. XPath注入
漏洞描述
XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入发生在当站点使用用户输入的信息来构造请求以获取XML数据。攻击者对站点发送经过特殊构造的信息来探究站点使用的XML是如何构造的,从而进一步获取正常途径下无法获取的数据。当XML数据被用作账户验证时,攻击者还可以提升他的权限。
修复建议
1. 在服务器端开始处理用户提交的请求数据之前,对输入的数据进行验证,验证每一个参数的类型、长度和格式。
2. 对于系统出现的错误信息,以IE错误编码信息替换,屏蔽系统本书的出错信息,这样可以向攻击者提供更少的信息进行下一步注入攻击。
3. 检查是否有特殊字符,如果有特殊字符 ,就转义特殊字符或者替换。例:单引号、双音哈都转义或者替换。
4. XPath查询参数化,编译构建XPath表达式,将数据输入以 变量形式 传递。
5. 敏感信息如密码之类,使用哈希值较长的
15. JSON注入
漏洞描述
JSON注入是指应用程序所解析的JSON数据来源于不可信赖的数据源,程序没有对这些不可信赖的数据进行验证、过滤,如果应用程序使用未经验证的输入构造 JSON,则可以更改 JSON 数据的语义。在相对理想的情况下,攻击者可能会插入无关的元素,导致应用程序在解析 JSON数据时抛出异常。
修复建议
在特殊字符前加反斜杠()进行转义
使用javascript编码
使用HTML编码
16. XSS
漏洞描述
1、Web程序代码中对用户提交的参数未做过滤或过滤不严,导致参数中的特殊字符破坏了HTML页面的原有逻辑,攻击者可以利用该漏洞执行恶意HTML/JS代码、构造蠕虫、篡改页面实施钓鱼攻击、以及诱导用户再次登录,然后获取其登录凭证等。
2、XSS攻击对Web服务器本身虽无直接危害,但是它借助网站进行传播,对网站用户进行攻击,窃取网站用户账号身份信息等,从而也会对网站产生较严重的威胁。XSS攻击可导致以下危害:
1、钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者通过注入钓鱼JavaScript脚本以监控目标网站的表单输入,甚至攻击者基于DHTML技术发起更高级的钓鱼攻击。
2、网站挂马:跨站时,攻击者利用Iframe标签嵌入隐藏的恶意网站,将被攻击者定向到恶意网站上、或弹出恶意网站窗口等方式,进行挂马。
3、身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS攻击可以盗取用户的cookie,从而利用该cookie盗取用户对该网站的操作权限。
4、盗取网站用户信息:当窃取到用户cookie从而获取到用户身份时,攻击者可以盗取到用户对网站的操作权限,从而查看用户隐私信息。
5、垃圾信息发送:在社交网站社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
6、劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,从而监视用户的浏览历史、发送与接收的数据等等。
7、XSS蠕虫:借助XSS蠕虫病毒还可以用来打广告、刷流量、挂马、恶作剧、破坏数据、实施DDoS攻击等。
修复建议
xss漏洞本质上是一种html注入,也就是将html代码注入到网页中。那么其防御的根本就是在将用户提交的代码显示到页面上时做好一系列的过滤与转义。具体措施如下
1. 过滤输入的数据,对例如:“ ‘ ”,“ “ ”,” < “,” > “,” on* “,script、iframe等危险字符进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
2. 不仅验证数据的类型,还要验证其格式、长度、范围和内容。
3. 不仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
4. 对输出到页面的数据进行相应的编码转换,如HTML实体编码、JS编码等。对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行检查。
17. XXE
漏洞描述
XXE(XML External Entity)是指xml外部实体攻击漏洞。XML外部实体攻击是针对解析XML输入的应用程序的一种攻击。当包含对外部实体的引用的XML输入被弱配置XML解析器处理时,就会发生这种攻击。这种攻击通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
修复建议
1.使用开发语言提供的禁用外部实体的方法
PHP: libxml_disable_entity_loader(true);
JAVA:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python: from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
2.过滤用户提交的XML数据
过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC
3.使用第三方应用代码及时升级补丁
18. CSRF
漏洞描述:
CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。通常由于服务端没有对请求头做严格过滤引起的。CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。绝大多数网站是通过 cookie 等方式辨识用户身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。CSRF攻击会令用户在不知情的情况下攻击自己已经登录的系统。
修复建议
1、验证请求的Referer是否来自本网站,但可被绕过。
2、在请求中加入不可伪造的token,并在服务端验证token是否一致或正确,不正确则丢弃拒绝服务。
19. SSRF
漏洞描述
SSRF(Server-Side Request Forgery,服务器端请求伪造):通俗的来说就是我们可以伪造服务器端发起的请求,从而获取客户端所不能得到的数据。SSRF漏洞形成的原因主要是服务器端所提供的接口中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进行过滤。这个漏洞造成的危害有:
(1)、可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
(2)、攻击运行在内网或本地的应用程序(比如溢出);
(3)、对内网Web应用进行指纹识别,通过访问默认文件实现;
(4)、攻击内外网的Web应用,主要是使用Get参数就可以实现的攻击(比如Struts2漏洞利用,SQL注入等);
(5)、利用File协议读取本地文件。
修复建议
1、禁用不需要的协议,只允许HTTP和HTTPS请求,可以防止类似于file://, gopher://, ftp:// 等引起的问题。
2、白名单的方式限制访问的目标地址,禁止对内网发起请求
3、过滤或屏蔽请求返回的详细信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
4、验证请求的文件格式
5、禁止跳转
6、限制请求的端口为http常用的端口,比如 80、443、8080、8000等
7、统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
20. 任意命令/代码执行
漏洞描述
命令或代码执行漏洞是指代码未对用户可控参数做过滤,导致直接带入执行命令和代码,通过漏洞执行恶意构造的语句,执行任意命令或代码。攻击者可在服务器上执行任意命令,读写文件操作等,危害巨大。
修复建议
1、严格过滤用户输入的数据,禁止执行非预期系统命令。
2、减少或不使用代码或命令执行函数
3、客户端提交的变量在放入函数前进行检测
4、减少或不使用危险函数
21. 任意文件上传
漏洞描述
文件上传漏洞通常由于代码中对文件上传功能所上传的文件过滤不严或web服务器相关解析漏洞未修复而造成的,如果文件上传功能代码没有严格限制和验证用户上传的文件后缀、类型等,攻击者可通过文件上传点上传任意文件,包括网站后门文件(webshell)控制整个网站。
修复建议
1、对上传文件类型进行验证,除在前端验证外在后端依然要做验证,后端可以进行扩展名检测,重命名文件,MIME类型检测以及限制上传文件的大小等限制来防御,或是将上传的文件其他文件存储服务器中。
2、严格限制和校验上传的文件,禁止上传恶意代码的文件。同时限制相关上传文件目录的执行权限,防止木马执行。
3、对上传文件格式进行严格校验,防止上传恶意脚本文件;
4、严格限制上传的文件路径。
5、文件扩展名服务端白名单校验。
6、文件内容服务端校验。
7、上传文件重命名。
8、隐藏上传文件路径。
22. 目录穿越/目录遍历
漏洞描述
文件下载或获取文件显示内容页面由于未对传入的文件名进行过滤,利用路径回溯符../跳出程序本身的限制目录,来下载或显示任意文件。
修复建议
对传入的文件名参数进行过滤,并且判断是否是允许获取的文件类型,过滤回溯符../。
23. 列目录
漏洞描述
由于web服务器配置不当,开启了目录浏览,攻击者可获得服务器上的文件目录结构,获取敏感文件。
修复建议
1、通过修改配置文件,禁止中间件(如IIS、apache、tomcat)的文件目录索引功能
2、设置目录访问权限
24. 文件包含
漏洞描述
本地文件包含是指程序在处理包含文件的时候没有严格控制。利用这个漏洞,攻击者可以先把上传的文件、网站日志文件等作为代码执行或直接显示出来,或者包含远程服务器上的恶意文件,进而获取到服务器权限。
修复建议
1、严格检查变量是否已经初始化。
Web安全测试中常见逻辑漏洞解析(实战篇)