#n3ur0n4 c0rp | silicon cell into your mind

CAT | Codex

Mar/10

12

algoritmo_codificar_base64.php

Un cordial saludo a todos los programadores expertos y aficionados, hace un par de días encontré un artículo de CrashCool en un ahora extinto foro hackxcrack, trata de el algoritmo a seguir para pasar cualquier texto a base64.

Ya que muchos usamos funciones para codificar en tal base sin embargo muchos no se preocupan por el funcionamiento detrás de esas funciones. Así que tome como ejercicio de programación el base64_encode().

Publicado: Domingo, 26 Octubre 2003, 01:34 Título del mensaje: Codificando base64 (+Prog. en Java)

“Explicación del algoritmo

Partimos de que cada letra tiene su valor ASCII, un ejemplo que todos conoceréis es el símbolo ~ que equivale a 126, dicho esto prosigo.

Funcionamiento del algoritmo


-1º Se coge el valor ASCII de cada carácter de texto (en decimal) y lo pasamos a binario con 8 bits, formando así una cadena con el código binario de todas las letras del texto a codificar.


-2º Una vez obtenida dicha cadena ej. 10010100 00110100 11001010

se divide en cadenas de 6 bits (de izq. a derecha), con lo cual dividiremos la longitud de la cadena entre 6, como estarás pensando, la división no siempre saldrá exacta con lo cual rellenaremos con 0 el grupo de 6 bits de la derecha hasta completar 6.


-3º Una vez obtenidos los grupos de 6 bits, pasamos estos grupos de binario a decimal, con lo cual obtendremos un numero (obligatoriamente comprendido entre 0 y 64), ahora cogemos la tabla de caracteres de b64 comprendida entre [A-Z][a-z][0-9][+,/] y miramos en la tabla el número que le corresponde:

Valor Codificación Valor Cod. Valor Cod. Valor Cod.

0 A___ 17 R___ 34 i___ 51 z

1 B___ 18 S___ 35 j___ 52 0

2 C___ 19 T___ 36 k___ 53 1

3 D___ 20 U ___ 37 l___ 54 2

4 E___ 21 V___ 38 m___ 55 3

5 F___ 22 W___ 39 n___ 56 4

6 G___ 23 X___ 40 o___ 57 5

7 H___ 24 Y___ 41 p___ 58 6

8 I___ 25 Z___ 42 q___ 59 7

9 J___ 26 a___ 43 r___ 60 8

10 K___ 27 b___ 44 s___ 61 9

11 L___ 28 c___ 45 t ___ 62 +

12 M___ 29 d___ 46 u ___ 63 /

13 N___ 30 e___ 47 v___

14 O___ 31 f___ 48 w___ (relleno) =

15 P___ 32 g___ 49 x___

16 Q___ 33 h___ 50 y___

-4ºUna vez obtenida la cadena en b64 contamos los caracteres q la forman y comprobamos q el resto de dividirla entre 4 es 0, en caso contrario añadiremos tantos símbolos de relleno “=” como hagan falta para conseguir esta divisibilidad , imaginad q la cadena q nos sale es de 15 caracteres, en este caso le añadiríamos al final el carácter ‘=’ con lo cual la longitud ahora es 16 (divisible entre 4).”

Bueno eso es todo por parte de CrashCool después nos brinda el algoritmo de un codificador en java pero solo lo teórico es lo que nos importa por ahora ya que crearemos nuestro propio algoritmo.

Algoritmo

Todos los que usamos PHP como lenguaje de base para nuestras plataformas web conocemos la función base64_encode() que traduce a base64 cualquier string que le pasemos como parámetro. Sin embargo pocos sabemos nos damos a la tarea de saber que hay detrás de dicha función. Vamos por decirlo así: “que hay bajo la falda de la señorita base64_encode() XD.

Ahora después de conocer el algoritmo por el que se rige el base64 nos podemos dar a la tarea de lograr nuestra propia función base64_encode() a la cual llamare str_b64() y el lenguaje de desarrollo ustedes lo eligen, yo elegí PHP.

