该渗透测试checklist包含以下几个模块:
测试大类、测试项、威胁等级、漏洞描述、修复方案
一、认证与授权类
1.密码明文传输
威胁等级 :低危
漏洞描述 :密码明文传输一般存在于web网站登录页面,用户名或者密码采用了明文传输,容易被嗅探软件截取。
修复方案:建议按照网站的密级要求,需要对密码传输过程中进行加密得使用加密的方式传输,如使用HTTPS, 但加密的方式增加成本,或许会影响用户体验。如果不用 HTTPS,可以在网站前端用 Javascript 做密码加密,加密后再进行传输。
2.用户名枚举
威胁等级 :低危
漏洞描述 :存在于系统登录页面,利用登陆时输入系统存在的用户名错误密码和不存在的用户名错误密码,返回不同的出错信息可枚举出系统中存在的账号信息。
修复方案 :
1、建议统一错误回显,避免显示详细的错误信息。
2、设定短时间请求阈值,限制接口高速行为。
3、配置请求验证码功能,防止脚本暴力行为。
3.暴力破解
威胁等级 :低危
漏洞描述 :暴力破解的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。常常存在于网站的登录系统中,通过对已知的管理员用户名,进行对其登录口令的大量尝试。
修复方案 :
防止暴力攻击的一些方法如下:
1、 账户锁定
账户锁定是很有效的方法,因为暴力破解程序在5-6次的探测中猜出密码的可能性很小。但是同时也拒绝了正常用户的使用。如果攻击者的探测是建立在用户名探测成功之后的行为,那么会造成严重的拒绝服务攻击。对于对大量用户名只用一个密码的探测攻击账户锁定无效。如果对已经锁定的账户并不返回任何信息,可能迷惑攻击者。
2、 返回信息
如果不管结果如何都返回成功的信息,破解软件就会停止攻击。但是对人来说很快就会被识破。
3、 页面跳转
产生登录错的的时候就跳到另一个页面要求重新登录。比如126和校内网都是这样做的。局限性在于不能总是跳转页面,一般只在第一次错误的时候跳转,但是第一次之后又可以继续暴力探测了。
4、 适当的延时
检查密码的时候适当的插入一些暂停,可以减缓攻击,但是可能对用户造成一定的影响。
5、 封锁多次登录的IP地址
这种方法也是有缺点的,因为攻击者可以定时更换自己的IP。
6、 验证码
验证码是阻止暴力攻击的好方法,但设计不好的验证码是可以绕过的,而且对于特定目标的手工探测来说验证码是没有作用的。
4.会话标识未更新
威胁等级 :低危
漏洞描述 :会话标识未更新漏洞,在用户进入登录页面,但还未登录时,就已经产生了一个session,用户输入信息,登录以后,session的id不会改变,也就是说没有建立新session,原来的session也没有被销毁), 可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。
修复方案 :
始终生成新的会话,供用户成功认证时登录登陆界面和登陆成功的界面一致时, 修改后台逻辑,在验证登陆逻辑的时候,先强制让当前session过期,然后用新的session存储信息:登陆界面和登陆成功的界面不一致时 在登陆界面后增加下面一段代码,强制让系统session过期。
request.getSession().invalidate();//清空session
Cookie cookie = request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期 ;
注意:这段代码需要在页面的最后部分加上才可以,否则将报错
5.未授权访问
威胁等级 :高危
漏洞描述 :未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。
修复方案:常见的修复方法:在系统中,加入用户身份认证机制或者tonken验证,防止可被直接通过连接就可访问到用户的功能进行操作,简而言之,一定对系统重要功能点增加权限控制,对用户操作进行合法性验证
6.文件上传漏洞
威胁等级 :高危
漏洞描述 :文件上传漏洞,直面意思可以利用WEB上传一些特定的文件。一般情况下文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。文件上传本身是web中最为常见的一种功能需求,关键是文件上传之后服务器端的处理、解释文件的过程是否安全。一般的情况有:
-1. 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行;
-2. 上传文件FLASH策略文件crossdomain.xml,以此来控制Flash在该域下的行为;
-3. 上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;
-4. 上传文件是钓鱼图片或为包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼或欺诈;
修复方案 :
针对文件上传漏洞的特点和必须具备的三个条件,我们阻断任何一个条件就可以达到组织文件上传攻击的目的:
1、 最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;
2、 文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式(即只允许允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码;
3、 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件;
4、 单独设置文件服务器的域名;
7.任意文件下载
威胁等级 :高危
漏洞描述 :目录遍历(任意文件下载)漏洞不同于网站目录浏览,此漏洞不仅仅可遍历系统下web中的文件,而且可以浏览或者下载到系统中的文件,攻击人员通过目录遍历攻击可以获取系统文件及服务器的配置文件等等。一般来说,他们利用服务器API、文件标准权限进行攻击。严格来说,目录遍历攻击并不是一种web漏洞,而是网站设计人员的设计"漏洞"。如果web设计者设计的web内容没有恰当的访问控制,允许http遍历,攻击者就可以访问受限的目录,并可以在web根目录以外执行命令。
修复方案 :
1、 净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
2、 web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,时使其即使越权也在访问目录之内。www目录就是一个chroot应用. 由chroot创造出的那个根目录,叫做"chroot监狱"(所谓"监狱"就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全,详细具体chroot的用法,可参考:http://blog.csdn.net/frozen_fish/article/details/2244870
3、 任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。
4、 要下载的文件地址保存至数据库中。
5、 文件路径保存至数据库,让用户提交文件对应ID下载文件。
6、 用户下载文件之前需要进行权限判断。
7、 文件放在web无法直接访问的目录下。
8、 不允许提供目录遍历服务。
8.脆弱的SSL加密算法
威胁等级 :低危
漏洞描述 :脆弱的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。
修复方案 :
1.windows server 2003注册表可能与以下的不同。解决方案:Windows Server 2008 支持下列协议:•SSL 2.0 •SSL 3.0•TLS 1.0。Windows Server 2008 R2 和 Windows 7 支持下列协议:•SSL 2.0 •SSL 3.0•TLS 1.0•TLS 1.1•TLS 1.2,对于服务器或客户端体系结构,可以禁用这些协议。这意味着可以省略该协议,或将其禁用。
2、对于linux中openssl的FREAK Attack漏洞,如果因为生产环境无法直连外网或是变更配置管理等原因而不便更新补丁,可以采取以下临时修复方法:
禁用出口级弱加密算法在命令行使用:openssl ciphers MEDIUM。
禁止apache服务器使用出口级加密算法:vi /etc/httpd/conf.d/ssl.conf;增加如下配置:SSLCipherSuite HIGH:!aNULL:!MD5:!EXP;需要重启apache服务:/etc/init.d/httpd restart。
关于nginx加密算法:1.0.5及以后版本,默认SSL密码算法是HIGH:!aNULL:!MD5;0.7.65、0.8.20及以后版本,默认SSL密码算法是HIGH:!ADH:!MD5;0.8.19版本,默认SSL密码算法是:ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM;0.7.64、0.8.18及以前版本,默认SSL密码算法是ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;低版本的nginx或没注释的可以直接修改域名下ssl相关配置为ssl_ciphers HIGH:!aNULL:!MD5;需要nginx重新加载服务:/etc/init.d/nginx reload
9.弱口令
威胁等级 :高危
漏洞描述 :应用系统存在弱口令,攻击者通过猜测密码尝试登录,获取后台权限。
修复方案:修改弱口令为密码复杂度较高的密码,推荐8位以上且包含大小写数字特殊字符
10.越权访问
威胁等级 :高危
漏洞描述 :越权访问,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。在实际的代码安全审查中,这类漏洞往往很难通过工具进行自动化检测,因此在实际应用中危害很大。其与未授权访问有一定差别。目前存在着两种越权操作类型:横向越权操作和纵向越权操作。前者指的是攻击者尝试访问与他拥有相同权限的用户的资源;而后者指的是一个低级别攻击者尝试访问高级别用户的资源,如图所示的情况。
修复方案 :
1、对用户访问角色的权限进行严格的检查及限制。
2、在一些操作时可以使用session对用户的身份进行判断和控制。
二、代码执行类
1.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的版本到最新
2.Jboss远程代码执行
威胁等级 :高危
漏洞描述 :JBOSS默认配置会有一个后台漏洞,漏洞发生在jboss.deployment命名空间,中的addURL()函数,该函数可以远程下载一个war压缩包并解压。 如果压缩包里含有webshell文件,是直接可以解析的。
修复方案 :
升级相关的JBOSS中间件到最新版本,或者对该除JBOSS_HOME/[server]/all/deploy 和JBOSS_HOME/[server]/default/deploy下的Jmx-console.war 、Web-console.war这两个.War文件来禁止对Jmx-console和Web-console的访问。
3.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性能下降,配置方法::
1、 打开 IIS 管理器,然后导航至您要管理的级别。有关如何在UI的各个位置间进行导航的信息,请参阅在IIS管理器中导航。
2、 在"功能视图"中,双击"输出缓存"。
3、 在"输出缓存"页中的"操作"窗格中,单击"编辑功能设置"。
4、 在"编辑输出缓存设置"对话框中,单击"启用内核缓存"以将其选中,然后单击"确定"。
4.文件包含漏洞
威胁等级 :高危
漏洞描述 :文件包含是指程序代码在处理包含文件的时候没有严格控制。导致用户可以构造参数包含远程代码在服务器上执行,并得到网站配置或者敏感文件,进而获取到服务器权限,造成网站被恶意删除,用户和交易数据被篡改等一系列恶性后果。主要包括本地文件包含和远程文件包含两种形式,由于开发人员编写源码,开放着将可重复使用的代码插入到单个的文件中,并在需要的时候将它们包含在特殊的功能代码文件中,然后包含文件中的代码会被解释执行。由于并没有针对代码中存在文件包含的函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端解释执行。文件包含攻击中WEB服务器源码里可能存在inlcude()此类文件包含操作函数,可以通过客户端构造提交文件路径,是该漏洞攻击成功的最主要原因。
修复方案 :
1、 PHP:配置php.ini关闭远程文件包含功能(allow_url_include = Off)
2、 严格检查变量是否已经初始化。
3、 建议假定所有输入都是可疑的,尝试对所有输入提交可能可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现.../之类的目录跳转符。
4、 严格检查include类的文件包含函数中的参数是否外界可控。
5、 不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
6、 在发布应用程序之前测试所有已知的威胁。
5.Shiro反序列化漏洞
威胁等级 :高危
漏洞描述 :Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
修复方案:修改默认key为自定义值
6.Fastjson反序列化漏洞
威胁等级 :高危
漏洞描述 :FastJson是开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到Java Bean。Fastjson应用范围非常广,在github上star数超过22k。2017年3月15日,fastjson官方主动爆出fastjson在1.2.24及之前版本存在远程代码执行高危安全漏洞。攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。2020年6月1日 fastjson爆发新的反序列化远程代码执行漏洞,fastjson 1.2.68及以前版本存在黑客利用漏洞,可绕过autoType限制,直接远程执行任意命令攻击服务器,风险极大。
修复方案:升级fastjson到1.2.68版本以上
7.Tomcat远程代码执行漏洞
威胁等级 :高危
漏洞描述 :
修复方案:
8.Weblogic远程代码执行漏洞
威胁等级 :高危
漏洞描述 :当tomcat启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
修复方案:使用tomcat8及以上版本在web.xml文件中将readonly参数删掉,或者将readonly参数设置为true
9.Thinkphp远程代码执行漏洞
威胁等级 :高危
漏洞描述 :WebLogic是美国Oracle公司出品的一个application server,是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。Oracle WebLogic Server存在远程代码执行漏洞。攻击者可利用漏洞实现远程代码执行。
修复方案:升级官方补丁,链接:https://www.oracle.com/security-alerts/cpujan2021.html
三、逻辑漏洞
1.验证码功能缺陷
威胁等级 :低危
漏洞描述 :验证码就是每次访问页面时随机生成的图片,内容一般是数字和字母(更BT点的有中文,现在已经升级到图片,动画等验证码),需要访问者把图中的数字字母填到表单中提交,这样就有效地防止了暴力破解。验证码也用于防止恶意灌水、广告帖等。在登陆的地方访问一个脚本文件,该文件生成含验证码的图片并将值写入到session里,提交的时候验证登陆的脚本就会判断提交的验证码是否与session里的一致。目前常常会出现验证码失效或者被绕过的可能,也成为了当前产生web漏洞的一个问题。
修复方案 :
1、 系统在开发时注意验证识别后销毁session中的验证码。
2、 限制用户提交的验证码不能为空
3、 判断提交的验证码与服务器上存储的是否一致
4、 无论是否一致,都将服务器上存储的验证码清空
2.并发漏洞
威胁等级 :高危
漏洞描述 :并发漏洞,常属于逻辑业务中的漏洞类型,例如攻击者通过并发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 分。
修复方案:对数据库操作加锁
3.慢速HTTP攻击
威胁等级 :低危
漏洞描述 :慢速攻击基于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:
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反向代理解决该问题
4.短信炸弹
威胁等级 :高危
漏洞描述 :短信轰炸攻击时常见的一种攻击,攻击者通过网站页面中所提供的发送短信验证码的功能处,通过对其发送数据包的获取后,进行重放,如果服务器短信平台未做校验的情况时,系统会一直去发送短信,这样就造成了短信轰炸的漏洞。
修复方案 :
1、 合理配置后台短信服务器的功能,对于同一手机号码,发送次数不超过3-5次,并且可对发送的时间间隔做限制。
2、 页面前台代码编写时,加入禁止针对同一手机号进行的次数大于N次的发送,或者在页面中加入验证码功能,并且做时间间隔发送限制。
5.任意用户注册
威胁等级 :高危
漏洞描述 :注册功能由于逻辑错误出现任意账户注册,甚至账户覆盖的漏洞
修复方案:服务端采用短信验证码或者邮箱验证码进行二次验证
6.任意用户密码找回/修改
威胁等级 :高危
漏洞描述 :密码找回功能存在逻辑缺陷导致任意用户密码被找回或者修改
修复方案:服务端采用短信验证码或者邮箱验证码进行二次验证
7.充值漏洞
威胁等级 :高危
漏洞描述 :充值过程通过修改充值金额造成实际支付金额与充值金额不符
修复方案:服务端校验实际到账金额与充值金额是否匹配
四、注入类
1.SQL注入
威胁等级 :高危
漏洞描述 :所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 造成SQL注入漏洞原因有两个:一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)
修复方案 :建议在代码中对数字类型的参数先进行数字类型变换,然后再代入到SQL查询语句中,这样任何注入行为都不能成功。并且考虑过滤一些参数,比如get参数和post参数中对于SQL语言查询的部分。
所以防范的时候需要对用户的输入进行检查。特别式一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤。
2.XML注入
威胁等级 :高危
漏洞描述 :可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。发现目前一些普遍使用xml的场景中都存在一种古老的XML实体注入漏洞,这可能导致较为严重的安全问题,使得攻击者可能可以任意访问服务器以及应用所在网络的任何资源;
修复方案 :
建议采取以下方式进行修复:
1、 检查所使用的底层xml解析库,默认禁止外部实体的解析。
2、 增强对系统的监控,防止此问题被人利用。
3、 使用第三方应用代码及时升级补丁
4、 对于PHP,由于simplexml_load_string函数的XML解析问题出在libxml库上,所以加载实体前可以调用这样一个函数以进行防护,参考代码: 对于XMLReader和DOM方式解析
3.CRLF注入
威胁等级 :低危
漏洞描述 :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内容服务,缓存或解释的方式,这可能帮助诱骗客户端用户,导致跨站脚本,缓存破坏或页面劫持等漏洞。
修复方案 :
1、 建议过滤\r 、\n之类的换行符,避免输入的数据污染到其他HTTP头。
4.XFF注入
威胁等级 :低危
漏洞描述 :XFF,是X-Forwarded-for的缩写,XFF注入是SQL注入的一种,该注入原理是通过修改X-Forwarded-for头对带入系统的dns进行sql注入,从而得到网站的数据库内容。
修复方案 :
1、 过滤http头中的X-Forwarded-for header中的内容,不允许其插入敏感字符。
5.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 攻击防御技术还不是太多,但是 SQL 注入攻击防御技术 可以加以改进,应用到 XPath 注入攻击防御。具体技术总结如下:
1、 数据提交到服务器上端,在服务端正式处理这批数据之前,对提交数据的 合法性进行验证。
2、 检查提交的数据是否包含特殊字符,对特殊字符进行编码转换或替换、删 除敏感字符或字符串。
3、 对于系统出现的错误信息,以 IE 错误编码信息替换,屏蔽系统本身的出错 信息。
4、 参数化 XPath 查询,将需要构建的 XPath 查询表达式,以变量的形式表 示,变量不是可以执行的脚本。如下代码可以通过创建保存查询的外部文件使查 询参数化: declare variable $loginID as xs:string external; declare variable p a s s w o r d a s x s : s t r i n g e x t e r n a l ; / / u s e r s / u s e r [ @ l o g i n I D = password as xs:string external; //users/user[@loginID= passwordasxs:stringexternal;//users/user[@loginID=loginID and @password= $password]。
5、 通过 MD5、 SSL 等加密算法, 对于数据敏感信息和在数据传输过程中加密, 即使某些非法用户通过非法手法获取数据包,看到的也是加密后的信息。
6.命令注入
威胁等级 :高危
漏洞描述 :Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。 在命令注入的漏洞中,最为常见的是PHP的命令注入。PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。例如,当黑客提交的数据内容为向网站目录写入PHP文件时,就可以通过该命令注入攻击漏洞写入一个PHP后门文件,进而实施进一步的渗透攻击。
修复方案 :PHP中命令注入攻击漏洞带来的危害和影响很严重。防范命令注入攻击漏洞的存在可以通过以下几种方法:
1、 尽量不要执行外部的应用程序或命令。
2、 使用自定义函数或函数库实现外部应用程序或命令的功能。
3、 在执行system、eval等命令执行功能的函数前,确定参数内容。
4、 使用escapeshellarg函数处理相关参数。Escapeshellarg函数会将任何引起参数或命令结束的字符进行转义,如单引号"'"会被转义为"\'",双引号"""会被转义为"\"",分号";"会被转义为";",这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。
5、 使用safe_mode_exec_dir执行可执行的文件路径。将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录中,并使用safe_mode_exec_dir指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败。
7.链接/框架注入
威胁等级 :中危
漏洞描述 :一个框架注入攻击是一个所有基于GUI的浏览器攻击,它包括任何代码如JavaScript,VBScript(ActivX),Flash,AJAX(html+js+py)。代码被注入是由于脚本没有对它们正确验证,攻击者有可能注入含有恶意内容的 frame 或 iframe 标记。 "链接注入"是修改站点内容的行为,其方式为将外部站点的 URL 嵌入其中,或将有易受攻击的站点中的脚本 的 URL 嵌入其中。将 URL 嵌入易受攻击的站点中,攻击者便能够以它为平台来启动对其他站点的攻击,以及攻击这个易受攻击的站点本身。
修复方案 :建议过滤出所有以下字符::
[1] |(竖线符号)
[2] & (& 符号)
[3];(分号)
[4] $(美元符号)
[5] %(百分比符号)
[6] @(at 符号)
[7] '(单引号)
[8] "(引号)
[9] '(反斜杠转义单引号)
[10] \"(反斜杠转义引号)
[11] <>(尖括号)
[12] ()(括号)
[13] +(加号)
[14] CR(回车符,ASCII 0x0d)
[15] LF(换行,ASCII 0x0a)
[16] ,(逗号)
[17] \(反斜杠)
详细过滤方案,请参考XSS跨站漏洞修复方案。
8.Json劫持注入
威胁等级 :中危
漏洞描述 :JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成,这种纯文本的数据交互方式由于可以天然的在浏览器中使用,所以随着ajax和web业务的发展得到了广大的发展,各种大型网站都开始使用,包括Yahoo,Google,Tencent,Baidu等等,目前各银行都有用这种方式来实现数据交互。但是如果这种交互的方式用来传递敏感的数据,并且传输的时候没有做太多安全性控制的话将导致安全漏洞,根据敏感信息的不同导致会导致应用遭受不同级别的攻击。
修复方案 :尽量避免跨域的数据传输,对于同域的数据传输使用xmlhttp的方式作为数据获取的方式,依赖于javascript在浏览器域里的安全性保护数据。如果是跨域的数据传输,必须要对敏感的数据获取做权限认证,具体的方式可以包括:
1、 referer的来源限制,利用前端referer的不可伪造性来保障请求数据的应用来源于可信的地方,此种方式力度较稀,完全依赖于referer,某些情况下(如存在xss)可能导致被绕过。
2、 token的加入,严格来说,这种利用javascript hijacking的方式获取数据是CSRF的一种,不过较之传统的CSRF不能获取数据只能提交而言,这种方式利用javascript可以获取一些敏感信息而已。如果我们能让攻击者对接口未知,就可以实现json hijacking的防御了。利用token对调用者的身份进行认证,这种方式对于调用者的身份会要求力度较细,但是一旦出现xss也可能导致前端Token的泄露,从而导致保护失效。
3、 对于同域的json使用情况下,可以在数据的输出头部加入while(1);的方式避免数据被script.
五、信息泄露类
1.目录浏览
威胁等级 :中危
漏洞描述 :目录浏览漏洞是由于网站存在配置缺陷,存在目录可浏览漏洞,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件、配置文件等,攻击者利用该信息可以更容易得到网站权限,导致网站被黑。 风险:攻击者通过访问网站某一目录时,该目录没有默认首页文件或没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者; 攻击者可能通过浏览目录结构,访问到某些隐秘文件(如PHPINFO文件、服务器探针文件、网站管理员后台访问地址、数据库连接文件等)。
修复方案 :目前存在该漏洞的常见中间件为apache和IIS,一下列出其相关的修复方式:
1、 IIS中关闭目录浏览功能:在IIS的网站属性中,勾去"目录浏览"选项,重启IIS。
2、 Apache中关闭目录浏览功能:打开Apache配置文件httpd.conf,查找"Options Indexes FollowSymLinks",修改为" Options -Indexes"(减号表示取消,保存退出,重启Apache。
3、 Nginx中默认不会开启目录浏览功能,若您发现当前已开启该功能,可以编辑nginx.conf文件,删除如下两行:autoindex on;autoindex_exact_size on;重启Nginx。
2.web服务控制台泄露
威胁等级 :低危
漏洞描述 :Web 控制台是一种基于 Web 的用户界面, 其常常被用于网站后台或者web容器控制台中,其不仅仅局限于容器或者网站管理后台,还包括一些数据库默认地址等。在web安全中,网站系统在泄漏其web容器(中间件)或者数据库的控制台后,存在增加被入侵的风险。常见的web控制台包括以下多种:tomcat、aria2、weblogic、websphere、oracle、jboss、等。这些web的容器控制台常见访问形式:http://hostname:port/load/,例如:http://x.x.x.x:8080/manage/。
修复方案 :
1、控制台使用白名单访问限制
2、 修改控制台默认的用户名和名吗,并为其控制台设置强壮的口令措施,防止可被恶意或简单猜解得到用户名和密码。
3、 修改web容器控制台的默认端口,默认路径,避免可被直接利用,访问得到地址。
4、 例如:tomcat的修复方式:禁止别人访问tomcat主页,环境:tomcat 6.0 ;步骤1:在server.xml中 <Host name="localhost" appBase="webapps"修改改webapps为xxxxxx(自己设置的路径);步骤2:在tomcat-users.xml中 : 更改用户名和密码(需强壮)。
3.phpinfo信息泄露
威胁等级 :低危
漏洞描述 :phpinfo()函数返回的信息中包含了服务器的配置信息,包括:1)PHP编译选项以及文件扩展名的相关信息;2)php的版本信息 3)php的配置信息;4)数据库信息;等敏感信息。这些敏感信息会帮助攻击者展开进一步的攻击。
修复方案 :建议限制此类脚本的访问权限或者删除对phpinfo()函数的调用:修改php.ini文件中的disable_functions配置项,把"phpinfo"添加到清单中:disable_functions=phpinfo
备注:如果要禁用多个函数,函数名之间用逗号隔开
4...svn信息泄露
威胁等级 :高危
漏洞描述 :据介绍,SVN(subversion)是程序员常用的源代码版本管理软件。一旦网站出现SVN漏洞,其危害远比SQL注入等其它常见网站漏洞更为致命,因为黑客获取到网站源代码后,一方面是掠夺了网站的技术知识资产,另一方面,黑客还可通过源代码分析其它安全漏洞,从而对网站服务器及用户数据造成持续威胁。更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,黑客则可以直接获得文件源代码。
修复方案:删除SVN各目录下的.svn目录;删除CVS的CVS目录。或者对URL中进行过滤,过滤相关svn等相关敏感字符
5.内网IP泄露
威胁等级 :低危
漏洞描述 :网站的内部IP地址,常常被攻击者通过信息收集,得到其内网的IP地址,对于渗透攻击,打下良好基础,如内网Ip地址段,IP路由等等。常见的泄露内网IP的web容器有IIS。
修复方案 :建议采用以下方式进行修复:
1、 建议开发人员不要在源代码中注释中包含有内网IP。
2、 删除携带内网IP地址的页面,并制定完善的安全编码策略,并且及时检查存在的页面代码是否包含内部IP地址问题。
3、 加强编程人员良好的安全编码意识,系统地学习安全编码的知识,减少源代码泄露的风险。
4、 建立起良好的代码审核、审查体系,由专人负责代码的审计,增加安全监督环节。
5、 合理配置WEB服务器,禁止在数据交互中,传输内网IP地址。
6、 对于IIS服务器中的泄露内网IP地址的漏洞修复方法:
输入CMD进入命令提示符,输入"adsutil set w3svc/UseHostName True net stop iisadmin /y net start w3svc。这样就可以让IIS使用主机名而不是主机的IP地址,这样即时是有人利用漏洞也只是看到主机名而不是主机IP,从而防止内容IP地址泄露。
6.Cookie信息泄露
威胁等级 :低危
漏洞描述 :cookie的属性设置不当可能会造成系统用户安全隐患,Cookie信息泄露是Cookie http only配置缺陷引起的,在设置Cookie时,可以设置的一个属性,如果Cookie没有设置这个属性,该Cookie值可以被页面脚本读取。 例如:当攻击者发现一个XSS漏洞时,通常会写一段页面脚本,窃取用户的Cookie,如果未设置http only属性,则可能导致用户Cookie信息泄露,攻击者能够利用该用户的身份进行系统资源访问及操作。
修复方案:建议如果网站基于cookie而非服务器端的验证,请最好加上HttpOnly
7.应用程序错误信息泄露
威胁等级 :低危
漏洞描述 :web应用程序报错信息泄露敏感信息。
修复方案:设置统一的报错页面
8.敏感信息泄露
威胁等级 :高危
漏洞描述 :敏感数据包括但不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据、个人数据(如姓名、住址、电话等)等,在程序文件、配置文件、日志文件、备份文件及数据库中都有可能包含敏感数据。
修复方案 :
1、 禁止在代码中存储敏感数据:禁止在代码中存储如数据库连接字符串、口令和密钥之类的敏感数据,这样容易导致泄密。用于加密密钥的密钥可以硬编码在代码中。
2、 禁止密钥或帐号的口令以明文形式存储在数据库或者文件中:密钥或帐号的口令必须经过加密存储。例外情况,如果Web容器的配置文件中只能以明文方式配置连接数据库的用户名和口令,那么就不用强制遵循该规则,将该配置文件的属性改为只有属主可读写。
3、 禁止在 cookie 中以明文形式存储敏感数据:cookie信息容易被窃取,尽量不要在cookie中存储敏感数据;如果条件限制必须使用cookie存储敏感信息时,必须先对敏感信息加密再存储到cookie。
4、 禁止在隐藏域中存放明文形式的敏感数据。
5、 禁止用自己开发的加密算法,必须使用公开、安全的标准加密算法。
6、 禁止在日志中记录明文的敏感数据:禁止在日志中记录明文的敏感数据(如口令、会话标识jsessionid等), 防止敏感信息泄漏。
7、 禁止带有敏感数据的Web页面缓存:带有敏感数据的Web页面都应该禁止缓存,以防止敏感信息泄漏或通过代理服务器上网的用户数据互窜问题。
9.IIS短文件名泄露
威胁等级 :中危
漏洞描述 :Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件
修复方案 :
方案1、修改注册列表,并清除已创建的短文件名
①关闭操作系统NTFS 8.3文件格式的支持。 以管理员身份运行fsutil behavior set disable8dot3 1 , 即修改注册列表:HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation的值为1,该操作在重启操作系统后生效。②将WEB站点根目录及虚拟目录移动到其他分区后再移回,此操作可以将生成的短文件名清除。
注:①只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除。该修改不能完全修复,只是禁止创建,故需要再进行②操作。
方案2、如果你的web环境不需要asp.net的支持你可以进入Internet 信息服务(IIS)管理器 --- Web 服务扩展 - ASP.NET 选择禁止此功能。(推荐)
方案3、升级net framework 至4.0以上版本.(推荐)
10.备份文件泄露
威胁等级 :高危
漏洞描述 :备份文件泄露,在web服务中,尝尝不局限于网站的源代码泄露,网站的数据库备份文件,以及上传的敏感文件,或者一切正常备份,原则不允许访问的文件可被通过访问web路径进行下载得到,造成其信息泄露。有效的帮助攻击者理解网站应用逻辑, 为展开其他类型的攻击提供 有利信息,降低攻击的难度,可以进一步获取其他敏感数据。
修复方案 :
1、 网站管理员严格检查web中可访问的路径下是否存在备份文件,常见备份文件后缀为.jsp.bak、.bak、.sql、.txt、等等。如果有这些文件,直接将该备份文件进行转移到其他目录或者直接删除即可。
2、 严格控制可网站可访问目录下的文件敏感度的存放问题,不要将敏感文件置于该目录。
六、其他
1.URL重定向/跳转
威胁等级 :低危
漏洞描述 :服务端未对传入的跳转url变量进行检查和控制,可能导致可恶意构造任意一个恶意地址,诱导用户跳转到恶意网站。由于是从可信的站点跳转出去的,用户会比较信任,所以跳转漏洞一般用于钓鱼攻击,通过转到恶意网站欺骗用户输入用户名和密码盗取用户信息,或欺骗用户进行金钱交易;也可能引发的XSS漏洞(主要是跳转常常使用302跳转,即设置HTTP响应头,Locatioin: url,如果url包含了CRLF,则可能隔断了http响应头,使得后面部分落到了http body,从而导致xss漏洞)。另外在struts2 中存在重定向的漏洞,是因为struts2由于缩写的导航和重定向前缀"action:"、 "redirect:"、 "redirectAction:" 等参数前缀的内容没有被正确过滤导致的开放式重定向漏洞。
修复方案 :
1、 若跳转的URL事先是可以确定的,包括url和参数的值,则可以在后台先配置好,url参数只需传对应url的索引即可,通过索引找到对应具体url再进行跳转;
2、 若跳转的URL事先不确定,但其输入是由后台生成的(不是用户通过参数传人),则可以先生成好跳转链接然后进行签名,而跳转cg首先需要进行验证签名通过才能进行跳转;
3、 若1和2都不满足,url事先无法确定,只能通过前端参数传入,则必须在跳转的时候对url进行按规则校验
2.HTTP HOST头攻击
威胁等级 :低危
漏洞描述 :一些网站以不安全的方式处理Host头的值。如果服务器直接信任Host头,未校验它的合法性,则攻击者可能能够使用此可控变量来注入Host,以操纵服务器端的行为。
修复方案:由于http请求的特点,host header的值其实是不可信的。唯一可信的只有SERVER_NAME,这个在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法host header。在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。建议两种方法同时使用。
3.SSRF
威胁等级 :中危
漏洞描述 :服务端请求伪造(Server Side Request Forgery, SSRF)指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。
修复方案 :
过滤返回的信息
统一错误信息
限制请求的端口
禁止不常用的协议
对DNS Rebinding,考虑使用DNS缓存或者Host白名单
4.XSS
威胁等级 :中危
漏洞描述 :XSS全称为Cross Site Scripting,为了和CSS分开简写为XSS,中文名为跨站脚本。该漏洞发生在用户端,是指在渲染过程中发生了不在预期过程中的JavaScript代码执行。XSS通常被用于获取Cookie、以受攻击者的身份进行操作等行为。
修复方案 :
1、过滤输入的数据,对例如:" ' "," " "," < "," > "," on* ",script、iframe等危险字符进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
2、不仅验证数据的类型,还要验证其格式、长度、范围和内容。
3、不仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
4、对输出到页面的数据进行相应的编码转换,如HTML实体编码、JS编码等。对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行检查。
5.CSRF
威胁等级 :低危
漏洞描述 :CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。通常由于服务端没有对请求头做严格过滤引起的。CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。绝大多数网站是通过 cookie 等方式辨识用户身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。CSRF攻击会令用户在不知情的情况下攻击自己已经登录的系统。
修复方案 :
1、验证请求的Referer是否来自本网站,但可被绕过。
2、在请求中加入不可伪造的token,并在服务端验证token是否一致或正确,不正确则丢弃拒绝服务。
6.不安全的HTTP方法
威胁等级 :低危
漏洞描述 :目标服务器启用了不安全的传输方法,如PUT、TRACE、DELETE、MOVE等,这些方法表示可能在服务器上使用了 WebDAV,由于dav方法允许客户端操纵服务器上的文件,如上传、修改、删除相关文件等危险操作,如果没有合理配置dav,有可能允许未授权的用户对其进行利用,修改服务器上的文件。
修复方案 :
1、关闭不安全的传输方法,只开启POST、GET方法。
2、如果服务器不使用 WebDAV 可直接禁用,或为允许webdav的目录配置严格的访问权限,如认证方法,认证需要的用户名,密码。
7.Apache Tomcat默认文件
威胁等级 :低危
漏洞描述 :Apache Tomcat默认样例文件没有删除或限制访问,可能存在cookie、session伪造,进行后台登录操作。
修复方案 :
1、删除样例文件
2、限制文件访问权限