Web 常见漏洞
检测到目标URL存在http host头攻击漏洞
描述:为了方便的获得网站域名,开发人员一般依赖于HTTP Host header。例如,在php里用_SERVER["HTTP_HOST"]。但是这个header是不可信赖的,如果应用程序没有对host header值进行处理,就有可能造成恶意代码的传入。
解决办法
web应用程序应该使用SERVER_NAME而不是host header。
在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法host header。在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。
检测到目标站点可能存在跨站请求伪造漏洞
描述:跨站请求伪造(CSRF)漏洞是指攻击者通过其他方法(如社会工程学),诱导web应用的合法授权用户在不知情的情况下执行攻击者预期的操作。成功的跨站请求伪造攻击可造成攻击者以其他用户的权限执行指定的操作,如修改用户数据,窃取用户信息等等。
跨站请求伪造攻击的严重性依赖于被攻击用户的权限和目标web应用的具体业务。
解决方法
对于重要操作,建议采用POST方法替代GET方法,可有效提高攻击者利用的难度。 或者在表单中增加csrf验证字段或验证码,并在完成操作前给予用户提示信息。 在服务器端增加Referer请求字段的验证。
检测到目标URL启用了不安全的HTTP方法
描述:检测到目标Web服务器配置成允许下列其中一个(或多个)HTTP 方法:DELETE, SEARCH,COPY,MOVE, PROPFIND, PROPPATCH, MKCOL ,LOCK ,UNLOCK 。
这些方法表示可能在服务器上使用了 WebDAV。由于dav方法允许客户端操纵服务器上的文件,如果没有合理配置dav,有可能允许未授权的用户对其进行利用,修改服务器上的文件。
解决方法
修改WEB应用的web.xml部署文件。在里面插入下面几行代码就搞定了,把需要屏蔽的方法加在里面。如果应用包比较多也没必要一个个改,直接修改Tomcat的web.xml就可以了,这样在Tomcat中运行的实例都会有效。
<security-constraint>
<web-resource-collection>
<web-resource-name>baseproject</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>
<security-constraint>
用于限制对资源的访问;
<auth-constraint>
用于限制那些角色可以访问资源,这里设置为空就是禁止所有角色用户访问;
<url-pattern>
指定需要验证的资源
<http-method>
指定那些方法需要验证
检测到目标服务器启用了OPTIONS方法
描述:OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。OPTIONS方法可能会暴露一些敏感信息,这些信息将帮助攻击者准备更进一步的攻击。
解决方法
修改web.xml文件的协议
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
在web.xml添加如下代码
<security-constraint>
<web-resource-collection>
<web-resource-name>baseproject</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>
<description>baseproject</description>
<role-name>All Role</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
检测到目标服务器存在应用程序错误
描述:如果者通过伪造包含非应用程序预期的参数或参数值的请求,来探测应用程序(如以下示例所示),那么应用程序可能会进入易受的未定义状态。 者可以从应用程序对该请求的响应中获取有用的信息,且可利用该信息,以找出应用程序的弱点。
例如,如果参数字段应该是单引号括起来的字符串(如在 ASP 脚本或 SQL 查询中),那么注入的单引号将会提前终止字符串流,从而更改脚本的正常流程/语法。
错误消息中泄露重要信息的另一个原因,是脚本编制引擎、Web 服务器或数据库配置错误。
以下是一些不同的变体:
[1] 除去参数
[2] 除去参数值
[3] 将参数值设置为空值
[4] 将参数值设置为数字溢出(+/- 99999999)
[5] 将参数值设置为危险字符,如 ' " ' " ) ;
[6] 将某字符串附加到数字参数值
解决方法
[1] 检查入局请求,以了解所有预期的参数和值是否存在。 当参数缺失时,发出适当的错误消息,或使用缺省值。
[2] 应用程序应验证其输入是否由有效字符组成(解码后)。 例如,应拒绝包含空字节(编码为 %00)、单引号、引号等的输入值。
[3] 确保值符合预期范围和类型。 如果应用程序预期特定参数具有特定集合中的值,那么该应用程序应确保其接收的值确实属于该集合。 例如,如果应用程序预期值在 10..99 范围内,那么就该确保该值确实是数字,且在 10..99 范围内。
[4] 验证数据属于提供给客户端的集合。
[5] 请勿在生产环境中输出调试错误消息和异常。
点击劫持:X-Frame-Options未配置
描述:点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
HTTP 响应头信息中的X-Frame-Options,可以指示浏览器是否应该加载一个 iframe 中的页面。如果服务器响应头信息中没有X-Frame-Options,则该网站存在ClickJacking攻击风险。网站可以通过设置 X-Frame-Options 阻止站点内的页面被其他页面嵌入从而防止点击劫持。
解决方法
Nginx:
配置 nginx 发送 X-Frame-Options 响应头,把下面这行添加到 'http', 'server' 或者 'location' 的配置中:
add_header X-Frame-Options SAMEORIGIN;
Apache:
配置 Apache 在所有页面上发送 X-Frame-Options 响应头,需要把下面这行添加到 'site' 的配置中:
1、打开httpd.conf 找到LoadModule headers_module modules/mod_headers.so模块,去掉前面的# 号 启用该模块
2、在此处加上 Header always append X-Frame-Options SAMEORIGIN
<IfModule headers_module>
RequestHeader unset DNT env=bad_DNT
Header always append X-Frame-Options SAMEORIGIN
</IfModule>
检测到目标URL存在电子邮件地址模式
描述:Spambot 搜寻因特网站点,开始查找电子邮件地址来构建发送自发电子邮件(垃圾邮件)的邮件列表。如果检测到含有一或多个电子邮件地址的响应,可供利用以发送垃圾邮件。而且,找到的电子邮件地址也可能是专用电子邮件地址,对于一般大众应是不可访问的。
解决方法
从 Web 站点中除去任何电子邮件地址,使恶意的用户无从利用。
jQuery 存在 XSS 漏洞
描述:jQuery 是一个 JavaScript 库。 jQuery 在过滤用户输入数据时,所使用的正则表达式存在缺陷,可能导致 location.hash 跨站漏洞。
解决方法
升级jquery版本
泄露软件版本信息
描述:在浏览器里面泄露程序错误处理信息或软件版本等信息,可能导致进一步的攻击。
解决方法
隐藏apache版本信息:
开启 httpd.conf,加入以下两行:
ServerTokens ProductOnly
ServerSignature Off
隐藏Nginx版本信息:
开启 nginx.conf,在http { }里加上:
server_tokens off;