网站常见漏洞及解决办法

  • 格式:doc
  • 大小:103.50 KB
  • 文档页数:9

网站常见漏洞以及解决办法

1 问题 远端WWW服务支持TRACE请求

法 ①开启Apache 的mod_rewrite功能:

在Apahce的配置文件httpd.conf中把#LoadModule rewrite_module

modules/mod_rewrite.so前的#去掉

在httpd.conf中找到下面这段

Options FollowSymLinks AllowOverride None

将AllowOverride None 改成 AllowOverride ALL

这样Apache的mod_rewrite就开启了。

②在httpd.conf最后加上

RewriteEngine on

RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)

RewriteRule .* - [F] 禁用URL,返回403HTTP状态码

mod_rewrite模块提供了一个基于规则的(使用正则表达 式分析器的)实时转向URL请求的引擎。支持每个规则可以拥有不限数量的规则以及附加条件规则的灵活而且强大的URL操作机制。此URL操作可以取决于各种测试,比如服务器变量、环境变量、HTTP头、时间标记,甚至各种格式的用于匹配URL组成部分的查找数据库。

RewriteEngine On

RewriteCond %{HTTP_HOST} ^xxx\.com$ [NC]

RewriteRule ^/(.*)$ /$1 [R=301,L]

对于unix,Red Hat Linux运行的Apache是编译好的程序,提示信息被编译在程序里,

要隐藏这些信息需要修改Apache的源代码,然后,重新编译安装程序,以替换里面

的提示内容。

2 问题 远端HTTP服务器类型和版本信息泄漏

法 ㈠apache版本信息泄漏解决方法:

在配置文件Apache2.2/conf/httpd.conf中加入

ServerTokens Prod[uctOnly](等级[Prod,Major, Minor, Min, OS])

ServerSignature Off

重启 apache 现在 http 头里面只看到: Server: Apache[/2, /2.0, /2.0.41, /2.0.41 (Unix)]

㈡服务器类型泄漏解决办法:

Tomcat:

①方法一:修改ServerInfo.properties里的版本信息

Tomcat4\5:tomcat_home \server\lib\catalina.jar

org\apache\catalina\util\ServerInfo.properties

Tomcat6:tomcat_home \lib\catalina.jar

org\apache\catalina\util\ServerInfo.properties

操作:用WinRAR打开catalina.jar 找到ServerInfo.properties 解压并修改 再拖入即可。

②方法二:使用WEB容器捕获异常进行处理

在web.xml文件头部加上:

ng.Exception/system_error.jsp

404/system_error.jsp

400/system_error.jsp

500/system_error.jsp

3 问题 ① Apache MPM worker.c 远程拒绝服务漏洞。

Apache 2的worker模块在处理中止的TCP连接时存在内存泄漏,远程攻击者可以反复触发这种情况耗尽所有可用的内存,最终导致拒绝服务。

② Apache.htaccess本地PCRE整数溢出权限提升漏洞。

PCRE在处理字符类时存在缓冲区溢出漏洞,如果用户发送了codepoint大于255的超长UTF-8字符类的话,就可能触发这个溢出,导致执行任意指令。

③ Apache mod_imagemap和mod_imap模块跨站脚本漏洞。

Apache的mod_imagemap和mod_imap模块中没有正确地过滤某些用户输入,允许远程攻击者提交恶意的HTTP请求执行跨站脚本攻击。

④ Apache mod_rewrite模块单字节缓冲区溢出漏洞。

Apache的mod_rewrite模块在转义绝对URI主题时存在单字节缓冲区溢出漏洞,攻击者可能利用此漏洞在服务器上执行任意指令。mod_rewrite模块的escape_absolute_uri()函数分离LDAP URL中的令牌时,会导致在字符指针数组以外写入指向用户控制数据的指针,这样就可能完全控制受影响的主机。

法 这些问题都是由于Apache 自身的缺陷引起的。

解决方法:

① 打apache补丁可解决

② 升级apache到最新版本。

建议最好用升级apache到最新版本。

4 问题 SQL 注入攻击

析 SQL注入的原理:

就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。

1、单引号’法。通过错误提示,判断获取服务器的信息。

2、经典的1=1、1=2测试法。这只是传入参数是数字型的时候用的判断方法。

3、判断数据库类型及注入方法。and user>0 user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。

止 1、数据库访问用预定义会话 PreparedStatement代替Statement 从根本上防止SQL截断

2、后台过滤(为输入的信息提供反馈信息,只要验证数据格式/长度正确就可以了,不必子自作主张的去过滤/转义各种特殊符号)

3、前台过滤(这只是一个幌子,谁也不能指望前台过滤能防止什么,不过可以减少服务器压力)

4、敏感信息提交(比如帐号密码)设置验证码(因为除了注入,还有穷举)

5、数据库安全设置(每种数据库的弱点不太一样)。

Java 也提供了防止 SQL 注入攻击的方法。由于 JDBC 都是基于接口的设计,所以对于不同的数据库,代码基本一样。

Connection conn = DriverManager.getConnection(url, user, password);

String query = "select * from table_user where user_name=?";

PreparedStatement preState = conn.prepareStatement(query);

preState.setString(1, "aaa");

ResultSet rs = preState.executeQuery();

查询了表 table_user 中字段 user_name 为 "aaa" 的数据,由于采用了参数化查询的方式, JDBC 底层已经防止了 SQL 注入攻击。在 Java 中,对于所有的数据库,参数化查询的方式都和上面类似,区别在于数据库连接字符串。

5 问题 Apache升级过程

程 ① 从网上下载 mod_jk.so/1.2.27(apache和tomcat的连接文件)

② 备份Apache目录下的conf目录及modules目录下的mod_jk.so/1.2.14文件

③ 停掉Apache的相关服务

④ 卸栽Apache 并把原来的apache目录整体删除

⑤ 安装apache_2.2.11。 用 IE 浏览器访问 Apache 安装后的网站,要能访问 Apache

的默认首页。

⑥ 把mod_jk.so文件拷贝到 %Apache_Home%/modules 目录下。

⑦ 配置虚拟主机,包括 Apache、Tomcat。

对于 Apache 版本升级操作,建议参照原来的http.conf文件,改动新的http.conf文件几个地方即可。强烈建议:先备份系统默认安装后的 http.conf 文件。

主要修改位置:

LoadModule jk_module modules/mod_jk.so

JkWorkersFile "D:/Apache Group/Tomcat/conf/workers.properties"

JkLogFile "D:/Apache Group/Tomcat/logs/mod_jk2.log"

JkLogLevel info

#默认服务

ServerName :80

#默认首页设置

DirectoryIndex index.html index.html.var index.jsp index.htm index.do

# 禁止访问目录设置

AllowOverride None Deny from All

NameVirtualHost ××.××.××.××:80

#虚拟目录配置

ServerName "www.××" #域名地址