* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
* **`SELECT DEFAULT_DOMAIN()`**: Obter o nome do domínio atual. 
* **`master.dbo.fn_varbintohexstr(SUSER_SID('DOMAIN\Administrator'))`**: Se você conhece o nome do domínio (_DOMAIN_ neste exemplo), esta função retornará o **SID do usuário Administrator** em formato hexadecimal. Isso parecerá com `0x01050000000[...]0000f401`, observe como os **últimos 4 bytes** são o número **500** em formato **big endian**, que é o **ID comum do usuário administrador**.\
Esta função permitirá que você **conheça o ID do domínio** (todos os bytes, exceto os últimos 4).
* **`SUSER_SNAME(0x01050000000[...]0000e803)`** : Esta função retornará o **nome de usuário do ID indicado** (se houver), neste caso **0000e803** em big endian == **1000** (geralmente este é o ID do primeiro usuário regular criado). Então você pode imaginar que pode forçar a força bruta de IDs de usuário de 1000 a 2000 e provavelmente obter todos os nomes de usuário dos usuários do domínio. Por exemplo, usando uma função como a seguinte:
As injeções de SQL baseadas em erros geralmente se assemelham a construções como `+AND+1=@@version--` e variantes baseadas no operador «OR». Consultas contendo tais expressões geralmente são bloqueadas por WAFs. Como uma forma de contornar isso, concatene uma string usando o caractere %2b com o resultado de chamadas de função específicas que disparam um erro de conversão de tipo de dados nos dados procurados.
A função `fn_xe_file_target_read_file` é usada para ler arquivos do sistema de arquivos do servidor. É possível explorar essa função para realizar SSRF (Server-Side Request Forgery) e ler arquivos de outros servidores.
### Exploração
Para explorar essa vulnerabilidade, é necessário criar um arquivo de evento XE (Extended Events) que chame a função `fn_xe_file_target_read_file` com o caminho do arquivo que se deseja ler. Em seguida, é necessário iniciar o evento XE e enviar uma solicitação HTTP para o servidor com o parâmetro `file` definido como o caminho do arquivo XE criado anteriormente.
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON)
Para mitigar essa vulnerabilidade, é necessário restringir o acesso à função `fn_xe_file_target_read_file` e garantir que o servidor não possa acessar arquivos que não deveria ter acesso. Além disso, é recomendável filtrar as entradas do usuário para evitar a injeção de código malicioso.
Esta é uma função do Microsoft SQL Server que retorna o conteúdo de um arquivo de auditoria em formato XML. É importante notar que essa função só pode ser executada por usuários com permissões de segurança específicas. Além disso, é possível explorar vulnerabilidades de injeção de SQL para obter acesso não autorizado a essa função e, consequentemente, aos arquivos de auditoria.
A função `fn_trace_gettable` é usada para recuperar dados de rastreamento do SQL Server. É possível usar essa função para recuperar informações de rastreamento de eventos específicos, como eventos de auditoria de logon, falhas de logon, execução de consultas e muito mais. Essa função pode ser explorada em ataques de injeção de SQL para recuperar informações confidenciais do banco de dados.
O método mais comum que você encontrará ao usar o MSSQL para fazer uma chamada de rede é o uso do Stored Procedure `xp_dirtree`, que estranhamente não é documentado pela Microsoft, o que fez com que outras pessoas na Internet [documentassem](https://www.baronsoftware.com/Blog/sql-stored-procedures-get-folder-files/) isso. Este método tem sido usado em [múltiplos exemplos](https://www.notsosecure.com/oob-exploitation-cheatsheet/) de posts de exfiltração de dados fora de banda na Internet.
Assim como o `LOAD_FILE` do MySQL, você pode usar o `xp_dirtree` para fazer uma solicitação de rede apenas para a porta TCP 445. Você não pode controlar o número da porta, mas pode ler informações de compartilhamentos de rede.
PS: Isso não funciona no `Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)` em execução em um `Windows Server 2016 Datacenter` na configuração padrão.
É bastante simples escrever uma UDF CLR (Função Definida pelo Usuário do Tempo de Execução Comum - código escrito em qualquer uma das linguagens .NET e compilado em um DLL) e carregá-la dentro do MSSQL para funções personalizadas. No entanto, isso requer acesso `dbo`, portanto, pode não funcionar a menos que a conexão do aplicativo da web ao banco de dados seja como `sa` ou uma função de Administrador.
[Este repositório do Github tem o projeto do Visual Studio e as instruções de instalação](https://github.com/infiniteloopltd/SQLHttp) para carregar o binário no MSSQL como uma montagem CLR e, em seguida, invocar solicitações HTTP GET de dentro do MSSQL.
O código [`http.cs` usa a classe `WebClient` para fazer uma solicitação GET e buscar o conteúdo](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/) conforme especificado.
Nas instruções de instalação, execute o seguinte antes da consulta `CREATE ASSEMBLY` para adicionar o hash SHA512 da assembly à lista de assemblies confiáveis no servidor (você pode ver a lista usando `select * from sys.trusted_assemblies;`)
Existem duas maneiras simples de recuperar todo o conteúdo de uma tabela em uma única consulta - o uso da cláusula FOR XML ou FOR JSON. A cláusula FOR XML requer um modo especificado, como "raw", então em termos de brevidade FOR JSON é melhor.
**Permissões:** Se o usuário tiver permissão VIEW SERVER STATE no servidor, ele verá todas as sessões em execução na instância do SQL Server; caso contrário, o usuário verá apenas a sessão atual.
Uma técnica comum para ofuscar a palavra-chave UNION em uma consulta SQL é usar notação científica (0e) ou notação hexadecimal (0x) para representar a letra "U". Por exemplo, em vez de escrever "UNION ALL", pode-se escrever "UNI0N ALL" usando notação científica ou "UNI%30N ALL" usando notação hexadecimal. Isso pode enganar filtros de palavras-chave simples que procuram a palavra "UNION" em uma consulta. No entanto, essa técnica não é eficaz contra filtros mais avançados que podem detectar essas variações.
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.