1、常见漏洞及其解决方案1、 SQL 注入漏洞漏洞描述:SQL 注入被广泛用于非法入侵网站服务器,获取网站控制权。它是应用层上的一种安全漏洞。通常在设计存在缺陷的程序中,对用户输入的数据没有做好过滤,导致恶意用户可以构造一些 SQL 语句让服务器去执行,从而导致数据库中的数据被窃取,篡改,删除,以及进一步导致服务器被入侵等危害。SQL 注入的攻击方式多种多样,较常见的一种方式是提前终止原 SQL 语句,然后追加一个新的 SQL 命令。为了使整个构造的字符串符合 SQL 语句语法,攻击者常用注释标记如“- ”(注意空格)来终止后面的 SQL 字符串。执行时,此后的文本将被忽略。如某个网站的登录验证
2、SQL 查询代码为 strSQL = “SELECT * FROM users WHERE name = ” + userName + “ and pw =” + passWord +”, 其中userName 和 passWord 是用户输入的参数值,用户可以输入任何的字符串。如果用户输入的 userName=admin- ,passWord 为空,则整个 SQL 语句变为 SELECT * FROM users WHERE name=admin- and pw=,等价于 SELECT * FROM users WHERE name=admin,将绕过对密码的验证,直接获得以 admin 的
3、身份登录系统。漏洞危害: 数据库信息泄漏,例如个人机密数据,帐户数据,密码等。 删除硬盘数据,破坏整个系统的运行。 数据库服务器被攻击,系统管理员帐户被窜改(例如 ALTER LOGIN sa WITH PASSWORD=xxxxxx)。 取得系统较高权限后,可以篡改网页以及进行网站挂马。 经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统,植入后门程序(例如 xp_cmdshell “net stop iisadmin“可停止服务器的 IIS 服务)。解决方案: 输入过滤,对于整数,判断变量是否符合0-9的值;其他限定值,也可以进行合法性校验;对于字符串,对 SQL 语句特殊字
4、符进行转义(单引号转成两个单引号,双引号转成两个双引号)。MySQL 也有类似的转义函数 mysql_escape_string 和mysql_real_ escape_string。Asp 的过滤参考此页面 http:/ 2008/04 /28/ filtering-sql-injection-from-classic-asp.aspx 在设计应用程序时,完全使用参数化查询(Parameterized Query)来设计数据访问功能。 使用其他更安全的方式连接 SQL 数据库。例如已修正过 SQL 注入问题的数据库连接组件,例如 ASP.NET 的 SqlDataSource 对象或是 LI
5、NQ to SQL,安全 API 库如ESAPI。 使用 SQL 防注入系统。 严格限制数据库操作的权限。普通用户与系统管理员用户的权限要有严格的区分。建立专门的账户,同时加以权限限制,满足应用的需求即可。2、 HTTPHOST 头部攻击漏洞扫描报告 第 2 页,共 14 页漏洞描述:一般通用 web 程序是如果想知道网站域名不是一件简单的事情,如果用一个固定的 URI 来作为域名会有各种麻烦。开发人员一般是依赖HTTPHostheader(比如在 php 里是_SERVER“HTTP_HOST“),而这个 header 很多情况下是靠不住的。而很多应用是直接把这个值不做 html 编码便输出
6、到了页面中,比如:(Django,Gallery,others)这样处理问题一般会很容易遭遇到两种常见的攻击:缓存污染和密码重置。缓存污染是指攻击者通过控制一个缓存系统来将一个恶意站点的页面返回给用户。密码重置这种攻击主要是因为发送给用户的内容是可以污染的,也就是说可以间接的劫持邮件发送内容。参考:http:/drops.wooyun.org/papers/13833、 管理后台漏洞描述:由于 http 请求的特点,hostheader 的值其实是不可信的。唯一可信的只有 SERVER_NAME,这个在 Apache 和 Nginx 里可以通过设置一个虚拟机来记录所有的非法 hostheade
7、r。在 Nginx 里还可以通过指定一个 SERVER_NAME 名单,Apache 也可以通过指定一个 SERVER_NAME 名单并开启 UseCanonicalName 选项。建议两种方法同时使用。网站后台管理系统主要是用于对网站前台的信息管理,如文字、图片、影音、和其他日常使用文件的发布、更新、删除等操作,同时也包括会员信息、订单信息、访客信息的统计和管理。将管理后台暴露在外网,存在一定的安全风险4、 用户认证信息明文传输漏洞描述:尽量将管理后台放在内网。并做好用户的访问权限控制,保证登录密码的复杂性。用户认证信息不是通过 https 加密信道传输,导致用户名密码等敏感信息泄露。解决方
8、案:以 https 方式传输此检测误报可能性较大,需要人工验证。5、 可能存在 CSRF 攻击漏洞描述:CSRF 是 CrossSiteRequestForgery 的缩写(也缩写为 XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个 CGI 做一些 GET/POST 的事情这些事情用户未必知道和愿意做,你可以把它想做 HTTP 会话劫持。解决方案:在 Web 应用程序侧防御 CSRF 漏洞,一般都是利用 referer、token 或者验证码 jQuery 是一个兼容多浏览器的 javascript 库,经探测,被检测系统使用的jquery 版本存在 XSS 漏洞。详情请参
9、看:http:/ma.la/jquery_xss/http:/ 第 3 页,共 14 页6、 jQueryXSS漏洞描述:jQuery 是一个兼容多浏览器的 javascript 库,经探测,被检测系统使用的 jquery 版本存在 XSS 漏洞。详情请参看:http:/ma.la/jquery_xss/http:/ jquery7、 发现 Web 服务器默认页面解决方案:在 Web 应用程序侧防御 CSRF 漏洞,一般都是利用 referer、token 或者验证码发现 Web 服务器 r 默认页面,如果该 web 服务器不被使用,建议关闭。8、 服务器开启 OPTIONS 方法解决方案:如
10、果该 web 服务器不被使用,建议关闭 OPTIONS 方法是用于请求获得由 Request-URI 标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。开启该方法有可能泄漏一些敏感信息,为攻击者发起进一步攻击提供信息9、 存在 Web 服务器默认欢迎页面漏洞描述:建议关闭该功能该 Web 服务器有一个默认的欢迎页面。如果你不使用这台 Web 服务器,它应该被禁用,因为它可能会造成安全威胁。解决方案:无影响,如此服务器无 web 应用,建议禁用或删除此页面。10、 跨站脚本漏洞(XSS/CSS
11、,Cross Site Scripting)漏洞描述:Web 程序没有对攻击者提交的含有可执行代码的输入进行有效验证,在某页面返回给访问该 Web 程序的任意用户,可能导致这些代码在用户的浏览器解释执行。若验证后不能触发弹框,可能是测试用例的问题,请在 ie、firefox、chrome 下测试,并关闭浏览器自带的 xss 筛选器测试。Web 站点把用户的输入未做过滤就直接输出到页面,参数中的特殊字符打破了HTML 页面的原有逻辑,黑客可以利用该漏洞执行任意 HTML/JS 代码。这里所说的用户输入包括用户提交的 GET、POST 参数,还包含 HTTPReferrer 头,甚至是用户的Coo
12、kie。漏洞扫描报告 第 4 页,共 14 页跨站脚本类型包括:1非持久型 XSS,也就是反射型 XSS,是目前最普遍的跨站类型。跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务器段。2持久型 XSS:这是危害最直接的跨站类型,跨站代码存储于服务端(如数据库中)。常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的 Javascript 代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的 Javascript 代码。3DOMXSS:是一种发生在客户端 DOM(Document Object Model 文档对象模型)DOM 是一
13、个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM 中有很多对象,其中一些是用户可以操纵的,如 URI,location,referer 等。客户端的脚本程序可以通过DOM 动态地检查和修改页面内容,它不需要提交数据到服务器端,而从客户端获得 DOM中的数据在本地执行,如果 DOM 中的数据没有经过严格确认,就会产生 DOMXSS 漏洞。4UTF-7XSS,是指由于没有指定页面编码,导致浏览器将编码以 UTF-7 解析,形成 XSS。5MHTMLXSS,漏洞原理参见:http:/ 下MHTML 协议带来的跨域危害.h
14、tml跨站脚本的危害:1帐号劫持-攻击者可以在会话 cookie 过期之前劫持用户的会话,并以用户的权限执行操作,如发布数据库查询并查看结果。2恶意脚本执行-用户可能在不知情的情况下执行攻击者注入到动态生成页面中的 JavaScript、VBScript、ActiveX、HTML 甚至 Flash 内容。3蠕虫传播-通过 Ajax 应用,与 CSRF 漏洞结合,跨站脚本可以以类似于病毒的方式传播。跨站脚本负载可以自动将其自身注入到页面中,并通过更多的跨站脚本轻易的重新注入同一主机,而所有这些都无需手动刷新页面。因此,跨站脚本可以使用复杂的 HTTP 方式发送多个请求,并以用户不可视的方式自我传
15、播。4信息窃取-攻击者可以通过重新定向和伪造站点将用户连接到攻击者所选择的恶意服务器并获得用户所输入的任何信息。5拒绝服务-通常攻击者通过在包含有跨站脚本漏洞的站点上使用畸形的显示请求,就可以导致主机站点反复的自我查询,出现拒绝服务的情况。6浏览器重新定向-在某些使用帧的站点上,用户可能在实际上已经被重新定向到恶意站点的情况下误导为仍处在原始站点上,因为浏览权地址栏中的 URL 仍保持不变。这是由于没有重新定向整个页面,而只是执行 JavaScript 的帧。7控制用户设置-攻击者可以恶意更改用户设置。解决方案:1对输入数据严格匹配,比如只接受数字输入的就不能输入其他字符。不仅要验漏洞扫描报告
16、 第 5 页,共 14 页证数据的类型,还要验证其格式、长度、范围和内容。2输入过滤,应该在服务器端进行。PHP 在设置 magic_quotes_gpc 为 On 的时候,会自动转义参数中的单双引号,但这不足以用于 XSS 漏洞的防御,仍然需要在代码级别防御。3输出编码:一:用户输入的参数值会展现在 HTML 正文中或者属性值中例如:1)html 正文中Un-trustedinput2)属性值:inputname=“searchword“value=“Un-trustedinput“此时需要将红色的不可信内容中做如下的转码(即将-“-“- (反引号)二:用户输入落在的内容中,例如:varmy
17、msg=“Un-trustedinput“;varuin=Un-trustedinput;最好不要让用户的输入落在用户输入这里,如果无法避免的话,建议严格限制用户的输入,比如输入为整数时,要验证输入是否只包含数字。当输入为字符串时,将字符串用单引号或双引号包含起来,并且对用户的输入字符中包含的单双引号过滤或转换为 HTML 实体。4编码时使用 ESAPI 库或其他 antixss 库。5针对 UTF-7XSS,应指定网页字符集编码。使用Content-Type头或meta标记。6针对 MHTMLXSS,将 url 参数值中的%0d、%0a、%0D、%0A 删除。严格限制 URL参数输入值的格式
18、,不能包含不必要的特殊字符(0d、%0a 等)。如确实需要换行,将其转换为输出。11、 暗链漏洞扫描报告 第 6 页,共 14 页漏洞描述:暗链在这里通俗的说,网站链接中的一种,也称为黑链。如果再通俗的说一点“暗链”就是看不见的网站链接,“暗链”在网站中的链接做的非常隐蔽,它和友情链接有相似之处,可以有效地提高 PR 值。黑客取得网站控制权后,往往通过在被控制网站的首页放置暗链,从而达到欺骗搜索引擎的效果,使得自身网站搜索引擎权重大幅提高,在搜索引擎中的排名大幅上升。但这并不是无代价的,受到损失最大的就是被控制的网站,往往随着暗链所指向的网站的权重不断提高,存在暗链的网站的权重将不断下降,搜索
19、引擎排名也必然一再下降,严重影响网站的影响力。另一方面黑客往往放置的链接大多为私服、博彩、色情等非法网站的链接,对于被暗链网站来说,这无疑也有着巨大的风险。解决方案:删除暗链信息,对系统进行彻底的安全检查 ASP.NET 用加密的方式保护敏感信息,但 ASP.NET 的加密实现方式存在漏洞,可以被解密,所以存在信息泄漏的漏洞。12、 ASP.NET 信息泄漏漏洞描述:ASP.NET 由于加密填充验证过程中处理错误不当,导致存在一个信息披露漏洞。成功利用此漏洞的攻击者可以读取服务器加密的数据,例如视图状态。此漏洞还可以用于数据篡改,如果成功利用,可用于解密和篡改服务器加密的数据。虽然攻击者无法利
20、用此漏洞来执行代码或直接提升他们的用户权限,但此漏洞可用于产生信息,这些信息可用于试图进一步危及受影响系统的安全。解决方案:安装微软的 MS10-070 补丁。InternetInformationServices(IIS,互联网信息服务)是由微软公司提供的基于运行 MicrosoftWindows 的互联网基本服务。13、 MicrosoftIIS 文件枚举漏洞漏洞描述:MicrosoftIIS 在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件。解决方案:目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:http:/ 此检测误报可能性较大,需要人工验证
21、。14、 CSRF漏洞描述:CSRF 是 CrossSiteRequestForgery 的缩写(也缩写为 XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个 CGI 做一些 GET/POST 的事情这些事情用户未必知道和愿意做,你可以把它想做 HTTP 会话劫持。漏洞扫描报告 第 7 页,共 14 页解决方案:在 Web 应用程序侧防御 CSRF 漏洞,一般都是利用 referer、token 或者验证码测试发现 WEB 程序存在文件上传功能,文件上传可能会存在重大的安全隐患,在特定情况下会导致攻击者上传执行任意代码。15、 HTTPHOST 头部攻击漏洞描述:一般通用 w
22、eb 程序是如果想知道网站域名不是一件简单的事情,如果用一个固定的 URI 来作为域名会有各种麻烦。开发人员一般是依赖HTTPHostheader(比如在 php 里是_SERVER“HTTP_HOST“),而这个 header 很多情况下是靠不住的。而很多应用是直接把这个值不做 html 编码便输出到了页面中,比如:(Django,Gallery,others)这样处理问题一般会很容易遭遇到两种常见的攻击:缓存污染和密码重置。缓存污染是指攻击者通过控制一个缓存系统来将一个恶意站点的页面返回给用户。密码重置这种攻击主要是因为发送给用户的内容是可以污染的,也就是说可以间接的劫持邮件发送内容。参考
23、:http:/drops.wooyun.org/papers/1383解决方案:由于 http 请求的特点,hostheader 的值其实是不可信的。唯一可信的只有 SERVER_NAME,这个在 Apache 和 Nginx 里可以通过设置一个虚拟机来记录所有的非法 hostheader。在 Nginx 里还可以通过指定一个 SERVER_NAME 名单,Apache 也可以通过指定一个 SERVER_NAME 名单并开启 UseCanonicalName 选项。建议两种方法同时使用。此检测误报可能性较大,需要人工验证。16、 DOMXSS漏洞描述:发生在客户端 DOM(DocumentOb
24、jectModel 文档对象模型)DOM 是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM 中有很多对象,其中一些是用户可以操纵的,如 uRI,location,refelTer 等。客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不需要提交数据到服务器端,而从客户端获得 DOM 中的数据在本地执行,如果 DOM 中的数据没有经过严格确认,就会产生 DOMXSS 漏洞解决方案:1.对输入数据严格匹配,比如只接受数字输入的就不能输入其他字符。不仅要验证数据的类型,还要验证其格式、长度、范围和内容。2
25、.输入过滤,应该在服务器端进行。PHP 在设置 magic_quotes_gpc 为 On 的时候,会自动转义参数中的单双引号,但这不足以用于 XSS 漏洞的防御,仍然需要在代码级别防御。3.输出编码,一:用户输入的参数值会展现在 HTML 正文中或者属性值中例如:1)html 正文中Un-trustedinput2)属性值:inputname=“searchword“value=“Un-trustedinput“此时需要将红色的不可信内容中做如下的转码(即将-“-“漏洞扫描报告 第 8 页,共 14 页-(反引号)二:用户输入落在的内容中例如:varmymsg=“Un-trustedinpu
26、t“;varuin=Un-trustedinput;最好不要让用户的输入落在用户输入这里,如果无法避免的话,建议严格限制用户的输入,比如输入为整数时,要验证输入是否只包含数字。当输入为字符串时,将字符串用单引号或双引号包含起来,并且对用户的输入字符中包含的单双引号过滤或转换为 HTML 实体。4.编码时使用 ESAPI 库或其他 antixss 库。jQuery 是一个兼容多浏览器的javascript 库,经探测,被检测系统使用的 jquery 版本存在 XSS 漏洞。详情请参看:http:/ma.la/jquery_xss/http:/ ApacheTomcat 版本低于 4.1.37漏洞
27、描述:更新 ApacheTomcat 到最新版本该漏洞是通过版本号探测的,可能存在误报。该版本 ApacheTomcat 存在多处安全漏洞,请更新到最新版本。CVE-2008-0128,CVE-2008-1232,CVE-2008-2370参考:http:/ ApacheTomcat 到最新版本18、 目录浏览漏洞描述:文件信息、敏感信息的泄露,为进一步的针对性攻击提供了信息如: Web 服务器配置中限制目录列表。建议修正所使用的 Web 服务器软件的目录权限设置。例如,在 IIS 中取消目录浏览:在 nginx 中取消目录浏览:去掉配置文件里面的目录浏览项:autoindexon;在 apa
28、che 中取消目录浏览:在 Apache 配置文件中的目录配置中的“Indexes”删除或者改为“-Indexes”发现设定的敏感关键字信息漏洞扫描报告 第 9 页,共 14 页19、 发现敏感关键字漏洞描述:发现设定的敏感关键字信息解决方案:用户认证信息不是通过 https 加密信道传输,导致用户名密码等敏感信息泄露。20、 WEBDAV 开启漏洞描述:WebDAV 是一种基于 HTTP1.1 协议的通信协议.它扩展了 HTTP1.1,在GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法。使应用程序可直接对 WebServer 直接读写,并支持写文件锁定(Locki
29、ng)及解锁(Unlock),还可以支持文件的版本控制。当开启了 WebDAV 后,并且配置了目录可写,便会产生很严重的安全问题。1 禁用 WebDAV。2 如果要使用 WebDAV 的话,加上权限验证。OPTIONS 方法是用于请求获得由Request-URI 标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。开启该方法有可能泄漏一些敏感信息,为攻击者发起进一步攻击提供信息。解决方案:建议关闭该功能21、 用户认证信息明文传输漏洞描述:用户认证信息不是通过 https 加密信道传输,导致用
30、户名密码等敏感信息泄露。解决方案:以 https 方式传输此检测误报可能性较大,需要人工验证。22、 ApacheStruts 类加载器安全绕过漏洞漏洞描述:ApacheStruts 框架是一个一个基于 JavaServlets,JavaBeans,和JavaServerPages(JSP)的 Web 应用框架的开源项目。ApacheStruts 存在安全绕过漏洞,攻击者利用漏洞绕过某些安全限制和执行未经授权的操作。参考:http:/ Cookie 没有设置 HttpOnlyCOOKIE 的 HTTPOnlyflag 没有设置,对于很多只依赖于 cookie 验证的网站来说,HttpOnlyc
31、ookies 是一个很好的解决方案,在支持 HttpOnlycookies 的浏览器中(IE6以上,FF3.0 以上),javascript 是无法读取和修改 HttpOnlycookies,这样可让网站漏洞扫描报告 第 10 页,共 14 页用户验证更加安全解决方案:尽可能给 cookie 加上 HTTPOnly 属性24、 发现文件上传点漏洞描述:WEB 程序存在文件上传功能,文件上传可能会存在重大的安全隐患,在特定情况下会导致攻击者上传执行任意代码。25、 存在疑似 XSS漏洞描述:Web 站点把用户的输入未做过滤就直接输出到页面,参数中的特殊字符打破了 HTML 页面的原有逻辑,黑客可
32、以利用该漏洞执行任意 HTML/JS 代码。这里所说的用户输入包括用户提交的 GET、POST 参数,还包含 HTTPReferrer 头,甚至是用户的Cookie。跨站脚本的危害:1.帐号劫持-攻击者可以在会话 cookie 过期之前劫持用户的会话,并以用户的权限执行操作,如发布数据库查询并查看结果。2.恶意脚本执行-用户可能在不知情的情况下执行攻击者注入到动态生成页面中的JavaScript、VBScript、ActiveX、HTML 甚至 Flash 内容。3.蠕虫传播-通过 Ajax 应用,与 CSRF 漏洞结合,跨站脚本可以以类似于病毒的方式传播。跨站脚本负载可以自动将其自身注入到页
33、面中,并通过更多的跨站脚本轻易的重新注入同一主机,而所有这些都无需手动刷新页面。因此,跨站脚本可以使用复杂的HTTP 方式发送多个请求,并以用户不可视的方式自我传播。4.信息窃取-攻击者可以通过重新定向和伪造站点将用户连接到攻击者所选择的恶意服务器并获得用户所输入的任何信息。5.拒绝服务-通常攻击者通过在包含有跨站脚本漏洞的站点上使用畸形的显示请求,就可以导致主机站点反复的自我查询,出现拒绝服务的情况。6.浏览器重新定向-在某些使用帧的站点上,用户可能在实际上已经被重新定向到恶意站点的情况下误导为仍处在原始站点上,因为浏览权地址栏中的 URL 仍保持不变。这是由于没有重新定向整个页面,而只是执
34、行 JavaScript 的帧。7.控制用户设置-攻击者可以恶意更改用户设置。解决方案:1.对输入数据严格匹配,比如只接受数字输入的就不能输入其他字符。不仅要验证数据的类型,还要验证其格式、长度、范围和内容。2.输入过滤,应该在服务器端进行。PHP 在设置 magic_quotes_gpc 为 On 的时候,会自动转义参数中的单双引号,但这不足以用于 XSS 漏洞的防御,仍然需要在代码级别防御。3.输出编码,一:用户输入的参数值会展现在 HTML 正文中或者属性值中例如:1)html 正文中Un-trustedinput2)属性值:inputname=“searchword“value=“Un-trustedinput“此时需要将红色的不可信内容中做如下的转码(即将“转成 html 实体):-