Los Caballeros

"Sobre seguridad, programación, modding, frikismo, etc... "

Nuevo nombre

Twitter icon Twitter icon
Los Caballeros

Bueno cambiamos de nombre el blog, la razón es por que este blog no esta cumpliendo la idea original, teníamos en mente hacer un videoblog, pero por razones de tiempo esto no se ha podido llevar acabo.


La idea del blog seguirá siendo la misma, únicamente cambio el nombre :).


PD: en estos días mas estaremos editando el diseño del blog para quedar mas acorde.

PET - Python entre todos

Twitter icon Twitter icon
Ahí les dejo el link para que lo revisen.

A lo mejor ya te cruzaste con esa pagina o tal vez no, vale la pena checar el proyecto.

Brne y Breq

Twitter icon Twitter icon
Bueno estos son unos buenos programas para aprender el uso de estas instrucciones ya que a pesar de que son diferentes los 2 programas realizan la misma función.

.include"m32def.inc"
.org 0x000
rjmp reset

reset:
ldi r16, HIGH(REMEND) La pila de nuevo porque usaremos retardo
out SPH, r16
ldi r16, LOW(RAMEND)
out SPL, r16

config:
ser r20
out DDRA, r20
inicio:
clr r20
ldi r20, 64 ;64 en la tabla ascii es @ puesto que esto se
;incrementara empieza mostrando la letra A
incremento:
inc r20
cpi r20, 91
breq siguiente
out PORTA, r20 ; aqui muestra la A si no es igual a " [ " no saltara
call retardo ; a siguiente por tanto queda en el bucle
rjmp incremento

siguiente:
clr r20
ldi r20, 96 ;empieza un caracter antes de la letra a
incremento2:
inc r20
cpi r20, 123
breq inicio
out PORTA, r20 ; muestra hasta la z
call retaro
rjmp incremento2

retardo:
ldi r22, 5
ret2:
dec r22
cpi r22, 0
breq fin
car1:
ldi r23, 255
ret1:
dec r23
cpi r23, 0
breq ret2
car0:
ldi r24, 255
ret0:
dec r24
cpi r24, 0
breq ret1
rjmp ret0
fin:
ret

Como pueden ver este programa muestra ciclicamente las letras del abecedario en ascii empezando por mayusculas y terminando obiamente con minusculas.
Pero es utulizando breq.
Ahora haremos lo mismo pero con "brne" (Salta si no es igual)

El siguiente programa lo hare sin el retardo ni el stack, se los dejo de tarea para que le hechen coco...xD

.include "m32def.inc"
.org 0x00
rjmp config

config:
ser r16
out DDRA, r16

minusculas:
ldi r17, 96
inicio:
inc r17
out PORTA, r17
cpi r17, 122
brne inicio
rjmp mayusculas

mayusculas:
ldi r17, 64
ciclo:
inc r17
out PORTA, r17
cpi r17, 90
brne ciclo
rjmp minusculas

En el programa anterios creo que no hace falta ni comentarios se sobre entiende muy bien si vez una tabla ascii sobre todo.

Más de Micros

Twitter icon Twitter icon
He aquí algo para que vean sobre BCD ..xD

BCD

Analicen el BCD y vean sobre que trata el programa explicare solo unas cuantas cosas ..XD

.include"m32def.inc"
rjmp reset

reset:
ldi r16, HIGH(REMEND) ; Configurando la pila! esto se hace con un
out SPH, r16 ; registro doble. Esta es la parte alta
ldi r16, LOW(RAMEND)
out SPL, r16

config:
ser 20 ;Configurando los puertos de entrada y salida
out DDRD, r20
clr r20
out DDRB, r20

inicio:
in r20, PINB
cpi r20, 10
brsh noBCD
rjmp inicio

noBCD:
ldi r21, 1
com r21 ; complemendo a 2 tendrian que buscar
out PORTD, r21
com r21 ;algo de electronica digital.
call retardo ; llama al retardo
clr r21
com r21
out PORTD, r21
com r21
rjmp inicio

