0. 写在前面
在进行渗透测试工作时,我发现在某个场景下,需要了解当前硬件能力在爆破8字节密码的耗时。
这不正巧买了块4070tis,用它来试试爆破密码的能力。
1. gpu components install
首先搞定显卡的部分
在装显卡时,我们需要明确一下概念:
1、 显卡:实际的物理设备
2、 显卡驱动: 让操作系统能够与显卡进行交互的桥梁
3、 cuda toolkits: 类似于一系列c语言的库和编译器,这里指的是通过编程的方法来操控显卡的一系列库、工具以及编译器(指的是nvcc)
1.1 显卡
物理设备就需要靠你自己买了,我买的是4070tis,你买什么你自己看着办(😀
买了就装上去,我这里遇到一个坑是机器识别不到显卡。这个问题我询问客服后的解决办法是关闭电源,重新拔插显卡相关的电源线,重启后就解决了
1.2 显卡驱动
请到invidia官网下载显卡驱动https://www.nvidia.cn/geforce/drivers/
一般会有两种类型的驱动:GeForce Game Ready 驱动程序 - WHQL和 NVIDIA Studio 驱动程序 - WHQL
如果还要兼顾玩游戏建议选前者
1.3 cuda toolkits
装完显卡驱动后,可以通过命令行执行nvidia-smi
来查看当前的cuda driver
版本
注意:cuda driver版本是后向兼容(向过去兼容)的,这意味着我们安装的cuda toolkits只要版本 小于等于12.7 都是可以用的
接下来我们需要去英伟达官网下载cuda toolkits
https://developer.nvidia.com/cuda-downloads
下载并执行cuda toolkits
时,安装程序会提醒你先安装visual studio
,这边也建议你提前安装好
安装完visual studio
再安装cuda toolkits
后,在命令行尝试输入nvcc --version
安装成功
2. hashcat bruteforce
2.1 hashcat install
前往官网https://hashcat.net/hashcat/下载即插即用的hashcat程序
为确保先前的工作都成功了,可以在命令行运行.\hashcat.exe -I
,如果出现以下情况,说明安装成功:
2.2 hashcat 用法
接下来就到了hashcat的用法教学了!
首先,可以运行./hashcat.exe --help
来查看所有参数相关的教学:
2.2.1 爆破sha256
from hashlib import sha256
password = b"123456"
password_sha256 = sha256(password).hexdigest()
print("sha256:",password_sha256)
# sha256: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
生成了sha256后,执行如下命令:
.\hashcat.exe -a 3 -w 3 -m 1400 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 ?a?a?a?a?a?a
-a 3 表示暴力破解
-w 3 启用特定的工作负载配置文件
-m 1400 爆破的模式,1400说明爆破sha256
hash
?a?a?a?a?a?a: 表示爆破的密码的信息,这里就表示6个字节的可见字符
爆破成功,GPU爆破比我想象的还牛
2.2.2 爆破pbkdf2
from hashlib import pbkdf2_hmac
import base64
password = b"just?@12"
salt = b"wsxkwsxk"
print(base64.b64encode(salt))
hash_val = pbkdf2_hmac("sha256",password,salt,10000,32)
print(base64.b64encode(hash_val))
# print(hash_val.hex())
# print(salt.hex())
# b'd3N4a3dzeGs='
# b'XFRNdKjaNjsUanI/llJElv8WjlmWvGsVSdDE3+9WjPo='
爆破pbkdf2有点狗屎,需要用base64形式,命令格式如下:
.\hashcat.exe -a 3 -w 3 -m 10900 sha256:10000:d3N4a3dzeGs=:XFRNdKjaNjsUanI/llJElv8WjlmWvGsVSdDE3+9WjPo= ?a?a?a?a?a?a?a?a
sha256表示用的哈希
10000表示迭代10000次
d3N4a3dzeGs=表示salt的base64编码
XFRNdKjaNjsUanI/llJElv8WjlmWvGsVSdDE3+9WjPo=表示hash的base64编码
3. pwntools.pwnlib.util.iters.bruteforce
如果没有GPU,可以用CPU多线程来尝试爆破,pwntools提供了一个很好的函数。
from pwn import *
from pwnlib.util.iters import bruteforce
# print(p64(0x4012D6))
# define charset
charset = string.printable
print(charset)
# pause()
encrypt = b"wsx"
def func(x):
return x.encode() == encrypt
#decrypt = bruteforce(lambda x: x==encrypt,charset,length=3,method='fixed')
decrypt = bruteforce(func,charset,length=3,method='fixed')
print(decrypt)