<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Curso_POO_PHP_Inxecci%C3%B3n_de_c%C3%B3digo_PHP</id>
	<title>Curso POO PHP Inxección de código PHP - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Curso_POO_PHP_Inxecci%C3%B3n_de_c%C3%B3digo_PHP"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_Inxecci%C3%B3n_de_c%C3%B3digo_PHP&amp;action=history"/>
	<updated>2026-10-25T22:51:45Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_Inxecci%C3%B3n_de_c%C3%B3digo_PHP&amp;diff=36534&amp;oldid=prev</id>
		<title>Vlourido: /* Inxección de código no sistema operativo */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_Inxecci%C3%B3n_de_c%C3%B3digo_PHP&amp;diff=36534&amp;oldid=prev"/>
		<updated>2013-07-22T23:49:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Inxección de código no sistema operativo&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Inxección de código ==&lt;br /&gt;
&lt;br /&gt;
Esta vulnerabilidade baséase na inserción e execución de código alleo. Dependendo de dónde se execute ese código, podemos distinguir:&lt;br /&gt;
&lt;br /&gt;
=== Inxección de código PHP ===&lt;br /&gt;
&lt;br /&gt;
Inserción e execución de código PHP alleo na nosa aplicación web. Pode producirse entre outros nos seguintes escenarios:&lt;br /&gt;
&lt;br /&gt;
* Se empregamos &amp;#039;&amp;#039;include&amp;#039;&amp;#039;, &amp;#039;&amp;#039;include_once&amp;#039;&amp;#039;, &amp;#039;&amp;#039;require&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;require_once&amp;#039;&amp;#039; empregando o contido dunha variable como parte do nome do arquivo. Por exemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include $arquivo . &amp;quot;.php&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Unha forma de restrinxir os efectos da vulnerabilidade é empregar a directiva &amp;#039;&amp;#039;&amp;#039;allow_url_fopen&amp;#039;&amp;#039;&amp;#039; (ou &amp;#039;&amp;#039;&amp;#039;allow_url_include&amp;#039;&amp;#039;&amp;#039;) para que non se poidan engadir ficheros dende ubicacións remotas.&lt;br /&gt;
&lt;br /&gt;
* Se empregamos o constructor da linguaxe &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.eval.php eval]&amp;#039;&amp;#039;&amp;#039;. eval permite executar o código contido nunha cadea de texto. Por exemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$a = &amp;quot;17&amp;quot;;&lt;br /&gt;
eval(&amp;#039;$b = $a;&amp;#039;);&lt;br /&gt;
echo $b;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Cando o valor das variables que empreguemos dentro dun &amp;#039;&amp;#039;eval&amp;#039;&amp;#039; non estéa controlado, pode resultar na execución no noso sitio de código descoñecido. Por exemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$a = $_REQUEST[&amp;quot;valor&amp;quot;];&lt;br /&gt;
// Nótese a elección &amp;quot;pouco afortunada&amp;quot; de comiñas dobres&lt;br /&gt;
eval(&amp;quot;\$b = $a;&amp;quot;);&lt;br /&gt;
echo $b;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Por exemplo, cando o valor do parámetro &amp;#039;&amp;#039;valor&amp;#039;&amp;#039; sexa algo como &amp;#039;&amp;#039;&amp;#039;1; phpinfo();&amp;#039;&amp;#039;&amp;#039; obteremos a execución da función &amp;#039;&amp;#039;&amp;#039;phpinfo&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Se empregamos a función &amp;#039;&amp;#039;&amp;#039;[http://www.php.net/manual/es/function.unserialize.php unserialize]&amp;#039;&amp;#039;&amp;#039; para crear un obxecto a partir dunha representación de orixe non confiable. Por exemplo, cando facemos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$var = unserialize($_REQUEST[&amp;#039;representacion&amp;#039;]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:A variable $var pode pasar a ser un obxecto cun conxunto de propiedades con valores descoñecidos. Os obxectos que se recuperan empregando a función &amp;#039;&amp;#039;unserialize&amp;#039;&amp;#039; executan o método máxico [http://www.php.net/manual/es/language.oop5.magic.php#object.wakeup __wakeup] (se existe), e tamén o método [http://www.php.net/manual/es/language.oop5.decon.php#object.destruct __destruct] cando se destrúan (tamén se existe). Estes métodos poden empregarse para levar a caba accións non desexadas.&lt;br /&gt;
&lt;br /&gt;
:Por exemplo, se temos un obxecto que emprega ficheiros temporais e os borra cando se destrúe, un atacante podería crear un obxecto tal que cando se destruise borrara outro ficheiro calquera do sistema.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class inxeccion&lt;br /&gt;
{&lt;br /&gt;
   public $fich_tmp;&lt;br /&gt;
   ...&lt;br /&gt;
&lt;br /&gt;
   function __destruct()&lt;br /&gt;
   {&lt;br /&gt;
      if (file_exists($fich_tmp)) @unlink($fich_tmp);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Soamente sería necesario pasar un obxecto serializado da clase &amp;quot;inxeccion&amp;quot; con $fich_tmp apuntando ao ficheiro que desexemos eliminar.&lt;br /&gt;
&lt;br /&gt;
* Se empregamos a función &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.preg-replace.php preg_replace]&amp;#039;&amp;#039;&amp;#039; co parámetro &amp;#039;&amp;#039;&amp;#039;e&amp;#039;&amp;#039;&amp;#039; no patrón para realizar sustitucións en cadeas empregando expresións regulares. O parámetro &amp;#039;&amp;#039;e&amp;#039;&amp;#039; indica que o segundo parámetro debe avaliarse como unha expresión PHP.&lt;br /&gt;
&lt;br /&gt;
=== Inxección de código no sistema operativo ===&lt;br /&gt;
&lt;br /&gt;
Inserción e execución de código alleo que se executa sobre o sistema operativo do servidor. Prodúcese principalmente:&lt;br /&gt;
&lt;br /&gt;
* Cando empregamos unha función como &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.system.php system]&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/function.exec.php exec]&amp;#039;&amp;#039;&amp;#039; ou calquera [http://docs.php.net/manual/es/ref.exec.php función que execute algún comando no sistema operativo], incluíndo o [http://es1.php.net/manual/es/language.operators.execution.php operador de execución (&amp;#039;&amp;#039;&amp;#039;``&amp;#039;&amp;#039;&amp;#039;)], e empregamos na chamada o valor dunha variable non controlada, podemos obter como resultado a execución dun comando alleo no sistema operativo.&lt;br /&gt;
&lt;br /&gt;
:Por exemplo, se quixeramos listar os ficheiros con unha terminación determinada que se atopan no sistema de ficheiros local, poderiamos facer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$listado = system(&amp;#039;ls *.&amp;#039; . $_REQUEST[&amp;#039;terminacion&amp;#039;]);&lt;br /&gt;
echo $listado;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Pero se no parámetro &amp;quot;terminacion&amp;quot;, no canto dunha extesión como &amp;quot;php&amp;quot; obtemos algo como &amp;quot;&amp;#039;&amp;#039;&amp;#039;php; rm -r *&amp;#039;&amp;#039;&amp;#039;&amp;quot;, executarase tamén o segundo comando cos privilexios de execución de apache (ou do servidor web que execute PHP).&lt;br /&gt;
&lt;br /&gt;
:Para evitalo pódense empregar as funcións &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.escapeshellarg.php escapeshellarg]&amp;#039;&amp;#039;&amp;#039;, pensada para sanear os argumentos pasados aos intérpretes de comandos, ou &amp;#039;&amp;#039;&amp;#039;[http://es1.php.net/manual/es/function.escapeshellcmd.php escapeshellcmd]&amp;#039;&amp;#039;&amp;#039;, que sanea unha cadea que vai ser empregada como comando (argumentos incluídos).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$argumento = escapeshellarg(&amp;#039;*.&amp;#039; . $_REQUEST[&amp;#039;terminacion&amp;#039;]);&lt;br /&gt;
$listado = system(&amp;#039;ls &amp;#039; . $argumento);&lt;br /&gt;
echo $listado;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Vlourido|Víctor Lourido]] 20:58 20 jul 2013 (CEST)&lt;/div&gt;</summary>
		<author><name>Vlourido</name></author>
	</entry>
</feed>