|
81
|
Seguridad Informática / Hacking / [Iniciación]Explotación de vulnerabilidades teoria + práctica
|
en: 3 Abril 2010, 17:30 pm
|
Hola amigos, porfin voy a contribuir a esta seción, se que habrá buenas y malas criticas (quizás mas malas ) pero bueno: Hace poco he abierto mi blog donde publico articulos de todo tipo relacionados con la informatica, he creado uno en concreto sobre vulnerabilidades de servicios remotos, funcionamiento del ataque y demás, teoria explicacion de un BoF y practica con metasploit. Pongo el enlace al articulo en concreto puesto que no lo considero spam, al ser un articulo maquetado con html y otros que perderia valor sin este, si lo consideran spam borren el link, pero ya digo que no es ni mucho menos mi intención hacerlo: http://www.0x81team.co.cc/?p=23Espero que les sirva y que lo disfruten. Saludos
|
|
|
82
|
Programación / ASM / Mi segundo programa en ASM
|
en: 2 Abril 2010, 12:19 pm
|
Hola a todos, esta vez he querido leer un caracter de stdin pero hay segmentation fault, es porque alamaceno lo leido en esi y no soy capaz de derteminar la length de este para darselo al sys_write, es basicamente un programa de echo: section .text global _start ;parida que necesita el linker xD _start: ;entry point pop ebx pop ebx pop ebx pop ebx mov eax,5 add ebx,ecx mov edx,len ;Longitud del mensaje mov ecx,msg ;Mensaje que vamos a escribir mov ebx,1 ;file descriptor (stdout) mov eax,4 ;llama de sistema numero 4 (sys_write) int 80h ;call al kernel para que ejecute las sentencias pushad ;Guardamos registros pushfd ;Guardamos flags mov eax, 3 ;sys_read(3) mov ebx, 0 ;stdin (0) mov ecx, esi ;Guardamos la string en esi mov edx, 1 ;nnumero de bytes a leer int 80h ;llamada al kernel de linux popfd ;re-establecemos flags popad ;re-establecemos registros ret ;retorno para llamar al procedimiento mov edx,length2 ;longitud del mensaje mov ecx,esi ;mensaje a escribir mov ebx,1 ;file descriptor (stdout) mov eax,4 ;llamada a sistema numero 4 (sys_write) int 80h ;linux esta aqui! mov eax,1 ;llamada a sistema numero 1 (sys_exit) int 80h ;llamada al kernel, linux acabará con la ejecución del proceso section .data msg db 'Hola mundo!',10 ;la primera cadena mensaje2 db 'a',10 len equ $ - msg ;longitud de nuestra cadena length2 equ $ - mensaje2
Saludos
|
|
|
83
|
Programación / ASM / Mi primer programa en NASM
|
en: 2 Abril 2010, 11:51 am
|
Hola a a todos, me va gustando esto del asm xD Mirad he hecho mi primer code, muy sencillo un hi World clasico pero con unas cosillas mas: section .text global _start ;parida para tener al linker contento _start: ;entry point mov edx,len ;colocamos en edx como primer argumento de la llamada a sys_write len mov ecx,msg ;en ecx el segundo argumento que es una define double word (la cadena) mov ebx,1 ;el file descriptor, el out standard mov eax,4 ;llamada a sistema (sys_write) int 80h ;llamamos al kernel para que ejecute jmp segundaLlamada ;salto incondicional a otra seción de codigo segundaLlamada: mov edx,length2 ;lo mismo de antes mov ecx,mensaje2 ;lo mismo mov ebx,1 ;lo mismo mov eax,4 ;mas de lo mismo int 80h ;mas todavia mov eax,1 ;llamamos a 1 (sys_exit) mov ebx,0 ;codigo de salida, o eso he entendido int 80h ;otra vez mi querido linux section .data msg db 'Hola mundo!',10 ;cadena mensaje2 db 'Y buenos dias NASM',10 len equ $ - msg ;cadena length2 equ $ - mensaje2
El problema es que ejecuta 3 veces el syswrite cuando solo deberian ser dos, debuggeo y me fijo en que hace el salto a segundaLlamada y despues de eso la vuelve a ejecutar. Como es eso? Otra duda, como es que no puedo poner el valor de salto de linea como ah? si es 0x0a porque no puedo poner ah tengo que poner 10 o 0xa no lo entiendo con 0x80 si me deja pues pongo 80h. Saludos Saludos
|
|
|
85
|
Programación / ASM / Duda sobre OPCODE
|
en: 1 Abril 2010, 17:06 pm
|
Hola a todos, estoy aprendiendo asm, y para comprenderlo mejor y llegar a hacer virguerias que se ven por ahi, he decidido leerme la teoria completa de los procesadores y CPU, y como se codifican las instruciones de asm a opcode para ejecutar, por ejemplo: La instrucion que suma los registros EAX y EBX y almacena el resultado en EAX (es add si no me equivoco), como es que luego se codifica a: 03 c3 y presupongo que si hago por ejemplo un payload que haga esa operacion con los registros seria algo asi a injectar:
\x03\xC3 que vendria a ser 0x03 y 0xC3 como se hace esa transformación? Osea que la equivalencia de los valores ASCII en hexadecimal que encuentro cuando abro un programa con Text plano son los opcode? Perdonad si quizás este diciendo burradas, pero son cosas que he querido saber siempre. Otra pregunta, el operador db para que sirve? deduzco que es para alamacenar en memoria, pero no lo se seguro.
Saludos
|
|
|
86
|
Programación / Java / Resolucion de sistemas de ecuaciones sencillos
|
en: 31 Marzo 2010, 10:55 am
|
Hola a todos, ya tengo mi procesador de expresiones algebraico-aritmeticas, resuelve expreiones facilmente, ahora quiero dar el paso y conseguir hacerlo con expresiones de dos miembros, osease, ecuaciones con 1 o mas incognitas. Tengo por ejemplo esta expresion: 5*49/2*a == 15 La evaluo, proceso y me pide un valor para a se lo doy y si no cumple la expresión, devuelve 0 (false) si la cumple devuelve 1 (true). Ahora estoy planteando una manera de aislar la incognita en uno de los miembros de la ecuacion, para resolverla, añadirla ala expresion inicial y comprovar que es correcta. La pregunta es como? He imaginado 3 maneras posibles: La primera, es haciendo el bestia, y usando puerza bruta, aunmentando la variable de 0,001 en 0,001 e ir probando pero será muy inexacto y es probable que en muchas ocasiones no lo encuentre, eso sin contar con el uso de memoria que requeriria un bucle de ese nivel. La segunda es identificando el grado de la ecuacion, aislar las incognitas y aplicar la formula correspondiente. La tercera es haciendolo literalmente, osea moviendo caracteres por la cadena, y detectando el simbolo que lleva para luego dejar la incognita sola y evaluar la expresión. Esto eliminando posibilidades puede resultar muy tedioso de programar, y quizas, que estoy seguro que habrá metodos mas sencillos que estos. Un saludo
|
|
|
87
|
Programación / Java / [ACTUALIZADO FUNCIONAL]Analizador de expresiones numéricas [SOURCE]
|
en: 30 Marzo 2010, 10:42 am
|
Hola a todos, tengo ya casi acabado el analizador de expresiones numéricas, le introduces una expresion aritmetica con variables inclusive, la analiza y resuelve, pero aun tiene un error que no he conseguido solucionar, os dejo el codigo y el error: package main; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import java.util.Vector; import net.java.dev.eval.Expression; public class principal { //Por cutre que parezca, si he metido el abecedario en una matriz para identificar incognitas... //xD public static char[] TokensVariables = {'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N', 'o', 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z'}; public static int cuantasVariables = 0; public static Vector <Character > vectorOperandos = new Vector(10, 5); public static Vector <Character > vectorVariables = new Vector(10, 5); public static void main (String args []) { System. out. println("\n"+Procesador (preProcesador (expresion ), expresion )); //La recursividad es inutil aqui, o quizas lo soy yo... } static int[] preProcesador (String argumento ) { char[] TokensOperandos = {'+', '-', '*', '/', '^'}; char[] TokensVariables = {'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N', 'o', 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z'}; int countOperandos = 0; int countVariables = 0; /*BUCLE SEPARADOR DE OPERANDOS*/ /*-NOTA: ESTE ALGORITMO SE PUEDE MEJORAR, PUES EL BUCLE SOBRECARGA*/ // ^ // | //La pereza hace cosas muy malas... -----| //Bucle que busca operandos y los distribuye en memoria for(int i = 0; i< argumento.length(); i++) { //Bucle para recorrer la matriz con los tokens for(int j = 0; j < TokensOperandos.length; j++) { char chVolatil = TokensOperandos[j]; //Un caprichito de programador idiota :P if(argumento.charAt(i) == chVolatil) { vectorOperandos.add(chVolatil); countOperandos++; } } } /*BUCLE PARA SEPARAR VARIABLES */ /*-NOTA: ESTE ALGORITMO SE PUEDE MEJORAR, PUES EL BUCLE SOBRECARGA*/ // ^ // | //La pereza hace cosas muy malas... -----| for(int i = 0; i < argumento.length(); i++) { //Bucle para recorrer la matriz con los tokens for(int j = 0; j < TokensVariables.length; j++) { char varVolatil = TokensVariables[j]; //Un caprichito de programador idiota :P if(argumento.charAt(i) == varVolatil) { vectorVariables.add(varVolatil); countVariables++; } } }//Que poco me gusta trabajar, y como se nota el copypaste de este fragmento... //Para que codearlo 2 veces? Es inutil hacerlo :P System. out. print("Estos son los " + vectorOperandos. size() + " operandos que hay en la expresion:\n" ); for(int i=0; i<vectorOperandos.size(); i++){ if(i == 0) { System. out. print(vectorOperandos. elementAt(i )); }else{ System. out. print(","+vectorOperandos. elementAt(i )); } } System. out. println("/////////////////////////////////////////////////////////////////////////////// "); System. out. println("############################################################################### "); System. out. println("/////////////////////////////////////////////////////////////////////////////// "); System. out. print("Y aqui estan las " + vectorVariables. size() + " variables o incognitas de la expresion:\n"); for(int i=0; i<vectorVariables.size(); i++){ if(i == 0) { System. out. print(vectorVariables. elementAt(i )); }else{ System. out. print(","+vectorVariables. elementAt(i )); } } int[] salida = {countOperandos, countVariables}; return salida; } { Expression exp = new Expression(que); Map<String, BigDecimal> variables = new HashMap<String, BigDecimal>(); for(int j = 0; j < cuantos[1]; j++) { System. out. print("\nDame un valor para la variable " + vectorVariables. elementAt(j ) + " :\n"); try { String expresionVolatil = br. readLine(); variables. put(String. valueOf(vectorVariables. elementAt(j )), Procesador (preProcesador (expresionVolatil ), expresionVolatil )); e.printStackTrace(); } } return result; } }
Y aqui la salida de la ejecucion del programita en cuestion: OUT: Ya depurado el programa hace su funcion especial solo tiene un pequeño fallo que no soy capaz de ver: Estos son los 2 operandos que hay en la expresion: [*,+] /////////////////////////////////////////////////////////////////////////////// ############################################################################### /////////////////////////////////////////////////////////////////////////////// Y aqui estan las 2 variables o incognitas de la expresion: [x,b] Dame un valor para la variable x : 5*3 Estos son los 3 operandos que hay en la expresion: [*,+,*] /////////////////////////////////////////////////////////////////////////////// ############################################################################### /////////////////////////////////////////////////////////////////////////////// Y aqui estan las 2 variables o incognitas de la expresion: [x,b] Dame un valor para la variable b : 6*x Estos son los 4 operandos que hay en la expresion: [*,+,*,*] /////////////////////////////////////////////////////////////////////////////// ############################################################################### /////////////////////////////////////////////////////////////////////////////// Y aqui estan las 3 variables o incognitas de la expresion: [x,b,x] Dame un valor para la variable x : 15 Estos son los 4 operandos que hay en la expresion: [*,+,*,*] /////////////////////////////////////////////////////////////////////////////// ############################################################################### /////////////////////////////////////////////////////////////////////////////// Y aqui estan las 3 variables o incognitas de la expresion: [x,b,x] 120
Ese seria el desarrollo de la expresión 2*x+b El problema es que cuando cuando un valor para una variable, si introduzco otra expresion que tenga otra variable y no es una de las que estaban en la principal no funciona, aqui os dejo para que lo veais con vuestros propios ojos: Estos son los 2 operandos que hay en la expresion: [*,+] /////////////////////////////////////////////////////////////////////////////// ############################################################################### /////////////////////////////////////////////////////////////////////////////// Y aqui estan las 2 variables o incognitas de la expresion: [x,b] Dame un valor para la variable x : 5*x Estos son los 3 operandos que hay en la expresion: [*,+,*] /////////////////////////////////////////////////////////////////////////////// ############################################################################### /////////////////////////////////////////////////////////////////////////////// Y aqui estan las 3 variables o incognitas de la expresion: [x,b,x] Dame un valor para la variable x : 7 Estos son los 3 operandos que hay en la expresion: [*,+,*] /////////////////////////////////////////////////////////////////////////////// ############################################################################### /////////////////////////////////////////////////////////////////////////////// Y aqui estan las 3 variables o incognitas de la expresion: [x,b,x] Dame un valor para la variable b : 6*d <----- Aqui introduzco una nueva variable, que teoricamente tendria que analizar y pedir un valor para esta Estos son los 4 operandos que hay en la expresion: [*,+,*,*] /////////////////////////////////////////////////////////////////////////////// ############################################################################### /////////////////////////////////////////////////////////////////////////////// Y aqui estan las 4 variables o incognitas de la expresion: [x,b,x,d] Dame un valor para la variable x : <-------Sin embargo pide para X y no para d que es la que he pedido y como se aprecia abajo no tiene valor para d puesto que no ha pedido para esta, si no para X 1 Exception in thread "main" java.lang.RuntimeException: no value for variable "d" at net.java.dev.eval.Operation.evaluateOperand(Operation.java:128) at net.java.dev.eval.Operation.eval(Operation.java:107) at net.java.dev.eval.Expression.eval(Expression.java:161) at main.principal.Procesador(principal.java:123) at main.principal.Procesador(principal.java:118) at main.principal.main(principal.java:26) Estos son los 4 operandos que hay en la expresion: [*,+,*,*] /////////////////////////////////////////////////////////////////////////////// ############################################################################### /////////////////////////////////////////////////////////////////////////////// Y aqui estan las 4 variables o incognitas de la expresion: [x,b,x,d]
Haber si me pueden ayudar con este ultimo problema. Saludos
|
|
|
88
|
Programación / Java / Añadir simbolos de operacion desde cadena y viceversa
|
en: 29 Marzo 2010, 15:31 pm
|
Hola atodo, he codeado esto: package equlator; /** * * @author root */ public class Main { /** * @param args the command line arguments */ public static void main (String[] args ) { //procesador(operacion); } public static int procesador (String proceso ) { //Variable de instancia donde quedara definida la operacion convertida a string int procesado = 0; //Matriz de caracteres de toda la cadena procesada char[] matrizCaracteres = proceso.toCharArray(); int[] bufferAritmetico = null; System. out. println("Procesando expresion aritmetico-algebraica...."); for(int a = 0; a < proceso.length(); a++) { System. out. println(matrizCaracteres [a ]); if(Character. toString(matrizCaracteres [a ]). equals("+") || Character. toString(matrizCaracteres [a ]). equals("*") || Character. toString(matrizCaracteres [a ]). equals("/") || Character. toString(matrizCaracteres [a ]). equals("-")) { if(Character. toString(matrizCaracteres [a ]). equals("+")) { bufferAritmetico[a] = +; }else{ } }else{ bufferAritmetico [a ] = Integer. parseInt(Character. toString(matrizCaracteres [a ]). trim()); } } System. out. println(bufferAritmetico ); return procesado; } }
Mi problema es que no puedo pasar una expresion aritmetica que se recoje de forma String a int, he intentado hacer un pequeño procesador que analiza la cadena y va trasladando los valores a un array int, pero los simbolos de suma multiplicacion res y division no se traspasan. Dentro del bucle logico del procesador he creado un encadenamiento de condiciones para determinar si el caracter o valor que se va analizar en ese loop es un caracter de operacion aritmetico. Asi lo hago y si se cumple intento asignar el valor con su equivalente en Integer a la posicion de la matriz determinada por el loop y la variable instancia de este. Espero que me puedan ayudar. Saludos
|
|
|
89
|
Programación / Java / Duda variables JSP
|
en: 21 Marzo 2010, 15:46 pm
|
Hola a todos, estoy haciendome una web usando el JSP, y he encontrado que a diferencia de mi querido PHP no puedo modificar variables a través de la url al estilo: index.jsp?secion=1 Simplemente no cambia nada, os muestro el codigo: <%! public int secion = 0;%> <% out.println("Bienvenido a mi web<br/>"); out.println(" <b>Pagina de ejemplo JSP </b>"); switch(secion) { case 0: out.println("Has cojido la uno!"); break; case 1: out.println("Has cojido la dos!"); break; } %> Fecha actual: <%= new java.util.Date() %>
Tan moderno que es jsp y mira que no se podrá dividir en modulos xD Saludos
|
|
|
90
|
Seguridad Informática / Wireless en Linux / Wifiway o Wifislax?
|
en: 20 Marzo 2010, 14:06 pm
|
Hola a todos, estoy haciendo unas auditorias de mi red, en este momento, en concreto la de wireless, y no se que distro escojer. Wifiway o wifislax? que diferencia hay? Cuala es mejor?
Saludos
|
|
|
|
|
|
|