Eliseo Ortiz WebLog
Blog de Eliseo Ortiz Valdez
Blog de Eliseo Ortiz Valdez
10 Apr
Security Enhance Linux, un proyecto impulsado por la NSA de los EUA, basado en previas investigaciones background, tiene como objetivo proveer de la funcionalidad necesaria en seguridad para sistemas operativos. En este blog iré posteando las configuraciones más comunes, con una sinopsis sencilla para cada comando. Puesto que si no se tiene bien configurado el SE Linux es preferible deshabilitarlo o bien ponerlo en moodo permisivo.
+Permitir httpd conexión al puerto 3306
setsebool -P httpd_can_network_connect=1
+permitir lectura de directorios por vsfptd
setsebook -P ftp_home_dir=1
+cambiar el contexto de un directorio movido a /var/www/html
chcon -R -t httpd_sys_content_t carpeta/
17 Mar
Introducción.
Este tutorial tiene como objetivo proveer de los pasos necesarios para empezar a desarrollar aplicaciones utilizando API de flickr para PHP. Aunque la utilización de esta API es relativamente sencilla, hay poca información desde que se crean las claves necesarias para autenticación, al realizar una petición REST. De esto tratará este breve tutorial. Para este caso utilizaremos la API PHP, no por que sea la mejor si no por que esta fue la que probé.
Requerimientos.
Tiempo para jugar, ganas para jugar.
Para este tutorial necesitaremos PHP 5.x, haber bajado la librería PHP desde: http://sourceforge.net/projects/phlickr/
Descomprimir la librería en el directorio de documentos html del servidor HTTP en uso.
Más >
17 Mar
El objetivo de dicha edición es:
Proveer las herramientas necesarias para que el profesional desarrolle o integre aplicaciones web de segunda generación, conocidas como web 2.0. Con ayuda de lenguaje de programación PHP en la parte de servidor y AJAX em la generación de Aplicaciones Ricas para la Internet (RIA).
29 Jan
La empresa MaxMind tiene disponible APIS para poder obtener información del País, ciudad, Región, Latitud y Longitud de los visitantes. A través de la IP.
La empresa cuenta con dos versiones, la gratuita, que es la que usamos en el ejemplo posterior y la de paga, donde esta última ofrece una exactitud mayor, además de estar actualizada en su base de datos cada semana.
Dichas APIS se encuentran disponibles para los siguientes lenguajes de programación: (C, Perl, PHP, Java, Python, C#, Ruby, MS COM, VB.NET, Pascal, JavaScript. Para nuestro ejemplo utilizaremos JavaScript
Ejemplo del código:
<script language="JavaScript" src="http://j.maxmind.com/app/geoip.js"></script> <br>Código del País: <script language="JavaScript">document.write(geoip_country_code());</script> <br>Nombre del País: <script language="JavaScript">document.write(geoip_country_name());</script> <br>Ciudad: <script language="JavaScript">document.write(geoip_city());</script> <br>Region: <script language="JavaScript">document.write(geoip_region());</script> <br>Nombre de la Region: <script language="JavaScript">document.write(geoip_region_name());</script> <br>Latitud: <script language="JavaScript">document.write(geoip_latitude());</script> <br>Longitud: <script language="JavaScript">document.write(geoip_longitude());</script> <br>Código Postal: <script language="JavaScript">document.write(geoip_postal_code());</script |
15 Dec
Es posible que dentro de nuestras aplicaciones PHP tendamos que requerir datos a partir de tablas en formato JSON. Para el intercambio de información o bien para aplicaciones específicas que necesiten analizar datos en este formato.
JSON (JavaScript Object Notation) es un formato para intercambio de datos ligero. Fácil
de lectura y escritura para los humanos y fácil para las máquinas analizar y generar.
Aunque JSON es un formato de texto es completamente independiente de cualquier
lenguaje sin embargo usa convenciones que son familiar a programadores de lenguajes
provenientes de la familia del lenguaje de programación C, incluyendo C++, C#, java,
JavaScript, Perl, Python y mpara intercambio de datos.
Más >
19 Oct
En un post anterior mostramos como obtener el bytecode a partir de un código en C.
Ahora mostraremos diversas cualidades de GCC que explotaremos para generar el código máquina, código objeto y código ejecutable.
El programa que se utilizaré para los fines prácticos es el siguiente, que llamaremos shellcode.c:
#include int main(void){ char *arg[2]; arg[0] = "/bin/sh"; arg[1] = NULL; execve("/bin/sh", arg, NULL); } |
Para compilar el código anterior basta con realizar lo siguiente:
$gcc -o shellcode -ggdb -static shellcode.c
La bandera -ggdb produce información de depuración usada por GDB.
Si deseamos el código ensamblador ejecutamos las siguientes directrices con gcc:
$gcc -S -o shellcode.s shellcode.c
Para obtener el “código binario” a partir del código ensamblador:
Para caso de FreeBSD:
$nasm -f aoutb shellcode.asm
Para el caso de linux:
$nasm -f elf shellcode.asm
Para el caso de Mac OS X:
$as -o shellcode.o shellcode.s
Del código binario a código ejecutable:
Para el caso de linux:
$ld -s -o shellcode shellcode.o
Para el caso de Mac OS X:
$gcc -o shellcode shellcode.o
Para observar el código máquina y ensamblador de un ejecutable:
$objdump -d shellcode
Para el caso de Mac OS X será necesario tener instalado binutils, si este no se encuentra instalado,
es posible utilizar darwin port para esto, ejecutando lo siguiente:
$sudo port install binutils
A continuación la salida del comando anterior ejecutado:
shellcode: file format elf32-i386 Disassembly of section .init: 08048250 <_init>: 8048250: 55 push %ebp 8048251: 89 e5 mov %esp,%ebp 8048253: 83 ec 08 sub $0x8,%esp 8048256: e8 79 00 00 00 call 80482d4 804825b: e8 00 01 00 00 call 8048360 8048260: e8 eb 01 00 00 call 8048450 <__do_global_ctors_aux> 8048265: c9 leave 8048266: c3 ret Disassembly of section .plt: 08048268 <__gmon_start__@plt-0x10>: 8048268: ff 35 90 95 04 08 pushl 0x8049590 804826e: ff 25 94 95 04 08 jmp *0x8049594 8048274: 00 00 add %al,(%eax) ... 08048278 <__gmon_start__@plt>: 8048278: ff 25 98 95 04 08 jmp *0x8049598 04827e: 68 00 00 00 00 push $0x0 8048283: e9 e0 ff ff ff jmp 8048268 <_init+0x18> 08048288 <__libc_start_main@plt>: 8048288: ff 25 9c 95 04 08 jmp *0x804959c 804828e: 68 08 00 00 00 push $0x8 8048293: e9 d0 ff ff ff jmp 8048268 <_init+0x18> 08048298 : 8048298: ff 25 a0 95 04 08 jmp *0x80495a0 804829e: 68 10 00 00 00 push $0x10 80482a3: e9 c0 ff ff ff jmp 8048268 <_init+0x18> Disassembly of section .text: 080482b0 <_start>: 80482b0: 31 ed xor %ebp,%ebp 80482b2: 5e pop %esi 80482b3: 89 e1 mov %esp,%ecx 80482b5: 83 e4 f0 and $0xfffffff0,%esp 80482b8: 50 push %eax 80482b9: 54 push %esp 80482ba: 52 push %edx 80482bb: 68 d0 83 04 08 push $0x80483d0 80482c0: 68 e0 83 04 08 push $0x80483e0 80482c5: 51 push %ecx 80482c6: 56 push %esi 80482c7: 68 84 83 04 08 push $0x8048384 80482cc: e8 b7 ff ff ff call 8048288 <__libc_start_main@plt> 80482d1: f4 hlt 80482d2: 90 nop 80482d3: 90 nop 080482d4 : 80482d4: 55 push %ebp 80482d5: 89 e5 mov %esp,%ebp 80482d7: 53 push %ebx 80482d8: 83 ec 04 sub $0x4,%esp 80482db: e8 00 00 00 00 call 80482e0 80482e0: 5b pop %ebx 80482e1: 81 c3 ac 12 00 00 add $0x12ac,%ebx 80482e7: 8b 93 fc ff ff ff mov 0xfffffffc(%ebx),%edx 80482ed: 85 d2 test %edx,%edx 80482ef: 74 05 je 80482f6 80482f1: e8 82 ff ff ff call 8048278 <__gmon_start__@plt> 80482f6: 58 pop %eax 80482f7: 5b pop %ebx 80482f8: c9 leave 80482f9: c3 ret 80482fa: 90 nop 80482fb: 90 nop 80482fc: 90 nop 80482fd: 90 nop 80482fe: 90 nop 80482ff: 90 nop 08048300 <__do_global_dtors_aux>: 8048300: 55 push %ebp 8048301: 89 e5 mov %esp,%ebp 8048303: 53 push %ebx 8048304: 83 ec 04 sub $0x4,%esp 8048307: 80 3d ac 95 04 08 00 cmpb $0x0,0x80495ac 804830e: 75 3f jne 804834f <__do_global_dtors_aux+0x4f> 8048310: b8 b8 94 04 08 mov $0x80494b8,%eax 8048315: 2d b4 94 04 08 sub $0x80494b4,%eax 804831a: c1 f8 02 sar $0x2,%eax 804831d: 8d 58 ff lea 0xffffffff(%eax),%ebx 8048320: a1 a8 95 04 08 mov 0x80495a8,%eax 8048325: 39 c3 cmp %eax,%ebx 8048327: 76 1f jbe 8048348 <__do_global_dtors_aux+0x48> 8048329: 8d b4 26 00 00 00 00 lea 0x0(%esi),%esi 8048330: 83 c0 01 add $0x1,%eax 8048333: a3 a8 95 04 08 mov %eax,0x80495a8 8048338: ff 14 85 b4 94 04 08 call *0x80494b4(,%eax,4) 804833f: a1 a8 95 04 08 mov 0x80495a8,%eax 8048344: 39 c3 cmp %eax,%ebx 8048346: 77 e8 ja 8048330 <__do_global_dtors_aux+0x30> 8048348: c6 05 ac 95 04 08 01 movb $0x1,0x80495ac 804834f: 83 c4 04 add $0x4,%esp 8048352: 5b pop %ebx 8048353: 5d pop %ebp 8048354: c3 ret 8048355: 8d 74 26 00 lea 0x0(%esi),%esi 8048359: 8d bc 27 00 00 00 00 lea 0x0(%edi),%edi 08048360 : 8048360: 55 push %ebp 8048361: 89 e5 mov %esp,%ebp 8048363: 83 ec 08 sub $0x8,%esp 8048366: a1 bc 94 04 08 mov 0x80494bc,%eax 804836b: 85 c0 test %eax,%eax 804836d: 74 12 je 8048381 804836f: b8 00 00 00 00 mov $0x0,%eax 8048374: 85 c0 test %eax,%eax 8048376: 74 09 je 8048381 8048378: c7 04 24 bc 94 04 08 movl $0x80494bc,(%esp) 804837f: ff d0 call *%eax 8048381: c9 leave 8048382: c3 ret 8048383: 90 nop 08048384 : 8048384: 8d 4c 24 04 lea 0x4(%esp),%ecx 8048388: 83 e4 f0 and $0xfffffff0,%esp 804838b: ff 71 fc pushl 0xfffffffc(%ecx) 804838e: 55 push %ebp 804838f: 89 e5 mov %esp,%ebp 8048391: 51 push %ecx 8048392: 83 ec 24 sub $0x24,%esp 8048395: c7 45 f4 a0 84 04 08 movl $0x80484a0,0xfffffff4(%ebp) 804839c: c7 45 f8 00 00 00 00 movl $0x0,0xfffffff8(%ebp) 80483a3: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp) 80483aa: 00 80483ab: 8d 45 f4 lea 0xfffffff4(%ebp),%eax 80483ae: 89 44 24 04 mov %eax,0x4(%esp) 80483b2: c7 04 24 a0 84 04 08 movl $0x80484a0,(%esp) 80483b9: e8 da fe ff ff call 8048298 80483be: 83 c4 24 add $0x24,%esp 80483c1: 59 pop %ecx 80483c2: 5d pop %ebp 80483c3: 8d 61 fc lea 0xfffffffc(%ecx),%esp 80483c6: c3 ret 80483c7: 90 nop 80483c8: 90 nop 80483c9: 90 nop 80483ca: 90 nop 80483cb: 90 nop 80483cc: 90 nop 80483cd: 90 nop 80483ce: 90 nop 80483cf: 90 nop .... |
Fuentes:
http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/
http://developer.apple.com/mac/library/documentation/DeveloperTools/Reference/Assembler/000-Introduction/introduction.html
17 Oct
VMware Fusion es un producto de la empresa VMware para virtualizar sistemas operativos en cualquier MAC con procesador Intel.
En ocasiones es necesario cambiar la configuración de interfaces de red, estas propias para cada sistema operativo virtualizado. A continuación la serie de comandos necesarios a ejecutar en una terminal para poder realizar los cambios necesarios.
vim /Library/Application\ Support/VMware\ Fusion/vmnet1/dhcpd.conf /* editamos dhcod.conf de la interfaz seleccionada realizando los cambios a nuestra conveniencia */
/Library/Application\ Support/VMware\ Fusion/boot.sh –stop
rm /Library/Application\ Support/VMware\ Fusion/locations
/Library/Application\ Support/VMware\ Fusion/vmware-config-net.pl
/*aquí el script realizará las configuraciones necesarias*/
/Library/Application\ Support/VMware\ Fusion/boot.sh –start
6 Sep
El siguiente código es útil cuando se requiere formatear una cadena de caracteres en texto e insertar cada palabra en una celda, dentro de una tabla HTML.
function get_Rows_Table($chain){ $col = array(); for($j=0;strlen($chain)>0;$j++){ /*obteniendo cada columna*/ $pos = strrpos($chain," ",0); $col_chain = substr($chain,$pos); $col[$j] = $col_chain; $chain = mb_substr($chain,0,$pos); } $string="<tr>"; for($i=count($col);$i>0;$i--){ $string .= "<td style='border:1px solid black;'>".$col[$i]."</td>"; } $string .="</tr>"; return $string; } |
Para usar esta función solo basta con realizar lo siguiente:
$cadena_texto ="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse in leo non ante mollis hendrerit"; $output = "<table><tbody>"; $ouput .= get_Rows_Table($output); $output .= "</tbody></table>"; echo $output; |
19 Aug
Documento en inglés donde mostramos diez mejores prácticas para evitar amenazas de seguridad en computadores personales.
19 Aug
El siguiente documento se encuentra basado en la recomendación que proporciona la NSA para asegurar redes que se encuentren dentro del estándar IEEE 802.11.