Skip to content

Instantly share code, notes, and snippets.

@Wind010
Created November 26, 2023 22:09
Show Gist options
  • Save Wind010/fc61915b544d8457ff0af8daf00cd93d to your computer and use it in GitHub Desktop.
Save Wind010/fc61915b544d8457ff0af8daf00cd93d to your computer and use it in GitHub Desktop.
Databricks Notebook for Hashcat
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "d763820b-c33b-4c63-a3e3-86f10770af4a",
"showTitle": false,
"title": ""
}
},
"source": [
"#Hashcat\n",
"Password cracking using Spark cluster"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "0ed64b17-ec3f-4c2f-adf3-a3244346d659",
"showTitle": false,
"title": ""
}
},
"source": [
"### Preparation\n",
"Install dependencies"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "02d48eea-6268-4327-9257-6ab9c642363d",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"mkdir -p ~/git\n",
"mkdir -p ~/wordlists\n",
"\n",
"#--force-confnew\n",
"#apt --yes --allow -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\" upgrade\n",
"\n",
"# 7zip packages\n",
"#apt update # && apt upgrade -y\n",
"#apt autoremove\n",
"\n",
"#apt -y --fix-broken install\n",
"\n",
"apt update\n",
"apt install -y p7zip-full p7zip-rar"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "3c30234d-7219-4643-b7b6-b4dc22825a95",
"showTitle": false,
"title": ""
}
},
"source": [
"##### HCXTOOLs"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "f6ea0331-1759-44a7-8ead-a5251412c2d2",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"# Install dependencies (mostly for building).\n",
"apt install -y libcurl4-openssl-dev libssl-dev zlib1g-dev libpcap-dev pkg-config"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "3c109088-ca36-4ef4-bcb9-abb410b9e6a4",
"showTitle": false,
"title": ""
}
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
"--2023-09-11 23:36:56-- http://http.kali.org/kali/pool/main/k/kali-archive-keyring/kali-archive-keyring_2022.1_all.deb\nResolving http.kali.org (http.kali.org)... 192.99.200.113\nConnecting to http.kali.org (http.kali.org)|192.99.200.113|:80... connected.\nHTTP request sent, awaiting response... 302 Found\nLocation: http://mirrors.ocf.berkeley.edu/kali/pool/main/k/kali-archive-keyring/kali-archive-keyring_2022.1_all.deb [following]\n--2023-09-11 23:36:56-- http://mirrors.ocf.berkeley.edu/kali/pool/main/k/kali-archive-keyring/kali-archive-keyring_2022.1_all.deb\nResolving mirrors.ocf.berkeley.edu (mirrors.ocf.berkeley.edu)... 169.229.200.70, 2607:f140:0:32::70\nConnecting to mirrors.ocf.berkeley.edu (mirrors.ocf.berkeley.edu)|169.229.200.70|:80... connected.\nHTTP request sent, awaiting response... 200 OK\nLength: 5140 (5.0K) [application/octet-stream]\nSaving to: ‘kali-archive-keyring_2022.1_all.deb’\n\n 0K ..... 100% 591M=0s\n\n2023-09-11 23:36:57 (591 MB/s) - ‘kali-archive-keyring_2022.1_all.deb’ saved [5140/5140]\n\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Selecting previously unselected package kali-archive-keyring.\n(Reading database ... 101143 files and directories currently installed.)\nPreparing to unpack kali-archive-keyring_2022.1_all.deb ...\nUnpacking kali-archive-keyring (2022.1) ...\nSetting up kali-archive-keyring (2022.1) ...\nInstalled kali-archive-keyring as a trusted APT keyring.\n"
]
}
],
"source": [
"%sh\n",
"# Add the Kali key ring since we want to install HCXTOOLS from main Kali package repository\n",
"cd ~\n",
"wget http://http.kali.org/kali/pool/main/k/kali-archive-keyring/kali-archive-keyring_2022.1_all.deb\n",
"# install\n",
"sudo dpkg -i kali-archive-keyring_2022.1_all.deb\n",
"# remove downloaded file again\n",
"rm kali-archive-keyring_2022.1_all.deb"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "fe312d4e-2545-4d34-90d5-b09f8f1da717",
"showTitle": false,
"title": ""
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"zulu-openjdk.list\n"
]
}
],
"source": [
"%sh \n",
"# Add the main Kali repository\n",
"ls /etc/apt/sources.list.d\n",
"echo \"deb http://http.kali.org/kali kali-rolling main contrib non-free\" > /etc/apt/sources.list.d/kali.list"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "eee2d5c1-db05-4e6e-a211-751654c47b37",
"showTitle": false,
"title": ""
}
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
"\nWARNING: apt does not have a stable CLI interface. Use with caution in scripts.\n\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Hit:1 https://repos.azul.com/zulu/deb stable InRelease\nHit:2 http://security.ubuntu.com/ubuntu jammy-security InRelease\nGet:3 http://mirrors.ocf.berkeley.edu/kali kali-rolling InRelease [41.2 kB]\nHit:4 http://archive.ubuntu.com/ubuntu jammy InRelease\nGet:5 http://mirrors.ocf.berkeley.edu/kali kali-rolling/contrib amd64 Packages [116 kB]\nHit:6 http://archive.ubuntu.com/ubuntu jammy-updates InRelease\nGet:7 http://mirrors.ocf.berkeley.edu/kali kali-rolling/non-free amd64 Packages [218 kB]\nGet:8 http://mirrors.ocf.berkeley.edu/kali kali-rolling/main amd64 Packages [19.3 MB]\nHit:9 http://archive.ubuntu.com/ubuntu jammy-backports InRelease\nFetched 19.7 MB in 2s (10.9 MB/s)\nReading package lists...\nBuilding dependency tree...\nReading state information...\n746 packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
"W: https://repos.azul.com/zulu/deb/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.\n\nWARNING: apt does not have a stable CLI interface. Use with caution in scripts.\n\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Reading package lists...\nBuilding dependency tree...\nReading state information...\nThe following additional packages will be installed:\n hcxdumptool ieee-data\nThe following NEW packages will be installed:\n hcxdumptool hcxtools ieee-data\n0 upgraded, 3 newly installed, 0 to remove and 746 not upgraded.\nNeed to get 2280 kB of archives.\nAfter this operation, 14.5 MB of additional disk space will be used.\nGet:1 http://mirrors.ocf.berkeley.edu/kali kali-rolling/main amd64 hcxdumptool amd64 6.3.1-1 [75.6 kB]\nGet:2 http://mirrors.ocf.berkeley.edu/kali kali-rolling/main amd64 ieee-data all 20220827.1 [2029 kB]\nGet:3 http://mirrors.ocf.berkeley.edu/kali kali-rolling/main amd64 hcxtools amd64 6.2.7-2 [175 kB]\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
"debconf: delaying package configuration, since apt-utils is not installed\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Fetched 2280 kB in 1s (3359 kB/s)\nSelecting previously unselected package hcxdumptool.\r\n(Reading database ... \r(Reading database ... 5%\r(Reading database ... 10%\r(Reading database ... 15%\r(Reading database ... 20%\r(Reading database ... 25%\r(Reading database ... 30%\r(Reading database ... 35%\r(Reading database ... 40%\r(Reading database ... 45%\r(Reading database ... 50%\r(Reading database ... 55%\r(Reading database ... 60%\r(Reading database ... 65%\r(Reading database ... 70%\r(Reading database ... 75%\r(Reading database ... 80%\r(Reading database ... 85%\r(Reading database ... 90%\r(Reading database ... 95%\r(Reading database ... 100%\r(Reading database ... 101147 files and directories currently installed.)\r\nPreparing to unpack .../hcxdumptool_6.3.1-1_amd64.deb ...\r\nUnpacking hcxdumptool (6.3.1-1) ...\r\nSelecting previously unselected package ieee-data.\r\nPreparing to unpack .../ieee-data_20220827.1_all.deb ...\r\nUnpacking ieee-data (20220827.1) ...\r\nSelecting previously unselected package hcxtools.\r\nPreparing to unpack .../hcxtools_6.2.7-2_amd64.deb ...\r\nUnpacking hcxtools (6.2.7-2) ...\r\nSetting up hcxdumptool (6.3.1-1) ...\r\nSetting up ieee-data (20220827.1) ...\r\nSetting up hcxtools (6.2.7-2) ...\r\nProcessing triggers for man-db (2.10.2-1) ...\r\n"
]
}
],
"source": [
"%sh\n",
"# Actually install hcxtools\n",
"cd ~\n",
"apt update\n",
"apt -y install hcxtools"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "74697f92-fa1d-447f-9b82-d2b5f6e44f56",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"\n",
"# If we wanted to build hcxtools from source. Currently not detecting availables header files in /usr/include/openssl\n",
"# Downloading releases from repository does not contain the binaries.\n",
"\n",
"# mkdir -p ~/git\n",
"# cd ~/git\n",
"# git clone https://github.com/ZerBea/hcxtools.git\n",
"# cd hcxtools\n",
"\n",
"# make\n",
"# make install /usr/local/bin"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "e8530689-b63f-4588-8a33-7d42887484bf",
"showTitle": false,
"title": ""
}
},
"source": [
"##### Wordlists"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "9c2327a1-e44e-469c-9929-4b5b7bc49a18",
"showTitle": false,
"title": ""
}
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
" % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\n"
]
}
],
"source": [
"%sh\n",
"curl https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt -o ~/wordlists/rockyou.txt"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "377a3edc-cc3c-4b42-ae39-512f4c13f4f7",
"showTitle": false,
"title": ""
}
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
"hint: Using 'master' as the name for the initial branch. This default branch name\nhint: is subject to change. To configure the initial branch name to use in all\nhint: of your new repositories, which will suppress this warning, call:\nhint: \nhint: \tgit config --global init.defaultBranch <name>\nhint: \nhint: Names commonly chosen instead of 'master' are 'main', 'trunk' and\nhint: 'development'. The just-created branch can be renamed via this command:\nhint: \nhint: \tgit branch -m <name>\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Initialized empty Git repository in /root/git/SecLists/.git/\nUpdating origin\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
"From https://github.com/danielmiessler/SecLists\n * [new branch] master -> origin/master\n * [new tag] 1.2 -> 1.2\n * [new tag] 1.3 -> 1.3\n * [new tag] 2018.2 -> 2018.2\n * [new tag] 2018.3 -> 2018.3\n * [new tag] 2019.1 -> 2019.1\n * [new tag] 2019.2 -> 2019.2\n * [new tag] 2019.3 -> 2019.3\n * [new tag] 2019.4 -> 2019.4\n * [new tag] 2020.1 -> 2020.1\n * [new tag] 2020.2 -> 2020.2\n * [new tag] 2020.3 -> 2020.3\n * [new tag] 2021.1 -> 2021.1\n * [new tag] 2021.2 -> 2021.2\n * [new tag] 2021.3.1 -> 2021.3.1\n * [new tag] 2021.4 -> 2021.4\n * [new tag] 2022.1 -> 2022.1\n * [new tag] 2022.2 -> 2022.2\n * [new tag] 2022.3 -> 2022.3\n * [new tag] 2022.4 -> 2022.4\n * [new tag] 2023.1 -> 2023.1\n * [new tag] 2023.2 -> 2023.2\n * [new tag] 2023.3 -> 2023.3\nFrom https://github.com/danielmiessler/SecLists\n * branch master -> FETCH_HEAD\n"
]
}
],
"source": [
"%sh\n",
"mkdir -p ~/git\n",
"cd ~/git\n",
"\n",
"# Clone partial SecLists repository \n",
"mkdir -p SecLists\n",
"cd SecLists\n",
"git init\n",
"git remote add -f origin https://github.com/danielmiessler/SecLists.git\n",
"\n",
"git config --global init.defaultBranch master\n",
"git config core.sparseCheckout true\n",
"\n",
"echo \"Passwords/WiFi-WPA\" >> .git/info/sparse-checkout\n",
"\n",
"git pull origin master\n",
"\n",
"cp ~/git/SecLists/Passwords/WiFi-WPA/* ~/wordlists/."
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "8db726bd-e1c3-4b14-b9f2-743c9ad351d0",
"showTitle": false,
"title": ""
}
},
"source": [
"##### Handshakes\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "e21dde45-6df7-4014-bdec-c89b0c7a978d",
"showTitle": false,
"title": ""
}
},
"source": [
"It's expected that the handshakes are available either through mounted storage or downloadable from internet.\n",
"```sh\n",
"curl -s https://pastebin.com/raw/2p30yvKz -o handshakes.txt\n",
"\n",
"cat handshakes.txt | base64-d > handshakes.rar\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "f635339c-c2d5-4dd9-885d-e39e0ae45a57",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"base64 -d <<< \"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\" > /tmp/image.png\n",
"\n",
"base64 -d <<< \"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\" > /tmp/hashcat.png"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "6c924df5-b7a1-4f7f-98c3-3e8c252900ff",
"showTitle": false,
"title": ""
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n"
},
"metadata": {
"application/vnd.databricks.v1+output": {
"addedWidgets": {},
"arguments": {},
"data": "data:image/png;base64,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\n",
"datasetInfos": [],
"metadata": {},
"removedWidgets": [],
"type": "image"
}
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt \n",
"import matplotlib.image as mpimg \n",
"img = mpimg.imread('/tmp/hashcat.png') \n",
"imgplot = plt.imshow(img)\n",
"\n",
"# displayHTML(\"<img src ='/tmp/image.png'>\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "118f6242-f96e-41f9-b6f1-4d94cb189767",
"showTitle": false,
"title": ""
}
},
"source": [
"Just using `base64` in shell won't finish or takes too long for large strings. Python string to bytes and writing to file works better:"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "848d4068-17c8-46d0-8c34-b58a471e512d",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"import base64\n",
"\n",
"# RAR in this case.\n",
"handshakes = \"\"\"BASE64_ENCODED_ARCHIVE_OF_HANDSHAKES\"\"\"\n",
"\n",
"decoded_bytes = base64.b64decode(handshakes)\n",
"\n",
"with open(\"/tmp/handshakes.rar\", \"wb\") as text_file:\n",
" text_file.write(decoded_bytes)"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "b0251a49-eb25-4b16-820b-d8870edef5c8",
"showTitle": false,
"title": ""
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Rserv\nRtmp90OFwy\nchauffeur-daemon-params\nchauffeur-daemon.pid\nchauffeur-env.sh\ncustom-spark.conf\ndriver-daemon-params\ndriver-daemon.pid\ndriver-env.sh\nhandshakes.rar\nhsperfdata_root\npython_lsp_logs\nsystemd-private-a3ec11bacda04452bc30d7f2116d751a-systemd-logind.service-AGJGud\nsystemd-private-a3ec11bacda04452bc30d7f2116d751a-systemd-resolved.service-4KGh6x\ntmp.M3HQ4nd5r9\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
"bash: line 2: 7z: command not found\n"
]
}
],
"source": [
"%sh\n",
"ls /tmp/\n",
"7z x /tmp/handshakes.rar -o/root"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "c4fb52c6-449a-4c8a-b346-9d6608952dae",
"showTitle": false,
"title": ""
}
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
"bash: line 3: hcxpcapngtool: command not found\n"
]
}
],
"source": [
"%sh\n",
"cd ~\n",
"# Also outputthe ESSIDs as a wordlist with -E\n",
"hcxpcapngtool ~/handshakes/*.pcap -o handshakes.hc22000 -E ~/wordlists/essid.wordlist"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "3ce2e28e-5a39-4b37-a98f-5752dda4881c",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"ls .\n",
"# cat essid.wordlist\n",
"\n",
"# If output is truncated due to size of file, check the drier logs.\n",
"cat handshakes.hc22000"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "f83d55ce-a4a6-461f-9d70-fdd5ccc613db",
"showTitle": false,
"title": ""
}
},
"source": [
"### Hashcat\n",
"Chose one option below. Installation with APT is recommended unless you need to build directly from source for a feature branch."
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "d0d4315e-4a96-4d40-bfd9-62afcd2543d2",
"showTitle": false,
"title": ""
}
},
"source": [
"#### Install with APT"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "1d8d3e4f-5d77-4ad1-bedd-22764cc2b00f",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"apt -y --fix-broken install"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "9aa8da15-3cbd-4dd3-b983-f94454238d34",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"#dpkg --configure -a\n",
"apt install --fix-missing -y hashcat"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "10788f60-8465-4298-b79f-7dfc1cc85598",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"apt -y autoremove\n",
"apt install -y hashcat-data hashcat-nvidia libxmlsec1-dev "
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "81515f32-7224-494a-9312-065b9c2fa55b",
"showTitle": false,
"title": ""
}
},
"source": [
"#### Install Cuda\n",
"TODO: \n",
"\n",
"https://docs.nvidia.com/cuda/archive/10.2/cuda-installation-guide-linux/index.html\n",
"\n",
"```sh\n",
"Perform the pre-installation actions.\n",
"Install repository meta-data\n",
"$ sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb\n",
"Installing the CUDA public GPG key\n",
"When installing using the local repo:\n",
"\n",
"$ sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub\n",
"When installing using network repo on Ubuntu 18.04/18.10:\n",
"\n",
"$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/<distro>/<architecture>/7fa2af80.pub\n",
"When installing using network repo on Ubuntu 16.04:\n",
"\n",
"$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/<distro>/<architecture>/7fa2af80.pub\n",
"Update the Apt repository cache\n",
"$ sudo apt-get update\n",
"Install CUDA\n",
"$ sudo apt-get install cuda\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "28374745-0931-489c-b2de-03a5189fc247",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"apt install -y build-essential linux-headers-$(uname -r)"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "b795054e-8dda-4053-b640-92a04cc0ffba",
"showTitle": false,
"title": ""
}
},
"source": [
"Save time using David Bombal's links to NVIDIA repos"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "46c9cc50-450e-445a-98fc-05e1bf75b150",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"curl https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin -o cuda-ubuntu2204.pin \n",
"\n",
"mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 "
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "ea116641-dde7-4604-9412-25e11b1ea41a",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"curl https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda-repo-ubuntu2204-12-0-local_12.0.0-525.60.13-1_amd64.deb -o cuda-repo-ubuntu2204-12-0-local_12.0.0-525.60.13-1_amd64.deb\n"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "e6d83718-1985-4fff-b743-4091f5a3c19f",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"dpkg -i cuda-repo-ubuntu2204-12-0-local_12.0.0-525.60.13-1_amd64.deb\n",
"cp /var/cuda-repo-ubuntu2204-12-0-local/cuda-*-keyring.gpg /usr/share/keyrings/"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "e06eca41-e641-4e99-9cac-3bcc1127abf2",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"apt update\n",
"apt install -y --fix-broken cuda"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "cc20cf8b-4d70-438c-8ff2-66fb549f391e",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"\n",
"#rm -rf /usr/lib/x86_64-linux-gnu/dri/i915_dri.so\n",
"\n",
"#dpkg -i --force-overwrite /var/cache/apt/archives/libgl1-mesa-dri_23.1.6-1_amd64.deb\n",
"\n",
"apt -o Dpkg::Options::=\"--force-overwrite\" -y --fix-broken install\n",
"\n",
"\n",
"\n",
"#apt remove --purge 'nvidia-.*'\n",
"#dpkg -l | grep nvidia\n"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "ddb6e097-c0a4-463b-aaed-127a3b229e17",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"hashcat -I"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "e30b8e96-bf1d-4d82-a553-ef3b766f3c35",
"showTitle": false,
"title": ""
}
},
"source": [
"#### Download from Github"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "c81dab19-c595-40fd-94ff-f3a3f3b2356f",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"mkdir -p ~/hashcat\n",
"cd ~/hashcat\n",
"curl -L https://github.com/hashcat/hashcat/releases/download/v6.2.6/hashcat-6.2.6.7z --output hashcat.7z\n",
"ls -la ."
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "b32ff3f1-6c0e-45ca-8f6e-458dc90db520",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~/hashcat\n",
"7z x hashcat.7z -y\n",
"mv $(find . -type d -name \"hashcat*\") hashcat\n",
"cd ~/hashcat\n",
"mv hashcat/* .\n",
"#rm hashcat.7z"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "553662d2-f5bb-45d5-b9e2-d268da11541d",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~/hashcat\n",
"\n",
"./hashcat.bin -b"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "7c1a4356-0041-404b-9411-ad6a42eca8a3",
"showTitle": false,
"title": ""
}
},
"source": [
"#### Build Hashcat from Source"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "3f290649-e64d-4af7-b9cd-1b8d30582b02",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"mkdir -p git\n",
"cd git\n",
"sudo apt -y install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 make git\n",
"git clone https://github.com/hashcat/hashcat\n",
"git clone https://github.com/win-iconv/win-iconv\n",
"cd win-iconv/\n",
"patch < ../hashcat/tools/win-iconv-64.diff\n",
"sudo make install\n",
"cd ../\n",
"\n",
"cd hashcat/\n",
"make"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "ca22e833-928f-4ec3-ba19-69f13c0589b5",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~/git/hashcat\n",
"\n",
"./hashcat -h"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "7cb3a1de-d1a4-47b1-81af-d92a4333cd57",
"showTitle": false,
"title": ""
}
},
"source": [
"### Cracking\n",
"\n",
"Hashcat [exit codes](https://github.com/hashcat/hashcat/blob/master/docs/status_codes.txt)"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "bf63d3ef-1aae-4a74-a1d3-7005a3052ce9",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"hashcat -m 22000 --benchmark "
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "9af783aa-54f4-483f-a741-02975bb72f41",
"showTitle": false,
"title": ""
}
},
"source": [
"Use wordlists"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "e8e866a7-54a6-4a47-83dd-09fdba6dae24",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"# Try the ESSID wordlist\n",
"hashcat -m 22000 handshakes.hc22000 ~/wordlists/essid.wordlist || true"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "a6c550a1-2a5a-44d2-8059-0b1457763300",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"# Permutate the example wordlist and the essids with a ruleset\n",
"hashcat -m 22000 handshakes.hc22000 ~/wordlist/essid.wordlist -r /usr/share/hashcat/rules/best64.rule"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "79132f27-00ac-4f7c-9e5d-f8c58358cafe",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "3a046d1a-6828-4486-91c8-3784db5c7f5e",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"hashcat -m 22000 handshakes.hc22000 /usr/share/doc/hashcat-data/examples/example.dict"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "1e8b0275-b7e9-4eb0-acfa-9f2845fcfc46",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"# Try the ESSID wordlist\n",
"hashcat -m 22000 handshakes.hc22000 ~/git/SecLists/Passwords/WiFi-WPA/probable-v2-wpa-top4800.txt -r /usr/share/hashcat/rules/best64.rule || true"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "0d07f0f1-1168-436d-a7e5-ee7c64460162",
"showTitle": false,
"title": ""
}
},
"source": [
"Use brute force"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "f6ebb7e0-4175-49cc-b0e9-1507ec986a16",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"# Try all telephone numbers in your area code:\n",
"hashcat -m 22000 handshakes.hc22000 -a 3 ?d?d?d?d?d?d?d?d || true"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "9bd1368a-f0c4-4542-9ec9-07dc41dd5138",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"# Try all telephone numbers in your area code:\n",
"hashcat -m 22000 handshakes.hc22000 -a3 360?d?d?d?d?d?d?d || true"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "1b76c571-6949-4cef-9bbe-4b036e665189",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"# All letters upper and lowercase with digits.\n",
"hashcat -m 22000 handshakes.hc22000 -1 ?d?l?u -a 3 ?1?1?1?1?1?1?1?1?1?1 -d 6,7,8,9 -w 4 || true"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "e04648f4-c1b0-4d0e-bcf1-9173b40305d0",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd~\n",
"# Increment\n",
"hashcat -m 22000 handshakes.hc22000 --increment --increment-min 10 --increment-max 12 -1 ?d?l?u -a 3 ?1?1?1?1?1?1?1?1?1?1?1?1 -d 6,7,8,9 -w 4 || true"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "8545a69a-a2d8-4857-b883-4b0bc393ab5c",
"showTitle": false,
"title": ""
}
},
"source": [
"Show"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "634f6d05-366d-44bb-932e-d34ae234652d",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cd ~\n",
"hashcat -m 22000 handshakes.hc22000 --show"
]
},
{
"cell_type": "markdown",
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {},
"inputWidgets": {},
"nuid": "b0dcc2ed-6d50-4e18-85e9-0536ff0b70c2",
"showTitle": false,
"title": ""
}
},
"source": [
"#### Debug"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "4f659d56-52d7-46ad-be1b-160a795c2c40",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh \n",
"ps aux | grep -i apt"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "bb9155ff-4edd-4f07-ae5c-51f7200a198f",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh kill -9 "
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "0a00372f-b30a-4a79-bd14-bffe105cffe4",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"cat /etc/os-release\n",
"lsb_release -a\n",
"hostnamectl"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"inputWidgets": {},
"nuid": "3d1db7ac-b329-48eb-85bd-afffcb4fb236",
"showTitle": false,
"title": ""
}
},
"outputs": [],
"source": [
"%sh\n",
"nvidia-smi"
]
}
],
"metadata": {
"application/vnd.databricks.v1+notebook": {
"dashboards": [],
"language": "python",
"notebookMetadata": {
"mostRecentlyExecutedCommandWithImplicitDF": {
"commandId": 332817894964650,
"dataframes": [
"_sqldf"
]
},
"pythonIndentUnit": 2
},
"notebookName": "HC (1)",
"widgets": {}
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment