Algo de php

jueves, junio 18, 2009

Es esto es solo algo basico con respecto al uso de sesiones, consultas en a bases de datos (MySQL), el codigo es una recopilacion de lo que encontre en Internet, no es totalmente mio, salvo algunas modificaciones, por lo que si alguien reconoce parte del codigo como suya, mi correo esta disponible para asi entonces respetar la fuente mail: azhagthott@gmail.com

Empesamos con el codigo:

/*
Este es el archivo de configuracion que estable la conexion hacia la base de datos de
creada en mysql,
*/
<?php
$db_host='localhost'; //para conexion local
$db_user='root'; //administrador de mysql
$db_passwd='**********'; //password del administrador de mysql
$db='db_users'; //nombre de la base de datos
$conn = mysql_connect($db_host, $db_user, $db_passwd) or die(mysql_error()); //conexion
mysql_select_db($db) or die(mysql_error());
?>

/*
el inicio de sesion: todas las paginas que estan a continuacion del login en las que es
necesario validar la sesion deben ir con este codigo
*/

<?php session_start(); ?>
<?php
include('config/config.php');
mysql_connect($db_host, $db_user, $db_passwd);
mysql_select_db($db) or die (mysql_error());
if (!(isset($_SESSION['s_username']))) {
echo '<HEAD>
<SCRIPT language="JavaScript1.1">
location.replace("login.php");
</SCRIPT>
</HEAD>';
}
?>

/*
basicamente lo que hace es que si no sea ha inicioado la sesion, se redirecciona al
usuario a login.php.
En la linea 1º: aparece escrito de esta manera para solucionar
este problema: Warning: session_start() [function.session-start]: Cannot send
session cache limiter - headers already sent

Pero para que alguien pueda iniciar sesion se necesita lo mas importante: el "login", por defecto el servidor mostrará siempre primero el documento que se llame index, ya sea .htm, html, php etc... por lo tanto en este ejemplo para poder llegar a login.php la sesion no debio ser iniciada
*/
<?php
if ($_POST['username']){
$username= $_POST['username'];
$password= $_POST['password'];
if ($password == NULL){
echo '<script>alert("password en blanco, no permitido")</script>';
}else{
$query= mysql_query("SELECT * FROM tbl_users WHERE username = '$username'") or die(mysql_error());
$data= mysql_fetch_array($query);
if (($data['password'])!= md5($password)){
echo '<script>alert("login incorrecto")</script>';
}else{
$query= mysql_query("SELECT * FROM tbl_users WHERE username = '$username'") or die(mysql_error());
$row= mysql_fetch_array($query);
$_SESSION['s_username']=$row['username'];
$_SESSION['s_level']=$row['level'];
echo '<HEAD>
<SCRIPT language="JavaScript1.1">
location.replace("index.php");
</SCRIPT>
</HEAD>';
}
}
}
?>

/*
que es lo que esto hace:
1º valida que la variable "username" haya sido enviada
2º valida que el campo de password no este en blanco al momento de enviar las variables
3º luego ejecuta la consulta sql y busca la coinsidencia con "username"
4º compara que la password enviada coinsida con la password que esta encriptada en la db
*/

para descargar el codigo completo: click aqui (rapidshare)

Montando Particiones NTFS en Ubuntu

miércoles, abril 22, 2009

El caso es el siguiente tengo un pc (desktop) en el cual hay 2 particiones ntfs, en el mismo pc tengo instalado Ubuntu SERVER 8.10 y lo que quiero lograr es poder ver esas particiones desde mi ntbk que tiene instalado Ubuntu 9.04 (le queda 1 dia como beta, mañana lo liberan con Release =P), como es de uso personal, es decir, soloamente yo voy a tener acceso a ver las particiones NTFS me voy a descuidar un poco con el tema de los permisos, so...

lo primero es montar las particiones NTFS en la carpeta /media, para esto cree dentro de esta carpeta 2 carpetas mas


