DEMO:
#coding=utf-8 import MySQLdb class MSSQL: def __init__(self,host,user,pwd): self.host = host self.user = user self.pwd = pwd def connect_dp(self): conn = MySQLdb.connect(host=self.host,port=Flag3, user=Flag4,passwd=self.pwd,db='mysql',) cur = conn.cursor() if not cur: raise(NameError,"failed connect to sql server") else: return self.pwd def main(): fp = open('/root/superdic.txt','r') for password in fp.readlines(): try: a = MSSQL(host=Flag1,user='root',pwd=Flag2) ms = a.connect_dp() print password.strip() except: pass if not s: print 'brute failed' fp.close() if __name__ == '__main__': main() #Flag1 = "127.0.0.1" #Flag2 = password.strip() #Flag3 = 3306 #Flag4 = self.user
分析赛题:
赛题主要是考察了类的传参和读写文件时候的去除换行符
代码是分析赛题后构思实现, 因为是自己想到哪写到那,哪里不会百度哪里,就出了一堆BUG~~MMP
函数:
0.printBanner()打印出banenr信息 没什么卵用
1.sqlConnect()核心函数,使用pymysql库连接mysql数据库,这里需要注意下端口是int,还有一点是使用connect函数的时候,如果要指定端口,最好写成host=szhost,port=szport,这种=号的传参方式
mysql密码错误抛出的异常是
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'192.168.64.130' (using password:YES)")
我用了 "1045" in "抛出的异常" 来判断是否是密码错误,绝对不能直接except出去,因为这个函数会抛出很多异常,比如端口连接失败.连接成功后我执行了一条sql语句用来查询数据库的版本 对~这条语句也会抛出异常 但是这个我没有except~毕竟是个玩具写的老累了.我换了另一种方式,只要是1045错误的异常我都判断成密码认证错误,如果是其他的异常就完整打印出来信息,如果说用户体验什么的话·的确一堆乱七八糟的异常信息会让人很不舒服,但~这是个玩具~~~这样我查错就更方便了..
2.connectTest()连接mysql之前首先判断端口是否能连接
代码逻辑:
参数检查:
0.检查-i和-d后是否带参数 False=》exit() print(help) True=> 去 1
1.检查-p后是否带参数,False=》使用默认的3306端口 True =》使用指定的端口
2.使用connectTest函数检查目标端口是否开放 False =》exit() print("端口未开放") True => 去3
3.检查字典文件是否存在 False=》exit() print("字典文件无法打开") True=>去4
4.打开字典文件
5.用for in 递归字典文件代码每一行 赋值给另一个变量 这个变量作为密码传进sqlconnect函数
#!/usr/bin/python3 import pymysql import os import optparse import socket import sys import time import threading count = 0 def printBanner(): banner = ''' _____ _ _ ____ _ __ __ ____ ______ ___ _ | ___| | | |/ ___| |/ / | / / / ___| / _ | | | |_ | | | | | | ' /_____| |/| | V /\___ | | | | | | _| | |_| | |___| . \_____| | | | | | ___) | |_| | |___ |_| \___/ \____|_|\_ |_| |_| |_| |____/ \__\_\_____| v1.0 R4bbit''' print("