Web漏洞检测及修复方案
缩略语 | 全称 |
CRLF | \r\n回车换行 |
LDAP | Lightweight Directory Access Protocol 轻量级目录访问协议 |
XFF | X-Forwarded-for头 |
SessionID | 标志会话的ID |
Web Service | Web服务是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。 |
SOAP | Simple Object Access Protocol 简单对象访问协议 |
XSS | Cross Site Script 跨站脚本 |
SSL | (Secure Sockets Layer 安全套接层), |
TLS | 继任者传输层安全(Transport Layer Security, |
XML | 可扩展标记语言(Extensible Markup Language) |
XPATH | XML路径语言(Xml Path Language) |
AWVS | Acunetix Web Vulnerability Scanner |
POODLE漏洞 | (Padding Oracle On Downloaded Legacy Encryption vulnerability) |
SVN | Subversion的简称,是一个开放源代码的版本控制系统 |
认证和授权类
密码明文传输
漏洞名称 | 密码明文传输、 |
漏洞描述 | 密码明文传输一般存在于web网站登录页面,用户名或者密码采用了明文传输,容易被嗅探软件截取。 |
检测条件 |
|
检测方法 |
|
修复方案 | 建议按照网站的密级要求,需要对密码传输过程中进行加密得使用加密的方式传输,如使用HTTPS, 但加密的方式增加成本,或许会影响用户体验。如果不用 HTTPS,可以在网站前端用 Javascript 做密码加密,加密后再进行传输。 |
其他说明 |
用户名可枚举
漏洞名称 | 用户名可枚举、 |
漏洞描述 | 存在于系统登录页面,利用登陆时输入系统存在的用户名错误密码和不存在的用户名错误密码,返回不同的出错信息可枚举出系统中存在的账号信息。 |
检测条件 |
|
检测方法 |
|
修复方案 | 建议对网站登录页面的判断回显信息修改为一致:用户名或密码错误 |
其他说明 |
暴力攻击
漏洞名称 | 暴力攻击、暴力破解、暴力猜解 |
漏洞描述 | 暴力破解的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。常常存在于网站的登录系统中,通过对已知的管理员用户名,进行对其登录口令的大量尝试。 |
检测条件 |
|
检测方法 |
|
修复方案 | 防止暴力攻击的一些方法如下:
账户锁定是很有效的方法,因为暴力破解程序在5-6次的探测中猜出密码的可能性很小。但是同时也拒绝了正常用户的使用。如果攻击者的探测是建立在用户名探测成功之后的行为,那么会造成严重的拒绝服务攻击。对于对大量用户名只用一个密码的探测攻击账户锁定无效。如果对已经锁定的账户并不返回任何信息,可能迷惑攻击者。
如果不管结果如何都返回成功的信息,破解软件就会停止攻击。但是对人来说很快就会被识破。
产生登录错的的时候就跳到另一个页面要求重新登录。比如126和校内网都是这样做的。局限性在于不能总是跳转页面,一般只在第一次错误的时候跳转,但是第一次之后又可以继续暴力探测了。
检查密码的时候适当的插入一些暂停,可以减缓攻击,但是可能对用户造成一定的影响。
这种方法也是有缺点的,因为攻击者可以定时更换自己的IP。
验证码是阻止暴力攻击的好方法,但设计不好的验证码是可以绕过的,而且对于特定目标的手工探测来说验证码是没有作用的。 |
其他说明 |
会话标识未更新
漏洞名称 | 会话操纵、会话标识未更新 |
漏洞描述 | 会话标识未更新漏洞,在用户进入登录页面,但还未登录时,就已经产生了一个session,用户输入信息,登录以后,session的id不会改变,也就是说没有建立新session,原来的session也没有被销毁), 可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。 |
检测条件 |
|
检测方法 |
|
修复方案 | 始终生成新的会话,供用户成功认证时登录登陆界面和登陆成功的界面一致时, 修改后台逻辑,在验证登陆逻辑的时候,先强制让当前session过期,然后用新的session存储信息:登陆界面和登陆成功的界面不一致时 在登陆界面后增加下面一段代码,强制让系统session过期。
request.getSession().invalidate();//清空session Cookie cookie = request.getCookies()[0];//获取cookie cookie.setMaxAge(0);//让cookie过期 ; 注意:这段代码需要在页面的最后部分加上才可以,否则将报错 |
其他说明 |
未授权访问
漏洞名称 | 未授权访问 | ||
漏洞描述 | 未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。 | ||
检测条件 |
|
||
检测方法 |
|
||
修复方案 | 常见的修复方法:在系统中,加入用户身份认证机制或者tonken验证,防止可被直接通过连接就可访问到用户的功能进行操作,简而言之,一定对系统重要功能点增加权限控制,对用户操作进行合法性验证,下列为针对常见的JSP语言编写的网站的安全修复方案:
|
||
其他说明 |
文件上传漏洞
漏洞名称 | 文件上传漏洞、任意文件上传 |
漏洞描述 | 文件上传漏洞,直面意思可以利用WEB上传一些特定的文件。一般情况下文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。文件上传本身是web中最为常见的一种功能需求,关键是文件上传之后服务器端的处理、解释文件的过程是否安全。一般的情况有:
-1. 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行; -2. 上传文件FLASH策略文件crossdomain.xml,以此来控制Flash在该域下的行为; -3. 上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行; -4. 上传文件是钓鱼图片或为包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼或欺诈; |
检测条件 |
|
检测方法 | 上传方式根据不同的web语言,检测方法也各式各样,以下列举基于JS验证的上传的几种常见的文件上传绕过方法:
以上为几种常见的上传,更多的还需自行研究,进行上传绕过。以下为总体的测试流程: 1、 登陆网站,并打开文件上传页面 2、 点击“浏览”按钮,并选择本地的一个JSP文件(比如hacker.jsp),确认上传。 3、 如果客户端脚本限制了上传文件的类型(比如允许gif文件),则把hacker.jsp更名为hacker.gif;配置HTTP Proxy(burp)进行http请求拦截;重新点击“浏览”按钮,并选择hacker.gift,确认上传。 4、 在WebScarab拦截的HTTP请求数据中,将hacker.gif修改为hacker.jsp,再发送请求数据。 5、 登陆后台服务器,用命令find / -name hacker.jsp查看hacker.jsp文件存放的路径。如果可以直接以Web方式访问,则构造访问的URL,并通过浏览器访问hacker.jsp,如果可以正常访问,则已经取得WebShell,测试结束。如果hacker.jsp无法通过web方式访问,例如hacker.jsp存放在/home/tmp/目录下,而/home/tomcat/webapps目录对应http://www.example.com/,则进行下一步 6、 重复1~3,在burp拦截的HTTP请求数据中,将hacker.gif修改为../tomcat/webapps/hacker.jsp,再发送请求数据。 在浏览器地址栏输入http://www.example.com/hacker.jsp,访问该后门程序,取得WebShell,结束检测。 |
修复方案 | 针对文件上传漏洞的特点和必须具备的三个条件,我们阻断任何一个条件就可以达到组织文件上传攻击的目的:
|
其他说明 |
任意文件下载
漏洞名称 | 任意文件下载 ,文件遍历下载。 |
漏洞描述 | 目录遍历(任意文件下载)漏洞不同于网站目录浏览,此漏洞不仅仅可遍历系统下web中的文件,而且可以浏览或者下载到系统中的文件,攻击人员通过目录遍历攻击可以获取系统文件及服务器的配置文件等等。一般来说,他们利用服务器API、文件标准权限进行攻击。严格来说,目录遍历攻击并不是一种web漏洞,而是网站设计人员的设计“漏洞”。如果web设计者设计的web内容没有恰当的访问控制,允许http遍历,攻击者就可以访问受限的目录,并可以在web根目录以外执行命令。 |
检测条件 |
|
检测方法 |
|
修复方案 |
参考代码: public String download() throws Exception { //获取文件id String id = Struts2Utils.getRequest().getParameter("id"); try { //通过id进行文件查询 DownloadFile downFile = fileService.findEntityById(Long.parseLong(id)); // 获取该附件的类型 byte[] bt = null; bt = downFile.getContent(); HttpServletResponse res =Struts2Utils.getResponse(); res.reset(); res.setContentType("application/x-msdownload"); res.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(uacFile.getName(), "UTF-8")); OutputStream out = res.getOutputStream(); out.write(bt); out.flush(); out.close(); } catch (Exception e1) { e1.printStackTrace(); } return null; } |
其他说明 |
脆弱的SSL加密算法
漏洞名称 | 弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAK Attack漏洞 | |||||||
漏洞描述 | 脆弱的SSL加密算法,是一种常见的漏洞,且至今仍有大量软件支持低强度的加密协议,包括部分版本的openssl。其实,该低强度加密算法在当年是非常安全的,但时过境迁,飞速发展的技术正在让其变得脆弱。黑客可利用SSL弱加密算法漏洞进行SSL中间人攻击,即强迫服务器和用户之间使用低强度的加密方式,然后再通过暴力破解,窃取传输内容。强度较弱的加密算法将不能较好的保证通信的安全性,有被攻击者破解的风险。对于linux中openssl的FREAK Attack漏洞,该漏洞是由于OpenSSL库里的s3_clnt.c文件中,ssl3_get_key_exchange函数,允许客户端使用一个弱RSA秘钥,向SSL服务端发起RSA-to-EXPORT_RSA的降级攻击,以此进行暴力破解,得到服务端秘钥。此问题存在于OpenSSL版本0.9.8zd之前, 或1.0.0p之前的1.0.0,或1.0.1k之前的1.0.1。 | |||||||
检测条件 |
|
|||||||
检测方法 |
RedHat系列检查命令:rpm -qa|grep openssl Debian\Ubuntu系列检查命令: dpkg -l|grep openssl |
|||||||
修复方案 | 以下为针对脆弱的SSL加密算法漏洞的修复建议,其中包括IIS、apache、和windows本身的一些安全建议方法:
具体详细方案,可参考:http://www.winet.cn/apache/sitemap.php
|
|||||||
其他说明 |
心脏滴血漏洞
越权访问
漏洞名称 | 越权访问、 |
漏洞描述 | 越权访问,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。在实际的代码安全审查中,这类漏洞往往很难通过工具进行自动化检测,因此在实际应用中危害很大。其与未授权访问有一定差别。目前存在着两种越权操作类型:横向越权操作和纵向越权操作。前者指的是攻击者尝试访问与他拥有相同权限的用户的资源;而后者指的是一个低级别攻击者尝试访问高级别用户的资源,如图所示的情况。
|
检测条件 |
|
检测方法 |
|
修复方案 | 对用户操作进行权限校验,防止通过修改参数进入未授权页面及进行非法操作,建议在服务端对请求的数据和当前用户身份做一个校验检查。流程描述:在服务器接收到用户发送的页面访问请求时,根据预设的识别策略,从用户的页面访问请求中提取该用户对应的用户唯一标识信息,同时提取所述页面访问请求对应的应答页面中的表单及该表单中不可修改参数,将所述表单及不可修改参数与所述用户唯一标识信息绑定后记录到参数列表中;检测到用户提交请求页面的表单时,将所述请求页面的表单及不可修改参数与该用户对应的所述参数列表中记录的表单及不可修改参数进行比对,控制该用户的访问。例如:
登陆时将用户名存入session session.setAttribute("username",username); 在相关页面判断 if((String)session.getAttribute("username")!=admin){ (response.sendRedirect("XXX.jsp")}; 注意: xxx.jsp为自定义的错误页面。 |
其他说明 |
命令执行类
Struts2 远程命令执行
该漏洞一般均需要通过升级Struts2组件解决
参考附件:
漏洞名称 | Struts2 远程命令执行 | ||
漏洞描述 | Struts 2是在struts 和WebWork的技术基础上进行了合并的全新的框架。Struts2漏洞类型分为两种,一种是使用缩写的导航参数前缀时的远程代码执行漏洞,另一种是使用缩写的重定向参数前缀时的开放式重定向漏洞,Struts2远程命令执行,属于高危安全漏洞,可使黑客取得网站服务器的权限。这里我们重点描述相关远程命令执行漏洞。Struts2的DefaultActionMapper支持一种方法,可以使用”action:”, “redirect:” , “redirectAction:”对输入信息进行处理,从而改变前缀参数,这样操作的目的是方便表单中的操作。在2.3.15.1版本以前的struts2中,没有对”action:”, “redirect:” , “redirectAction:”等进行处理,导致ongl表达式可以被执行,如s2-020的漏洞中,利用ognl的class.xx这种方式来遍历属性。 | ||
检测条件 |
|
||
检测方法 |
|
||
修复方案 | 建议及时更新struts2的版本到最新,如果暂时不能更新,则提供以下方案进行修复:
|
||
其他说明 |
Jboss远程代码执行
漏洞名称 | Jboss远程代码执行, Jboss远程命令执行 | |
漏洞描述 | JBOSS默认配置会有一个后台漏洞,漏洞发生在jboss.deployment命名空间,中的addURL()函数,该函数可以远程下载一个war压缩包并解压。 如果压缩包里含有webshell文件,是直接可以解析的。 | |
检测条件 |
|
|
检测方法 |
|
|
修复方案 | 给jmx-console加上访问密码并且执行以下修复方式:
升级相关的JBOSS中间件到最新版本,或者对该删除 $JBOSS_HOME/[server]/all/deploy 和$JBOSS_HOME/[server]/default/deploy下的Jmx-console.war 、Web-console.war这两个.War文件来禁止对Jmx-console和Web-console的访问。实际案例: 问题出现在$JBOSS_HOME/[server]/default/deploy下的Http-invoker.sar/invoker.war包上,通过删除该.war文件已经修复该问题 |
|
其他说明 |
HTTP.sys远程代码执行漏洞
漏洞名称 | HTTP.sys远程代码执行漏洞 | |
漏洞描述 | Http.sys是Microsoft Windows处理HTTP请求的内核驱动程序。HTTP.sys会错误解析某些特殊构造的HTTP请求,导致远程代码执行漏洞。成功利用此漏洞后,攻击者可在System帐户上下文中执行任意代码。由于此漏洞存在于内核驱动程序中,攻击者也可以远程导致操作系统蓝屏。此次受影响的系统中,Windows 7、Windows 8、Windows Server 2008 R2 和 Windows Server 2012所带的HTTP.sys驱动均存在一个远程代码执行漏洞,远程攻击者可以通过IIS 7(或更高版本)服务将恶意的HTTP请求传递给HTTP.sys驱动,通过发送恶意的HTTP请求导致远程代码执行或操作系统蓝屏. | |
检测条件 |
|
|
检测方法 |
执行效果如图所示: |
|
修复方案 | 厂商已在安全公告MS15-034中修复了此安全漏洞。我们建议用户开启自动更新服务以及时安装最新补丁,如果不能进行升级,可通过禁用IIS 内核缓存来临时缓解此漏洞的危险,但这可能会导致IIS性能下降,配置方法::
|
|
其他说明 |
文件包含
漏洞名称 | 文件include漏洞、文件包含 |
漏洞描述 | 文件包含是指程序代码在处理包含文件的时候没有严格控制。导致用户可以构造参数包含远程代码在服务器上执行,并得到网站配置或者敏感文件,进而获取到服务器权限,造成网站被恶意删除,用户和交易数据被篡改等一系列恶性后果。主要包括本地文件包含和远程文件包含两种形式,由于开发人员编写源码,开放着将可重复使用的代码插入到单个的文件中,并在需要的时候将它们包含在特殊的功能代码文件中,然后包含文件中的代码会被解释执行。由于并没有针对代码中存在文件包含的函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端解释执行。文件包含攻击中WEB服务器源码里可能存在inlcude()此类文件包含操作函数,可以通过客户端构造提交文件路径,是该漏洞攻击成功的最主要原因。 |
检测条件 |
|
检测方法 |
<?php include($_GET['name']); ?>
http://test.com/test.php?name=../../../etc/passwd
|
修复方案 |
|
其他说明 |
逻辑攻击类
验证码功能缺陷
漏洞名称 | 验证码失效、验证码功能缺陷 |
漏洞描述 | 验证码就是每次访问页面时随机生成的图片,内容一般是数字和字母(更BT点的有中文,现在已经升级到图片,动画等验证码),需要访问者把图中的数字字母填到表单中提交,这样就有效地防止了暴力破解。验证码也用于防止恶意灌水、广告帖等。在登陆的地方访问一个脚本文件,该文件生成含验证码的图片并将值写入到session里,提交的时候验证登陆的脚本就会判断提交的验证码是否与session里的一致。目前常常会出现验证码失效或者被绕过的可能,也成为了当前产生web漏洞的一个问题。 |
检测条件 |
|
检测方法 |
|
修复方案 | 修复方式如下:
|
其他说明 |
并发漏洞
漏洞名称 | 并发漏洞 |
漏洞描述 | 并发漏洞,常属于逻辑业务中的漏洞类型,例如攻击者通过并发http/tcp请求而达到次获奖、多次收获、多次获赠等非正常逻辑所能触发的效果。下面以简化的例子说明在交易的Web应用程序中潜在的并行问题,并涉及联合储蓄帐户中的两个用户(线程)都登录到同一帐户试图转账的情况:
帐户A有100存款,帐户B有100存款。用户1和用户2都希望从帐户A转10分到帐户B. 如果是正确的交易的结果应该是:帐户A 80分,帐户B 120分。 然而由于并发性的问题,可以得到下面的结果: 用户1检查帐户A ( = 100 分) 用户2检查帐户A ( = 100 分) 用户2需要从帐户A 拿取10 分( = 90 分) ,并把它放在帐户B ( = 110 分) 用户1需要从帐户A 拿取10分(仍然认为含有100 个分)( = 90 分) ,并把它放到B( = 120 分) 结果:帐户A 90 分,帐户B 120 分。 |
检测条件 |
|
检测方法 |
|
修复方案 | 对数据库操作加锁 |
其他说明 |
慢速HTTP攻击Slow HTTP Attack
漏洞名称 | Slow Http attack、慢速攻击 |
漏洞描述 | 慢速攻击基于HTTP协议,通过精心的设计和构造,这种特殊的请求包会造成服务器延时,而当服务器负载能力消耗过大即会导致拒绝服务。HTTP协议规定,HTTP Request以\r\n\r\n(0d0a0d0a)结尾表示客户端发送结束,服务端开始处理。那么,如果永远不发送\r\n\r\n就会产生慢速攻击的漏洞,常见的Slowloris就是利用这一点来做DDoS攻击的。攻击者在HTTP请求头中将Connection设置为Keep-Alive,要求Web Server保持TCP连接不要断开,随后缓慢地每隔几分钟发送一个key-value格式的数据到服务端,如a:b\r\n,导致服务端认为HTTP头部没有接收完成而一直等待。如果攻击者使用多线程或者傀儡机来做同样的操作,服务器的Web容器很快就被攻击者占满了TCP连接而不再接受新的请求\r\n\r\n, 每隔几分钟写入一些无意义的数据流, 拖死机器。 |
检测条件 |
|
检测方法 |
|
修复方案 | 1、配置Nginx反向代理解决该问题,参考以下链接:
Apache: https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-as-a-reverse-proxy-for-apache Tomcat: http://www.mkyong.com/nginx/nginx-apache-tomcat-configuration-example/ Java servers like Jetty, GlassFish and Tomcat https://www.nginx.com/resources/wiki/start/topics/examples/javaservers/ 其他方法: Apahce配置参考: http://blog.secaserver.com/2011/08/protect-apache-slowloris-attack/ 暂未验证该配置方法有效性,建议配置Nginx反向代理解决该问题 |
其他说明 |
短信攻击
漏洞名称 | 短信攻击、短信轰炸、短信DDOS攻击 |
漏洞描述 | 短信轰炸攻击时常见的一种攻击,攻击者通过网站页面中所提供的发送短信验证码的功能处,通过对其发送数据包的获取后,进行重放,如果服务器短信平台未做校验的情况时,系统会一直去发送短信,这样就造成了短信轰炸的漏洞。 |
检测条件 |
|
检测方法 |
|
修复方案 | 修复方案:
|
其他说明 |
注入攻击类
SQL注入
漏洞名称 | SQL注入 、SQL盲注 | ||||||||||||
漏洞描述 | 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 造成SQL注入漏洞原因有两个:一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。 | ||||||||||||
检测条件 |
|
||||||||||||
检测方法 |
1、 数字型。测试方法: http://host/test.php?id=100 and 1=1 返回成功 http://host/test.php?id=100 and 1=2 返回失败 2、 字符型。测试方法: http://host/test.php?name=rainman ’ and ‘1’=‘1 返回成功 http://host/test.php?name=rainman ’ and ‘1’=‘2 返回失败 3、 搜索型。搜索型注入:简单的判断搜索型注入漏洞存在不存在的办法是: 1)先搜索('),如果出错,说明90%存在这个漏洞。 2)然后搜索(%),如果正常返回,说明95%有洞了。 3)然后再搜索一个关键字,比如(2006)吧,正常返回所有2006相关的信息。 4)再搜索(2006%'and 1=1 and '%'=')和(2006%'and 1=2 and '%'=') 4、 绕过验证(常见的为管理登陆)也称万能密码 (1) 用户名输入: ‘ or 1=1 or ‘ 密码:任意 (2)Admin’ - -(或‘ or 1=1 or ‘ - -)(admin or 1=1 --) (MS SQL)(直接输入用户名,不进行密码验证) (3)用户名输入:admin 密码输入:’ or ‘1’=’1 也可以 (4) 用户名输入:admin' or 'a'='a 密码输入:任意 (5) 用户名输入:‘ or 1=1 - - (6) 用户名输入:admin‘ or 1=1 - - 密码输入:任意 (7) 用户名输入:1'or'1'='1'or'1'='1 密码输入:任意 5、 不同的SQL服务器连结字符串的语法不同,比如MS SQL Server使用符号+来连结字符串,而Oracle使用符号||来连结: http://host/test.jsp?ProdName=Book’ 返回错误 http://host/test.jsp?ProdName=B’+’ook 返回正常 http://host/test.jsp?ProdName=B’||’ook 返回正常说明有SQL注入
|
||||||||||||
修复方案 | 建议在代码中对数字类型的参数先进行数字类型变换,然后再代入到SQL查询语句中,这样任何注入行为都不能成功。并且考虑过滤一些参数,比如get参数和post参数中对于SQL语言查询的部分。
所以防范的时候需要对用户的输入进行检查。特别式一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤。以下为需过滤的敏感字符或者语句:
常见的几种web语言修复方案如下:
以上方法结合使用,则可有效的防止在PHP语言网站的SQL注入。
|
||||||||||||
其他说明 |
XML注入
漏洞名称 | XML注入 | |
漏洞描述 | 可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。发现目前一些普遍使用xml的场景中都存在一种古老的XML实体注入漏洞,这可能导致较为严重的安全问题,使得攻击者可能可以任意访问服务器以及应用所在网络的任何资源; | |
检测条件 |
|
|
检测方法 |
篡改以后,如果可读取file文件或者达到植入的命令效果,则说明存在该漏洞。 |
|
修复方案 | 建议采取以下方式进行修复:
|
|
其他说明 |
CRLF注入
漏洞名称 | http response splitting attack ,HTTP响应头拆分漏洞 | ||
漏洞描述 | HTTP响应头拆分漏洞(CRLF)”是一种新型的web攻击方案,它重新产生了很多安全漏洞包括:web缓存感染、用户信息涂改、窃取敏感用户页面、跨站脚本漏洞。这项攻击方案,包括其衍生的一系列技术产生,是由于web应用程序没有对用户的提交进行严格过滤,导致非法用户可以提交一些恶意字符,更具体来说,是对用户输入的CR 和LF字符没有进行严格的过滤。CRLF是”回车 + 换行”(\r\n)的简称。在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP 内容并显示出来。所以,一旦我们能够控制HTTP 消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码,所以CRLF Injection又叫HTTP Response Splitting(HRS)。是应用程序没有正确的过滤用户提供的输入。远程攻击者可以利用这个漏洞影响或错误的显示Web内容服务,缓存或解释的方式,这可能帮助诱骗客户端用户,导致跨站脚本,缓存破坏或页面劫持等漏洞。 | ||
检测条件 |
|
||
检测方法 |
然后手工输入链接: http://www.sina.com.cn%0aSet-cookie:JSPSESSID%3Dwooyun后,再次抓包得到如下
这个时候这样我们就给访问者设置了一个SESSION,可以发现在http header处多了一行,如果某应用刚好可以受这个参数控制,那将会有重大影响,否则,该漏洞的危害比较小。。当然,HRS并不仅限于会话固定,通过注入两个CRLF就能造成一个无视浏览器Filter的反射型XSS。 |
||
修复方案 | 修复方案如下:
|
||
其他说明 |
XFF注入
漏洞名称 | XFF注入、X-Forwarded-for注入 | |
漏洞描述 | XFF,是X-Forwarded-for的缩写,XFF注入是SQL注入的一种,该注入原理是通过修改X-Forwarded-for头对带入系统的dns进行sql注入,从而得到网站的数据库内容。。 | |
检测条件 |
|
|
检测方法 |
|
|
修复方案 | 修复方案:
|
|
其他说明 |
XPATH 注入
漏洞名称 | XPATH 注入 | |
漏洞描述 | XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入攻击是针对Web服务应用新的攻击方法,它允许攻击者在事先不知道XPath查询相关知 识的情况下,通过XPath查询得到一个XML文档的完整内容。
XPath 注入攻击利用两种技术,即 XPath 扫描和 XPath 查询布尔化。通过 该攻击,攻击者可以控制用来进行 XPath 查询的 XML 数据库。这种攻击可以有 效地对付使用 XPath 查询(和 XML 数据库) 来执行身份验证、查找或者其它 操作。 XPath 注入攻击同 SQL 注入攻击类似, 但和 SQL 注入攻击相比较, XPath 在以下方面具有优势。 (1) 广泛性。XPath 注入攻击利用的是 XPath 语法,由于 XPath 是一种标准 语言,因此只要是利用 XPath 语法的 Web 应用程序如果未对输入的 XPath 查 询做严格的处理都会存在 XPath 注入漏洞,所以可能在所有的 XPath 实现中都 包含有该弱点,这和 SQL 注入攻击有 很大区别。在 SQL 注入攻击过程中根据数据库支持的 SQL 语言不同,注入攻击的实现可能不同。 (2) 危害性大。XPath 语言几乎可以引用 XML 文档的所有部分,而这样的引 用一般没有访问控制限制。但在 SQL 注入攻击中,一个“用户”的权限可能被 限制到 某一特定的表、列或者查询,而 XPath 注入攻击可以保证得到完整的 XML 文档,即完整的数据库。只要 Web 服务应用具有基本的安全漏洞,即可构 造针对 XPath 应用的自动攻击 |
|
检测条件 |
|
|
检测方法 | XPath注入攻击主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作,下面以登录验证中的模块为例,说明XPath注入攻击的实现原理和检测方法,在Web 应用程序的登录验证程序中,一般有用户名(username)和密码(password) 两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。若验证数据存放在XML文件中,其原理是通过查找user表中的用户名 (username)和密码(password)的结果来进行授权访问,例存在user.xml文件如下:
则在XPath中其典型的查询语句如下: //users/user[loginID/text()='xyz' and password/text()='123test'] 但是,可以采用如下的方法实施注入攻击,绕过身份验证。如果用 户传入一个login 和password,例如loginID = 'xyz' 和password = '123test',则该查询语句将返回true。但如果用户传入类似' or 1=1 or ''=' 的值,那么该查询语句也会得到true 返回值,因为XPath 查询语句最终会变成如下代码: //users/user[loginID/text()='' or 1=1 or ''='' and password/text()='' or 1=1 or ''=''] 这个字符串会在逻辑上使查询一直返回true 并将一直允许攻击者访问系统。攻击者可以利用XPath 在应用程序中动态地操作XML 文档。攻击完成登录可以再通过XPath盲入技术获取最高权限帐号和其它重要文档信息。 |
|
修复方案 | 目前专门的 XPath 攻击防御技术还不是太多,但是 SQL 注入攻击防御技术 可以加以改进,应用到 XPath 注入攻击防御。具体技术总结如下:
|
|
其他说明 |
命令注入
漏洞名称 | 命令注入 |
漏洞描述 | Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。 在命令注入的漏洞中,最为常见的是PHP的命令注入。PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。例如,当黑客提交的数据内容为向网站目录写入PHP文件时,就可以通过该命令注入攻击漏洞写入一个PHP后门文件,进而实施进一步的渗透攻击。 |
检测条件 |
|
检测方法 |
|
修复方案 | PHP中命令注入攻击漏洞带来的危害和影响很严重。防范命令注入攻击漏洞的存在可以通过以下几种方法:
|
其他说明 |
链接或框架注入
漏洞名称 | 框架注入、链接注入 | |
漏洞描述 | 一个框架注入攻击是一个所有基于GUI的浏览器攻击,它包括任何代码如JavaScript,VBScript(ActivX),Flash,AJAX(html+js+py)。代码被注入是由于脚本没有对它们正确验证,攻击者有可能注入含有恶意内容的 frame 或 iframe 标记。 “链接注入”是修改站点内容的行为,其方式为将外部站点的 URL 嵌入其中,或将有易受攻击的站点中的脚本 的 URL 嵌入其中。将 URL 嵌入易受攻击的站点中,攻击者便能够以它为平台来启动对其他站点的攻击,以及攻击这个易受攻击的站点本身。 | |
检测条件 |
|
|
检测方法 |
%22http%3A%2F%2Fwww.baidu.com%22%3E: |
|
修复方案 | 建议过滤出所有以下字符::
|
|
其他说明 |
Json hijacking/Json劫持注入
漏洞名称 | Json hijacking 、Json劫持漏洞、Json注入攻击 |
漏洞描述 | JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成,这种纯文本的数据交互方式由于可以天然的在浏览器中使用,所以随着ajax和web业务的发展得到了广大的发展,各种大型网站都开始使用,包括Yahoo,Google,Tencent,Baidu等等,目前各银行都有用这种方式来实现数据交互。但是如果这种交互的方式用来传递敏感的数据,并且传输的时候没有做太多安全性控制的话将导致安全漏洞,根据敏感信息的不同导致会导致应用遭受不同级别的攻击。 |
检测条件 |
|
检测方法 | 通过抓包分析应用里的数据交互,我们经常可以发现敏感信息泄露的情况发生。通常的方式包括,抓取应用的交互,查看里面敏感的数据,如果在传输的时候没有安全控制,就可以发现此类漏洞了。主要的危害是对于一些数据敏感的应用会造成较严重的攻击,对于数据不敏感甚至是对第三方公开的应用来说,这类问题基本不算是安全问题,通过在第三方域使用javascript hijacking的方式我们就可以窃取到敏感数据了。一般的exploit代码形式如下:
<script> function wooyun_callback(a){ alert(a); } </script> <script src="http://www.xxx.com/userdata.php?callback=wooyun_callback"> </script> |
修复方案 | 尽量避免跨域的数据传输,对于同域的数据传输使用xmlhttp的方式作为数据获取的方式,依赖于javascript在浏览器域里的安全性保护数据。如果是跨域的数据传输,必须要对敏感的数据获取做权限认证,具体的方式可以包括:
|
其他说明 |
宽字节注入#
漏洞名称 | 宽字节注入 | |
漏洞描述 | 宽字节注入是相对于单字节注入而言的,该注入跟HTML页面编码无关,宽字节注入常见于mysql中,GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,当%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ = %df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MYSQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是x’,也就是说:%df\’ = %df%5c%27=x’,有了单引号可以注入了, | |
检测条件 |
|
|
检测方法 | 检测时,了解了其原理为:php 使用php_escape_shell_cmd这个函数来转义命令行字符串时是作为单字节处理的 而当操作系统设置了GBK、EUC-KR、SJIS等宽字节字符集时候,将这些命令行字符串传递给MySQL处理时是作为多字节处理的,
如:http://localhost/gbk.php?username=%df%27 //多字节编码 %df%27=運' //看,出单引号了,后面就可以构造了 http://localhost/test/b.php?username=%df%27 or1%23 sql语句类似这样: SELECT * FROMdemo WHERE username = '運' or 1#' LIMIT 1这样就可以注入,或者id=%df’%20or%201=1%20limit%201,1%23&pass= |
|
修复方案 | 修复方案:
|
|
其他说明 | 具体的检测与绕过的方法请参考:
http://m.blog.csdn.net/blog/u011721501/42874517 |
客户端攻击类
暴力破解是目前最直接有效的攻击方式,特别对于电信业务来说,很多情况下口令都为6位纯数字,很容易被攻击。本测试项在于检查认证系统对暴力破解的防护性。
在以下的一些测试中,围绕能否满足暴力破解进行的设计,未设计直接进行暴力破解的攻击用例。如果需要,测试人员可以使用hydra和AppScan中集成的Authentication Tester工具进行。
XSS跨站脚本攻击漏洞
漏洞名称 | 存储型XSS跨站脚本,反射型XSS跨站脚本, | ||||
漏洞描述 | 跨站脚本攻击的英文全称是Cross Site Script,为了和样式表区分,缩写为XSS。发生的原因是网站将用户输入的内容输出到页面上,在这个过程中可能有恶意代码被浏览器执行。跨站脚本攻击,它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。而本文主要讲的是利用XSS得到目标服务器的shell。技术虽然是老技术,但是其思路希望对大家有帮助。已知的跨站脚本攻击漏洞有三种:1)存储式;2)反射式;3)基于DOM。
|
||||
检测条件 |
|
||||
检测方法 |
|
||||
修复方案 | 对于XSS跨站漏洞,可以采用以下修复方式:
|
||||
其他说明 |
跨站请求伪造(CSRF)
漏洞名称 | 跨站请求伪造(CSRF) | ||
漏洞描述 | 跨站请求伪造攻击,Cross-Site Request Forgery(CSRF),攻击者在用户浏览网页时,利用页面元素(例如img的src),强迫受害者的浏览器向Web应用服务器发送一个改变用户信息的HTTP请求。CSRF攻击可以从站外和站内发起。从站内发起CSRF攻击,需要利用网站本身的业务,比如“自定义头像”功能,恶意用户指定自己的头像URL是一个修改用户信息的链接,当其他已登录用户浏览恶意用户头像时,会自动向这个链接发送修改信息请求。从站外发送请求,则需要恶意用户在自己的服务器上,放一个自动提交修改个人信息的htm页面,并把页面地址发给受害者用户,受害者用户打开时,会发起一个请求。威胁描述:攻击者使用CSRF攻击能够强迫用户向服务器发送请求,导致用户信息被迫修改,甚至可引发蠕虫攻击。如果恶意用户能够知道网站管理后台某项功能的URL,就可以直接攻击管理员,强迫管理员执行恶意用户定义的操作。 | ||
检测条件 |
|
||
检测方法 |
|
||
修复方案 | 修复方案如下:
|
||
其他说明 |
不安全的HTTP方法
漏洞名称 | 不安全的HTTP方法、危险的HTTP方法 |
漏洞描述 | 不安全的HTTP方法一般包括:TRACE、PUT、DELETE、COPY 等。其中最常见的为TRACE方法可以回显服务器收到的请求,主要用于测试或诊断,恶意攻击者可以利用该方法进行跨站跟踪攻击(即XST攻击),从而进行网站钓鱼、盗取管理员cookie等。 其他说明方式如图所示:
|
检测条件 |
|
检测方法 |
OPTIONS / HTTP/1.1
返回结果样例: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)/Tomcat-5.5 Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS Content-Length: 0 Date: Mon, 29 Jun 2009 08:02:47 GMT Connection: close 如果返回结果中包含不安全的HTTP方法(DELETE、PUT、TRACE、MOVE、COPY),则验证这些防范是否可用.
|
修复方案 | 以下为针对不安全的HTTP方法中的TRACE相关的修复建议::
利用apache服务器的rewrite功能,对TRACE请求进行拦截。编辑httpd.conf文件增加下面内容: RewriteEngine On RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] 更详细的解释如下: LoadModule rewrite_module modules/mod_rewrite.so # 首先,激活rewrite模块 RewriteEngine On # 启用Rewrite引擎 RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) # 对Request中的Method字段进行匹配:^TRACE 即以TRACE字符串开头 RewriteRule .* - [F] # 定义规则:对于所有格式的来源请求,均返回[F]-Forbidden响应。 对于1.3.34以上和2.0.55以上版本的apache服务器,配置文件增加:TraceEnable off 或者用如下方法: 在项目或tomcat下的web.xml中,添加如下配置: <!-- 关闭不安全的HTTP方法 --> <security-constraint> <web-resource-collection> <web-resource-name>任意名称</web-resource-name> <url-pattern>/*</url-pattern> <http-method>PUT</http-method> <http-method>DELETE</http-method> <http-method>HEAD</http-method> <http-method>OPTIONS</http-method> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint></auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method>
如果你使用的是Microsoft IIS, 使用URLScan工具禁用HTTP TRACE请求,或者只开放满足站点需求和策略的方式。安装URLScan(URLScan是微软提供给IIS6的路径重定向工具,在这里下载: http://www.iis.net/learn/extensions/working-with-urlscan/urlscan-3-reference),在URLScan.ini中配置,只允许GET、HEAD和POST这三个常用命令(UseAllowVerbs=1)。
如果你使用的是Sun ONE Web Server releases 6.0 SP2 或者更高的版本, 在obj.conf文件的默认object section里添加下面的语句: <Client method="TRACE"> AuthTrans fn="set-variable" remove-headers="transfer-encoding" set-headers="content-length: -1" error="501" </Client>
如果你使用的是Sun ONE Web Server releases 6.0 SP2 或者更低的版本, 编译如下地址的NSAPI插件: http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F50603 |
其他说明 | 由于不同的Web服务器支持的HTTP协议版本不同,如果系统不支持HTTP/1.0,那么步骤4返回 “HTTP/1.0 400 Bad Request”;这种情况下,应该更改步骤4的输入行为OPTIONS / HTTP/1.0 |
信息泄漏类
泄露出的敏感信息包括但不限于:数据库连接地址、帐号和口令等信息、服务器系统信息、Web服务器软件名称、版本、Web网站路径、除html之外的源代码、业务敏感数据等。
目录浏览
漏洞名称 | 目录浏览,网站目录可列, index of遍历 |
漏洞描述 | 目录浏览漏洞是由于网站存在配置缺陷,存在目录可浏览漏洞,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件、配置文件等,攻击者利用该信息可以更容易得到网站权限,导致网站被黑。 风险:攻击者通过访问网站某一目录时,该目录没有默认首页文件或没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者; 攻击者可能通过浏览目录结构,访问到某些隐秘文件(如PHPINFO文件、服务器探针文件、网站管理员后台访问地址、数据库连接文件等)。 |
检测条件 |
|
检测方法 |
|
修复方案 | 目前存在该漏洞的常见中间件为apache和IIS,一下列出其相关的修复方式:
|
其他说明 |
Web服务器控制台地址泄漏
PHPInfo()信息泄漏
漏洞名称 | PHPInfo信息泄漏、phpinfo()函数信息泄漏 |
漏洞描述 | phpinfo()函数返回的信息中包含了服务器的配置信息,包括:1)PHP编译选项以及文件扩展名的相关信息;2)php的版本信息 3)php的配置信息;4)数据库信息;等敏感信息。这些敏感信息会帮助攻击者展开进一步的攻击。 |
检测条件 |
|
检测方法 |
|
修复方案 | 建议限制此类脚本的访问权限或者删除对phpinfo()函数的调用:修改php.ini文件中的disable_functions配置项,把“phpinfo”添加到清单中:disable_functions=phpinfo
备注:如果要禁用多个函数,函数名之间用逗号隔开 |
其他说明 |
POODLE信息泄露漏洞
漏洞名称 | POODLE信息泄露漏洞 |
漏洞描述 | 由于SSL 3.0使用的CBC块加密的实现存在漏洞,攻击者可以成功破解SSL连接的加密信息,比如获取用户cookie数据。这种攻击被称为POODL攻击(Padding Oracle On Downgraded Legacy Encryption)。此漏洞影响绝大多数SSL服务器和客户端,影响范围广泛。但攻击者如要利用成功,需要能够控制客户端和服务器之间的数据(执行中间人攻击)。简单来说:Poodle攻击的原理,就是黑客故意制造安全协议连接失败的情况,触发浏览器的降级使用 SSL 3.0,然后使用特殊的手段,从 SSL 3.0 覆盖的安全连接下提取到一定字节长度的隐私信息。 |
检测条件 |
|
检测方法 |
|
修复方案 | 建议您手动关闭客户端SSLv3支持;或者关闭服务器SSLv3支持;或者两者全部关闭,即可有效防范Poodle漏洞对您造成的影响。常见修复方案如下:目前常用浏览器只有IE 6.0仍然不支持TLS 1.0,禁用SSL 3.0协议将影响IE 6客户的SSL访问。服务端禁用方法:
|
其他说明 |
.SVN信息泄露
漏洞名称 | .SVN信息泄露、版本管理工具文件信息泄漏 | |
漏洞描述 | 据介绍,SVN(subversion)是程序员常用的源代码版本管理软件。一旦网站出现SVN漏洞,其危害远比SQL注入等其它常见网站漏洞更为致命,因为黑客获取到网站源代码后,一方面是掠夺了网站的技术知识资产,另一方面,黑客还可通过源代码分析其它安全漏洞,从而对网站服务器及用户数据造成持续威胁。更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,黑客则可以直接获得文件源代码。 | |
检测条件 |
|
|
检测方法 |
|
|
修复方案 | 删除SVN各目录下的.svn目录;删除CVS的CVS目录。或者对URL中进行过滤,过滤相关svn等相关敏感字符:
|
|
其他说明 |
备份文件泄漏
漏洞名称 | 备份文件泄漏 |
漏洞描述 | 备份文件泄露,在web服务中,尝尝不局限于网站的源代码泄露,网站的数据库备份文件,以及上传的敏感文件,或者一切正常备份,原则不允许访问的文件可被通过访问web路径进行下载得到,造成其信息泄露。有效的帮助攻击者理解网站应用逻辑, 为展开其他类型的攻击提供 有利信息,降低攻击的难度,可以进一步获取其他敏感数据。 |
检测条件 |
|
检测方法 |
|
修复方案 |
|
其他说明 |
内网IP地址泄漏
漏洞名称 | 内网IP地址泄漏 |
漏洞描述 | 网站的内部IP地址,常常被攻击者通过信息收集,得到其内网的IP地址,对于渗透攻击,打下良好基础,如内网Ip地址段,IP路由等等。常见的泄露内网IP的web容器有IIS。 |
检测条件 |
|
检测方法 |
|
修复方案 | 建议采用以下方式进行修复:
输入CMD进入命令提示符,输入“adsutil set w3svc/UseHostName True net stop iisadmin /y net start w3svc。这样就可以让IIS使用主机名而不是主机的IP地址,这样即时是有人利用漏洞也只是看到主机名而不是主机IP,从而防止内容IP地址泄露。 |
其他说明 |
Cookie信息泄露
漏洞名称 | Cookie信息泄露、Cookie安全性漏洞、Cookie未设置httponly属性 |
漏洞描述 | cookie的属性设置不当可能会造成系统用户安全隐患,Cookie信息泄露是Cookie http only配置缺陷引起的,在设置Cookie时,可以设置的一个属性,如果Cookie没有设置这个属性,该Cookie值可以被页面脚本读取。 例如:当攻击者发现一个XSS漏洞时,通常会写一段页面脚本,窃取用户的Cookie,如果未设置http only属性,则可能导致用户Cookie信息泄露,攻击者能够利用该用户的身份进行系统资源访问及操作。如图是设置了cookies属性和没有设置属性,被XSS跨站截获的cookies对比:
设置了httponly属性: 未设置httponly属性: |
检测条件 |
|
检测方法 |
|
修复方案 | 建议如果网站基于cookie而非服务器端的验证,请最好加上HttpOnly,当然,目前这个属性还不属于任何一个标准,也不是所有的浏览器支持,建议设置cookie的代码:
response.setHeader("SET-COOKIE", "user=" + request.getParameter("cookie") + "; HttpOnly"); 本段代码设置了http only属性,攻击者无法获取用户Cookie信息。 |
其他说明 |
异常信息泄露(应用程序错误)
漏洞名称 | 未自定义统一错误页面导致信息泄露,抛出异常信息泄露,错误详情信息泄漏
AWVS漏洞名称如下: Application error message Error message on page ASP.NET error message |
||||||||
漏洞描述 | JBOSS默认配置会有一个后台漏洞,漏洞发生在jboss.deployment命名空间,中的addURL()函数,该函数可以远程下载一个war压缩包并解压。 如果压缩包里含有webshell文件,是直接可以解析的。 | ||||||||
检测条件 |
|
||||||||
检测方法 |
|
||||||||
修复方案 | 详细的各种修复方案请参考如下:
配置一个统一的静态页面,将400、403、404、500等常见报错重定向到该静态页面,而不是抛出异常(报错信息导致代码信息泄漏)。
|
||||||||
其他说明 |
敏感信息泄露
漏洞名称 | 敏感信息泄露 |
漏洞描述 | 敏感数据包括但不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据、个人数据(如姓名、住址、电话等)等,在程序文件、配置文件、日志文件、备份文件及数据库中都有可能包含敏感数据。 |
检测条件 |
|
检测方法 |
|
修复方案 | 安全建议或者修复方案:
|
其他说明 |
IIS短文件名泄露#
漏洞名称 | IIS短文件名泄露 |
漏洞描述 | Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件, |
检测条件 |
|
检测方法 |
|
修复方案 | 安全修复方案:
①关闭操作系统NTFS 8.3文件格式的支持。 以管理员身份运行fsutil behavior set disable8dot3 1 , 即修改注册列表:HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation的值为1,该操作在重启操作系统后生效。②将WEB站点根目录及虚拟目录移动到其他分区后再移回,此操作可以将生成的短文件名清除。 注:①只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除。该修改不能完全修复,只是禁止创建,故需要再进行②操作。
|
其他说明 | 其中方案2和3才能将该漏洞彻底修复。 |
Robots文件信息泄露#
漏洞名称 | Robots文件信息泄露、Robots.txt泄露 |
漏洞描述 | 搜索引擎可以通过robots文件可以获知哪些页面可以爬取,哪些页面不可以爬取。Robots协议是网站国际互联网界通行的道德规范,其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯,如果robots.txt文件编辑的太过详细,反而会泄露网站的敏感目录或者文件,比如网站后台路径,从而得知其使用的系统类型,从而有针对性地进行利用。 |
检测条件 |
|
检测方法 |
|
修复方案 | 安全建议或者修复方案:(可根据实际情况,进行如下对应的修复)
|
其他说明 |
其他
跨域访问漏洞
漏洞名称 | flash跨域漏洞、跨域访问漏洞 |
漏洞描述 | 不正确的crossdomain.xml策略将导致严重的安全问题,如信息泄露、CSRF等,如下几种是跨域漏洞所产生的常见几种不正确设置:
1:permitted-cross-domain-policies为all造成加载目标域上的任何文件作为跨域策略文件,甚至是一 个JPG也可被加载为策略文件。 2:allow-access-from 设为“*”任何的域,有权限通过flash读取本域中的内容,表示匹配所有域和所有 IP 地址,此时任何域均可跨域访问本域上的内容。 3:allow-http-request-headers-from header设个“*”允许发送任何消息头。 |
检测条件 |
|
检测方法 |
<?xml version="1.0"?> <cross-domain-policy> <site-control permitted-cross-domain-policies="all" /> <allow-access-from domain="*" /> <allow-http-request-headers-from domain="*" headers="*"/> </cross-domain-policy> |
修复方案 | 修改crossdomain.xml文件,使其内容保持如下设置:
|
其他说明 |
URL重定向
漏洞名称 | URL重定向、跳转漏洞 |
漏洞描述 | 服务端未对传入的跳转url变量进行检查和控制,可能导致可恶意构造任意一个恶意地址,诱导用户跳转到恶意网站。由于是从可信的站点跳转出去的,用户会比较信任,所以跳转漏洞一般用于钓鱼攻击,通过转到恶意网站欺骗用户输入用户名和密码盗取用户信息,或欺骗用户进行金钱交易;也可能引发的XSS漏洞(主要是跳转常常使用302跳转,即设置HTTP响应头,Locatioin: url,如果url包含了CRLF,则可能隔断了http响应头,使得后面部分落到了http body,从而导致xss漏洞)。另外在struts2 中存在重定向的漏洞,是因为struts2由于缩写的导航和重定向前缀“action:”、 “redirect:”、 “redirectAction:” 等参数前缀的内容没有被正确过滤导致的开放式重定向漏洞。 |
检测条件 |
|
检测方法 |
|
修复方案 | 以下为针对URL重定向漏洞的修复建议::
function checkURL ( sURL) { return (/^(https?:\/\/)?[\w\-.]+\.(yourDomainA|yourDomainB|yourDomainC)\.com($|\/|\\)/i).test (sUrl)||(/^[\w][\w\/\.\-_%]+$/i).test(sUrl)||(/^[\/\\][^\/\\]/i).test(sUrl) ? true : false; }
|
其他说明 |
DNS域传送漏洞
漏洞名称 | DNS域传送漏洞,DNS区域传输 | ||||
漏洞描述 | JBOSS默认配置会有一个后台漏洞,漏洞发生在jboss.deployment命名空间,中的addURL()函数,该函数可以远程下载一个war压缩包并解压。 如果压缩包里含有webshell文件,是直接可以解析的。 | ||||
检测条件 |
|
||||
检测方法 | 其实利用方法分为手工和工具两种,我们可以利用BT5下面的工具Dnsenum或者是其它工具,手工的话就利用nslookup即可
查看效果如下: |
||||
修复方案 | 以下为常见的修复方式:
|
||||
其他说明 |
Web服务器多余端口开放
漏洞名称 | Web服务器多余端口开放、开放多余端口、 |
漏洞描述 | Web应用服务器除业务端口外还会开放一些默认端口(如Jboss开放的8083),这些默认端口对最终用户是不需要开放的,而且也不会用于维护,容易被攻击,本测试目的在于发现服务器上未使用的Web端口。。 |
检测条件 |
|
检测方法 |
|
修复方案 | 建议按照网站的开放端口要求,进行对不必要的服务的端口设置为禁止。 |
其他说明 |
PHP multipart/form-data 远程DOS漏洞
漏洞名称 | PHP multipart/form-data 远程DOS漏洞 | |
漏洞描述 | PHP 在处理HTTP请求中的multipart/form-data头部数据时存在一个安全漏洞,导致PHP大量重复分配和拷贝内存的操作,可能造成CPU资源占用100%并持续较长时间,这可能造成远程拒绝服务攻击。受影响的软件及系统:PHP 5.0.0 - 5.0.5;PHP 5.1.0 - 5.1.6;PHP 5.2.0 - 5.2.17;PHP 5.3.0 - 5.3.29;PHP 5.4.0 - 5.4.40;PHP 5.5.0 - 5.5.24;PHP 5.6.0 - 5.6.8 | |
检测条件 |
|
|
检测方法 |
脚本检测效果如下: |
|
修复方案 | PHP官方已经针对PHP 5.4 及PHP 5.5版本给出了补丁,请使用这些版本的用户,尽快到官方网站下载并安装补丁,补丁的下载地址如下:http://php.net/ChangeLog-5.php#5.4.41;http://php.net/ChangeLog-5.php#5.5.25,如果使用其他的版本,请持续关注官方补丁更新信息,其次,IT人员需要从业务稳定性、危害程度和范围及重要性等多个维度综合考虑,制定整改时间计划表,权重由高到低依次对局部网络及主机设备或某业务系统设备展开整改和加固工作(建议邀请漏洞相关厂商及安全厂商一同参与)。 | |
其他说明 |
ASP.NET Padding Oracle攻击#
漏洞名称 | . ASP.NET Padding Oracle攻击 |
漏洞描述 | 这是一个比较老的漏洞,首先Oracle不是指数据库,其与甲骨文无任何关系,这里是提示的意思,Padding Oracle攻击就是攻击者只需要一个合法密文,即可通过不断向网站发送篡改过的密文(这个过程主要是构造IV的过程),观察是否有Padding异常错误提示,网站中的异常错误提示可能直接显示在网页当中,也可能只是HTTP状态码,如“200 - OK”是正确的,“500 - Internal Server Error”是错误的,根据两个不同的HTTP状态码做对比即可,而不需要其他任何详细信息,利用Padding Oracle原理来攻击可以破解验证码、解密JSF加密信息、解密ViewState信息、伪造管理员的cookie、甚至可以下载web.config配置文件等,另外在ASP.NET 3.5 SP1以后,还可以利用ScriptManager来打包输出本地的脚本文件,可以在页面上放置一段ScriptResource.axd的引用,它的Query String便包含了需要输出的文件路径,它是与ScriptManager等组件完全独立的,而这样也可以利用它来读取web.config |
检测条件 |
|
检测方法 |
http://ethicalhackingaspnet.codeplex.com/releases/view/52623 |
修复方案 | 安全修复方案:
|
其他说明 | http://www.cnblogs.com/JeffreyZhao/archive/2010/09/25/1834245.html |
HTTP Host头攻击#
漏洞名称 | . HTTP Host头攻击 | ||
漏洞描述 | 一般通用web程序是如果想知道网站域名不是一件简单的事情,如果用一个固定的URI来作为域名会有各种麻烦。开发人员一般是依赖HTTP Host header(比如在php里是_SERVER["HTTP_HOST"] ),而这个header很多情况下是靠不住的。而很多应用是直接把这个值不做html编码便输出到了页面中,比如:
<link href="http://_SERVER['HOST']" 这样处理问题一般会很容易遭遇到两种常见的攻击:缓存污染和密码重置。缓存污染是指攻击者通过控制一个缓存系统来将一个恶意站点的页面返回给用户。密码重置这种攻击主要是因为发送给用户的内容是可以污染的,也就是说可以间接的劫持邮件发送内容。利用方法可参考乌云的一篇: http://www.wooyun.org/bugs/wooyun-2010-079988 |
||
检测条件 |
|
||
检测方法 | 检测方法可以根据上述两种方式:
因此为了能使缓存能将污染后的response返回给用户,我们还必须让缓存服务器看到的host header 和应用看到的host header 不一样, 比如说对于Varnish(一个很有名的缓存服务软件),可以使用一个复制的Host header。Varnish是通过最先到达的请求的host header来辨别host的,而Apache则是看所有请求的host,Nginx则只是看最后一个请求的host。这就意味着你可以通过下面这个请求来欺骗Varnish达到污染的目的
|
||
修复方案 |
2、应用方面:
|
||
其他说明 | 详细漏洞信息,请参考:http://drops.wooyun.org/papers/1383 |
服务端请求伪造攻击SSRF#
漏洞名称 | 服务端请求伪造攻击(SSRF) |
漏洞描述 | 服务端请求伪造攻击(Server-side Request Forgery): 很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务端请求伪造攻击(Server-side Request Forgery)。一般情况下, SSRF攻击的目标是从外网无法访问的内部系统 。( 正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统 ).SSRF 形成的原因大都是由于 服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制 。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。攻击者利用ssrf可以实现的攻击主要有5种:
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息; 2.攻击运行在内网或本地的应用程序(比如溢出); 3.对内网web应用进行指纹识别,通过访问默认文件实现; 4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等); 5.利用file协议读取本地文件等。 |
检测条件 |
|
检测方法 | 从WEB功能上寻找:我们从上面的概述可以看出,SSRF是由于服务端获取其他服务器的相关信息的功能中形成的,因此我们大可以列举几种在web 应用中常见的从服务端获取其他服务器信息的的功能。
1、通过分享功能:通过URL地址分享网页内容: 早期分享应用中,为了更好的提供用户体验,WEB应用在分享功能中,通常会获取目标URL地址网页内容中的<tilte></title>标签或者<meta name="description" content=“”/>标签中content的文本内容作为显示以提供更好的用户体验。例如人人网分享功能中:http://widget.renren.com/*****?resourceUrl=https://www.nsfocus.com 通过目标URL地址获取了title标签和相关文本内容。而如果在此功能中没有对目标地址的范围做过滤与限制则就存在着SSRF漏洞. 2、转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览:由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,因此有些公司提供了转码功能,把网页内容通过相关手段转为适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务。 3、在线翻译:通过URL地址翻译对应文本的内容。提供此功能的国内公司有百度、有道等。 4、图片加载与下载,通过URL地址加载或下载图片:图片加载远程图片地址此功能用到的地方很多,但大多都是比较隐秘,比如在有些公司中的加载自家图片服务器上的图片用于展示。(此处可能会有人有疑问,为什么加载图片服务器上的图片也会有问题,直接使用img标签不就好了? ,没错是这样,但是开发者为了有更好的用户体验通常对图片做些微小调整例如加水印、压缩等,所以就可能造成SSRF问题)。 5、图片、文章收藏功能:此处的图片、文章收藏中的文章收藏就类似于功能一、分享功能中获取URL地址中title以及文本的内容作为显示,目的还是为了更好的用户体验,而图片收藏就类似于功能四、图片加载。 6、未公开的api实现以及其他调用URL的功能:此处类似的功能有360提供的网站评分,以及有些网站通过api获取远程地址xml文件来加载内容. |
修复方案 | 通常有以下5个思路:
|
其他说明 |
TLS1/SSLv3 重协商漏洞#
漏洞名称 | 重协商漏洞、SSL重协商、TLS1/SSLv3 重协商漏洞 |
漏洞描述 | SSL\TSL是位于一种可靠地网络层 协议~pTCP协议之上的一个协议 ,该协议是为了在客户端和服务器之 间生成一个安全的连接,这种连接是私密的、可靠的并且通信双方可以互相验证双方 的身份 。所 以SSI \TSI 协议应该具有机密性 、完整性和确定性。而对于重新协商,一个SSL 协没一旦建立起来 ,客户端 (C )和服务器 (S)都可以要一次重新协商 ,也称为重新握手,这将会导致在加密 的信道上尽心一次握手 ,C 可以通过发送一个新的client H ello 消息来创建一次重新协商。同样地 ,S可以发送一个H ello request 消息,从而使C 回应一个新的client H ello,以创建一个重新协商,建立重新协商的牧的诗更新密钥,增强所用密码组的保密性和从 C 到s的省份认证等等。
在 中间人攻击中,攻击者将会主动去窃听,他将截获客户端和服务器之间的连接 ,并使他们认为他们是在直接通话 ,而实 际上他们是通过攻击者的“转接 来通话的。要完成中间人攻击 ,中间人必须截获客户端和服务器间的所有通信信息,这样中间人可以选择有用的信息并且它可 以将新的信息随意的插入 |
检测条件 |
|
检测方法 | 1、通过web漏洞扫描工具进行检测。
2、通过利用SSLciphercheck软件,通过CMD下运行,进行协议探测进行检测命令:“sslciphercheck.exe -h ip地址或者域名 -p 443” |
修复方案 | 1、关闭renegotiation协议或限制SSL重协商数,以防止TLS DOS攻击:在Apache 2.2.15以上版本中,可以通过在配置文件httpd.conf中,添加如下字串:SSLInsecureRenegotiation Off;如使用的Apache版本低于2.2.15,则可以通过限制SSL重协商的次数防止DOS攻击。
2、使用WEB应用防火墙防止中间人攻击:通过WEB应用防火墙,对HTTP Header请求头进行过滤和监控,舍弃嵌入式的Http请求行,以防止中间人攻击。 |
其他说明 |
Web服务器解析漏洞# [IIS 6.0畸形文件扩展名解析漏洞等]
漏洞名称 | Web服务器解析漏洞 | |||
漏洞描述 | 服务器相关中间件存在一些解析漏洞,攻击者可通过上传一定格式的文件,被服务器的中间件进行了解析,这样就对系统造成一定危害。常见的服务器解析漏洞涉及的中间件有IIS,apache、nginx、等。 | |||
检测条件 |
|
|||
检测方法 | 以下为常见的各大web服务器所出现过的解析漏洞汇总,在检测时刻参考:
1、IIS 6.0 目录解析:/xx.asp/xx.jpg xx.jpg可替换为任意文本文件(e.g. xx.txt),文本内容为后门代码 IIS6.0会将 xx.jpg 解析为 asp 文件。 后缀解析:/xx.asp;.jpg /xx.asp:.jpg(此处需抓包修改文件名) IIS6.0都会把此类后缀文件成功解析为 asp 文件。 默认解析:/xx.asa /xx.cer /xx.cdx IIS6.0默认的可执行文件除了 asp 还包含这三种此处可联系利用目录解析漏洞/xx.asa/xx.jpg 或/xx.cer/xx.jpg 或 xx.asa;.jpg 2、IIS 7.0/IIS 7.5/Nginx <8.03 IIS 7.0/IIS 7.5/Nginx<8.03在默认Fast-CGI开启状况下,在一个文件路径(/xx.jpg)后面加上/xx.php会将/xx.jpg/xx.php 解析为 php 文件。常用利用方法:将一张图和一个写入后门代码的文本文件合并将恶意文本写入图片的二进制代码之后,避免破坏图片文件头和尾: copy xx.jpg/b + yy.txt/a xy.jpg ######################################/b 即二进制[binary]模式/a 即ascii模式 xx.jpg正常图片文件 yy.txt 内容<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>意思为写入一个内容为<?php eval($_POST[cmd])?>名称为shell.php的文件######################################找个地方上传 xy.jpg ,然后找到 xy.jpg 的地址,在地址后加上/xx.php 即可执行恶意文本。然后就在图片目录下生成一句话木马 shell.php 密码 cmd 3、Nginx <8.03 在Fast-CGI关闭的情况下,Nginx<8.03依然存在解析漏洞在一个文件路径(/xx.jpg)后面加上%00.php会将/xx.jpg%00.php解析为 php 文件 4、Apache 后缀解析:test.php.x1.x2.x3 Apache将从右至左开始判断后缀,若x3非可识别后缀,再判断x2,直到找到可识别后缀为止,然后将该可识别后缀进解析 test.php.x1.x2.x3 则会被解析为php 经验之谈:php|php3|phtml 多可被Apache解析 5、其他一些可利用的: 在windows环境下,xx.jpg[空格]或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,这也是可以被利用的!在向一台windows主机上传数据时,你可以抓包修改文件名,在后面加个空格或点,试图绕过黑名单,若上传成功,最后的点或空格都会被消除,这样就可得到shell。我记得FckPhp2.6就存在加空格绕过的漏洞。{Linux主机中不行,Linux允许这类文件存在}如果在Apache中.htaccess可被执行(默认不执行,这是90sec里的一位朋友说的,当初我并不知道),且可以被上传,那可以尝试在.htaccess中写入:<FilesMatch“shell.jpg”>SetHandler application/x-httpd-php </FilesMatch> shell.jpg换成你上传的文件,这样shell.jpg就可解析为php文件 6、lighttpd xx.jpg/xx.php |
|||
修复方案 | 修复方案:
|
|||
其他说明 | IIS 6.0畸形文件扩展名解析漏洞修复方案:
漏洞扫描规避 规避方式一 参考配URL整改,取消返回Server:Mircrosoft/IIS 6.0HTTP头。 http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx 规避方式二 该漏洞是基于扫描端口Banner版本报出的,修改IIS Banner信息可以降低该漏洞被发现的概率,修改步骤: 1、复制c:\windows\system32\dllcache\w3core.dll 文件备份两次(方便描述以下用A、B区分——A用于修改,B用来备份)。 2、用Uedit32或者winhex打开复制的w3core.dll(A),直接搜索关键字“6.0”,要勾选“ascii”。搜索到了,将6.0改成8.0后保存。 3、将A复制到“c:\windows\system32\dllcache\”替换原有的w3core.dll。 4、停止IIS Admin Service服务,将A复制到“c:\windows\system32\inetsrv\”替换原有的w3core.dll。(此处不停止IIS服务该文件不能被替换。) 5、启动IIS Admin Service服务,然后对该服务再重启次,不行就重启系统。
提示: 1、w3core.dll文件记录了IIS的版本,本方法通过修改该文件达到修改IIS Banner目的。 2、Windows对重要dll文件有保护机制,c:\windows\system32\dllcache\中为Windows的dll备份目录,系统发现重要dll被修复时,会将该目录的dll文件,还原替换被修改的dll。故需要先替换该目录下的w3core.dll文件。
注意事项: 1、修改、删除或替换dll文件前,做好备份。 2、建议在测试机器上测试是否有效,再对业务机器修改。 以上参考: http://www.2cto.com/Article/201111/110201.html 漏洞利用规避 该漏洞经以上方法修改后仍然存在,只有通过平台改造到windowsServer 2008/2012——IIS7以上,或者使用Apahce/Tomcat等其他中间件才能彻底修复这个问题。如部改造,可使用以下方法防止漏洞利用: 1、对网站中上传目录配置限制脚本执行权限,以防止上传到服务器的webshell等恶意文件无法执行。 2、应用程序应对上传文件名称进行重命名。如上传恶意文件webshell.asp;.doc,对其重命名成85f9e396cf16200119f100757a6e8da1.doc(可对原文件名进行md5哈希运算值作为新的文件名)。如不进行此文件重命名操作,上传到存在此漏洞的webshell.asp;.doc文件会被解析成webshell.asp来执行。 3、使用IIS Rewirte进行漏洞加固。参考: http://bbs.qibosoft.com/read-forum-tid-407332.htm |