Created
November 26, 2023 22:09
-
-
Save Wind010/fc61915b544d8457ff0af8daf00cd93d to your computer and use it in GitHub Desktop.
Databricks Notebook for Hashcat
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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