wordpress博客如果开放投稿注册并且后台支持用户名登录的话,可以先在前台页面批量获取用户名,然后找个弱口令字典,就可以暴力破解了
批量获取用户名的方法是遍历author页面,从html中提取authorname
以携程UED博客为例:
1、author页面地址为:http://ued.ctrip.com/blog/?author=1 ,ID是自增的
红色圈内即用户名admin。
2、登录页面http://ued.ctrip.com/blog/xmlrpc.php
xmlrpc登录接口默认没有验证码,最大错误尝试次数限制等。
利用xmlrpc.php提供的接口尝试猜解用户的密码,可以绕过wordpress对暴力破解的限制。已经发现了大规模的利用,启用了xmlrpc的同学需要尽快修复。
这种利用xmlrpc.php的攻击可以绕过这些限制。攻击的方式直接POST以下数据到xmlrpc.php
wp.getUsersBlogsusernamepassword
其中username字段是预先收集的用户名。password是尝试的密码。关于getUsersBlogs接口的更多信息可以参考官方的指南。如果密码正确,返回为:
错误返回:
正确返回:
3、防止暴力破解
记录下登录失败的用户ip,用户名,密码,时间等,如果在一定时间内(同一ip)登录失败的次数大于阈值,则禁止登录。
建表:
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-includesclass-wp-xmlrpc-server.php
简单阻止下暴力破解吧。。
wp-login.php文件同理了,自行处理吧。
防止brute force crack的策略很多啦,基本就是排除异常登录者。
刚上线就有鱼儿上钩了: