Neste artigo resolveremos a tarefa 25 do sitio
Información organizativaEspecialmente para aqueles que queiran aprender algo novo e desenvolverse en calquera área da información e seguridade informática, escribirei e falarei sobre as seguintes categorías:
- PWN;
- criptografía (Crypto);
- tecnoloxías de rede (Rede);
- inversa (Enxeñaría inversa);
- esteganografía (Stegano);
- busca e explotación de vulnerabilidades WEB.
Ademais disto, compartirei a miña experiencia en informática forense, análise de malware e firmware, ataques a redes sen fíos e redes de área local, realización de pentests e escritura de exploits.
Para axudarche a estar ao día dos novos artigos, software e outra información, creei
Toda a información preséntase só con fins educativos. O autor deste documento non acepta ningunha responsabilidade polos danos causados a ninguén como resultado do uso dos coñecementos e técnicas obtidos co estudo deste documento.
Resolvendo a tarefa otp
Continuemos coa segunda sección. Enseguida direi que é máis complicado que o primeiro, pero esta vez non proporcionan o código fonte do programa. Non te esquezas da discusión aquí (https://t.me/RalfHackerPublicChat) e aquí (https://t.me/RalfHackerChannel). Imos comezar.
Fai clic na icona coa sinatura otp. Ofrécenos un enderezo e un porto para conectarnos.
Conectamos e miramos ao redor do servidor.
Unha bandeira que non podemos ler, un programa e o seu código fonte. Vexamos a fonte.
Imos resolver. O programa toma un contrasinal como argumento.
A continuación, almacénanse 16 bytes aleatorios na variable otp.
No cartafol tmp créase un ficheiro cun nome aleatorio (os primeiros 8 bytes son otp) e escríbense nel 8 bytes aleatorios (os segundos 8 bytes son otp).
Por algún motivo, o valor do ficheiro creado é lido e comparado co contrasinal introducido.
Aquí é onde entra a vulnerabilidade. Consiste en gardar de forma intermedia o número xerado nun ficheiro. Podemos limitar o tamaño do ficheiro, por exemplo, a 0, entón ao escribir e ler, compararase co contrasinal 0. Isto pódese facer así.
# ulimit -f 0
Agora imos executar o programa.
Recibimos un erro. Non importa, pódese procesar usando o mesmo python.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')"
Conseguimos a bandeira e os nosos 100 puntos fáciles. E seguimos: no seguinte artigo tocaremos na Rede. Podes unirte a nós en
Fonte: www.habr.com