retardo:
ldi r22, 3
ret2:
dec r22
cpi r22, 0
breq fin
car1:
ldi r23, 200
ret1:
dec r23
cpi r23, 0
breq ret2
car0:
ldi r24, 200
ret0:
dec r24
cpi r24, 0
breq ret1
rjmp ret0
fin:
ret

El retardo es para que el programa se pueda ver debido a que la velocidad de la luz como saben cuesta verla al ojo humano ..XD pues esto es para que se retrace un poco y así se pueda apreciar lo que hace el programa

PHP BBCode to HTML

Twitter icon Twitter icon
Este es un ejemplo de un conversor de BBCode a HTML, en este caso basicamente el 70% del codigo es para evitar bugs (como el bug ese que habia en los SMF's antiguos que se cerraban las comillas con tags dobles) xD...


<?php
$mensaje = "Aqui el BBCode a Convertir";
$mensaje = htmlentities($mensaje);
$marcainvisible = "<invisible>";
$tags = array("url","img","tube","code","color"); /* tags que no pueden tener otros tags dentro */
foreach($tags as $tag) {
if(preg_match_all("/\[".$tag."=(.*?)\[\/".$tag."\]/ism",$mensaje,$matches)) {
foreach($matches[1] as $valor) {
preg_match("/^(.*)](.*)$/ism",$valor,$matches);
$url = $matches[1];
$texto = htmlentities(preg_replace("/\[(.*?)\]/ism","[".$marcainvisible."$1".$marcainvisible."]",$matches[2]),ENT_QUOTES);
$valorlimpio = preg_replace("/\[/","%5B",$url);
$valorlimpio = htmlentities(preg_replace("/\]/","%5D",$valorlimpio),ENT_QUOTES);
$mensaje = str_ireplace("[".$tag."=".$valor."[/".$tag."]","[".$tag."=".$valorlimpio."]".$texto."[/".$tag."]",$mensaje);
}
}
if(preg_match_all("/\[".$tag."\](.*?)\[\/".$tag."\]/ism",$mensaje,$matches)) { foreach($matches[1] as $valor) {
$valorlimpio = preg_replace("/\[(.*?)\]/ism","[".$marcainvisible."$1".$marcainvisible."]",$valor);
$mensaje = str_ireplace("[".$tag."]".$valor."[/".$tag."]","[".$tag."]".$valorlimpio."[/".$tag."]",$mensaje);
} }
}
$a = array(
"/\[h2\](.*?)\[\/h2\]/ims","/\[code\](.+?)\[\/code\]/ims","/\[img\]\s*((https?|ftp):\/\/.+?)\[\/img\]/ims","/\[b\](.+?)\[\/b\]/ism","/\[url=((https?|ftp):\/\/.+?)\](.+?)\[\/url\]/ism","/\[url\]\s*((https?|ftp):\/\/.+?)\[\/url\]/ism"
);
$b = array(
"<font size=\"+1\">$1</font>","<b>$1</b>","<img src=\"$1\">","<div class=\"px\"><pre width=\"70\">$1</pre></div>","<a href=\"$1\" target=\"link\">$2</a>","<a href=\"$1\" target=\"link\">$1</a>"
);
$mensaje = str_replace($marcainvisible,"",preg_replace($a, $b, $mensaje));
print $mensaje;
?>



en este caso resumiendo la eliminacion del bug que comente al inicio, se utiliza un dato invisible (el tag "invisible") dentro de codigo que esta en htmlentities (de modo que seria el unico tag en todo el mensaje) para escapar tags bbcode que esten dentro de otros tags bbcode (tanto en propiedades como en los datos dentro de estos).

Tecnicas de fingerprinting a servidores web 1

Twitter icon Twitter icon
Una tecnica mas para fingerprinting a servidores web...

Un paquete GET basico tiene mas o menos la siguiente estructura:

GET / HTTP/1.1
Host: hackingtelevision.blogspot.com



Como pueden notar el caracter que se utilizar para separar campos (el campo del metodo, de la direccion absoluta o relativa del archivo y la version de protocolo, asi como el nombre del encabezado y el valor) es un espacio, pero pasa algo curioso, muchos servidores web no solo soportan ese caracter como separador, ahora vamos a ver algunas firmas unicas de los servidores web mas utilizados:

Apache/2.x: 9,11,12,13,32
IIS/x.x: 9,32
GWS: 10,32
Cherokee Web Server: 32

Ahora en base a esto podemos programar un analizador:


#!/usr/bin/perl
use IO::Socket::INET;

# by Xianur0

open REGLAS,"reglas.txt";
%reglas = ();
@estados = ("501","400","502");
my $firma = "";
while($linea = <REGLAS>) {
if($linea =~ /^separador:\s+/) {
($separador,$servidor) = ($linea =~ /^separador:\s+(.+)=>(.+)$/);
$servidor =~ s/<!--.+//g;
$servidor =~ s/^(\s|\t)+//g;
$servidor =~ s/(\s|\t)$//g;
$separador =~ s/([^\d\,])//g;
$reglas{$separador} =  $servidor;
}
}
for($numero = 0; $numero < 33; $numero++) {
my $char = chr($numero);
my $paquete = "GET${char}/${char}HTTP/1.1\r\nHost: ".$ARGV[0]."\r\nConnection: close\r\n\r\n";
SOCKER: while(true) {
$sock = IO::Socket::INET->new(PeerAddr => $ARGV[0],
 PeerPort => $ARGV[1],
Timeout => 3,
 Proto => 'tcp');
last SOCKER if($sock);
}
binmode($sock);
binmode($paquete);
$resulta = "";
print $sock $paquete;
while(<$sock>) {
$resulta .= $_;
}
$contador = 0;
($estado,$crlf) = ($resulta =~ /^(.+?)(\r|\r\n|\n)/);
BLOQUE: foreach $num (@estados) {
if($estado =~ /^HTTP\/(1|0)\.(0|9|1)\s$num/i || $estado !~ /^HTTP\//) {
$contador++;
last BLOQUE;
}
}
if($contador == 0) {
$firma .= $numero.",";
print "[-] Numero soportado: ".$numero."\n".$estado."\n";
}
close($sock);
}
$firma =~ s/,$//g;
if($reglas{$firma} ne "") {
print "[!] Servidor reconocido: ".$reglas{$firma}."\n";
}
else {
print "[x] Servidor desconocido!\n\tFirma: ".$firma."\n";
}


Se tiene que crear un reglas.txt, mas o menos como este:

separador: 9,11,12,13,32 => Apache/2.x
separador: 9,32 => IIS/x.x
separador: 10,32 => GWS
separador: 32 => Cherokee Web Server

Aqui ya pueden ir integando mas servidores web


Saludos!

¿Que geek eres?

Twitter icon Twitter icon
Les comparto esta tabla que me encontre por ahi en internet:

¿y ... que geek eres?

Fingerprinting a navegadores sin JS o User-Agent cap 1

Twitter icon Twitter icon
Tecnicas de Fingerprinting a navegadores 1

Reconocimiento entre Firefox y Chrome (sin JS ni User-Agent):

Una tecnica util es utilizar 2 Content-Length, es decir, colocar 2 veces dicha cabecera pero con diferente valor, por ejemplo:


HTTP/1.1 200 OK
Server: Xianur0ServerxD
Content-Length: 35
Content-Length: 0

<iframe src="http://localhost:83/">



Iniciamos 2 netcats a la escucha en diferente puerto, el primero lo puse en el puerto 82 y el siguiente en el 83, ahora intento acceder con Chrome al 82, y envio el paquete con los 2 Content-Length:



Como podran notar tomo el primero (el de 35 de largo), por lo cual el iframe sera visible en dicho navegador y del mismo modo, realizara una conexion al puerto 83 (ahora sabemos que no es firefox, y que si nos limitamos a esos 2 navegadores, podemos tener por seguro que es chrome).

Ahora lo mismo pero con firefox:






Tomo el content-length 0, por lo cual el iframe no sera visible, entonces no realizara conexion al 83... y sabemos que es firefox.