该渗透测试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中 \