miércoles, 28 de julio de 2010

Una ronda de bash ( I )

Hoy... scripts varios en bash.

Empezando por lo más simple, un cracker de MD5, simplemente lee el diccionario y va comparando las lineas con el hash objetivo [md5crack.sh]


./md5crack.sh <diccionario> <objetivo>




#!/usr/bin/env bash
# Escrito por kenkeiras
function showuse {
    echo "$0 <diccionario> <hash>"
    exit 1
}

if [ "$1" = "" ]
then
    showuse
fi

if [ "$2" = "" ]
then
    showuse
fi

i=0
for word in $(cat $1);do
    test=`echo -en "$word" |md5sum|cut -c1-32`
    if [ "$test" = "$2" ]
        then
            echo "-> $word"
            i=$(($i + 1))
        fi
done
echo "$i resultados"


Siguiendo con pruebas de /dev/tcp, buscar las contraseñas por defecto usando la web del cirt [get_pass_cirt.sh]:


./get_pass_cirt.sh <Criterio de búsqueda>



#!/usr/bin/env bash
# Escrito por kenkeiras

if [ "$1" = "" ]; then
    echo "No has especificado un criterio de búsqueda"
    exit 1
else
    key=$1
fi

# Se pide la web
exec 3<>/dev/tcp/cirt.net/80
echo -en "GET /passwords?criteria=$key\ HTTP/1.1\r\n" >&3
echo -en "HOST: cirt.net\r\n" >&3
echo -en "Connection: close\r\n\r\n" >&3
res=$(cat <&3) # Se leen los datos
exec 3>&- # Se cierra la conexion

n=0
for i in $res
    do
        if [ $n -eq 1 ] # Se comprueba si ya muestra el usuario/contraseña
            then
                echo $i|cut -d\> -f2|cut -d\< -f1
                n=0
        else if [ $n -ne 0 ] # Sino puede que venga pronto
            then
                n=$(($n - 1))
            fi
        fi
        out=$(echo $i|grep -e User -e \>Pass)
        if [ $? -eq 0 ] # Si es la parte del usuario/contraseña
            then
                out=$(echo $out|cut -d\> -f3|cut -d\& -f1|cut -d\< -f1)
                if [ ! $out = "" ]
                    then
                        echo $out|grep Pass >> /dev/null
                        if [ $? -eq 0 ]
                            then
                                n=2
                            else
                                n=3
                            fi
                        echo -n "$out:"
                    fi
            else
                echo $i|grep -e "</table>" >> /dev/null # Si se acabo el user/pass
                if [ $? -eq 0 ]
                    then
                        echo "----------------------------"
                    fi
            fi
    done


O usando la web de phenoelit [get_pass_phenoelit-us.sh] este tarda un rato, tiene que parsear 256 Kb's:

./get_pass_phenoelit-us.sh  <Empresa>



#!/usr/bin/env bash
# Escrito por kenkeiras

if [ "$1" = "" ]; then
    echo "No has especificado un criterio de búsqueda"
    exit 1
else
    key=$1
fi

# Se pide la web
exec 3<>/dev/tcp/www.phenoelit-us.org/80
echo -en "GET /dpl/dpl.html HTTP/1.1\r\n" >&3
echo -en "HOST: www.phenoelit-us.org\r\n" >&3
echo -en "Connection: close\r\n\r\n" >&3
res=$(cat <&3) # Se leen los datosexec 3>&- # Se cierra la conexion
res=$(echo $res|sed -e "s/\n//g" |sed -e "s/ /$/g" |sed -e "s/[<]/\n/g")

t=0
d=0
for i in $res
    do  
        echo $i|grep "/tr" >> /dev/null
        if [ $? -eq 0 ]
            then
                if [ $t -ne 0 ]
                    then
                        echo "------------------"
                    fi
                d=1
                t=0
            else
                echo $i|grep "</table>" >> /dev/null
                if [ $? -eq 0 ]
                    then
                        d=0
                    fi
                if [ $d -ne 0 ]
                    then
                        d=$(($d + 1))
                        if [ $d = 3 ]
                            then
                                out=$(echo $i|cut -d\> -f2|grep -i "$key")
                                if [ $? -eq 0 ]
                                    then
                                        echo $out|sed -e "s/$/ /g"
                                        t=1
                                    fi
                            fi
                        if [ $t -ne 0 ]
                            then
                                if [ $d = 11 ]
                                    then
                                        echo -n "User: "
                                        echo $i|cut -d\> -f2|sed -e "s/$/ /g"
                                    else
                                    if [ $d = 13 ]
                                        then
                                            echo -n "Password: "
                                            echo $i|cut -d\> -f2|sed -e "s/$º/ /g"
                                        fi
                                    fi
                            fi
                    fi
            fi
    done


Hasta ahora, la segunda parte por la tarde

ps: Todo bajo la WTFPL, claro

2 comentarios:

  1. O_O

    No conocia el cracker de md5 para linux xD

    Se espera 2º parte

    ResponderEliminar
  2. jeje, no es John the ripper, pero para improvisar sirve :)

    La segunda parte estará dentro de nada

    ResponderEliminar