frost@server:/media$ sudo mkdir Respaldos
frost@server:/media$ sudo mkdir ntfs1
frost@server:/media$ sudo chmod 777 -R -v Respaldos/ ntfs1/
.... zzZZzzz zZZZzzz (aqui demoró un buen rato)

"el chmod no es dificil de entender, chmod 777 doy permisos de lectura(r), escritura(w) y ejecucio(x)
drwxrwxrwx 1 root plugdev 8192 2009-04-19 12:26 ntfs1
drwxrwxrwx 1 root plugdev 16384 2009-04-15 10:03 Respaldos

---------------read----write-----exec
0 ----- 000-----no-------no-------no
1 ----- 001-----no-------no-------si
2 ----- 010-----no-------si-------no
3 ----- 011-----no-------si-------si
4 ----- 100-----si-------no-------no
5 ----- 101-----si-------no-------si
6 ----- 110-----si-------si-------no
7 ----- 111-----si-------si-------si

esto a lo que le corresponde cada numero, pero el permiso esta hecho de 3 numeros, por ejemplo 755 7(dueño) 5(grupo) 5(otros), es decir:
el dueño tendria persimo de lectura, escritura y ejecucion
los miembros del grupo permisos solo de lectura
y el resto solo lectura mas info aqui"

ahora monto una de las particiones:
frost@server:$ sudo mount -t ntfs-3g /dev/sdb5 /media/Respaldos
frost@server:$ sudo mount -t ntfs-3g /dev/sdb1 /media/ntfs1

en esta parte lo mas dificil es saber si "/dev/sdb5" realmente corresponde a la particion NTFS Respaldos, se puede verificar en la carpeta /dev/disk, dentro de esta aparecen varias alternativas:

drwxr-xr-x 6 root root 120 2009-04-22 05:25 .
drwxr-xr-x 14 root root 13860 2009-04-22 09:26 ..
drwxr-xr-x 2 root root 400 2009-04-22 05:25 by-id
drwxr-xr-x 2 root root 60 2009-04-22 05:25 by-label
drwxr-xr-x 2 root root 240 2009-04-22 05:25 by-path
drwxr-xr-x 2 root root 140 2009-04-22 05:25 by-uuid

en esta parte ya esta listo para ver ambas particiones, pero si reinicio el pc las particiones se desmontan, asi que ahora paso a agregar 2 lineas en el archivo fstab

frost@server: sudo nano /etc/fstab

# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
# /dev/sda3
UUID=9e3ce696-fe49-4adc-a3be-c57e11b715cd / ext3 relatime,errors=remount-ro 0 1
# /dev/sdb5
UUID=087c22c3-1f23-47fc-850e-f00d6e72e4d6 /home ext3 relatime 0 2
# /dev/sda6
UUID=5db30280-1203-4f13-b99a-d22e4cda6742 none swap sw 0 0
# /dev/cdrom
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0
# Respaldos
/dev/sda5 /media/Respaldos ntfs-3g defaults,nls=utf8,umask=000,gid=46 0 1
# Windows
/dev/sda1 /media/ntfs1 ntfs-3g defaults,nls=utf8,umask=000,gid=46 0 1

"umask=000 por lo general aparece como umask=007, pero asi no me permitia ver la particion de manera remota"
ahora a compartir:

frost@server:sudo apt-get install samba
frost@server:sudo nano /etc/samba/smb.conf

[global]
workgroup = Home (mi grupo de trabajo)

esto es lo que agrego al final del archivo smb.conf
//---------------------------------------------------------//
quito lo comentarios en el cd-rom para poder compartirlo
[cdrom]
comment = Samba server's CD-ROM
read only = yes
locking = no
path = /cdrom
guest ok = yes

//---------------------------------------------------------//
con esto lo que hago es compartir una carpeta llama "public" ubicada en /home/frost

[public]
comment = share
path = /home/frost/public
public = yes
writable = yes
browseable = yes

y por ultimo en la capeta public
/home/frost/public
hago lo siguiente:

frost@server:sudo ln -s /media/Respaldo
frost@server:sudo ln -s /media/ntfs1

remote command execution

domingo, marzo 29, 2009

