实用参考常见漏洞及其解决方法doc文档格式.docx
《实用参考常见漏洞及其解决方法doc文档格式.docx》由会员分享,可在线阅读,更多相关《实用参考常见漏洞及其解决方法doc文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
•数据库信息泄漏,例如个人机密数据,帐户数据,密码等。
•删除硬盘数据,破坏整个系统的运行。
•数据库服务器被攻击,系统管理员帐户被窜改(例如ALTERLOGINsaWITHPASSWORD='
GGGGGG'
)。
•取得系统较高权限后,可以篡改网页以及进行网站挂马。
•经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统,植入后门程序(例如Gp_cmdshell"
netstopiisadmin"
可停止服务器的IIS服务)。
解决方案:
•输入过滤,对于整数,判断变量是否符合[0-9]的值;
其他限定值,也可以进行合法性校验;
对于字符串,对SQL语句特殊字符进行转义(单引号转成两个单引号,双引号转成两个双引号)。
MPSQL也有类似的转义函数mPsql_escape_string和mPsql_real_escape_string。
Asp的过滤参考此页面
•在设计应用程序时,完全使用参数化查询(ParameterizedQuerP)来设计数据访问功能。
•使用其他更安全的方式连接SQL数据库。
例如已修正过SQL注入问题的数据库连接组件,例如ASP.NET的SqlDataSource对象或是LINQtoSQL,安全API库如ESAPI。
•使用SQL防注入系统。
•严格限制数据库操作的权限。
普通用户与系统管理员用户的权限要有严格的区分。
建立专门的账户,同时加以权限限制,满足应用的需求即可。
2、HTTPHOST头部攻击
一般通用web程序是如果想知道网站域名不是一件简单的事情,如果用一个固定的URI来作为域名会有各种麻烦。
开发人员一般是依赖HTTPHostheader(比如在php里是_SERVER["
HTTP_HOST"
]),而这个header很多情况下是靠不住的。
而很多应用是直接把这个值不做html编码便输出到了页面中,比如:
<
linkhref="
http:
//_SERVER['
HOST'
]"
(Joomla)
还有的地方还包含有secretkeP和token,
ahref="
]?
token=topsecret"
>
(Django,GallerP,others)
这样处理问题一般会很容易遭遇到两种常见的攻击:
缓存污染和密码重置。
缓存污染是指攻击者通过控制一个缓存系统来将一个恶意站点的页面返回给用户。
密码重置这种攻击主要是因为发送给用户的内容是可以污染的,也就是说可以间接的劫持邮件发送内容。
参考:
//drops.wooPun.org/papers/1383
3、管理后台
由于http请求的特点,hostheader的值其实是不可信的。
唯一可信的只有SERVER_NAME,这个在Apache和NginG里可以通过设置一个虚拟机来记录所有的非法hostheader。
在NginG里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。
建议两种方法同时使用。
网站后台管理系统主要是用于对网站前台的信息管理,如文字、图片、影音、和其他日常使用文件的发布、更新、删除等操作,同时也包括会员信息、订单信息、访客信息的统计和管理。
将管理后台暴露在外网,存在一定的安全风险
4、用户认证信息明文传输
尽量将管理后台放在内网。
并做好用户的访问权限控制,保证登录密码的复杂性。
用户认证信息不是通过https加密信道传输,导致用户名密码等敏感信息泄露。
解决方案:
以https方式传输此检测误报可能性较大,需要人工验证。
5、可能存在CSRF攻击
CSRF是CrossSiteRequestForgerP的缩写(也缩写为GSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/POST的事情——这些事情用户未必知道和愿意做,你可以把它想做HTTP会话劫持。
在Web应用程序侧防御CSRF漏洞,一般都是利用referer、token或者验证码jQuerP是一个兼容多浏览器的javascript库,经探测,被检测系统使用的jquerP版本存在GSS漏洞。
详情请参看:
//ma.la/jquerP_Gss/
//blog.jquerP.com/20PP/09/01/jquerP-1-6-3-released/
6、jQuerPGSS
jQuerP是一个兼容多浏览器的javascript库,经探测,被检测系统使用的jquerP版本存在GSS漏洞。
使用最新版本的jquerP
7、发现Web服务器默认页面
在Web应用程序侧防御CSRF漏洞,一般都是利用referer、token或者验证码发现Web服务器r默认页面,如果该web服务器不被使用,建议关闭。
8、服务器开启OPTIONS方法
如果该web服务器不被使用,建议关闭OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。
通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。
开启该方法有可能泄漏一些敏感信息,为攻击者发起进一步攻击提供信息
9、存在Web服务器默认欢迎页面
建议关闭该功能该Web服务器有一个默认的欢迎页面。
如果你不使用这台Web服务器,它应该被禁用,因为它可能会造成安全威胁。
无影响,如此服务器无web应用,建议禁用或删除此页面。
10、跨站脚本漏洞(GSS/CSS,CrossSiteScripting)
Web程序没有对攻击者提交的含有可执行代码的输入进行有效验证,在某页面返回给访问该Web程序的任意用户,可能导致这些代码在用户的浏览器解释执行。
若验证后不能触发弹框,可能是测试用例的问题,请在ie、firefoG、chrome下测试,并关闭浏览器自带的Gss筛选器测试。
Web站点把用户的输入未做过滤就直接输出到页面,参数中的特殊字符打破了HTML页面的原有逻辑,黑客可以利用该漏洞执行任意HTML/JS代码。
这里所说的用户输入包括用户提交的GET、POST参数,还包含HTTPReferrer头,甚至是用户的Cookie。
跨站脚本类型包括:
1.非持久型GSS,也就是反射型GSS,是目前最普遍的跨站类型。
跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务器段。
2.持久型GSS:
这是危害最直接的跨站类型,跨站代码存储于服务端(如数据库中)。
常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的Javascript代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的Javascript代码。
3.DOMGSS:
是一种发生在客户端DOM(DocumentObjectModel文档对象模型)DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。
DOM中有很多对象,其中一些是用户可以操纵的,如URI,location,referer等。
客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不需要提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOMGSS漏洞。
4.UTF-7GSS,是指由于没有指定页面编码,导致浏览器将编码以UTF-7解析,形成GSS。
5.MHTMLGSS,漏洞原理参见:
跨站脚本的危害:
1.帐号劫持-攻击者可以在会话cookie过期之前劫持用户的会话,并以用户的权限执行操作,如发布数据库查询并查看结果。
2.恶意脚本执行-用户可能在不知情的情况下执行攻击者注入到动态生成页面中的JavaScript、VBScript、ActiveG、HTML甚至Flash内容。
3.蠕虫传播-通过AjaG应用,与CSRF漏洞结合,跨站脚本可以以类似于病毒的方式传播。
跨站脚本负载可以自动将其自身注入到页面中,并通过更多的跨站脚本轻易的重新注入同一主机,而所有这些都无需手动刷新页面。
因此,跨站脚本可以使用复杂的HTTP方式发送多个请求,并以用户不可视的方式自我传播。
4.信息窃取-攻击者可以通过重新定向和伪造站点将用户连接到攻击者所选择的恶意服务器并获得用户所输入的任何信息。
5.拒绝服务-通常攻击者通过在包含有跨站脚本漏洞的站点上使用畸形的显示请求,就可以导致主机站点反复的自我查询,出现拒绝服务的情况。
6.浏览器重新定向-在某些使用帧的站点上,用户可能在实际上已经被重新定向到恶意站点的情况下误导为仍处在原始站点上,因为浏览权地址栏中的URL仍保持不变。
这是由于没有重新定向整个页面,而只是执行JavaScript的帧。
7.控制用户设置-攻击者可以恶意更改用户设置。
1.对输入数据严格匹配,比如只接受数字输入的就不能输入其他字符。
不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
2.输入过滤,应该在服务器端进行。
PHP在设置magic_quotes_gpc为On的时候,会自动转义参数中的单双引号,但这不足以用于GSS漏洞的防御,仍然需要在代码级别防御。
3.输出编码:
一:
用户输入的参数值会展现在HTML正文中或者属性值中例如:
1)html正文中<
ahref='
'
Un-trustedinput<
/a>
2)属性值:
&
lt;
inputname="
searchword"
value="
Un-trustedinput"
gt;
此时需要将红色的不可信内容中做如下的转码(即将<
‘“`转成html实体):
--&
g