Web应用安全测试-专项漏洞(一)
专项漏洞部分注重测试方法论,每个专项仅列举一个例子。实际测试过程中,需视情况而定。
文章目录
- Web应用安全测试-专项漏洞(一)
- Web组件(SSL/WebDAV)漏洞
- 中间件相关漏洞
- 第三方应用相关漏洞
- 第三方插件相关漏洞
- 开发框架
Web组件(SSL/WebDAV)漏洞
漏洞描述: Web组件漏洞泛指Web组件存在的通用漏洞。
测试方法: 根据目标系统所使用的Web组件版本,查找其公开漏洞及其利用脚本。如目标使用了SSL协议,可测试是否存在SSL v3重协商漏洞、POODLE信息泄漏漏洞等。下面以SSL v3重协商漏洞为例进行说明:
-
通过web漏洞扫描工具进行检测。
-
通过利用SSLciphercheck软件,通过CMD下运行,检测命令:
sslciphercheck.exe -h ip地址或者域名 -p 443
风险分析:
SSL\TSL是位于一种可靠地网络层协议TCP协议之上的一个协议 ,该协议是为了在客户端和服务器之间生成一个安全的连接,这种连接是私密的、可靠的并且通信双方可以互相验证双方的身份 。所以SSI\TSI 协议应该具有机密性 、完整性和确定性。而对于重新协商,一个SSL协议一旦建立起来,客户端 (C )和服务器 (S)都可以再一次重新协商,也称为重新握手,这将会导致在加密的信道上进行一次握手,C 可以通过发送一个新的client Hello消息来创建一次重新协商。同样地,S可以发送一个Hello request消息,从而使C回应一个新的client Hello,以创建一个重新协商,建立重新协商的目的是更新密钥,增强所用密码组的保密性和从C到S的身份认证等等。
在中间人攻击中,攻击者会主动窃听,他将截获客户端和服务器之间的连接,并使他们认为他们是在直接通话,而实际上他们是通过攻击者的转接来通话的。要完成中间人攻击,中间人必须截获客户端和服务器间的所有通信信息,这样中间人可以选择有用的信息并且它可 以将新的信息随意的插入。
风险等级:
【低危】
修复方案:
- 关闭
renegotiation
协议或限制SSL重协商数,以防止TLS DOS攻击:在Apache 2.2.15以上版本中,可以通过在配置文件httpd.conf中,添加如下字串:SSLInsecureRenegotiation Off;
如使用的Apache版本低于2.2.15,则可以通过限制SSL重协商的次数防止DOS攻击。 - 使用WEB应用防火墙防止中间人攻击:通过WEB应用防火墙,对HTTP Header请求头进行过滤和监控,舍弃嵌入式的HTTP请求行,以防止中间人攻击。
注意事项: 暂无
中间件相关漏洞
漏洞描述: 包括Apache、Nginx、IIS、Tomcat、Weblogic、Jboss
以及其他的中间件的漏洞。
测试方法: 根据目标系统所使用的中间件版本,查找其公开漏洞及其利用脚本。如Tomcat/Weblogic/WebSphere管理控制台弱口令、java发序列化、IIS短文件名泄漏、JBoss远程代码执行等。下面以JBoss远程代码执行漏洞为例进行说明:
-
对于采用JBOSS的网站,首先判断其版本,如果版本为1.0.x版本,则可通过对其控制台的访问来判断,访问
http://127.0.0.1:8080/jmx-console/
,出现以下页面,则此漏洞可被利用:
-
或者用工具
jboss_exploit_fat.jar
来判断是否存在漏洞,如图所示:
风险分析: JBOSS默认配置会有一个后台漏洞,漏洞发生在jboss.deployment命名空间,中的addURL()函数,该函数可以远程下载一个war压缩包并解压。 如果压缩包里含有webshell文件,是直接可以解析的。
风险等级:
【高危】
修复方案: 给jmx-console加上访问密码并且执行以下修复方式:
-
在
${jboss.server.home.dir}/deploy
下面找到jmx-console.war
目录编辑WEB-INF/web.xml
文件去掉security-constraint
块的注释,使其起作用。 -
编辑以下文件:
编辑 WEB-INF/classes/jmx-console-users.properties
或 server/default/conf/props/jmx-console-users.properties (version >=4.0.2)
和 WEB-INF/classes/jmx-console-roles.properties
或server/default/conf/props/jmx-console-roles.properties(version >=4.0.2)
添加用户名密码
-
编辑
WEB-INF/jboss-web.xml
去掉security-domain
块的注释,security-domain
值的映射文件为login-config.xml
(该文件定义了登录授权方式)。 -
对于invoker,采用以下方案:升级相关的JBOSS中间件到最新版本,或者删除
$JBOSS_HOME/[server]/all/deploy
和$JBOSS_HOME/[server]/default/deploy
下的Jmx-console.war
、Web-console.war
这两个.War
文件来禁止对Jmx-console
和Web-console
的访问。
注意事项: 暂无
第三方应用相关漏洞
漏洞描述: Redis和Memcached等非关系型数据库,Zabbix等其他第三方应用存在的漏洞。
测试方法: 以Redis未授权访问为例:
-
使用RedisDesktopManager客户端工具连接Redis,如下图所示:
-
使用nmap中script扫描,如下图所示:
风险分析: Redis 默认情况下,会绑定在 0.0.0.0:6379
,导致Redis服务暴露到公网上。
如果在没有开启认证并且在任意用户可以访问目标服务器的情况下,从而可以未授权访问Redis服务,进一步可进行数据增删改查,甚至获取服务器权限等恶意操作。
风险等级:
【高危】
修复方案:
- 禁止Redis服务对公网开放,可通过修改redis.conf配置文件中的
#bind 127.0.0.1
,去掉前面的#
即可(Redis本来就是作为内存数据库,只要监听在本机即可); - 设置密码访问认证,可通过修改redis.conf配置文件中的
requirepass
设置复杂密码 (需要重启Redis服务才能生效); - 对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接Redis服务器;
- 修改Redis默认端口,将默认的6379端口修改为其他端口;
- 禁用config指令避免恶意操作,在Redis配置文件redis.conf中配置rename-command项
RENAME_CONFIG
,这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度; - Redis使用普通用户权限,禁止使用 root 权限启动Redis 服务,这样可以保证在存在漏洞的情况下攻击者也只能获取到普通用户权限,无法获取root权限;
注意事项: 暂无
第三方插件相关漏洞
漏洞描述: 第三方插件,如编辑器fckeditor
、ewebeditor
等存在的漏洞。
测试方法: 以ewebeditor上传漏洞为例:
通过网站目录扫描工具对网站进行扫描,扫到有ewebeditor的后台,尝试默认口令admin,admin进行登录,如下图所示:
修改样式管理添加媒体后缀asaspsp,然后上传asp webshell,如下图所示:
风险分析: 由于开发阶段使用了弱口令,导致正式上线后可通过扫描等方式获取到编辑器后台管理路径 ,通过弱口令进入后台管理,为攻击者提供进一步的攻击途径,可篡改网站页面内容甚至通过上传webshell获取服务器权限。
风险等级:
【高危】:编辑器存在默认口令,可上传webshell。
修复方案:
- 修改编辑器后台默认路径;
- 为编辑器后台设置高复杂度口令。
注意事项: 暂无
开发框架
漏洞描述: 开发框架存在的漏洞,如Struts2框架漏洞。
测试方法:
以Struts2远程命令执行为例:
- 在了解网站所采用的结构框架后,除去伪静态页面,抓包或者读取页面源代码方式,查找到网站系统url为.do和.action结尾类型后,添加相应的远程命令执行代码进行判断。
- 例如用户可以在
http://host.com/X.action?
后添加相对应struts2 漏洞的远程命令执行代码,或者直接利用工具K8 Struts2 Exploit.exe进行检测。
风险分析:
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的版本到最新,如果暂时不方便更新,则提供以下方案进行修复:
- 除升级外:Struts2远程代码执行漏洞(S2-013) 的临时解决方案:
修改文件:org.apache.struts2.views.util.DefaultUrlHelper
的281–284行:
private String translateVariable(String input) {
ValueStack valueStack = ServletActionContext.getContext().getValueStack();
return TextParseUtil.translateVariables(input, valueStack);
}
修改成
private String translateVariable(String input) {
return input;
}
- Struts2 s2-016/s2-017漏洞官网漏洞说明:
http://struts.apache.org/release/2.3.x/docs/s2-016.html
,解决方案(以struts 2.1.8.1版本为例):
-
下载struts 2.1.8.1 源码
struts-2.1.8.1-src.zip
-
eclipse建立一个war项目
-
将
struts-2.1.8.1-src.zip
内的源码拖到项目的src目录下 -
找到对应
struts-2.1.8.1
的xwork-core-2.1.6.jar
放入war项目的WEB-INF/lib目录下此目的就是为了避免java文件带红叉 -
修改
org.apache.struts2.dispatcher.mapper.DefaultActionMapper.java
此时文件应该没有红叉。有红叉主要是缺乏servlet-api.jar
和xwork-core-2.1.6.jar
在buildpath中改动如下:找到handleSpecialParameters方法,修改如下:
public void handleSpecialParameters(HttpServletRequest request, ActionMapping mapping) { // handle special parameter prefixes. Set uniqueParameters = new HashSet(); Map parameterMap = request.getParameterMap(); for (Iterator iterator = parameterMap.keySet().iterator(); iterator .hasNext();) { String key = (String) iterator.next(); // Strip off the image button location info, if found if (key.endsWith(".x") || key.endsWith(".y")) { key = key.substring(0, key.length() - 2); } // -- jason.zhou 20130708 add start -- // if ((key.contains("redirect:")) || (key.contains("redirectAction:")) || (key.contains("action:"))) { return; } // -- jason.zhou 20130708 add end -- // // Ensure a parameter doesn't get processed twice if (!uniqueParameters.contains(key)) { ParameterAction parameterAction = (ParameterAction) prefixTrie .get(key); if (parameterAction != null) { parameterAction.execute(key, mapping); uniqueParameters.add(key); break; } } } }
-
点中
org.apache.struts2.dispatcher.mapper.DefaultActionMapper.java
,右键,导出(export),导出为JAR file存盘为test.jar
-
用
winrar
打开test.jar
,拷贝出org/apache/struts2/dispatcher/mapper/下的DefaultActionMapper类
,一共有7个文件,如下:DefaultActionMapper$1.class DefaultActionMapper$2$1.class DefaultActionMapper$2$2.class DefaultActionMapper$2$3.class DefaultActionMapper$2$4.class DefaultActionMapper$2.class DefaultActionMapper.clas
-
用winrar打开
struts2-core-2.1.8.1.jar
进入org/apache/struts2/dispatcher/mapper/目录
,将上面拷贝出的7个文件拷贝入,覆盖原来的同名文件。 -
将
struts2-core-2.1.8.1.jar
拷贝入你自己的项目,覆盖原来的struts2-core-2.1.8.1.jar
-
启动项目,重新测试s2-016漏洞,如果发现测试结果正常(
不响应.do?action:,.do?redrect:,.do?redirectAction
),则证明补丁已生效。
注意事项: 暂无