知识屋:更实用的电脑技术知识网站
所在位置:首页 > 网络安全 > 安全资讯

防止Webshell密码被暴力破解

发布时间:2013-08-08 01:35:42作者:知识屋

虽然早就知道有这种工具,但是一试之后才发现确实太过凶残。

 
 
我想了一下,对于这种蛮不讲理的方式貌似是没有完美的解决办法。这东西就像DDOS一样,你可以轻视视,但不能无视。
不过针对现有的较为流行的Webshelll密码破解工具,可以做一些简单的措施来降低被爆菊的可能性。
 
第一个自然是增强密码强度了。
 
考虑到现在的密码破解主要是通过加载字典进行穷举,所以把密码改的又长又臭是非常简单而有效的安全措施。

第二就是增加一个判断机制。
 
通常攻击者要进行暴破时会先观察一下Webshell,比如密码的提交方式(POST还是GET)、密码错误的提示。
然后根据这些信息来配置攻击参数。当然现在大部分的webshell密码提交是post的。
 
我们可以再加一个GET的验证,这样破解工具就失效了。(因为他并不知道你对GET参数是怎么验证的)
假如之前的密码验证是这么写的的话
 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// … some code
$pass= “我是密码”;
 
if($_POST['pass']==$pass)
{
echo”登录成功!”;
// … some code
}
 
//…some code
 
?>

 

我们可以这么改一下
 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// … some code
$pass= “我是密码”;
 
if($_POST['pass']==$pass)
{
if($_GET['url'] == “ADmin”)
{
echo”登录成功!”;
// … some code
}
}
 
//…some code
 
?>

 

 
这样我们可以通过webshell.php?url=ADmin 来正常登陆。而攻击者只能抱着webshell.php团团打转。
 
此外还可以通过判断HTTP_REFERER来验证。
一般的工具进行暴破时,会伪造一个HTTP_REFERER的值为webshell的ur的包l,或者有的干脆就是空的。
当我们通过webshell.php?url=ADmin或者另一个页面(比如本地html)提交密码时,HTTP_REFERER的值是其他的值。这样也可以分辨出是不是你自己在登录。
 
第三个就更猥琐的,换一个验证的方式。
 
在webshell上留下一个POST的表单。但是程序不对POST数据做任何验证。而是验证提交的cookies内容。
比如这样
 
?
1
2
3
4
5
6
7
8
9
10
11
12
<?php
// … some code
$pass= “我是密码”;
 
if($_COOKIE['admin']==$pass)
{
echo”登录成功!”;
// … some code
}
 
//…some code
?>

 

 
目前还没看到有提交cookies的暴力破解工具(不过没看到有用cookies提交密码的webshell ^_^),这样就可以躲过一劫了。
就是有点麻烦,如果你是第一次登陆自己的webshell,可能需要开一个修改cookies的插件。
还有一个无聊的方法我自己没有用:
 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// … some code
$pass= rand(2000,99990);
if($_POST['pass']==$pass)
{
echo”登录成功!”;
header(‘location: /userRpmNatDebugRpm26525557/MyShell.htm’);
}
////// 以下为密码验证部分
$pass= “我是密码”;
 
if($_COOKIE['admin']==$pass)
{
echo”登录成功!”;
// … some code
}
 
//…some code
?>

 

 
代码要是这么改以后,我估计爆密码那哥们得纠结纠结自己下载的工具有没有问题了……
对于怎么隐藏Webshell入口或是隐藏Webshell本身各位一定有更多更好的见解。
本文抱砖引玉,旨在用一个简单的方法来躲过webshell密码破解工具的攻击,简单为上
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