lunes, 16 de mayo de 2005

Obtener lista de usuarios de un Windows a traves de SAMBA

Se utiliza la herramienta 'rpcclient' de samba 3, es mucho mas
completa la que tiene el fork de samba samba-tng, pero por
no andar instalandola...

Una manera sencilla de hacerlo es:

---- cut here ----
for rid in `rpcclient -I -W \
-c "enumdomusers" | sed -e 's,.*\[\(.*\)\],\1,'`;
do
rpcclient -I $IP -W \
-c "queryuser $rid" | awk '/User Name/ {print $4}'
done
---- cut here ----
Nota: tener en cuenta que si no tenemos acceso al IPC$ como anonimo
tendremos que autenticarnos usando -U en el comando rpcclient

Para simular lo que hace cerberus nbtdump.exe en linux (ver usuarios sin
contraseña o con user=pass), a modo guarro, se podria usar lo siguiente:


----- cut here ----
IP=$1
USER=$2
PASS=$3

NMBLOOKUP=`nmblookup -A $IP 2>/dev/null`
if [ `echo -e "$NMBLOOKUP"|wc -l` -lt 5 ]; then
echo "Netbios not found"
exit 1
fi

SISTEMA=`echo "$NMBLOOKUP"| awk '// { print $1 }'`
WORKGROUP=`echo "$NMBLOOKUP"| awk '// { print $1 }'`

for rid in `rpcclient -I $IP -W $WORKGROUP $SISTEMA \
-U$USER%$PASS -c "enumdomusers" | \
sed -e 's,.*\[\(.*\)\],\1,'`;
do
u="$u\n"`rpcclient -I $IP -W $WORKGROUP $SISTEMA -U$USER%$PASS \
-c "queryuser $rid" | awk '/User Name/ {print $4}'`
done
if [ $(echo -e "$u" | grep -E "[:alpha:]" | wc -l) -gt 0 ]; then
echo -e "Lista de usuarios:\n------------------$u"
else
echo -e "Lista de usuarios:\n------------------\nSin acceso"
fi

for user in `echo -e "$u"`; do
n=`smbclient -L //$SISTEMA -I $IP -W $SISTEMA -U$user%$user 2>&1`
if [ `echo -e "$n"|grep -E "ACCESS_DENIED|NT_STATUS_LOGON_FAILURE" | \
wc -l` -eq 0 ]; then
r="$r\n$user/$user"
fi
n=`smbclient -L //$SISTEMA -I $IP -W $SISTEMA -N -U$user 2>&1`
if [ `echo -e "$n"|grep -E "ACCESS_DENIED|NT_STATUS_LOGON_FAILURE" | \
wc -l` -eq 0 ]; then
r="$r\n$user/$user"
fi
n=`smbclient -L //$SISTEMA -I $IP -W $SISTEMA -N -U$user 2>&1`
if [ `echo -e "$n"|grep -E "ACCESS_DENIED|NT_STATUS_LOGON_FAILURE" | \
wc -l` -eq 0 ]; then
r="$r\n$user contraseña en blanco"
fi

done

if [ $(echo -e "$r" | grep -E "[:alpha:]" | wc -l) -gt 0 ]; then
echo -e "Accesos:\n---------$r"
fi
----- cut here ----

TODO: mirar de modificar el rpcclient par hacer esto