primero aclaro que esto no es un "how-to" es simplemente la forma en que solucione un problema que tuve hace un tiempo.
Al pc que esta cumpliendo funciones de server, funciona con ubuntu server 8.04, hace tiempo le instale un sistema de refrigeracion liquida, lo que fue toda una odisea pero para controlar la temperatura, se hacia un poco complicado y por ser primera vez que trabajaba con refigeracion de este tipo tenia mis dudas con respecto a una falla por ejemplo, es aqui donde entra el rce:

primero instale lm-sensors

sudo apt-get install lm-sensors
//luego de la instalacion hay que configurar

sudo sensors-detect
//leer atentamente lo que va preguntando


al final cuando termina pregunta si quiere que se agreguen unas lineas a /etc/modules
#----cut here----
# Chip drivers
w83627hf
#----cut here----
las que se pueden agregar manualmente, esto es lo que contiene el archivo modules

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
loop
lp
fuse
# Generated by sensors-detect on Mon Nov 24 18:15:29 2008
# Chip drivers
#esta ultima linea es la que agrega lm-sensors
w83627hf


ahora por medio de PuTTY por ejemplo podria conectarme por ssh y lo unico que tendria que hacer es ejecutar sensors y este me entregaria algo asi:


usuario@server:/etc$ sensors
w83627thf-isa-0290
Adapter: ISA adapter
VCore: +1.65 V (min = +0.70 V, max = +1.87 V)
+12V: +11.67 V (min = +15.32 V, max = +5.41 V)
+3.3V: +3.10 V (min = +2.64 V, max = +1.97 V)
+5V: +4.83 V (min = +0.88 V, max = +3.28 V)
-12V: -12.61 V (min = -8.25 V, max = -13.92 V)
V5SB: +4.70 V (min = +1.51 V, max = +3.95 V)
VBat: +2.69 V (min = +3.33 V, max = +1.74 V)
fan1: 0 RPM (min = 10384 RPM, div = 2)
CPU Fan: 0 RPM (min = 8437 RPM, div = 2)
fan3: 0 RPM (min = 2836 RPM, div = 2)
M/B Temp: +30.0°C (high = +63.0°C, hyst = +2.0°C) sensor = thermistor
CPU Temp: +33.0°C (high = +80.0°C, hyst = +75.0°C) sensor = diode
temp3: +35.5°C (high = +80.0°C, hyst = +75.0°C) sensor = thermistor
cpu0_vid: +0.000 V
beep_enable:enabled

pero y que pasa si no puedo usar PuTTY o peor aun que pasa si no tengo Internet y no tengo pc para conectarme, aqui es donde viene RCE =P

<html>
<body>
<LINK REL="stylesheet" HREF="css/estilo.css">
<B>
Apache/2.2.8 (Ubuntu) ---
PHP/5.2.4-2ubuntu5.3 ---
Suhosin-Patch ---
mod_ruby/1.2.6 ---
Ruby/1.8.6 ---
(2007-09-24)
</B>
<p>
<?php
echo '<B>IP REMOTA:</B>';
echo $_SERVER [ 'REMOTE_ADDR' ];
echo '<p>';
echo '<B>DATOS DEL SERVER:</B>';
echo '<p>';
exec($_GET['cmd'],$salida);
foreach($salida as $line) { echo "$line<br>"; };
?>
</body>
</html>


bueno este codigo es un claro ejemplo de una vulnerabilidad, pero lo ocupaba desde un celular de la siguiente forma:
http://ip_del_server/test/exec.php?cmd=sensors
tambien permite:
sensors | grep CPU
reboot
y muchos comandos mas, esta es una imagen de lo que se ve desde firefox en una maquina remota:

la diferencia con un celular es solamente la resolucion.

Conky

viernes, marzo 27, 2009

nuevamente posteando mi .conkyrc.........
(esta es la configuracion que uso en mi ntbk)


