🥷
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
  • Mitigação
  • Links para correções alternativas
  1. Web

Mysql Case Sensitive Problems

PreviousHook na GOTNextRuby: regex authentication bypass

Last updated 2 months ago

Introdução

Ao efetuar comparações no mysql normalmente utilizamos:

mysql> SELECT name FROM admins WHERE name = "ghosthk";
+---------+
| name    |
+---------+
| ghosthk |
+---------+

Bom, o mysql fez o que pedimos, porém observe esse outro comportamento:

mysql> SELECT name FROM admins WHERE name = "ghostHK";
+---------+
| name    |
+---------+
| ghosthk |
+---------+

Preste atenção no "HK" em maiúsculo, o mysql retornou o resultado mesmo assim

Bypass Time

Agora vamos observar isso em uma aplicação de teste (vou utilizar o mysqli, porém o mesmo comportamento se aplica na utilização do PDO, pois o erro está no mysql e não nos meios de consulta que utilizamos para se comunicar com o banco de dados):

A aplicação simplesmente verifica se o usuário passado é igual a "ghosthk", se for ele vai exibir "WELCOME ADMIN" caso não ele exibe "YOU NOT IS ADMIN". O que vai acontecer é que irei passar "gHostHK" como usuário e ele irá retornar "WELCOME ADMIN":

Agora vamos ver isso em um ambiente mais próximo da realidade (utilizarei uma fortress do HTB):

A aplicação irá verificar se o usuário solicitado para criar é o igual a "elonmusk", se for igual ele dará erro, se for diferente ele irá criar o usuário, ou seja, podemos criar um usuário "eloNMusk"

Se o usuário for igual "elonmusk" ele nos deixa acessar a feature de download. Porém repare na comparação, essa condição retornará resultado se criamos um usuário chamado "eloNMusk".

Criei e entrei com o usuário:

Agora vamos acessar a rota "download":

Pronto, conseguimos bypassar a verificação!

Mitigação

E como podemos corrigir? Simples, basta efetuar a query utilizando BINARY, como no exemplo a seguir:

Links para correções alternativas

Existem outras formas também, siga o link para exemplos:

Obrigado por ler até aqui!

🌐
How to Configure MySQL to be Case SensitiveStack Overflow
Desativar case sensitive do mysql (open suse)
Logo
Logo