wordpress博客暴力破解防范

wordpress博客如果开放投稿注册并且后台支持用户名登录的话,可以先在前台页面批量获取用户名,然后找个弱口令字典,就可以暴力破解了
批量获取用户名的方法是遍历author页面,从html中提取authorname
以携程UED博客为例:
1、author页面地址为:http://ued.ctrip.com/blog/?author=1 ,ID是自增的

image

image

红色圈内即用户名admin。

2、登录页面http://ued.ctrip.com/blog/xmlrpc.php

xmlrpc登录接口默认没有验证码,最大错误尝试次数限制等。

利用xmlrpc.php提供的接口尝试猜解用户的密码,可以绕过wordpress对暴力破解的限制。已经发现了大规模的利用,启用了xmlrpc的同学需要尽快修复。

这种利用xmlrpc.php的攻击可以绕过这些限制。攻击的方式直接POST以下数据到xmlrpc.php

<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>   <methodName>wp.getUsersBlogs</methodName>   <params>    <param><value>username</value></param>    <param><value>password</value></param>   </params>
</methodCall>

其中username字段是预先收集的用户名。password是尝试的密码。关于getUsersBlogs接口的更多信息可以参考官方的指南。如果密码正确,返回为:

错误返回:

image

正确返回:

image

3、防止暴力破解

记录下登录失败的用户ip,用户名,密码,时间等,如果在一定时间内(同一ip)登录失败的次数大于阈值,则禁止登录。

建表:

image

CREATE TABLE `wp_audit` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`ip` VARCHAR(50) NOT NULL DEFAULT '',
`username` VARCHAR(100) NOT NULL DEFAULT '',
`password` VARCHAR(100) NOT NULL DEFAULT '',
`createdate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
INDEX `ip` (`ip`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM

 

修改wordpress代码:

\wp-includes\class-wp-xmlrpc-server.php

image

简单阻止下暴力破解吧。。

\wp-login.php文件同理了,自行处理吧。

 

防止brute force crack的策略很多啦,基本就是排除异常登录者。

刚上线就有鱼儿上钩了:

image

image

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>