Sin más jerga les dejo mi código espero les ayude a comprender el algoritmo antes citado por CrashCool.

  1. <?
  2. /*===============================================
  3. * function str_b64 ($text):
  4. * by: Lestat de Lioncourt
  5. * to: http://n3ur0n4.org
  6. * reply to: lestat[at]n3ur0n4[dot]org
  7. * algoritmo para la generacion de una cadena en
  8. * base64 a partir de un texto dado por la llamada
  9. * a dicha funcion.
  10. * algoritmo de la funcion base64_encode()
  11. ===============================================*/
  12. $cadena = "str_b64 by Lestat de Lioncourt to n3ur0n4.org.";
  13. echo str_b64($cadena);
  14. echo "<br />".base64_encode($cadena);
  15. function str_b64 ($text) {
  16. /*===============================================
  17. * declaramos el array de caracteres de base 64
  18. * consta de 64 caracteres 0 -- 63.
  19. =================================================*/
  20. $b64chr = array ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
  21. 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
  22. 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
  23. 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/');
  24. /*===============================================*/
  25. /*===============================================
  26. * paso 1: convertimos a binario cada caracter de la
  27. * cadena y lo guardamos en una cadena auxiliar
  28. * llamada $binstring (cadena en binario).
  29. =================================================*/
  30. for ($x = 0; $x < strlen($text); $x++) {
  31. $binstring .= atob ($text[$x]);
  32. }
  33. /*=================fin paso 1====================*/
  34. /*===============================================
  35. * paso 2: una vez obtenido el binario del texto
  36. * a convertir, generamos sexetos del binario
  37. * no siempre tendremos sexetos enteros al final
  38. * es desir "000000" en caso de lo contrario se
  39. * rellenara con "0" el ultimo sexeto hasta completarlo
  40. * los sexetos obtenidos los guardamos en un arreglo
  41. * para su mejor manipulacion en el sig. paso.
  42. =================================================*/
  43. $i = 0;
  44. while ($i < strlen($binstring)) {
  45. if (strlen(substr($binstring,$i,6)) == 6) {
  46. # obtenemos nuesto sexeto y lo guardamos en el arreglo $sexetos[]
  47. $sexetos[] = substr($binstring,$i,6);
  48. } else {
  49. /* si el sexeto no es entero rellenamos por obiedad esto siempre pasa en el ultimo sexeto */
  50. $sexeto = substr($binstring,$i,6);
  51. while (strlen($sexeto) < 6) {
  52. $sexeto .= "0";
  53. }
  54. $sexetos[] = $sexeto;
  55. }
  56. $i+=6;
  57. }
  58. /*=================fin paso 2====================*/
  59. /*===============================================
  60. * paso 3: una vez obtenidos los sexetos los
  61. * convertimos a su respectivo desimal, obteniendo
  62. * asi nuemenos que van de [0-63] para compararlos
  63. * uno a uno contra la tabla de caracteres base64
  64. =================================================*/
  65. foreach ($sexetos as $pr) {
  66. $b64string .= $b64chr[btod($pr)];
  67. }
  68. /*=================fin paso 3====================*/
  69. /*===============================================
  70. * paso 4: la divicion de la longitud de la cadena
  71. * entre cuaatro deve dar como resultado un modulo
  72. * igual a 0 (cero) de lo contrario se añadira un
  73. * caracter de relleno (=) al final de la cadena
  74. * hasta lograr un modulo igual a 0.
  75. =================================================*/
  76. while((strlen($b64string)%4) != 0) {
  77. $b64string .= "=";
  78. }
  79. /*=================fin paso 4====================*/
  80. return $b64string;
  81. }
  82. /*===============================================*/
  83. ###################################################
  84. # funciones auxiliares
  85. ###################################################
  86. /*===============================================
  87. * atob (alphabetic to binary):
  88. * dado un caracter alfanumerico generamos su
  89. * correspondiente octeto en binario
  90. =================================================*/
  91. function atob ($chr) {
  92. $num = ord($chr);
  93. $i = 0;
  94. // el metodo para la convercion de desimal a binario dicta si hay resto entonces da un alto "1" si no hay resto un bajo "0"
  95. while ($num > 0){
  96. if ($num%2==1) {
  97. $bin[$i++] = $num % 2;
  98. $num = ($num -- 1) / 2;
  99. } else {
  100. $bin[$i++] = $num % 2;
  101. $num = $num / 2;
  102. }
  103. }
  104. // completamos los 8 bits
  105. if ($i < 8) {
  106. do {
  107. $bin[$i++] = 0;
  108. } while ($i < 8);
  109. }
  110. // todos los que saben convertir a binario sabemos que despues de realizar
  111. // nuestras operaciones para determinar los 0 y 1 del nuemero en cuestion
  112. // devemos leer de manera inversa los resultados (de deracha a izquierda,
  113. // de abajo hacia arriba, etc). asi que invertimos nuestro arreglo $bin
  114. // y lo concatenamos en una cadena de ocho caracteres que retornaremos.
  115. while ($i >= 0){
  116. $cadena .= $bin[$i--];
  117. }
  118. return $cadena;
  119. }
  120. /*===============================================*/
  121. /*===============================================
  122. * btod (binary to decimal):
  123. * el octeto en bonario lo convertimos a desimal
  124. * bajo el metodo de posicion, es desir, nuestro bit
  125. * binario multiplicado por la base 2 elevada a la
  126. * potencia de su pocicion y sumadas entre si.
  127. * ejemplo: 1011
  128. * (1*2^3)+(0*2^2)+(1*2^1)+(1*2^0) = 8 + 0 + 2 + 1 = 11
  129. =================================================*/
  130. function btod ($sbin) {
  131. $i = strlen($sbin)-1;
  132. $des = 0;
  133. $j = 0;
  134. while ($i >= 0) {
  135. $des += $sbin[$i--]*(pow(2,$j++));
  136. }
  137. return $des;
  138. }
  139. /*===============================================*/
  140. ?>

, , , ,

Dec/09

2

#n3ur0n4′5 r57 shell

sin tener nada que hacer comencé a modificar el estilo de la php r57 shell para adaptarlo al puro estilo de n3ur0n4 c0rp les dejo un screen de la apariencia final, la he provado y es funcional a menos que el estilo de tanto cambiar por aquí y por allá se haya alterado el código esencial, si pasa lo segundo favor de hacérmelo saber :D

  1. r57 n3ur0n4 shell.rar <– r57 shell modificada estilo n3ur0n4
  2. shell r57.rar <– Shell Original
r57-shell

, , , , , , , ,

Tratando de resolver el reto de yashira llamado Nº195 – Zero Zero Killed! y buscando un interprete de lenguaje Ook! funcional, me tope con la triste realidad de no encontrar nada, quizás busque mal, después de un rato me baje un interprete de brainfuck otro lenguaje esotérico.

después de codear un instante, me logre este traductor funcional de Ook! a brainfuck, cuya traducción es interpretada a la perfección el compilador brianfuck_machine que esta en la sección de XFiles en esta pagina. sin mas les dejo el código del php que he creado. esperando les sea útil el aporte…

Saludos n3ur0n1705…
Lestat de Lioncourt

PD: Aca les dejo el code ya en funcionamiento: http://n3ur0n4.byethost9.com/ook_to_bf.php

Traductor Ook! a Brainfuck:

<div align="center">

<?

if ($_POST[f]!=NULL){
	$ook=$_POST[f];
	for ($x=0;$x<strlen($ook);$x++){
		$as=ord(substr($ook,$x,1));
		if ($as!=13) {
			$_ook=$_ook.chr($as);
		}
	}	

	echo "Conversor Ook! to Brainfuck By Lestat de Lioncourt<br>#n3ur0n4.org<br><br>Ook! Codex:<form action=\"\" method=\"POST\">
		<textarea name=\"f\" style=\"width:495px; height:250px; scroll:auto;\">".$_ook."</textarea>
		<br><input type=\"submit\" value=\"send\">
	      </form><br><br>";

	echo "Brainfuck codex:<form action=\"\">
		<textarea name=\"x\" style=\"width:495px; height:250px; scroll:auto;\">";

	$x=0;
	while ($x<strlen($_ook)){
		if (substr($_ook,$x,9)=="Ook. Ook?"){
			echo ">";
		} else if (substr($_ook,$x,9)=="Ook? Ook."){
			echo "<";
		} else if (substr($_ook,$x,9)=="Ook. Ook."){
			echo "+";
		} else if (substr($_ook,$x,9)=="Ook! Ook!"){
			echo "-";
		} else if (substr($_ook,$x,9)=="Ook! Ook."){
			echo ".";
		} else if (substr($_ook,$x,9)=="Ook. Ook!"){
			echo ",";
		} else if (substr($_ook,$x,9)=="Ook! Ook?"){
			echo "[";
		} else if (substr($_ook,$x,9)=="Ook? Ook!"){
			echo "]";
		}
		$x+=10;
	}
	echo "</textarea>
	      </form>";
} else {
	echo "Conversor Ook! to Brainfuck By Lestat de Lioncourt<br>#n3ur0n4.org<br><br>Ook! Codex:<form action=\"\" method=\"POST\">
		<textarea name=\"f\" style=\"width:495px; height:250px; scroll:auto;\"></textarea>
		<br><input type=\"submit\" value=\"send\">
	</form>";
}
?>

</div>

, , , , , ,

Todo se ve mejor en la consola de comandos, así que aquí les dejo un simple sh script para poder twittear desde la consola, solo necesitamos cURL instalado, sin mas preámbulos les dejo el código de una sola linea para lograr nuestro objetivo.

1
2
3
4
5
#==================================
# script para actualizar nuesto 
# estado en twitter by z3r0.und3r
#==================================
curl --basic --user tu_user:tu_password --data status="$1" http://twitter.com/statuses/update.xml

El uso del script para Linux es:

lestat@matrix:~$> sh tweet.sh “Actualizando estado en twitter desde consola”

tendrán que poner su nuevo estado entrecomillado ya que de lo contrario solo twittearan la primer palabra (variable $1 véase algún tutoríal de programación shell).

, , , , ,

Oct/09

21

IRC Bot, Akasha’s Code

==================================
By: z3r0.und3r
To: #n3ur0n4
Url: http://n3ur0n4.org
Reply to: z3r0.und3r@n3ur0n4.org
==================================

==================================
IRC Bot, Akasha’s Code
==================================

Bueno después de publicar temas fuera del ámbito informático les traigo un script PHP que me logre aya cuando aun eramos “#hdm”, creo que mi amigo ekzitro ha de recordar XD.

El siguiente script hace la función de IRC Bot en este caso conectara al servidor ruido de la red-latina, y entrara al canal #noc-hunt con el nick de Akasha, en caso de que el servidor IRC colapsara o la conexión del ordenador en donde se ha ejecutado llegase a nula, el script tratara de reconectar las veces que sean necesarias para regresar nuevamente al funcionamiento, mientras el ordenador en el que se corra el script este encendido, no faltara Akasha en el canal al que se le asigne en este caso #noc-hunt.

espero les sea de ayuda, con este tema dejamos en paz los IRC, por un tiempo claro. Un Saludo!!!

<?
$server['host'] = "ruido.red-latina.org";
$server['port'] = "6667";
$bot['nick']="Akasha";

