1.SQL注入
漏洞描述:
SQL 注入攻击( SQL Injection ),简称注入攻击、SQL 注入,主要用
于非法获取网站控制权, 是发生在应用程序的数据库层上的安全漏洞。在设计程序时,
忽略了对输入字符串中夹带的SQL 指令的检查,被数据库误认为是正常的SQL 指
令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一
步导致网站被嵌入恶意代码、被植入后门程序等危害。
通常情况下, SQL 注入的位置包括:
(1)表单提交,主要是POST 请求,也包括GET 请求;
(2)URL 参数提交,主要为GET 请求参数;
(3)Cookie 参数提交;
(4)HTTP 请求头部的一些可修改的值,比如Referer 、User_Agent 等;
(5)一些边缘的输入点,比如.mp3 文件的一些文件信息等。
造成的危害:
SQL 注入的危害不仅体现在数据库层面上, 还有可能危及承载数据库的操
作系统;如果SQL 注入被用来挂马,还可能用来传播恶意软件等,这些危害包括但
不局限于:
(1)数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。作为数据
的存储中心,数据库里往往保存着各类的隐私信息, SQL 注入攻击能导致这些隐私
信息透明于攻击者。
(2)网页篡改:通过操作数据库对特定网页进行篡改。
(3)网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链
接,进行挂马攻击。
(4)数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户
被篡改。
(5)服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统
支持,让黑客得以修改或控制操作系统。
(6)破坏硬盘数据,瘫痪全系统。
修复建议:
解决SQL 注入问题的关键是对所有可能来自用户输入的数据进行严格的
检查、对数据库配置使用最小权限原则。通常使用的方案有:
(1)所有的查询语句都使用数据库提供的参数化查询接口,参数化的语
句使用参数而不是将用户输入变量嵌入到SQL 语句中。当前几乎所有的数据库系统
都提供了参数化SQL 语句执行接口,使用此接口可以非常有效的防止SQL 注入攻
击。
(2)对进入数据库的特殊字符( '"<>&*; 等)进行转义处理,或编码转
换。
(3)确认每种数据的类型,比如数字型的数据就必须是数字,数据库中
的存储字段必须对应为int 型。
(4)数据长度应该严格规定,能在一定程度上防止比较长的SQL 注入语
句无法正确执行。
(5)网站每个数据层的编码统一,建议全部使用UTF-8 编码,上下层
编码不一致有可能导致一些过滤模型被绕过。
(6)严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满
足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
(7)避免网站显示SQL 错误信息,比如类型错误、字段不匹配等,防
止攻击者利用这些错误信息进行一些判断。
(8)在网站发布之前建议使用一些专业的SQL 注入检测工具进行检测,
及时修补这些SQL 注入漏洞。
(9)过滤危险字符,例如:采用正则表达式匹配union、sleep、and、select、
load_file等关键字,如果匹配到则终止运行。
2.跨站脚本漏洞(XSS)
漏洞描述:
跨站脚本攻击( Cross-site scripting ,通常简称为XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、诱导用户再次登录,然后获取其登录凭证、传播恶意代码等攻击。
XSS 攻击使用到的技术主要为HTML 和Javascript ,也包括VBScript
和ActionScript 等。XSS 攻击对WEB 服务器虽无直接危害,但是它借助网站进行
传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生
了较严重的危害。
XSS 类型:
(1)非持久型跨站: 即反射型跨站脚本漏洞, 是目前最普遍的跨站类型。
非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击
要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚
本被用户游览器执行,从而达到攻击目的。跨站代码一般存在于链接中,请求这
样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务端
(比如数据库中)。
(2)持久型跨站:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴
随着攻击数据一直存在,这是危害最直接的跨站类型,跨站代码存储于服务端
(比如数据库中)。常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的
Javascript 代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入
的Javascript 代码。
(3)DOM 跨站(DOM XSS ):不经过后端,是通过url传入参数去控制触发的,
是一种发生在客户端DOM (DocumentObject Model 文档对象模型)中的跨站漏
洞,很大原因是因为客户端脚本处理逻辑导致的安全问题。
造成的危害:
(1)钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目
标网站重定向到钓鱼网站,或者注入钓鱼JavaScript 以监控目标网站的表单输入,
甚至发起基于DHTML 更高级的钓鱼攻击方式。
(2 )网站挂马:跨站时利用IFrame 嵌入隐藏的恶意网站或者将被攻击
者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。
(3)身份盗用: Cookie 是用户对于特定网站的身份验证标志, XSS 可
以盗取到用户的Cookie ,从而利用该Cookie 盗取用户对该网站的操作权限。如果
一个网站管理员用户Cookie 被窃取,将会对网站引发巨大的危害。
(4)盗取网站用户信息:当能够窃取到用户Cookie 从而获取到用户身
份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。
(5)垃圾信息发送:比如在SNS 社区中,利用XSS 漏洞借用被攻击者
的身份发送大量的垃圾信息给特定的目标群。
(6)劫持用户Web 行为:一些高级的XSS 攻击甚至可以劫持用户的
Web 行为,监视用户的浏览历史,发送与接收的数据等等。
(7)XSS 蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破
坏网上数据、实施DDoS 攻击等。
修复建议:
xss漏洞本质上是一种html注入,也就是将html代码注入到网页中。那么其防
御的根本就是在将用户提交的代码显示到页面上时做好一系列的过滤与转义。
(1)与SQL 注入防护的建议一样,假定所有输入都是可疑的,必须对
所有输入中的“ ‘ ”,“ “ ”,” < “,” > “,” on* “,script 、iframe 等字样进行严格的
检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP 请求中
的Cookie 中的变量, HTTP 请求头部中的变量等。
(2 )不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
(3)不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端
进行。
( 4)对输出的数据也要检查, 数据库里的值有可能会在一个大网站的多
处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
(5)在发布应用程序之前测试所有已知的威胁。
3.跨站请求伪造(CSRF)
漏洞描述:
CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。通常由于服务端没有对请求头做严格过滤引起的。CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。绝大多数网站是通过 cookie 等方式辨识用户身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。CSRF攻击会令用户在不知情的情况下攻击自己已经登录的系统。
修复建议:
(1)验证请求的Referer是否来自本网站,但可被绕过。
(2)在请求中加入不可伪造的token,并在服务端验证token是否一致或正确,不正确则丢弃拒绝服务。
4.服务器端请求伪造(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)统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
5.弱口令漏洞
漏洞描述:
弱口令(weak password) 没有严格和准确的定义,通常认为容易被别
人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。
修复建议:
设置密码通常遵循以下原则:
(1)不使用空口令或系统缺省默认的口令,这些口令众所周之,为典型的弱
口令。
(2)口令长度不小于8 个字符。
(3)口令不应该为连续的某个字符(例如: AAAAAAAA )或重复某些
字符的组合(例如: tzf.tzf. )。
(4)口令应该为以下四类字符的组合,大写字母(A-Z) 、小写字母(a-z) 、
数字(0-9) 和特殊字符。每类字符至少包含一个。如果某类字符只包含一个,那么
该字符不应为首字符或尾字符。
(5)口令中不应包含本人、父母、子女和配偶的姓名和出生日期、纪念
日期、登录名、E-mail 地址等等与本人有关的信息,以及字典中的单词。
(6)口令不应该为用数字或符号代替某些字母的单词。
(7)口令应该易记且可以快速输入,防止他人从你身后很容易看到你的
输入。
(8)至少90 天内更换一次口令,防止未被发现的入侵者继续使用该口
令。
6.身份验证和会话管理中断
漏洞描述:
网站通常为每个有效会话创建会话cookie和会话ID,这些cookie包含敏感数据,如用户名,密码等。当会话通过注销或浏览器突然关闭结束时,这些cookie应该无效,即每个会话应该有一个新的cookie。
如果cookie未失效,则敏感数据将存在于系统中。例如,使用公共计算机(Cyber Cafe)的用户,易受攻击的站点的cookie位于系统上并暴露给攻击者。攻击者在一段时间后使用相同的公共计算机,敏感数据会受到损害。
以同样的方式,用户使用公共计算机,而不是注销,他突然关闭浏览器。攻击者使用相同的系统,当浏览同一个易受攻击的站点时,受害者的上一个会话将被打开。攻击者可以通过窃取个人资料信息,信用卡信息等做任何他想做的事情。
应该进行检查以找到身份验证和会话管理的强度。密钥,会话令牌,cookie应该在不影响密码的情况下正确实施。易受攻击的对象包括:
(1)在URL上公开的会话ID可能导致会话固定攻击。
(2)注销和登录前后的会话ID相同。
(3)会话超时未正确实施。
(4)应用程序为每个新会话分配相同的会话ID。
(5)应用程序的经过身份验证的部分使用SSL进行保护,密码以散列或加密格式存储。
(6)会话可由低权限用户重用。
利用此漏洞,攻击者可以劫持会话,对系统进行未经授权的访问,从而允许泄露和修改未经授权的信息。使用盗取的cookie或使用XSS的会话可以劫持会话。
修复建议:
应根据OWASP应用程序安全验证标准定义所有身份验证和会话管理要求。永远不要在URL或日志中公开任何凭据。还应该做出很大的努力来避免可用于窃取会话ID的XSS漏洞。
7.不安全的直接对象引用
漏洞描述:
当开发人员公开对内部实现对象的引用(例如URL或FORM参数中的文件,目录或数据库键)时,就会发生这种情况。攻击者可以使用此信息访问其他对象,并可以创建将来的攻击来访问未经授权的数据。
使用此漏洞,攻击者可以访问未经授权的内部对象,可以修改数据或破坏应用程序。例:
更改以下URL中的“userid”可以使攻击者查看其他用户的信息。
http://www.vulnerablesite.com/userid=123修改为http://www.vulnerablesite.com/userid=124
攻击者可以通过更改用户标识值来查看其他信息。
修复建议:
(1)实施访问控制检查。
(2)避免在URL中公开对象引用。
(3)验证对所有引用对象的授权。
8.HTTP 报头追踪漏洞
漏洞描述:
目标网站支持trace/track web服务器http连接方式调试功能。当该调试功能开
启时,包含敏感信息的http报头可能被恶意人员追踪截获。恶意人员该漏洞,通过
构造恶意script脚本追踪http报头,可能获得http报头中包含的敏感资讯,如cookie
或认证证书等。
该漏洞往往与其它方式配合来进行有效攻击,由于HTTP TRACE 请求可以通
过客户浏览器脚本发起(如XMLHttpRequest ),并可以通过DOM 接口来访问,
因此很容易被攻击者利用。防御HTTP 报头追踪漏洞的方法通常禁用HTTP TRACE
方法。
修复建议:
目标的webserver支持trace和/或track方式。trace和track是用来调试web服务器
连接的http方式。若这些方式不是必须的,应该禁用这些方式。
9.Struts2 远程命令执行漏洞
漏洞描述:
Apache Struts 是一款建立Java web 应用程序的开放源代码架构。
Apache Struts 存在一个输入过滤错误,如果遇到转换错误可被利用注入和执行任
意Java 代码。网站存在远程代码执行漏洞的大部分原因是由于网站采用了Apache
Struts Xwork 作为网站应用框架,由于该软件存在远程代码执高危漏洞,导致网站
面临安全风险。例如:“ GPS 车载卫星定位系统”网站存在远程命令执行漏洞(CNV
D-2012-13934) ;Aspcms 留言本远程代码执行漏洞( CNVD-2012-11590 )等。
修复建议:
修复此类漏洞,只需到Apache 官网升级Apache Struts 到最新版本:
http://struts.apache.org
10.不安全的加密存储
漏洞描述:
不安全的加密存储是一种常见的漏洞,在敏感数据未安全存储时存在。用户凭据,配置文件信息,健康详细信息,信用卡信息等属于网站上的敏感数据信息。该数据将存储在应用程序数据库中。如果不使用加密或散列来不正确地存储此数据,则它将容易受到攻击者的攻击。
通过使用此漏洞,攻击者可以窃取,修改此类受弱保护的数据,以进行身份盗用,信用卡欺诈或其他犯罪。例:
在其中一个银行应用程序中,密码数据库使用未加保留的哈希来存储每个人的密码。SQL注入漏洞允许攻击者检索密码文件。所有未加盐的哈希都可以在任何时候强行进行,而盐渍的密码则需要数千年的时间。(无盐哈希 - 盐是附加到原始数据的随机数据。在哈希之前将盐附加到密码)。
修复建议:
确保适当的强标准算法。不要创建自己的加密算法。仅使用经过批准的公共算法,如AES,RSA公钥加密和SHA-256等。确保异地备份已加密,但密钥是单独管理和备份的。
11.无法限制URL访问
漏洞描述:
Web应用程序在呈现受保护的链接和按钮之前检查URL访问权限 每次访问这些页面时,应用程序都需要执行类似的访问控制检查。在大多数应用程序中,特权页面,位置和资源不会呈现给特权用户。通过智能猜测,攻击者可以访问权限页面。攻击者可以访问敏感页面,调用函数和查看机密信息。
利用此漏洞攻击者可以访问未经授权的URL,而无需登录应用程序并利用此漏洞。攻击者可以访问敏感页面,调用函数和查看机密信息。网站极易受到攻击,例:
攻击者注意到URL表示角色为“/ user / getaccounts”。他修改为“/ admin / getaccounts”。攻击者可以将角色附加到URL。http://www.vulnerablsite.com可以修改为http://www.vulnerablesite.com/admin
修复建议:
(1)实施强大的访问控制检查。
(2)身份验证和授权策略应基于角色。
(3)限制对不需要的URL的访问。
12.传输层保护不足
漏洞描述:
处理用户(客户端)和服务器(应用程序)之间的信息交换。应用程序经常通过网络传输敏感信息,如身份验证详细信息,信用卡信息和会话令牌。通过使用弱算法或使用过期或无效的证书或不使用SSL,可以允许将通信暴露给不受信任的用户,这可能会危及Web应用程序和/或窃取敏感信息。
利用此Web安全漏洞,攻击者可以嗅探合法用户的凭据并获取对该应用程序的访问权限。可以窃取信用卡信息。通过网络发送的数据容易被攻击。
修复建议:
启用安全HTTP并仅通过HTTPS强制执行凭据传输。确保您的证书有效且未过期。例:不使用SSL的应用程序,攻击者只会监视网络流量并观察经过身份验证的受害者会话cookie。攻击者可以窃取该cookie并执行Man-in-the-Middle攻击。
13.未经验证的重定向和转发
漏洞描述:
Web应用程序使用很少的方法将用户重定向并转发到其他页面以实现预期目的。如果在重定向到其他页面时没有正确的验证,攻击者可以利用此功能,并可以将受害者重定向到网络钓鱼或恶意软件站点,或者使用转发来访问未经授权的页面。
攻击者可以向用户发送包含附加编码恶意URL的真实URL的URL。用户只需看到攻击者发送的URL的真实部分就可以浏览它并可能成为受害者。例:
http://www.vulnerablesite.com/login.aspx?redirectURL=ownsite.com修改为http://www.vulnerablesite.com/login.aspx?redirectURL=evilsite.com
修复建议:
只需避免在应用程序中使用重定向和转发。如果使用,请不要在计算目的地时使用用户参数。如果无法避免目标参数,请确保提供的值有效,并为用户授权。
14.文件上传漏洞
漏洞描述:
文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成
的,如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,
攻击者可通过Web 访问的目录上传任意文件,包括网站后门文件( webshell ),
进而远程控制网站服务器。
修复建议:
严格限制和校验上传的文件,禁止上传恶意代码的文件。同时限制相关目录
的执行权限,防范webshell 攻击。
15.应用程序测试脚本泄露
漏洞描述:
由于测试脚本对提交的参数数据缺少充分过滤,远程攻击者可以利用洞以
WEB 进程权限在系统上查看任意文件内容。
修复建议:
防御此类漏洞通常需严格过滤提交的数据,有效检测攻击。
16.私有IP 地址泄露漏洞
漏洞描述:
IP 地址是网络用户的重要标示,是攻击者进行攻击前需要了解的。获取的
方法较多,攻击者也会因不同的网络情况采取不同的方法,如:
(1)在局域网内使用Ping 指令, Ping 对方在网络中的名称而获得IP。
(2)在Internet 上使用IP 版的QQ,直接显示。
(3)截获并分析对方的网络数据包。攻击者可以找到并直接通过软件解析截获
后的数据包的IP 包头信息,再根据这些信息了解具体的IP。
修复建议:
针对最有效的“数据包分析方法”而言,就可以安装能够自动去掉发送
数据包包头IP 信息的一些软件。不过使用这些软件有些缺点, 譬如:耗费资源严重,
降低计算机性能;访问一些论坛或者网站时会受影响;不适合网吧用户使用等等。
现在的个人用户采用最普及隐藏IP 的方法应该是使用代理,由于使用代理服务器
后,“转址服务”会对发送出去的数据包有所修改,致使“数据包分析”的方法失
效。一些容易泄漏用户IP 的网络软件(QQ 、MSN 、IE 等)都支持使用代理方式连接
Internet ,特别是QQ 使用“ ezProxy ”等代理软件连接后, IP 版的QQ 都无法显
示该IP 地址。虽然代理可以有效地隐藏用户IP,但攻击者亦可以绕过代理, 查找到
对方的真实IP 地址,用户在何种情况下使用何种方法隐藏IP,也要因情况而论。
17.未加密登录请求
漏洞描述:
由于Web 配置不安全, 登陆请求把诸如用户名和密码等敏感字段未加密进行传
输,攻击者可以窃听网络以劫获这些敏感信息。
修复建议:
建议进行加密后再传输。