etc~ scripts and random things |
| git clone https://github.com/djnnvx/etc.git |
| log | files | refs | archive |
download-and-scan-js.sh (6893B)
1 #!/bin/bash 2 # Download and scan minified JavaScript from production website 3 4 set -e 5 6 # Configuration 7 WEBSITE_URL="${1:-https://djnn.sh}" 8 OUTPUT_DIR="/tmp/downloaded-js" 9 SCAN_RESULTS="/tmp/scan-results.txt" 10 11 # Colors 12 RED='\033[0;31m' 13 YELLOW='\033[1;33m' 14 GREEN='\033[0;32m' 15 BLUE='\033[0;34m' 16 NC='\033[0m' 17 18 mkdir -p "$OUTPUT_DIR" 19 rm -rf "$OUTPUT_DIR"/* 20 21 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" 22 echo "[+] Downloading JavaScript files..." 23 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" 24 echo "" 25 echo -e "${BLUE}Target:${NC} $WEBSITE_URL" 26 echo "" 27 28 echo "Fetching main page..." 29 MAIN_PAGE=$(curl -s -L "$WEBSITE_URL" || echo "") 30 31 if [ -z "$MAIN_PAGE" ]; then 32 echo -e "${RED}Failed to fetch website${NC}" 33 exit 1 34 fi 35 36 # Extract all JS file URLs 37 JS_FILES=$(echo "$MAIN_PAGE" | grep -oP '(?<=src=")[^"]*\.js(?=")' | grep -v '^http' || echo "") 38 39 if [ -z "$JS_FILES" ]; then 40 echo -e "${YELLOW}[!] No JS files found in HTML. Trying alternate method...${NC}" 41 JS_FILES=$(echo "$MAIN_PAGE" | grep -oP '(?<=src=")[^"]*(?=")' | grep '\.js$' || echo "") 42 fi 43 44 FILE_COUNT=$(echo "$JS_FILES" | wc -l) 45 echo -e "${GREEN}Found $FILE_COUNT JavaScript files${NC}" 46 47 COUNTER=0 48 while IFS= read -r js_file; do 49 if [ -z "$js_file" ]; then 50 continue 51 fi 52 53 COUNTER=$((COUNTER + 1)) 54 55 if [[ "$js_file" == http* ]]; then 56 FULL_URL="$js_file" 57 else 58 FULL_URL="${WEBSITE_URL}${js_file}" 59 fi 60 61 FILENAME=$(echo "$js_file" | sed 's/[^a-zA-Z0-9._-]/_/g' | sed 's/^_*//') 62 if [ -z "$FILENAME" ]; then 63 FILENAME="file_${COUNTER}.js" 64 fi 65 66 echo " [$COUNTER/$FILE_COUNT] Downloading: $js_file" 67 68 if curl -s -L -o "$OUTPUT_DIR/$FILENAME" "$FULL_URL" 2>/dev/null; then 69 SIZE=$(wc -c < "$OUTPUT_DIR/$FILENAME") 70 echo " ✓ Saved as $FILENAME (${SIZE} bytes)" 71 else 72 echo " ✗ Failed to download" 73 fi 74 done <<< "$JS_FILES" 75 76 echo "" 77 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" 78 echo "Step 2: Scanning for XSS patterns..." 79 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" 80 echo "" 81 82 > "$SCAN_RESULTS" 83 84 TOTAL_ISSUES=0 85 86 # Pattern 1: v-html 87 echo "[1/6] Checking for 'v-html' usage..." 88 V_HTML_COUNT=$(grep -r "v-html" "$OUTPUT_DIR" 2>/dev/null | wc -l || echo "0") 89 if [ "$V_HTML_COUNT" -gt 0 ]; then 90 echo -e "${YELLOW} [!] Found $V_HTML_COUNT occurrences${NC}" 91 echo "=== v-html occurrences ===" >> "$SCAN_RESULTS" 92 grep -rn "v-html" "$OUTPUT_DIR" 2>/dev/null | head -20 >> "$SCAN_RESULTS" || true 93 echo "" >> "$SCAN_RESULTS" 94 TOTAL_ISSUES=$((TOTAL_ISSUES + 1)) 95 else 96 echo -e "${GREEN} [+] Not found${NC}" 97 fi 98 99 # Pattern 2: html: true 100 echo "[2/6] Checking for 'html: true' in tooltips..." 101 HTML_TRUE_COUNT=$(grep -rE "html\s*:\s*(!0|true|\!0)" "$OUTPUT_DIR" 2>/dev/null | wc -l || echo "0") 102 if [ "$HTML_TRUE_COUNT" -gt 0 ]; then 103 echo -e "${YELLOW} [!] Found $HTML_TRUE_COUNT occurrences${NC}" 104 echo "=== html: true occurrences ===" >> "$SCAN_RESULTS" 105 grep -rnE "html\s*:\s*(!0|true|\!0)" "$OUTPUT_DIR" 2>/dev/null | head -20 >> "$SCAN_RESULTS" || true 106 echo "" >> "$SCAN_RESULTS" 107 TOTAL_ISSUES=$((TOTAL_ISSUES + 1)) 108 else 109 echo -e "${GREEN} ✓ Not found${NC}" 110 fi 111 112 # Pattern 3: innerHTML 113 echo "[3/6] Checking for 'innerHTML' assignments..." 114 INNERHTML_COUNT=$(grep -rE "\.innerHTML\s*=" "$OUTPUT_DIR" 2>/dev/null | wc -l || echo "0") 115 if [ "$INNERHTML_COUNT" -gt 0 ]; then 116 echo -e "${RED} ❌ Found $INNERHTML_COUNT occurrences${NC}" 117 echo "=== innerHTML assignments ===" >> "$SCAN_RESULTS" 118 grep -rnE "\.innerHTML\s*=" "$OUTPUT_DIR" 2>/dev/null | head -20 >> "$SCAN_RESULTS" || true 119 echo "" >> "$SCAN_RESULTS" 120 TOTAL_ISSUES=$((TOTAL_ISSUES + 1)) 121 else 122 echo -e "${GREEN} [+] Not found${NC}" 123 fi 124 125 # Pattern 4: dangerouslySetInnerHTML 126 echo "[4/6] Checking for 'dangerouslySetInnerHTML'..." 127 DANGEROUS_COUNT=$(grep -r "dangerouslySetInnerHTML" "$OUTPUT_DIR" 2>/dev/null | wc -l || echo "0") 128 if [ "$DANGEROUS_COUNT" -gt 0 ]; then 129 echo -e "${RED} [+] Found $DANGEROUS_COUNT occurrences${NC}" 130 echo "=== dangerouslySetInnerHTML occurrences ===" >> "$SCAN_RESULTS" 131 grep -rn "dangerouslySetInnerHTML" "$OUTPUT_DIR" 2>/dev/null | head -20 >> "$SCAN_RESULTS" || true 132 echo "" >> "$SCAN_RESULTS" 133 TOTAL_ISSUES=$((TOTAL_ISSUES + 1)) 134 else 135 echo -e "${GREEN} ✓ Not found${NC}" 136 fi 137 138 # Pattern 5: eval() 139 echo "[5/6] Checking for 'eval()' usage..." 140 EVAL_COUNT=$(grep -rE "\beval\s*\(" "$OUTPUT_DIR" 2>/dev/null | grep -v "evalScripts" | wc -l || echo "0") 141 if [ "$EVAL_COUNT" -gt 0 ]; then 142 echo -e "${RED} [+] Found $EVAL_COUNT occurrences${NC}" 143 echo "=== eval() usage ===" >> "$SCAN_RESULTS" 144 grep -rnE "\beval\s*\(" "$OUTPUT_DIR" 2>/dev/null | grep -v "evalScripts" | head -20 >> "$SCAN_RESULTS" || true 145 echo "" >> "$SCAN_RESULTS" 146 TOTAL_ISSUES=$((TOTAL_ISSUES + 1)) 147 else 148 echo -e "${GREEN} [!] Not found${NC}" 149 fi 150 151 # Pattern 6: v-tooltip library 152 echo "[6/6] Checking for 'v-tooltip' library..." 153 TOOLTIP_COUNT=$(grep -r "v-tooltip\|VTooltip" "$OUTPUT_DIR" 2>/dev/null | wc -l || echo "0") 154 if [ "$TOOLTIP_COUNT" -gt 0 ]; then 155 echo -e "${BLUE} ℹ️ Found $TOOLTIP_COUNT occurrences (library detected)${NC}" 156 echo "=== v-tooltip library ===" >> "$SCAN_RESULTS" 157 grep -rn "v-tooltip\|VTooltip" "$OUTPUT_DIR" 2>/dev/null | head -10 >> "$SCAN_RESULTS" || true 158 echo "" >> "$SCAN_RESULTS" 159 else 160 echo -e "${GREEN} [+] Not found${NC}" 161 fi 162 163 echo "" 164 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" 165 echo "Step 3: Summary" 166 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" 167 echo "" 168 echo -e "${BLUE}Downloaded files:${NC} $OUTPUT_DIR" 169 echo -e "${BLUE}Detailed results:${NC} $SCAN_RESULTS" 170 echo "" 171 172 if [ "$TOTAL_ISSUES" -eq 0 ]; then 173 echo -e "${GREEN}[+] No XSS patterns detected in minified JavaScript!${NC}" 174 echo "" 175 echo "This means:" 176 echo " • Minification removed or obfuscated the patterns" 177 echo " • OR patterns aren't present in production code" 178 else 179 echo -e "${YELLOW}[!] Found $TOTAL_ISSUES pattern types${NC}" 180 echo "" 181 echo "Review the detailed results at: $SCAN_RESULTS" 182 echo "" 183 echo "Note: Presence of patterns doesn't mean vulnerability." 184 echo "Backend validation may be applied." 185 fi 186 187 echo "" 188 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"