while ($sockstate!=6) {
    @$IRC = fsockopen ($server['host'], $server['port'], &$errno, &$errstr, 30);
    echo "conectado";
    if ($errno!="10060") {
        while(!feof($IRC)) {
            $readX = fgets($IRC);
            if ($k0n!=1) {
                fputs($IRC,"USER ".$bot['nick']." ".$bot['nick']." ".$bot['nick']." :".$bot['nick']."\n");
                fputs($IRC,"NICK ".$bot['nick']."\n\n");
                $k0n=1;
            } else {
                $readX=trim(str_replace(":","",$readX));
                $arrayX=explode(" ",$readX);
                //:z3r1t0!z3r0@irc.n3ur0n4.org PRIVMSG #n3ur0n4 :test
                $userX[0]=explode("@",$arrayX[0]);
                $hostX=$userX[0][1];
                $userX[1]=explode("!",$userX[0][0]);
                $ident=$userX[1][1];
                $nick=$userX[1][0];
                if ($arrayX[0]=="PING") {
                    fputs ($IRC,"PONG ".$arrayX[1]."\n");
                }
                if ($arrayX[1]=="255") {
                    fputs ($IRC,"JOIN #noc-hunt\n");
                }
                if ($ident!=NULL) { //messajes
                    switch ($arrayX[1]) {
                        case "PRIVMSG":
                            if ($arrayX[2]!=$bot['nick']) { //log de los comandos del canal
                                switch (strtolower($arrayX[3])) {
                                    case "!readme":
                                        fputs ($IRC,"PRIVMSG ".$arrayX[2]." :Te leo ".$nick."\n");
                                        break;
                                    case "!op":
                                        if ($arrayX[4]!=NULL) {
                                            fputs ($IRC,"MODE ".$arrayX[2]." +o ".$arrayX[4]."\n");
                                        } else {
                                            fputs ($IRC,"MODE ".$arrayX[2]." +o ".$nick."\n");
                                        }
                                        break;
                                    case "!dop":
                                        if ($arrayX[4]!=NULL) {
                                            fputs ($IRC,"MODE ".$arrayX[2]." -o ".$arrayX[4]."\n");
                                        } else {
                                            fputs ($IRC,"MODE ".$arrayX[2]." -o ".$nick."\n");
                                        }
                                        break;
                                }
                            } else { //log de los comandos por privado solo admins ;)
                                switch (strtolower($arrayX[3])) {
                                    case "!join":
                                        fputs ($IRC,"JOIN ".$arrayX[4]."\n");
                                        break;
                                    case "!off":
                                        fputs ($IRC,"QUIT BOT OFF\n");
                                        fclose ($IRC);
                                        exit();
                                        break;
                                    case "!left":
                                        fputs ($IRC,"PART ".$arrayX[4]."\n");
                                        break;
                                }
                            }
                            break; //end of privmsg
                    } //end of command switch
                }// end of messajes or actions
            } //end else connection rejoiner
            echo $readX."\n";
        }//end while for connection log
    }//end if not connected; reconnect
    $sockstate=1;
    $k0n=0;
}//end of while for infinite reconnect
?>

, , , , , ,

==================================
By: z3r0.und3r
To: #n3ur0n4
Url: http://n3ur0n4.org
Reply to: z3r0.und3r@n3ur0n4.org
==================================

==================================
Habilitar/Deshabilitar el Firewall de Windows
==================================

Este pequeño batch script no tiene nada de ciencia solo pretende dar a conocer la forma en que se puede deshabilitar el firewall de Windows desde la consola. El comando usado no ha sido probado en otro sistema operativo mas que en Windows XP, pero no hace falta decir que el probar en otros no esta permitido XD.

CODE Fire.bat
==============================

@echo off
rem Firewall switch by z3r0.und3r
rem http://n3ur0n4.org
if %1 == on netsh firewall set opmode mode = enable
if %1 == off netsh firewall set opmode mode = disable

==============================

Bien como pueden ver usamos el comando NETSH lo demás es solo intuición.

El uso del comando es “Fire on/off” claro sin comillas ;) donde Fire es el nombre con el que hayan guardado el .bat, en mi caso lo llame Fire.bat

, , , , ,

Oct/09

21

Script Instalación de Back|Track 3

==================================
By: z3r0.und3r
To: #n3ur0n4
Url: http://n3ur0n4.org
Reply to: z3r0.und3r@n3ur0n4.org
==================================

==================================
=>> Script Instalación de Back|Track 3
==================================

Como nosotros sabemos nuestro preciado Back|Track 3 no trae instalador como las versiones anteriores, así que decidí hacer un script instalador, hay muchos en la red pero ninguno como este creo. Ya que en los que encontré solo podían hacer que se instalara en un disco dado por el propio script, eso me pareció algo obsoleto, ya que muchos usuarios apenas se están adentrando al mundo Linux. Como han de ver el script se encarga de detectar que tipo de partición es, ejemplo, mi disco duro es un SATA entonces mi partición para instalar el Back|Track es /dev/sda? Donde ? es el numero de la misma. Bueno les dejo el CODEX.

