OWASP(开放式Web应用程序安全项目),其中最具权威的“10项最严重的Web 应用程序安全风险列表”,总结了Web应用程序最可能、最常见、最危险的十大漏洞。本文介绍了几种常见的漏洞利用情况和几条安全建议。
1 什么是OWASP?
OWASP(开放式Web应用程序安全项目),其中最具权威的“10项最严重的Web 应用程序安全风险列表”,总结了Web应用程序最可能、最常见、最危险的十大漏洞。
序号 | OWASP Top 10 – 2017 | 描述 |
A1 | 注入
Injection |
例如SQL,OS以及 LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被恰当授权时访问数据。 |
A2 | 中断身份认证
Broken Authentication |
与身份认证和会话管理相关的应用程序功能往往得不到正确的实现,这就导致了攻击者破坏密码、密匙、会话令牌或攻击其他的漏洞去冒充其他用户的身份。 |
A3 | 敏感数据泄露
Sensitive Data Exposure |
许多Web应用程序没有正确保护敏感数据,如信用卡,税务ID和身份验证凭据。攻击者可能会窃取或篡改这些弱保护的数据以进行信用卡诈骗、身份窃取,或其他犯罪。 |
A4 | XML外部处理器漏洞
XML External Entities,XXE |
许多过时的或配置不当的XML处理器在XML文档内进行外部实体引用。外部实体可用于泄露内部文件,通过使用文件URI处理器、内部文件共享、内部端口扫描、远程代码执行以及拒绝服务攻击等手段。 |
A5 | 中断访问控制
Broken Access Control |
限制“认证的用户可以实现哪些操作”的命令没有得到正确的执行。攻击者可以利用这些漏洞访问未经授权的功能和数据,例如访问其他用户的账户,查看敏感文件,篡改其他用户的数据,更改访问权限等。 |
A6 | 安全配置错误
Security Misconfiguration |
安全配置错误是最常见的问题。这通常是由不安全的默认配置,不完整或ad hoc配置,开放云存储,错误配置的HTTP标头,以及包含敏感信息的详细错误信息造成的。 |
A6 | 跨站脚本攻击
Cross-Site Scripting,XSS |
如果应用程序在未经适当验证或转义情况下,能够在新网页中包含不受信任的数据,或是使用可以创建HTML或者JavaScript的浏览器API更新包含用户提供的数据的现有网页,就会出现XSS漏洞。XSS允许攻击者在受害者的浏览器中执行脚本,这些脚本可以劫持用户会话、破坏网站或将用户重定向到恶意网站。 |
A8 | 不安全的反序列化漏洞
Insecure Deserialization |
此漏洞通常会导致远程代码执行问题。即使反序列化错误不会导致远程代码执行,也可以被用来执行攻击,包括重放攻击、注入攻击以及权限提升攻击等。 |
A9 | 使用含有已知漏洞的组件
Using Components with Known Vulnerabilities |
组件(如库、框架和其他软件模块)是以与应用程序相同的权限运行的。如果存在漏洞的组件被利用,这种攻击可能会导致严重的数据丢失或服务器接管危机。使用已知漏洞组件的应用程序和API可能会破坏应用程序的防御系统,从而启动各种形式的攻击,造成更为严重的影响。 |
A10 | 不足的记录和监控漏洞
Insufficient Logging&Monitoring |
不足的记录和监控漏洞,再加上事件响应能力欠缺以及缺少有效的整合,使得攻击者可以进一步攻击系统,维持其持久性,转而攻击更多的系统,并篡改、提取或销毁数据。 |
相关链接:
2几种漏洞利用情况
2.1注入
1)SQL注入针对数据库的,错误的PHP查询语句代码示例:
对于参数$time和$content并未做校验,用户可以将$time或$content值中增加or 1=1这样的形式,就会得到所有用户相关的信息。如下所示:
2)OS注入针对操作系统的,PHP代码示例:
如果用户输入没有验证,则$username就可以输入形式如:; rm –rf/
则$command命令形式如:
ls –l /home/; rm –rf/
分号在linux和unix系统下是命令的分隔符,系统首先会执行ls命令,然后执行rm命令,然后悲剧发生了,你的整个系统文件都会被删除了。
防御方法:
1、对参数进行校验,可以通过正则匹配或限制长度、过滤特殊字符等。
2、不要动态拼接SQL语句,对SQL预编译。
3、设置用户的权限,机密数据加密存储。
4、使用安全的API,避免使用解释器。
5、查询中使用LIMIT和其他SQL语句进行控制,防止在SQL注入时泄露大量记录。
2.2 身份认证漏洞
1)不安全的密码存储(包括明文、可逆加密的密码和弱散列密码,例如使用MD5/SHA1或不加盐)可能导致泄漏。
2)应用会话超时设置不正确。用户使用公共计算机访问应用程序。用户直接关闭浏览器选项卡就离开,而不是选择“注销”。攻击者一小时后使用同一个浏览器浏览网页,而当前用户状态仍然是经过身份验证的。
防御方法:
1、使用多因素身份验证,以防止自动、凭证填充、暴力破解和被盗凭据再利用攻击。
2、不要使用部署时默认的密码,特别是管理员用户。
3、执行弱密码检查,例如测试新账户或变更的密码,排除使用“排名前10000个弱口令” 列表中的密码。
4、确保密码长度、复杂性,采用PBKDF2、bcrypt、scrypt等算法对密码加密,增加破解难度。
5、限制失败的登录次数。记录所有失败信息并在检测到凭据填充、暴力破解或其他攻击时提醒管理员。
6、使用服务器端安全的内置会话管理器,在登录后生成高度复杂的随机会话ID。会话ID不能在URL中,可以安全地存储并在登出、闲置、绝对超时后使其失效。
2.3跨站脚本攻击XSS
1)很多输入框是可以随意输入内容的,特别是一些文本编辑框里面,可以输入如<script>alert(‘OK ‘);</script>这样的内容,如果在一些首页出现很多这样内容,而又不经过处理,那么页面就不断的弹框,更有甚者,在里面执行一个无限循环的脚本函数,直到页面耗尽资源为止。 假设一个页面把用户输入的参数显示到页面:
如果提交一段HTML代码如:
https://example.com/test.php?param=<script>alert('OK ');</script>
2)XSS代码攻击还可能会窃取或操纵客户会话和 Cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。
3)为了窃取密码,攻击者可以将XSS与“钓鱼”结合。实现思路:利用JavaScript在当前页面上“画出”一个伪造的登录框,当用户在登录框中输入用户名和密码后,其密码将被发送到黑客的服务器上。
防御方法:
1、输入检查,并过滤JavaScript中特殊字符如<>、+、&、()、%、;等。
2、输出检查,在变量输出到HTML页面时,可以使用编码或者转移的方式来防御XSS攻击,安全的编码函数有:HtmlEncode、JavaScriptEncode、UrlEncode、XmlEncode等。
3、浏览器禁止页面的JavaScript访问带有HttpOnly属性的Cookie,是为了解决劫持Cookie攻击。因为JavaScript获取不到Cookie的值。
PHP设置HttpOnly的方法:PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中session.cookie_httponly设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性。
2.4不安全的反序列化漏洞
1)2017年有报道,黑客利用WebLogic 反序列化漏洞(CVE-2017-3248)和WebLogic WLS 组件漏洞(CVE-2017-10271)对企业服务器发起大范围远程攻击,有大量企业的服务器被攻陷。
2)利用Apache Commons Collections实现远程代码执行,Apache Commons Collections中实现的一些类可以被反序列化用来实现任意代码执行。WebLogic、WebSphere、这些应用的反序列化漏洞能够得以利用,就是依靠了Apache Commons Collections。
3)php反序列化漏洞又称对象注入,可能会导致远程代码执行(RCE),漏洞前提是unserialize函数的变量可控,php文件中存在可利用的类,类中有魔术方法。
使用PHP对象序列化来保存一个“超级”cookie。该cookie包含了用户的用户ID、角色、密码哈希和其他状态:
a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user";i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}
攻击者更改序列化对象以授予自己为admin权限:
a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin";i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}
防御方法:
1、php编码中对参数进行处理,使用更安全的函数。
2、限制或监视来自于容器或服务器传入和传出的反序列化网络连接。
3、如果可能,隔离运行那些在低特权环境中反序列化的代码。
4、执行完整性检查,如:任何序列化对象的数字签名,防止恶意对象创建或数据篡改。
3 web安全工具介绍
1)ZAProxy :是一个开源的免费的简单易用的跨平台的web application 集成渗透测试和漏洞挖掘工具,主要功能包含:代理、数据拦截修改、主动扫描、被动扫描、主动攻击、爬虫、渗透测试等。
下载地址:https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
2)Burpsuite:一个可以用于攻击Web应用程序的集成平台。Burp套件允许一个攻击者将人工的和自动的技术结合起来,以列举、分析、攻击Web应用程序,或利用这些程序的漏洞。主要功能有:拦截、SQL注入、扫描、爆破等。
下载地址:https://portswigger.net/burp/communitydownload
3)Metasploit:一款开源的安全漏洞检测工具,附带数百个已知的软件漏洞,主要功能有:渗透攻击、网络扫描、弱口令爆破、安全漏洞挖掘等。
下载地址:https://github.com/rapid7/metasploit-framework/wiki/Nightly-Installers
4 小结
以上只是浅谈了几个漏洞利用情景,OWASP Top 10的内容还有很多需要深入去学习和实践测试渗透,如文件上传漏洞、跨站点请求伪造,服务器端请求伪造等。
针对以上漏洞问题,提出下面几条建议。
1、在服务器与网络的接口处配置防火墙,用于阻断外界用户对服务器的扫描和探测。
2、限制网站后台访问权限,如:禁止公网IP访问后台;禁止服务员使用弱口令。
3、对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含SQL 或XSS特殊字符。这些检查或过滤必须在服务器端完成。
4、限制敏感页面或目录的访问权限。
5、及时更新库版本和打补丁。
参考链接:
https://www.htbridge.com/blog/
https://www.owasp.org