# Mysql Case Sensitive Problems

## 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

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2FCi1d6mvjGQ421dCaic1q%2Fcase%20sensitive%20mysql.png?alt=media&#x26;token=b16b7881-efac-4e63-b19f-e563a7223ad8" alt=""><figcaption></figcaption></figure>

## 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):

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2F3lwgd5sbkbHnekwAGZk5%2Fexamplo.png?alt=media&#x26;token=5d54951a-b920-4896-bb7f-48fd19e82ee7" alt=""><figcaption></figcaption></figure>

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":

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2FCm80Zc7uA6pRL9HAtUnU%2Fexmaple%202.png?alt=media&#x26;token=54e50208-d21d-4f4d-95f5-b5f95b5c100e" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2FNwvmX6HbzkqIsgolDvig%2Fexample%20ctf.png?alt=media&#x26;token=a026d39e-0e1d-4c51-96fd-a4da52f70a7c" alt=""><figcaption></figcaption></figure>

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"

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2FAbm1FwzhhzAZroCQQ8ya%2Fexample%20ctf2.png?alt=media&#x26;token=302db2fd-d0dc-47e9-b7cd-fffb3cde46cd" alt=""><figcaption></figcaption></figure>

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:

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2FJPbxaOvIB90Ucen4fDQa%2Fctf%20access.png?alt=media&#x26;token=da6db259-9009-48fe-afd4-4b12465b00b8" alt=""><figcaption></figcaption></figure>

Agora vamos acessar a rota "download":

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2FzcE5YVz2Wc9wopcYKbmm%2Fctf%20access%202.png?alt=media&#x26;token=e32707d0-f180-4de4-b03e-07110d5ceb88" alt=""><figcaption></figcaption></figure>

Pronto, conseguimos bypassar a verificação!

## Mitigação

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

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2FZGGK8A12iSUBwSLepiOa%2Fcorrect%20case%20sensitive.png?alt=media&#x26;token=5630025b-3df4-4390-b548-b031b8588859" alt=""><figcaption></figcaption></figure>

## Links para correções alternativas

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

{% embed url="<https://stackoverflow.com/questions/4879846/how-to-configure-mysql-to-be-case-sensitive>" %}

{% embed url="<http://i3sistema.com.br/crm/knowledge-base/desativar-case-sensitive-do-mysql-open-suse>" %}

Obrigado por ler até aqui!