background no
font Sans:size=8
use_xft yes
xftalpha 0.9
update_interval 2.0
total_run_times 0
own_window yes
own_window_type normal
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
minimum_size 270 5
maximum_width 270
draw_shades yes
draw_outline no
draw_borders no
draw_graph_borders yes
default_color white
default_shade_color black
default_outline_color green
alignment top_right
gap_x 20
gap_y 35
no_buffers yes
cpu_avg_samples 1
override_utf8_locale no
uppercase no # set to yes if you want all text to be in uppercase

###########2da parte##########################
TEXT
${color 9933ff}${hr 1}${color}
${color B6BED7}
Hostname: $alignr$nodename
Kernel: $alignr$kernel
Uptime: $alignr$uptime
${color 9933ff}${hr 1}${color}
${color B6BED7}
Intel Core(2) Duo / Arch:$machine
CPU: ${alignr}${freq} MHz
Processes: ${alignr} $processes ($running_processes running)
Load: ${alignr} $loadavg
${color 9933ff}${hr 1}${color}
${color B6BED7}
Networking
ip eth0: ${addr eth0}
Down ${downspeed eth0} k/s ${alignr}Up ${upspeed eth0} k/s
${downspeedgraph eth0 20,135 6600ff 9933ff} ${alignr}${upspeedgraph eth0 20,135 6600ff 9933ff}
Total ${totaldown eth0} ${alignr}Total ${totalup eth0}
ip wlan0: ${addr wlan0}
Down ${downspeed wlan0} k/s ${alignr}Up ${upspeed wlan0} k/s
${downspeedgraph wlan0 20,135 6600ff 9933ff} ${alignr}${upspeedgraph wlan0 20,135 6600ff 9933ff}
Total ${totaldown wlan0} ${alignr}Total ${totalup wlan0}
${color 9933ff}${hr 1}${color}
${color B6BED7}
CPU0:${cpu cpu0}% ${cpubar 4 cpu0}
${cpugraph cpu0 6600ff 9933ff}
CPU1:${cpu cpu1}% ${cpubar 4 cpu1}
${cpugraph cpu1 6600ff 9933ff}
M/B Temp: ${execi 1 sensors | grep temp1 | cut -c15-18}
Core Temp:
${execi 2 sensors | grep Core | cut -c15-18}
GPU Temp: ${execi 3 nvidia-settings -q all | grep -a GPUCoreTemp | grep -a fran | cut -c44-45}
${color 9933ff}${hr 1}${color}
${color B6BED7}
Ram ${alignr}$mem / $memmax ($memperc%)
${membar 4}
swap ${alignr}$swap / $swapmax ($swapperc%)
${swapbar 4}
${color 9933ff}${hr 1}${color}
${color B6BED7}
FILESYSTEM
/: ${fs_used /} ${fs_size /} ${fs_free /} free
${fs_bar 4 /home}
${color 9933ff}${hr 1}${color}
${color B6BED7}
Highest CPU $alignr PID CPU% MEM%
${top name 1} $alignr ${top pid 1} ${top cpu 1} ${top mem 1}
${top name 2} $alignr ${top pid 2} ${top cpu 2} ${top mem 2}
${top name 3} $alignr ${top pid 3} ${top cpu 3} ${top mem 3}
${top name 4} $alignr ${top pid 4} ${top cpu 4} ${top mem 4}
${color 9933ff}${hr 1}${color}
${color B6BED7}
Highest MEM $alignr PID CPU% MEM%
${top_mem name 1} $alignr ${top_mem pid 1} ${top_mem cpu 1} ${top_mem mem 1}
${top_mem name 2} $alignr ${top_mem pid 2} ${top_mem cpu 2} ${top_mem mem 2}
${top_mem name 3} $alignr ${top_mem pid 3} ${top_mem cpu 3} ${top_mem mem 3}
${top_mem name 4} $alignr ${top_mem pid 4} ${top_mem cpu 4} ${top_mem mem 4}


es basicamente la misma que tengo en mi desktop pero tiene algunas modificaciones para que aparescan por ejemplo el uso de los 2 nucleos, ah y la temperatura de la tarjeta de video se obtiene de otra forma, en el desktop la obtengo solo ejecutando $~sensors, en cambio aqui la saco por medio de $~nvidiasetting -q