Acá implementaremos el método POST. Tenemos un archivo php llamado datos el cual recibe el nombre, apellido, y teléfono de una persona X. No esta ubicado en ningún host, así que vamos a acceder por la dirección IP.
Datos.php:
Código
$nombre = $_POST['name'];
$apellido = $_POST['lname'];
$telefono = $_POST['tel'];
$a = fopen("buscar.php", "a");
fwrite($a, $nombre . " .. " . $apellido . " .. " . $telefono . "<br>");
fclose($a);
echo "Bien :)";
La petición iría así:
Código
POST /datos.php HTTP/1.1 (crlf)
Content-Length: 37 (crlf)
(crlf)
name=maría&lname=cristina&tel=2880000
No contiene la cabecera host, por lo que dije antes, de que solo se conectaría al ip.
Y la respuesta del servidor:
Código
HTTP/1.1 200 OK
Server: Ejemplos/1.1 (crlf)
Date: Fri 02 Nov 2007 00:00:09 GMT (crlf)
Content-Length: 7 (crlf)
(crlf)
Bien :)
El script guardaría en el archivo “Buscar.php” el nombre, apellido y teléfono de la persona la cual ingreso los datos.
Ahora para hacer todo mas dinámico les propongo un ejercicio

Resulta que el archivo “buscar.php” no estaba vació del todo, el programador se ingenuo una forma para hacer que él solo ingresara a ese archivo, pero no se percato de que el archivo podría salirse de sus manos y parar en las mías

Ahora este es el código de buscar.php:
Código
$acceso = 0;El ejercicio trata de fabricar la petición que nos dará acceso a la información que se guarda en este file… xD
$var = $_SERVER['HTTP_MD5'];
$var2 = $_POST['codigo'];
if($var2 == "HaDeS"){
if( md5($var2) == $var){
//Acceso, vista de datos y manejo de sesiones.
}else{ exit("Fuera!") };
}else{ exit("Fuera!") };
?>
maría .. cristina .. 2880000
Editado: También deberan encontrar la vulnerabilidad de algún archivo que publique mas arriba, y luego como explotarla!!
Y el segundo caso del segundo caso (envío de archivos):
Tenemos un archivo “subir.asp” con el siguiente code:
Código
Dim Archivo
Set Archivo = Server.CreateObject("Perits.Upload")
Archivo.Save(Server.MapPath("\"))
Set Archivo = Nothing
Y tenemos el formulario de envío:
Código
<form action=subir.asp method=post enctype=multipart/form-data>
<input name=archivo type=file>
<input type=submit name=Submit value=Mandar>
</form>
La petición, vamos a mandar un archivo de 25 bytes para no ampliarnos tanto:
Código
POST /subir.asp HTTP/1.0 (crlf)
Content-Type: multipart/form-data, boundary=tyoasEdRQLsovS3LUFPBS5Eyy7tOwzil (crlf)
Content-Length: 197 (crlf)
(crlf)
--tyoasEdRQLsovS3LUFPBS5Eyy7tOwzil (crlf)
Content-Disposition: form-data; name="archivo"; filename="imagen.jpg" (crlf)
Content-Type: image/jpeg (crlf)
(crlf)
Soy un jpg modificado!!! (crlf)
--tyoasEdRQLsovS3LUFPBS5Eyy7tOwzil—
Como ven, ya se pone un poco complicada la cosa, pero miremos su estructura:
Código
POST (Recurso) (Versión protocolo) (crlf)Explico varias cosas:
(Content-Type)(:) (Tipo de contenido)(,) (boundary)(=)(codigo) (crlf)
(Content-Length)(:) (Longitud de datos del cuerpo del mensaje) (crlf)
(crlf)
(codigo) (crlf)
(Content-Disposition)(:) (datos) (crlf)
(Content-Type)(:) (Tipo archivo) (crlf)
(crlf)
(contenido archivo) (crlf)
(codigo)
El content-type varia por el tipo de archivo que mandamos, si estamos mandando varios post o varios archivos este tipo sera: multipart/form-data, si es otro tipo de archivos remitirse a: http://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html
El codigo sirve para separar los diferentes post que estamos mandando, diferentes archivos por ejemplo, seria:
Código
(codigo)
Archivo 1
(codigo)
(codigo)
Archivo 2
(codigo)
El content-Length es la longitud de los datos, pero no solo de los archivos si no de todo el cuerpo del mensaje, incluyendo los códigos.
Ja! No se que mas decir jaja, a ver, en el content-disposition de la petición que armamos “Content-Disposition: form-data; name="archivo"; filename="imagen.jpg"”, se distinguen varios puntos, el “name” que es la variable que estamos enviando, y el “filename” que supuestamente es el nombre del archivo que mandamos.
Y bueno, con esto se acaba la breve explicación del protocolo http, si quieren investigar y saber más acerca de este, existe el rfc: http://tools.ietf.org/html/rfc2616.