Code:

echo "########~Instalacion Backtrack 3~########"
echo "# Script By Z3r0.und3r #"
echo "# http://www.n3ur0n4.org #"
echo "# Reply to: z3r0@n3ur0n4.org #"
echo "#########################################"
echo "# Antes de proseguir deveras tener ya creadas las particiones ext3 y swap y contar con privilegios de root, no te preocupes, si has iniciano el live cd tienes root automatico :D"
echo ""
read -p "Deseas proseguir con la instalacion? (y/n)" confirmacion
case $confirmacion in
y)
read -p "Número de particion donde se alojara backtrack3 (ext3): " extX
echo "Verificando particion"
df | awk '/dev/ {print $1}' > btp1
awk -F"v/" ' {print $2}' btp1 > btp2
echo "awk '/"$extX"/ {print $"1?}' btp2 > btpf" > dkom
sh dkom
echo "Verificando particion"
df | awk '/dev/ {print $1}' > btp1
awk -F"v/" ' {print $2}' btp1 > btp2
echo "awk '/"$extX"/ {print $"1?}' btp2 > btpf" > dkom
sh dkom
rm {btp1,btp2,dkom}
partX='cat btpf'
echo "Particion detectada tipo: " $partX
sleep 3
echo "Creando y montando el sistema base en " $partX
mkdir /mnt/bt3
mount /dev/$partX /mnt/bt3
echo "Directorio /mnt/bt3 creando y montado en /dev/"$partX
echo "Copiando sistema de archivos, este proceso puede tardar algunos minutos"
cp -p -R /{bin,boot,dev,home,pentest,root,usr,etc,lib,opt,sbin,var} /mnt/bt3/
mkdir /mnt/bt3/{boot,mnt,proc,sys,tmp}
echo "Remontando /dev y /proc"
mount –bind /dev/ /mnt/bt3/dev/
mount -t proc proc /mnt/bt3/proc/
chroot /mnt/bt3
echo "Instalacion del sistema base finalizada…"
echo "Ahora solo configura /etc/lilo.conf y despues ejecuta el comando 'lilo -v'"
exit;;
esac

Lo único que faltaría es grabar el MBR (Master Boot Record) para el arranque del sistema, enseguida enuncio un ejemplo de la configuración del LILO situado en /etc/lilo.conf.

Ejemplo esta es la conf de mi LILO:

Code:

# LILO configuration file
# generated by 'liloconfig'
#
# Start LILO global section
lba32 # Allow booting past 1024th cylinder with a recent BIOS
boot = /dev/sda
#message = /boot/boot_message.txt
prompt
timeout = 1200
# Override dangerous defaults that rewrite the partition table:
change-rules
reset
# VESA framebuffer console @ 1024×768x256
vga = 773
# End LILO global section
#
# BackTrack3
#
image = /boot/vmlinuz
label = Backtrack3
root = /dev/sda5
#
# WinShit
#
other = /dev/sda2
table = /dev/sda
label = WinShit

LILO trabaja con bloques para separar un sistema operativo de otro en la carga. Las líneas a modificar serán:

CODE
=======================

boot = /dev/sda
=======================

El “sda” deberá ser cambiado por el tipo de partición de tu disco.

CODE
=======================

# BackTrack3
#
image = /boot/vmlinuz
label = Backtrack3
root = /dev/sda5
=======================

Acá es donde nuestro BT3 arrancara. El “image” ese cópiale tal cual XD. La línea “label” será el nombre que usara para listarlo en la tabla de selección. Con “root” asignaremos la partición donde esta montado nuestro sistema base (igual que la instalación), en mi caso es la partición sda5.

CODE
=======================

# WinShit
#
other = /dev/sda2
table = /dev/sda
label = WinShit
=======================

Por si tenias el win32 instalado en tu maquina. Bueno seguro ya intuiras que significa cada línea

, , , , ,

n3ur0n4

#n3ur0n4 Corporation
Live Free & Die Free