├── README.md └── scan.py /README.md: -------------------------------------------------------------------------------- 1 | # Vuln-Scanner 2 | Vuln Scanner Bot 3 | Wordpress New Cves 2022 And 2023 4 | Laravel .env and phpunit 5 | admin paths { upload.php and admin/login.php } 6 | -------------------------------------------------------------------------------- /scan.py: -------------------------------------------------------------------------------- 1 | import os 2 | import click 3 | import argparse 4 | import requests 5 | import json 6 | import art 7 | from urllib3.exceptions import InsecureRequestWarning 8 | from requests.exceptions import RequestException, Timeout 9 | from concurrent import futures 10 | from bs4 import BeautifulSoup 11 | requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 12 | session = requests.Session() 13 | timeout = 30 14 | 15 | 16 | def version_check(wordpress_url): 17 | headers = { 18 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} 19 | plugin_url = f"{wordpress_url}/wp-content/plugins/essential-addons-for-elementor-lite/readme.txt" 20 | revslider_url = f"{wordpress_url}/wp-content/plugins/revslider/release_log.txt" 21 | contact_form_url = f"{wordpress_url}/wp-content/plugins/website-contact-form-with-file-upload/readme.txt" 22 | elementor_pro_url = f"{wordpress_url}/wp-content/plugins/elementor-pro/changelog.txt" 23 | woocommerce_payments = f"{wordpress_url}/wp-content/plugins/woocommerce-payments/readme.txt" 24 | ultimate_member = f"{wordpress_url}/wp-content/plugins/ultimate-member/readme.txt" 25 | mstore_api= f"{wordpress_url}/wp-content/plugins/mstore-api/readme.txt" 26 | Tatsu=f"{wordpress_url}/wp-content/plugins/tatsu/readme.txt" 27 | iwp_client=f"{wordpress_url}/wp-content/plugins/iwp-client/readme.txt" 28 | wpcargo=f"{wordpress_url}/wp-content/plugins/wpcargo/readme.txt" 29 | wpfilemanager=f"{wordpress_url}/wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php" 30 | imagemagick=f"{wordpress_url}/wp-content/plugins/imagemagick-engine/readme.txt" 31 | workreap=f"{wordpress_url}/wp-content/themes/workreap/style.css" 32 | barclaycart=f"{wordpress_url}/wp-content/plugins/barclaycart/readme.txt" 33 | try: 34 | response = requests.get( 35 | plugin_url, headers=headers, verify=False, timeout=timeout) 36 | if response.status_code == 200: 37 | content = response.text 38 | 39 | version_line = next((line for line in content.split( 40 | '\n') if line.startswith('Stable tag:')), None) 41 | if version_line: 42 | version = version_line.split(':')[1].strip() 43 | if '5.3.9' < version < '5.7.2': 44 | print( 45 | f"\033[92m{wordpress_url} > [essential-addons-for-elementor-lite VULN]\033[0m") 46 | with open("essential.txt", "a") as vuln_file: 47 | vuln_file.write(wordpress_url + "\n") 48 | else: 49 | print( 50 | f"\033[91m{wordpress_url} > [essential-addons-for-elementor-lite NOT Vuln]\033[0m") 51 | else: 52 | print( 53 | f"\033[91m{wordpress_url} > [Failed GET essential-addons-for-elementor-lite version]\033[0m") 54 | else: 55 | print( 56 | f"\033[91m{wordpress_url} > [Failed to fetch the essential-addons-for-elementor-lite readme.txt file]\033[0m") 57 | if "add-listing" in response.text and "get-nearby-listings" in response.text: 58 | print( 59 | f"\033[91m{wordpress_url} > Was unable to read essential-addons-for-elementor-lite readme.txt but the plugin might be installed\033[0m") 60 | with open("essential.txt", "a") as vuln_file: 61 | vuln_file.write(wordpress_url + "\n") 62 | else: 63 | print( 64 | f"\033[91m{wordpress_url} > [essential-addons-for-elementor-lite NO installed]\033[0m") 65 | 66 | response = requests.get( 67 | imagemagick, headers=headers, verify=False, timeout=timeout) 68 | if response.status_code == 200: 69 | content = response.text 70 | 71 | version_line = next((line for line in content.split( 72 | '\n') if line.startswith('Stable tag:')), None) 73 | if version_line: 74 | version = version_line.split(':')[1].strip() 75 | if version <= '1.7.5': 76 | print( 77 | f"\033[92m{wordpress_url} > [imagemagick VULN]\033[0m") 78 | with open("imagemagick.txt", "a") as vuln_file: 79 | vuln_file.write(wordpress_url + "\n") 80 | else: 81 | print( 82 | f"\033[91m{wordpress_url} > [imagemagick NOT Vuln]\033[0m") 83 | else: 84 | print( 85 | f"\033[91m{wordpress_url} > [Failed GET imagemagick version]\033[0m") 86 | else: 87 | print( 88 | f"\033[91m{wordpress_url} > [Failed to fetch the imagemagick readme.txt file]\033[0m") 89 | print( 90 | f"\033[91m{wordpress_url} > [imagemagick NO installed]\033[0m") 91 | 92 | 93 | response = requests.get( 94 | barclaycart, headers=headers, verify=False, timeout=timeout) 95 | if response.status_code == 200: 96 | content = response.text 97 | 98 | version_line = next((line for line in content.split( 99 | '\n') if line.startswith('Stable tag:')), None) 100 | if version_line: 101 | version = version_line.split(':')[1].strip() 102 | if version <= '200': 103 | print( 104 | f"\033[92m{wordpress_url} > [barclaycart VULN]\033[0m") 105 | with open("barclaycart.txt", "a") as vuln_file: 106 | vuln_file.write(wordpress_url + "\n") 107 | else: 108 | print( 109 | f"\033[91m{wordpress_url} > [barclaycart NOT Vuln]\033[0m") 110 | else: 111 | print( 112 | f"\033[91m{wordpress_url} > [Failed GET barclaycart version]\033[0m") 113 | else: 114 | print( 115 | f"\033[91m{wordpress_url} > [Failed to fetch the barclaycart readme.txt file]\033[0m") 116 | print( 117 | f"\033[91m{wordpress_url} > [barclaycart NO installed]\033[0m") 118 | 119 | 120 | 121 | response = requests.get( 122 | iwp_client, headers=headers, verify=False, timeout=timeout) 123 | 124 | if response.status_code == 200 and '=== InfiniteWP Client ===' in response.text: 125 | print(f"\033[92m{wordpress_url} > [InfiniteWp VULN]\033[0m") 126 | with open("iwp.txt", "a") as vuln_file: 127 | vuln_file.write(wordpress_url + "\n") 128 | else: 129 | print(f"033[91m{wordpress_url} > [InfiniteWp NOT Vuln]\033[0m") 130 | 131 | response = requests.get( 132 | workreap, headers=headers, verify=False, timeout=timeout) 133 | 134 | if response.status_code == 200 and 'Workreap' in response.text: 135 | print(f"\033[92m{wordpress_url} > [Workreap VULN]\033[0m") 136 | with open("Workreap.txt", "a") as vuln_file: 137 | vuln_file.write(wordpress_url + "\n") 138 | else: 139 | print(f"033[91m{wordpress_url} > [Workreap NOT Vuln]\033[0m") 140 | 141 | 142 | 143 | response = requests.get( 144 | wpfilemanager, headers=headers, verify=False, timeout=timeout) 145 | if '{"error":["errUnknownCmd"]}' in response.text: 146 | print(f"\033[92m{wordpress_url} > [wpfilemanager VULN]\033[0m") 147 | with open("wpfilemanager.txt", "a") as vuln_file: 148 | vuln_file.write(wordpress_url + "\n") 149 | else: 150 | print(f"\033[91m{wordpress_url} > [wpfilemanager NOT Vuln]\033[0m") 151 | 152 | 153 | 154 | 155 | 156 | 157 | response = requests.get( 158 | wpcargo, headers=headers, verify=False, timeout=timeout) 159 | if response.status_code == 200: 160 | content = response.text 161 | 162 | version_line = next((line for line in content.split( 163 | '\n') if line.startswith('Stable tag:')), None) 164 | if version_line: 165 | version = version_line.split(':')[1].strip() 166 | if version <= '6.9.4': 167 | print( 168 | f"\033[92m{wordpress_url} > [wpcargo VULN]\033[0m") 169 | with open("wpcargo.txt", "a") as vuln_file: 170 | vuln_file.write(wordpress_url + "\n") 171 | else: 172 | print( 173 | f"\033[91m{wordpress_url} > [wpcargo NOT Vuln]\033[0m") 174 | else: 175 | print( 176 | f"\033[91m{wordpress_url} > [Failed GET wpcargo version]\033[0m") 177 | else: 178 | print( 179 | f"\033[91m{wordpress_url} > [Failed to fetch the wpcargo readme.txt file]\033[0m") 180 | print( 181 | f"\033[91m{wordpress_url} > [wpcargo NO installed]\033[0m") 182 | 183 | 184 | 185 | response = requests.get( 186 | Tatsu, headers=headers, verify=False, timeout=timeout) 187 | if response.status_code == 200: 188 | content = response.text 189 | 190 | version_line = next((line for line in content.split( 191 | '\n') if line.startswith('Stable tag:')), None) 192 | if version_line: 193 | version = version_line.split(':')[1].strip() 194 | if version <= '4.3': 195 | print( 196 | f"\033[92m{wordpress_url} > [Tatsu VULN]\033[0m") 197 | with open("Tatsu.txt", "a") as vuln_file: 198 | vuln_file.write(wordpress_url + "\n") 199 | else: 200 | print( 201 | f"\033[91m{wordpress_url} > [Tatsu NOT Vuln]\033[0m") 202 | else: 203 | print( 204 | f"\033[91m{wordpress_url} > [Failed GET Tatsu version]\033[0m") 205 | else: 206 | print( 207 | f"\033[91m{wordpress_url} > [Failed to fetch the Tatsu readme.txt file]\033[0m") 208 | print( 209 | f"\033[91m{wordpress_url} > [Tatsu NO installed]\033[0m") 210 | 211 | response = requests.get( 212 | mstore_api, headers=headers, verify=False, timeout=timeout) 213 | if response.status_code == 200: 214 | content = response.text 215 | 216 | version_line = next((line for line in content.split( 217 | '\n') if line.startswith('Stable tag:')), None) 218 | if version_line: 219 | version = version_line.split(':')[1].strip() 220 | if version >= '3.9.3': 221 | print( 222 | f"\033[92m{wordpress_url} > [mstore_api VULN]\033[0m") 223 | with open("mstore_api.txt", "a") as vuln_file: 224 | vuln_file.write(wordpress_url + "\n") 225 | else: 226 | print( 227 | f"\033[91m{wordpress_url} > [mstore_api NOT Vuln]\033[0m") 228 | else: 229 | print( 230 | f"\033[91m{wordpress_url} > [Failed GET mstore_api version]\033[0m") 231 | else: 232 | print( 233 | f"\033[91m{wordpress_url} > [Failed to fetch the mstore_api readme.txt file]\033[0m") 234 | print( 235 | f"\033[91m{wordpress_url} > [mstore_api NO installed]\033[0m") 236 | 237 | response = requests.get( 238 | revslider_url, headers=headers, verify=False, timeout=timeout) 239 | if response.status_code == 200: 240 | content = response.text 241 | 242 | version_line = next((line for line in content.split( 243 | '\n') if line.startswith('version ')), None) 244 | if version_line: 245 | version = version_line.split('version ')[1].strip() 246 | if version <= '4.1.1': 247 | print(f"\033[92m{wordpress_url} > [revslider VULN]\033[0m") 248 | with open("revslider.txt", "a") as vuln_file: 249 | vuln_file.write(wordpress_url + "\n") 250 | else: 251 | print( 252 | f"\033[91m{wordpress_url} > [revslider NOT Vuln]\033[0m") 253 | else: 254 | print( 255 | f"\033[91m{wordpress_url} > [Failed GET revslider version]\033[0m") 256 | else: 257 | print( 258 | f"\033[91m{wordpress_url} > [Failed to fetch the revslider release_log.txt file]\033[0m") 259 | 260 | response = requests.get( 261 | contact_form_url, headers=headers, verify=False, timeout=timeout) 262 | if response.status_code == 200: 263 | content = response.text 264 | 265 | version_line = next((line for line in content.split( 266 | '\n') if line.startswith('Stable tag:')), None) 267 | if version_line: 268 | version = version_line.split(':')[1].strip() 269 | if version <= '1.3.4': 270 | print( 271 | f"\033[92m{wordpress_url} > [website-contact-form-with-file-upload VULN]\033[0m") 272 | with open("contact-form.txt", "a") as vuln_file: 273 | vuln_file.write(wordpress_url + "\n") 274 | else: 275 | print( 276 | f"\033[91m{wordpress_url} > [website-contact-form-with-file-upload NOT Vuln]\033[0m") 277 | else: 278 | print( 279 | f"\033[91m{wordpress_url} > [Failed GET website-contact-form-with-file-upload version]\033[0m") 280 | else: 281 | print( 282 | f"\033[91m{wordpress_url} > [Failed to fetch the website-contact-form-with-file-upload readme.txt file]\033[0m") 283 | print( 284 | f"\033[91m{wordpress_url} > [website-contact-form-with-file-upload NO installed]\033[0m") 285 | 286 | response = requests.get( 287 | elementor_pro_url, headers=headers, verify=False, timeout=timeout) 288 | if response.status_code == 200: 289 | print(f"\033[92m{wordpress_url} > [elementor-pro FOUND]\033[0m") 290 | with open("elementor.txt", "a") as vuln_file: 291 | vuln_file.write(wordpress_url + "\n") 292 | else: 293 | print( 294 | f"\033[91m{wordpress_url} > [elementor-pro NOT FOUND]\033[0m") 295 | 296 | wordpress_urls = [ 297 | "/wp-content/plugins/superstorefinder-wp/ssf-wp-admin/pages/import.php", 298 | "/wp-content/plugins/superlogoshowcase-wp/sls-wp-admin/pages/import.php", 299 | "/wp-content/plugins/super-interactive-maps/sim-wp-admin/pages/import.php" 300 | ] 301 | with open("super.txt", "a") as vuln_file: 302 | for urls in wordpress_urls: 303 | superlink = wordpress_url + urls 304 | try: 305 | response = requests.get(superlink, headers=headers, verify=False, timeout=timeout) 306 | if response.status_code == 200 and "