本客服平台由提供产品服务
常见漏洞修复方案

rick_ge 发表于 2015年11月24日 13:36 最后修改于 2015年11月24日 13:48

1.    管理后台对外


Apache 配置文件中修改:

vi /etc/httpd/conf.d/wp.conf
<Directory /var/www/html/wp/wp-admin>
Order Deny,Allow
Deny from all
Allow from 61.135.165
Allow from 220.181.50
Allow from 61.135.169
Allow from 220.181.38
</Directory>

 

修改.htaccess文件

在.../admin/ 目录下设置 .htaccess文件
order deny,allow
deny from all
allow from 61.135.165.142/26
allow from 220.181.50.206/26
allow from 61.135.169.68/27
allow from 220.181.38.100/27
allow from 172.0.0.0/8
allow from 10.0.0.0/8

 

Nignx配置

location /private/ {

    allow 192.168.1.0/24;

    deny all;

}

location ~ ^/private/.*\.php$ {

    allow 192.168.1.0/24;

    deny all;

    include conf/enable_php5.conf;

}

location ~ \.php$ {

    include conf/enable_php5.conf;

}

 

BAE 中修复管理后台对外的方法是修改配置文件bae.conf     示例模板如下:

appid : ecomue

auth : TrmQpGbPzZyvrugkW6qyd5c0

version : 1.2.5

handlers:

  - ipwhitelist: ^/wp\-login\.php     61.135.165.*,220.181.50.*,61.135.169.*,220.181.38.*

  - ipwhitelist:  ^/wp\-admin           61.135.165.*,220.181.50.*,61.135.169.*,220.181.38.*

  - ipwhitelist: ^/wp\-includes/js/swfupload/swfupload.swf 61.135.165.*,220.181.50.*,61.135.169.*,220.181.38.*

 

PHP文件中修改:

$laiyuanip=$_SERVER['REMOTE_ADDR'];
if ($ceshijieguo=ereg('^(220.181.50|61.135.165|61.135.169|123.125.64|123.125.113|220.181.38 |10. )', "$laiyuanip") )

{
echo "";

}else {
echo 'IP 未授权';
exit;

}

 

2.    跨站脚本攻击漏洞


2.1   普通XSS

 

1、Htmlspecialchars、htmlentities

$help_array = htmlspecialchars($params['help_array']);

2、str_replace

str_replace(array('<','>'), array('&lt;','&gt;'), $question['title']);

 

2.2    json XSS

(1)设置响应类型为 header("Content-Type:text/javascript; charset=UTF-8");

(2)白名单法:

$score = $_REQUEST['score'];
if(preg_match('/[0-9]{1,2}/$', $score)!==1){
echo ""; return;
}

 

2.3    flash xss

(1)将ExternalInterface.call参数写死

(2)过滤法:

_loc_1 = this.loaderInfo.parameters;

ExternalInterface.addCallback("capture", this.capture);

_loc_2 = /\W/g;

ExternalInterface.call(_loc_2.test(_loc_1["loadedCallback"]) ? ("a") : (_loc_1["loadedCallback"]));

 

3.    SQL注入


1、对字符串 mysql_escape_string

$paramStr = mysql_real_escape_string($paramStr);

2、对数字 intval

$param  = intval ($param);

 

4.    FastCGI解析漏洞


(1)php.ini中 cgi.fix_pathinfo = 0
(2)lighttpd增加rewrite规则:
      "\..*/.*\.php" =>"/index.php",

 

5.    URL跳转漏洞


function checkurl($url) {
if ($url != '') {
$urlParse = parse_url($url);
$urlHost = strval($urlParse['host']);
if (!preg_match("/\.baidu\.com$|\.baidu\.com\:|\.baidu\.com\.cn$|\.baidu\.com\.cn\:|\.baidu\.cn$|\.baidu\.cn\:/i", $ urlHost)) {
return false;
} else {
return true;
}
} else {
return false;
}
}

 

6.    文件包含漏洞


(1)过滤法:

$filename = $_GET("filename");
$filter_tags = array('..','%00');
$filename = str_replace($filter_tags,'',$filename);

(2)正则法:

$filename = $_GET['filename'];

if(preg_match("/^[a-zA-Z0-9_-]+$/",$filename) || preg_match("/^[a-zA-Z0-9_-]*\.[a-zA-Z]{3}$/",$filename))

{

}

else

{

         echo "非法字符";

         exit();

}

 

7.    命令执行漏洞


 

7.1.   Strusts命令执行

Strusts命令执行,升级版本

1、升级版本

2、在struts.xml中加入了excludeParams从而限制范围

3、过滤法

private String filterOnglString(String url){

if(url != null){

return url.replaceAll("%\\{.*\\}", "");

}else{

return url;

}

}

 

7.2.   Linux GNU Bash 远程命令执行漏洞

GNU Bash 4.3及之前版本在处理某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行shell命令。某些服务和应用允许未经身份验证的远程攻击者提供环境变量以利用此漏洞。可能允许攻击者远程执行任意命令。

升级bash到最高版本

 

8.    信息泄漏类


8.1.    列目录

修改Apache配置文件:

已经对wm.baidu.com/kr目录进行权限控制
<Directory "/home/work/kr/kr">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
deny from all
</Directory>

或者

<Directory "/home/work/kr/kr ">
Options -Indexes -MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

 

8.2.   apache httponly cookie泄露

当apache接收到一个大于4k的cookie的时候,会返回一个400的错误,并且把所有的cookie完整的在页面当中显示出来,提示这个 cookie过大,那么我们的攻击方式便是利用xss,给用户在正常的cookie的基础上再增加一些无用的cookie,使用户的cookie大于 4k,然后js再发包请求一次网站,这时apache返回的响应就是400,并把cookie显示出来,这时我们只要用js正则匹配出正常的cookie 即可,由于不是js直接获取cookie,而只是正则匹配出返回的字符串而已,便相当于绕过了cookie的httponly的属性,完整的攻击再加上把 匹配的字符串再发送到自己的一个接受文件当中即可。

解决方案:

 建议一:升级apache 版本 > 2.2.22

建议二:自定义400错误页面输出一个简单生硬的错误代码:

 ErrorDocument 400 "Bad Request 400"

 

8.3.   版本信息泄露

(1)Nginx

修改nginx配置文件nginx.conf中的server_tokens为off

(2)Apache

修改httpd.conf
ServerSignature Off
ServerTokens ProductOnly

 

8.4.    SVN信息泄露

find ./  -type d -name ".svn" |xargs rm –rf {}

 

8.5.    BAIDUID信息泄露

不要在页面中明文保存BDUSS信息


回复
回复已关闭