🥷
Red Team Articles
Linktree
  • ⚙️Binary Exploitation
    • PWN com 1 byte
    • GOT e PLT
    • Hook na GOT
  • 🌐Web
    • Mysql Case Sensitive Problems
    • Ruby: regex authentication bypass
    • CVE-2023-38964
  • 📲Mobile
    • 🍎iOS Pentest
      • 🤖How to use Frida on iOS 17 without Jailbreak
      • 💻Setup Lab
      • 📦Insecure Data Storage
        • Dump keychain datas
      • 🔙Server Side Vulnerabilities
        • Setup Proxy
        • Pentest on Server Side
      • ⚙️Client Side Vulnerabilities
        • Account theft
        • Insecure Logging
      • 🖱️Pasteboard & Clipboard
    • 🤖Android Pentest
      • AB - Android Backup
  • 🐳Docker
    • 🚪Backdooring docker container
    • 🪜Docker breakout
      • docker.sock
      • privileged flag
      • environments
    • 🏎️Docker assessment
      • Assessment with trivy
      • Assessment with docker bench security
    • 🛡️Defenses
      • AppArmor
      • SecComp
      • Capabilities
      • Docker content trust
    • 📖Namespaces
  • 🖥️SSH Tricks
  • Network
    • VPN WireGuard com pfSense + RestAPI
Powered by GitBook
On this page
  • Introdução
  • Bypass Time
  • Considerações
  • Links de apoio
  1. Web

Ruby: regex authentication bypass

PreviousMysql Case Sensitive ProblemsNextCVE-2023-38964

Last updated 2 years ago

Introdução

Vamos começar analisando o ambiente que iremos atacar:

Esse código irá verificar se a entrada do usuário não possui caracteres especiais, os caracteres permitidos são: caracteres numéricos e letras

Se digitarmos outro valor por exemplo "<" a aplicação irá retornar "Malicious Input Detected".

Após entender o comportamento da aplicação precisamos bypassar esse filtro pra conseguirmos obter SSTI (pressumi que seria isso por estar usando um sistema de templates)

Bypass Time

Em regex o ^ e $ indicam respectivamente início e fim de linha, ou seja, esa expressão regular está verificando o início e fim de cada linha, então se uma linha for suficiente conseguimos bypassar o filtro, podemos utilizar o \n para isso, para explorar podemos utilizar o Burp ou o curl

Com o Burp eu tive que acrescenter um \n para conseguir bypassar, depois vi outras soluções na internet e vi que com o curl conseguimos explorar apenas com um \n, vamos ver os dois exemplos

Agora vamos ver o exemplo com o curl:

Podemos copiar o \n do Burp e colar na linha de comando do curl

Considerações

Esse ataque é exclusivo (até onde eu testei) do ruby, para conseguirmos o mesmo resultado em outras linguagens precisaria de outras opções no filtro, por exemplo em python se pareceria com isso:

if re.match(r'^[0-9a-z]+$', my_input, re.MULTILINE):
    print('Matches...')

Links de apoio

🌐
Bypassing regular expression checks with a line feedDavid Hamann
Logo