systemadmin.es > Script > Engañar a herramientas de Dell pensadas para RHEL en CentOS

Engañar a herramientas de Dell pensadas para RHEL en CentOS

Hay muchas herramientas que buscan cadenas en ciertos ficheros para determinar si pueden funcionar en dicha distribución. En el caso de la herramienta de diagnostico dset de Dell dice que únicamente soporta RHEL y no CentOS. Por suerte no es muy complicado engañarla.

# bash dell-dset-3.3.0.300_x86-64.bin 
Unsupported OS type, please check the OS support matrix

Mediante ltrace podemos seguir las llamadas a librerías que hace para intentar buscar que fichero usa para detectar la distribución y su versión, en este caso el /etc/issue:

# ltrace -s 128 bash dell-dset-3.3.0.300_x86-64.bin 
(...)
strlen("OS_NAME1=`cat /etc/issue | grep ESX`")   = 36
(...)
strlen("OS_NAME3=`cat /etc/issue | grep Red`")   = 36

Siguiendo las llamadas vemos que es un script que se va ejecutando. No lo podemos modificar directamente porque lo tiene comprimido:

#!/bin/bash

mkdir -p /tmp/dell_advdiags
export TMPDIR="/tmp/dell_advdiags"
ARCHIVE=`awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' $0`

tail -n+$ARCHIVE $0 | tar xzv -C $TMPDIR > /dev/null 2>&1

CDIR=`pwd`
cd $TMPDIR

source install.sh

cd $CDIR
rm -rf $TMPDIR

exit 0

__ARCHIVE_BELOW__
(...)

Podemos ver que al final de la ejecución borra el fichero:

strlen("rm -rf $TMPDIR")                         = 14

Por lo que podemos ejecutarlo sin el rm y quedarnos los ficheros:

# mv /bin/rm /bin/rmold

Encontraremos los ficheros que nos interesan en TMPDIR que nos indica el fichero (/tmp/dell_advdiags). Siguiendo las llamadas podemos ver que no se esfuerzan mucho:

memcpy(0xf42c20, "SUPP_OS_EXCEPTION_TYPE2=`grep "$OPSYS_TYPE2" ./os_exception_list -iwr`", 70) = 0xf42c20

Por lo que ya tenemos el string que le tenemos que añadir al /etc/issue para que funcione la dichosa herramienta:

# cat /tmp/dell_advdiags/os_exception_list 
=================
Certified OS list
=================
SUSE Linux Enterprise Server 10 SP4 x86_64
SUSE Linux Enterprise Server 11 SP1 x86_64
Red Hat Enterprise Linux Server release 5.7 x86_64
Red Hat Enterprise Linux Server release 6.1 x86_64
=================
Supported OS list
=================
SUSE Linux Enterprise Server 10 x86_64
SUSE Linux Enterprise Server 11 x86_64
Red Hat Enterprise Linux Server release 5 x86_64
Red Hat Enterprise Linux Server release 6 x86_64

Se lo añadimos:

# echo "Red Hat Enterprise Linux Server release 5.7 x86_64" >> /etc/issue

Y ya lo tenemos funcionando:

DELL SOFTWARE LICENSE AGREEMENT

This is a legal agreement between you, the user, and Dell Products, (...)
(...)

Esto lo podemos aplicar a muchas aplicaciones, por ejemplo, para instalar Oracle 10g también lo teníamos que engañar, pero en ese caso era con el /etc/redhat-release

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>