-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2f6cef2
commit af78ce4
Showing
3 changed files
with
195 additions
and
2 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
+++ | ||
title = "316 CTF" | ||
date = 2024-09-02 | ||
authors = ["Achintya Jai"] | ||
+++ | ||
|
||
# 316 CTF writeup | ||
|
||
challenges over at: https://316ctf.com/ | ||
|
||
#### This CTF challenge requires you do a lot of hashcracking. The way you would generally approach this is using | ||
|
||
1. John the ripper | ||
2. Hashcat | ||
|
||
But an unconventional approach would be to use this python script and let it run overnight. This will solve all the problems for you. | ||
|
||
Note: Works on linux machines. Run this bash script first to install the necessary dependencies | ||
|
||
#!/bin/bash | ||
|
||
error_exit() { | ||
echo "$1" 1>&2 | ||
exit 1 | ||
} | ||
|
||
# Check if pip is installed | ||
if ! command -v pip &> /dev/null | ||
then | ||
error_exit "pip could not be found. Please install pip first." | ||
fi | ||
|
||
# Check if Selenium is already installed | ||
if pip show selenium &> /dev/null | ||
then | ||
echo "Selenium is already installed." | ||
fi | ||
|
||
echo "Installing Selenium..." | ||
if pip install selenium | ||
then | ||
echo "Selenium installed successfully." | ||
else | ||
error_exit "There was an issue installing Selenium. Check the traceback above for details." | ||
fi | ||
|
||
CHROMEDRIVER_URL="https://storage.googleapis.com/chrome-for-testing-public/127.0.6533.72/linux64/chromedriver-linux64.zip" | ||
DESTINATION_DIR="$HOME/Desktop" | ||
|
||
TEMP_DIR=$(mktemp -d) | ||
|
||
if ! command -v curl &> /dev/null | ||
then | ||
error_exit "curl could not be found. Please install curl first." | ||
fi | ||
|
||
if ! command -v unzip &> /dev/null | ||
then | ||
error_exit "unzip could not be found. Please install unzip first." | ||
fi | ||
|
||
echo "Downloading ChromeDriver..." | ||
if curl -L "$CHROMEDRIVER_URL" -o "$TEMP_DIR/chromedriver.zip" | ||
then | ||
echo "Download complete." | ||
else | ||
error_exit "Failed to download ChromeDriver." | ||
fi | ||
|
||
echo "Unzipping ChromeDriver..." | ||
if unzip "$TEMP_DIR/chromedriver.zip" -d "$TEMP_DIR" | ||
then | ||
echo "Unzipping complete." | ||
else | ||
error_exit "Failed to unzip ChromeDriver." | ||
fi | ||
|
||
if mv "$TEMP_DIR/chromedriver-linux64/chromedriver" "$DESTINATION_DIR" | ||
then | ||
echo "ChromeDriver moved to $DESTINATION_DIR." | ||
else | ||
error_exit "Failed to move ChromeDriver to $DESTINATION_DIR." | ||
fi | ||
|
||
rm -rf "$TEMP_DIR" | ||
|
||
echo "ChromeDriver installation completed successfully." | ||
|
||
# URL of the latest Google Chrome for Linux | ||
|
||
DESTINATION_DIR="/opt/google/chrome" | ||
|
||
TEMP_DIR=$(mktemp -d) | ||
|
||
# Ask the user if they have Google Chrome installed | ||
read -p "Do you already have Google Chrome installed? (Y/N): " has_chrome | ||
|
||
if [[ "$has_chrome" =~ ^[Yy]$ ]] | ||
then | ||
echo "You already have Google Chrome installed. Exiting the script." | ||
exit 0 | ||
fi | ||
|
||
echo "Downloading Google Chrome..." | ||
if wget -q -O google-chrome-stable_current_amd64.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb | ||
then | ||
echo "Download complete." | ||
else | ||
error_exit "Failed to download Google Chrome." | ||
fi | ||
echo "Following requires your sudo password" | ||
sudo dpkg -i google-chrome-stable_current_amd64.deb | ||
|
||
echo "Google Chrome installation completed successfully." | ||
|
||
|
||
Make sure you say "N" to having chrome. This is because it requires the specific version which you may not have. After this you can run this python script. | ||
|
||
Just make sure to enter your **email address** and **password** in the script for a smooth login. | ||
|
||
#!/usr/bin/env python3 | ||
|
||
import time | ||
from selenium import webdriver | ||
from selenium.webdriver.common.by import By | ||
from bs4 import BeautifulSoup | ||
from selenium.webdriver.support.ui import WebDriverWait | ||
from selenium.webdriver.support import expected_conditions as EC | ||
from selenium.common.exceptions import TimeoutException | ||
|
||
print('wait...') | ||
home_directory = os.path.expanduser("~") | ||
file_path = os.path.join(home_directory, "Desktop" , "chromedriver") | ||
service = webdriver.ChromeService(executable_path= file_path) # path to chromedriver executable | ||
driver = webdriver.Chrome(service = service) | ||
|
||
email = '' | ||
password = '' | ||
|
||
login_url = f'https://play.316ctf.com/login' | ||
driver.get(login_url) | ||
driver.find_element(By.NAME,'name').send_keys(email) | ||
driver.find_element(By.NAME,'password').send_keys(password) | ||
driver.find_element(By.NAME, "_submit").click() | ||
|
||
def open_file(file_path): | ||
with open(file_path,'r') as fp: | ||
possible_passwords = fp.readlines() | ||
return possible_passwords | ||
|
||
file_path = r'/home/.../dictionary-list.txt' # path to dictionary list | ||
possible_passwords = open_file(file_path) | ||
|
||
def start_page(): | ||
challenge_url = 'https://play.316ctf.com/challenges#Huntsville%20#1-121' | ||
driver.get(challenge_url) | ||
delay = 3 #seconds | ||
try: | ||
myElem = WebDriverWait(driver,delay).until(EC.presence_of_element_located((By.ID, 'challenge-input'))) | ||
except TimeoutException: | ||
print('page took too long') | ||
|
||
start_page() | ||
|
||
for password in possible_passwords: | ||
possible_answer = password | ||
driver.find_element(By.ID, 'challenge-input').send_keys(possible_answer) | ||
driver.find_element(By.ID, 'challenge-submit').click() | ||
time.sleep(0.9) | ||
result = driver.find_element(By.ID, 'result-message').text | ||
if result == 'correct': | ||
print(f'GOT IT: {password}') | ||
break | ||
elif result == "You're submitting flags too fast. Slow down.": | ||
print(f'too fast: {password}') | ||
driver.refresh() | ||
start_page() | ||
time.sleep(5) | ||
else: | ||
print(f'WRONG: {password}') | ||
answer_field = driver.find_element(By.ID, 'challenge-input') | ||
answer_field.clear() | ||
time.sleep(1) | ||
|
||
If you want to go the more traditional way then the following would help you | ||
|
||
hashcat -m 0 -a 0 hash.txt dictionary-list.txt --show | ||
|
||
Just run | ||
|
||
hashcat --help | ||
to understand the possible things this boy can do. |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,4 +6,3 @@ sort_by = "date" | |
page_template = "blog-page.html" | ||
redirect_to = "writeups/RVCExIITBFinals/writeup" | ||
+++ | ||
|
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