Observatório de sistemas
Como cheguei ao nível 16 no HTB com o Hermes
Chegar ao nível 16 foi o marco visível. O método foi preservar contexto, separar hipótese de evidência e encerrar cada sessão com um próximo passo claro.
Meu maior desperdício de tempo nos estudos no HTB não era um comando errado. Era voltar no dia seguinte e não lembrar por que eu havia descartado um caminho.[author-history-audit]
O histórico do terminal mostrava o que eu tinha executado, mas raramente preservava a pergunta que eu tentava responder. Sem esse contexto, eu repetia enumeração, reabria caminhos já esgotados e confundia atividade com progresso.[author-history-audit]
Foi esse problema que comecei a tratar com o Hermes: continuidade.[author-history-audit][decision-boundary]
Às 02:14 de 16 de julho de 2026, fiz uma captura privada do meu perfil no HTB Labs. O nível exibido era 16. A imagem documenta esse ponto final, mas não mostra meu nível inicial, quanto tempo levei nem qual parcela do resultado poderia ser atribuída a uma ferramenta.[level-16-capture][scope-audit]
Isto não é um writeup
Não vou citar máquinas, desafios, flags, credenciais, endpoints, payloads, comandos ou cadeias de exploração. O assunto aqui é o processo que usei para estudar sem começar cada sessão do zero.[scope-audit][author-history-audit][decision-boundary]
O problema era perder o estado da investigação
Minhas sessões de CTF quase nunca terminavam em um ponto limpo. Às vezes eu precisava parar com três hipóteses abertas. Em outras, havia uma observação interessante, mas ainda sem evidência suficiente para chamá-la de descoberta. Também existiam caminhos que pareciam promissores e só depois se revelavam um rabbit hole.[author-history-audit]
Se tudo isso ficasse apenas na conversa ou no terminal, a retomada dependia da minha memória. Eu precisava reconstruir perguntas básicas:[author-history-audit]
- O que foi realmente observado?
- O que era apenas uma hipótese?
- Qual caminho já havia sido descartado, e por quê?
- Que evidência mudou a direção da sessão?
- Qual era o próximo teste seguro com maior chance de produzir informação nova?
O Hermes passou a manter essas respostas em um harness local, um conjunto pequeno de arquivos com funções diferentes.[harness-structure][decision-boundary]
- scope.md — Qual é o objetivo, quais são os limites e onde devo parar?
- notes.md — O que observei, sem transformar observação em conclusão?
- commands.log — O que foi executado e em que ordem?
- hypotheses.md — O que pode explicar os sinais atuais e o que poderia refutar essa ideia?
- findings.md — Quais conclusões já têm evidência suficiente?
- trace.jsonl — Por que cada passo aconteceu, o que produziu e o que vem depois?
- lessons-candidates.md — Que aprendizado pode ser generalizado depois de revisão e sanitização?
- review.md — Onde a sessão terminou e de onde a próxima deve partir?
A separação era deliberada. Uma anotação não virava finding por parecer convincente. Uma hipótese não desaparecia quando falhava; eu registrava o motivo do descarte para não testá-la novamente sem evidência nova.[harness-structure][method-cycle]
O registro também amadureceu
O método não nasceu pronto. Nos registros mais antigos, o trace era pouco mais que uma sequência de eventos. Na versão mais completa, cada entrada passou a carregar campos como:[trace-evolution]
- timestamp
- command
- summary
- evidence
- hypothesis
- next_step
- risk
- confirmation_required
Na retomada, a diferença era prática: o terminal respondia "o que eu rodei?"; o trace também respondia "por que testei isso e o que devo verificar agora?".[trace-evolution]
O campo next_step evitava encerrar uma sessão com um vago "continuar depois". risk e confirmation_required deixavam claro quando o fluxo precisava parar para uma decisão humana. evidence obrigava a registrar o que o teste havia acrescentado, inclusive quando a resposta era "nada útil".[trace-evolution][decision-boundary]
Como uma sessão funcionava
Eu retomava pelo review.md, não pelo alvo. Primeiro verificava o que ainda era válido, quais hipóteses continuavam abertas e se o escopo havia mudado.[harness-structure][method-cycle]
Durante a sessão, tentava manter um ciclo simples:[method-cycle]
Se o teste enfraquecia a hipótese, eu atualizava seu estado. Se produzia um novo sinal, decidia se havia base para outro teste. Só uma conclusão sustentada ia para findings.md. Cada passo terminava com uma fila curta de próximos testes, não com uma lista infinita de possibilidades.[method-cycle]
No encerramento, o Hermes organizava o estado atual: o que mudou, o que foi descartado, o que ainda precisava de confirmação e qual era o próximo passo seguro. Na sessão seguinte, eu não precisava reconstruir toda a história para voltar a pensar.[method-cycle][author-observation][decision-boundary]
A regra que evitava transformar movimento em progresso
Adotei um stop gate simples. Se três passos consecutivos não produzissem evidência útil, se a mesma hipótese começasse a se repetir ou se surgisse uma ação de maior risco, eu parava a execução e revisava o estado.[stop-gate]
Essa revisão não executava ferramentas. Ela só precisava recomendar uma entre poucas decisões: continuar, enumerar mais, mudar de direção, pedir confirmação ou parar.[stop-gate]
Uma das experiências que não chegou à conclusão foi importante justamente por isso. O agente continuava produzindo atividade depois de perder a hipótese central. Havia novos passos, mas pouca informação nova. Em vez de apagar essa tentativa, usei o registro para tornar o gate mais explícito e impedir que o mesmo padrão se repetisse sem revisão.[nonconvergent-run][stop-gate]
O que o Hermes fazia, e o que continuava comigo
O Hermes me ajudava a:[decision-boundary]
- resumir o último estado verificado;
- separar observação, hipótese e finding;
- manter visíveis os caminhos descartados;
- apontar contradições e lacunas de evidência;
- organizar próximos testes e marcar risco;
- fechar a sessão com uma retomada clara.
Eu continuava responsável por escolher o alvo, decidir quais testes faziam sentido, autorizar ações, interpretar os resultados e mudar de estratégia. Mesmo quando a execução mecânica podia ser assistida, a decisão não era terceirizada.[decision-boundary]
Também tratei recuperação de conhecimento como orientação, não como prova. Metodologia genérica podia sugerir uma classe de teste, mas a sugestão entrava em hypotheses.md. Somente a resposta observada no laboratório poderia sustentar um finding.[knowledge-boundary]
A mesma separação valia para memória. Flags, credenciais, cookies, tokens e detalhes específicos do alvo não deveriam virar memória global nem lição reutilizável. Um aprendizado primeiro entrava em lessons-candidates.md; só depois de sanitização e revisão poderia se tornar metodologia genérica.[knowledge-boundary]
O que mudou na prática
Eu não cronometrei retomadas nem conduzi um experimento controlado. Portanto, não tenho uma porcentagem de ganho para publicar.[author-observation]
O benefício que observei foi mais simples: ao reabrir uma sessão, eu conseguia responder rapidamente onde estava, o que sabia, o que apenas suspeitava, o que já havia descartado e qual decisão precisava tomar em seguida.[author-observation]
Isso também melhorou a qualidade das pausas. Parar deixou de significar abandonar o raciocínio. Bastava encerrar com o estado explícito.[author-observation][method-cycle]
O que o nível 16 demonstra, e o que não demonstra[level-16-capture]
A captura registra meu perfil no nível 16 em 16 de julho de 2026, às 02:14 no horário local. Esse é o marco documentado.[level-16-capture]
Ela não registra:[level-16-capture][scope-audit]
- meu nível inicial;
- uma subida de dezesseis níveis;
- a duração total do processo;
- um resultado obtido em dois dias;
- quanto do resultado veio do Hermes;
- quanto tempo o método economizou.
Os registros locais mostram que o processo existiu e foi refinado ao longo das sessões. Isso não estabelece causalidade entre usar o Hermes e alcançar o nível 16. O que posso dizer é que o método acompanhou esse período e, na minha experiência, exigiu menos reconstrução de contexto a cada retomada.[author-history-audit][trace-evolution][author-observation][scope-audit]
A captura bruta permanece privada porque expõe o identificador do perfil e elementos do desktop. Uma eventual versão pública precisa ser recortada e sanitizada antes da publicação.[level-16-capture][scope-audit]
O aprendizado que quero preservar
Chegar ao nível 16 é o marco visível. O que pretendo reutilizar em outros laboratórios e pentests autorizados é o processo:[level-16-capture][method-cycle][decision-boundary]
- registrar antes de concluir;
- formular hipóteses que possam ser refutadas;
- não promover atividade a evidência;
- preservar o motivo de um caminho descartado;
- deixar o próximo passo explícito antes de parar;
- manter decisões de risco sob controle humano.
Na próxima sessão, o objetivo não é lembrar tudo. É abrir o registro, verificar o que ainda é verdade e tomar a próxima decisão a partir dali.[method-cycle][author-observation]
Limitações
Onde esta conclusão termina.
- Relato retrospectivo, sem medição controlada de tempo, produtividade ou causalidade.
- A captura documenta somente o nível 16 observado no ponto final.
- Materiais específicos de sessões HTB não foram incluídos no artigo nem enviados ao pipeline de IA.
- A execução não convergente é descrita apenas em nível de processo, sem detalhes reproduzíveis do alvo.
- A captura bruta permanece privada porque expõe identificador de perfil e elementos do desktop.
Proveniência
Fontes citadas.
- [level-16-capture]Captura privada sanitizada do nível observado
- [harness-structure]Auditoria humana sanitizada da estrutura do harness
- [trace-evolution]Auditoria humana sanitizada da evolução do trace
- [method-cycle]Ciclo de investigação revisado pelo autor
- [stop-gate]Stop gate revisado pelo autor
- [nonconvergent-run]Execução não convergente sanitizada
- [decision-boundary]Fronteira entre assistência e decisão humana
- [knowledge-boundary]Fronteira entre recuperação, memória e prova
- [scope-audit]Auditoria humana final de escopo e spoilers