python - 我怎样才能加快我的蛮力攻击?
问题描述
我想加快我的蛮力代码以加快进程,因为它会在两秒钟内检查密码
import requests
import colorama
from colorama import Fore
colorama.init()
print(Fore.CYAN)
username = input("[/] Enter Username: ")
def login(pwd):
r = requests.get("https://domain.test.com/login/actions.php?action=0000&login="+username+"&password="+pwd)
if "INCORRECT PASS" in r.text:
return True
return False
i = 100
while i < 9999:
pwd = "%04d"%i
print(Fore.RED + "[-] Password invalid: %s"%pwd)
try:
if login(pwd):
print(Fore.GREEN + "[+] PASSWORD CRACKED: %s"%pwd)
break
except:
pass
i+=1
解决方案
拦截器 #1:顺序请求
因此,在您当前的设置中:
- 一次将一个密码发送到服务器
- 在发送下一个响应之前等待一个响应
使用像您这样的模块,time
您可以查看等待服务器响应所花费的 CPU 时间,以及每个循环中的其他内容以确定您的占空比(工作/与等待时间,每个循环)。如果您的占空比为 20%(即 1 毫秒工作,4 毫秒等待),那么您应该能够轻松运行 5 个并行请求。
Blocker #2:单核操作
如果您通过并行等待多个请求使您的 CPU[核心] 饱和,并且您有一个多核 CPU(例如 4 个核心或nc=4
),那么您应该能够nc-1 = 3
并行处理 3 倍( )的请求。(请参阅我的另一篇文章,了解为什么您不能只使用 1000 个线程并期望性能提高 1000 倍:https ://stackoverflow.com/a/68667749/10761353 )
障碍#3:服务器容量
您的服务器每秒只能响应一定数量的请求。因此,即使您的 PC(例如,具有 4 个内核,因此3 cores x 5 threads/core = 15 threads
)并行发出许多请求,服务器也可能只能处理(例如)10 个请求/秒,在这种情况下,您可能会:
- 消耗所有可用的 [server] 响应资源,
- 在每 15 个请求/秒中收到(例如)5 个以上的某种错误,
- 提高他们的使用费用(可能),
- 排除合法用户访问页面/站点,以及
- 触发滥用保护/监控,这让我想到了最后一点
障碍#4:滥用预防措施/系统
公司喜欢为他们的客户服务——这通常是他们赚钱的方式。当合法用户由于拒绝服务 (DoS) 攻击(无论是尝试暴力破解/猜测密码,还是只是滋扰)而无法进入时,公司自然不会意识到这一点并想要阻止它(听说过名为 Cloudflare 的小初创公司?)。措施包括:
- 当流量模式变得可疑时,除了密码之外还需要验证码
- 来自发出过多请求的 IP 的请求减慢/丢弃
- 阻止/禁止来自过去发出过多请求的 IP 的访问
- 登录尝试失败次数过多后锁定用户帐户
- 还有很多很多。
TL;博士
- 当你的任务有很多等待时间,或者你有一个多核 CPU 时,多线程对于并行化很有用——现在大多数都是这样)
- 在 2021 年,暴力破解基于 Web 的服务并不实用(而且绝对不是好网民的标志)
- 使用强大的 GPU 可以大大加速密码哈希的暴力破解,从而有效地将站点的操作保护排除在猜测循环之外。
推荐阅读
- xcode - 升级到 MacOS Mojave 后无法使用自制软件安装 Python 库
- angular - 如何在 Ngrx 中将值传递给 Effect - Angular
- python - 从可以在新类/窗口中使用的按钮获取价值
- libgdx - Libgdx Box2D 夹具既是传感器又是非传感器?
- python - 如何在文件中写入“\b”字符?
- python - 如何回调 __init__() 方法以重绘起始小部件
- android - ArFragment 只显示闪烁的屏幕
- python - 将 2d 矩阵转换为单行 DataFrame,同时将元素保持为整数
- .net-core - 无法从 Axios (vue-nuxt) 将文件发送到 .net 核心 API
- java - 使用多个选项框过滤 JavaFX 中的列表视图